Migrar de um RDBMS para o MongoDB com a ajuda da AI: uma introdução ao conversor de query
Avalie esse Tutorial
Migrar seus aplicativos entre bancos de dados e linguagens de programação pode parecer uma tarefa árdua. Você precisa exportar e importar seus dados, transferir seus esquemas e fazer possíveis alterações na lógica do aplicativo para acomodar a nova linguagem de programação ou sintaxe do banco de dados. Com o MongoDB e a ferramentaRelational Migrator, essas atividades não precisam mais parecer uma tarefa árdua e, em vez disso, podem se tornar mais automatizadas e simplificadas.
Neste artigo, exploraremos a obtenção de consultas SQL do seu aplicativo existente e o aproveitamento da funcionalidade do Query Converter incorporada à ferramenta Relational Migrator para gerar substitutos imediatos compatíveis com o MongoDB.
Dependendo de seus objetivos com este artigo específico, você pode acompanhar apenas a ferramentaRelational Migrator, pois ela contém esquemas de exemplo que funcionarão para experimentação. No entanto, se você quiser jogar com seus próprios dados, pode se conectar a um dos populares RDBMS.
Abra o Relational Migrator e escolha criar um novo projeto. Para fins deste artigo, clicaremos em "Use a sample schema" para brincar. Executar queries e consultar dados não é importante aqui. Queremos apenas conhecer nosso esquema, nossas queries SQL e com o que terminaremos nossa aventura em termos de query.
O esquema de amostra que planejamos usar contém clientes e informações de compra para esses clientes. No Relational Migrator, isso é chamado de banco de dados do Northwind.
Para este exemplo, queremos converter nossas queries e não focar na migração de dados ou esquemas. Com isso em mente, escolha a aba "Geração de código", seguida pela aba "Conversor de query".
Agora, podemos nos divertir!
Podemos receber query de nosso aplicativo e usar os recursos de AI da ferramenta para retornar o equivalente do MongoDB na linguagem de programação de nossa escolha.
Começaremos pequenos. No campo "SQL Query", adicione o seguinte:
1 SELECT contact_name, country 2 FROM customers 3 WHERE country = 'USA'
Sabemos que a consulta acima contém uma projeção de colunas a serem incluídas, uma tabela para consulta e uma condição para filtrar quais dados devem ser retornados. Se escolhermos converter para JavaScript, obteremos uma resposta semelhante à seguinte:
1 async function query(db) { 2 return await db.collection('customers').find({ country: 'USA' }, { projection: { contactName: 1, country: 1, _id: 0 } }).toArray(); 3 }
Se quiséssemos, poderíamos ter usado um asterisco na projeção para incluir todas as colunas, mas sabemos, como usuários experientes do banco de dados, que, para obter o melhor desempenho, devemos retornar somente o que precisamos.
Vamos levar as coisas para o próximo nível com nossas conversões SQL-para-MongoDB.
Veja a seguinte consulta SQL, por exemplo:
1 SELECT country, COUNT(*) AS total 2 FROM customers 3 GROUP BY country
A query acima contém uma projeção, mas também contém uma aggregation por meio do uso do operador
GROUP BY
. Ao executar a query pelo Conversor de query, acabamos com um resultado como o seguinte:1 async function query(db) { 2 return await db.collection('customers').aggregate([ 3 { $group: { _id: "$country", total: { $sum: 1 } } } 4 ]).toArray(); 5 }
Observe que, desta vez, não temos uma operação
.find
, mas uma operação .aggregate
. O Query Converter usou um pipeline de agregação do MongoDB para fazer o trabalho.Tudo bem, então estamos ficando um pouco mais complexos na forma como interagimos com nosso banco de dados relacional.
Vamos continuar aprimorando nossa capacidade de consulta. Inclua a seguinte query SQL na ferramenta Query Converter:
1 SELECT customers.contact_name, SUM(order_details.unit_price) AS spent 2 FROM orders 3 JOIN customers ON orders.customer_id = customers.customer_id 4 JOIN order_details ON orders.order_id = order_details.order_id 5 JOIN products ON order_details.product_id = products.product_id 6 GROUP BY customers.contact_name
A consulta SQL acima tem uma projeção, estamos juntando três tabelas diferentes e agrupando os resultados.
Ao executar a conversão, obteremos um resultado semelhante ao seguinte:
1 async function query(db) { 2 return await db.collection('orders').aggregate([ 3 { 4 $lookup: { 5 from: 'customers', 6 localField: 'customerId', 7 foreignField: 'customerId', 8 as: 'customer' 9 } 10 }, 11 { 12 $unwind: '$customer' 13 }, 14 { 15 $lookup: { 16 from: 'orderDetails', 17 localField: 'orderId', 18 foreignField: 'orderId', 19 as: 'orderDetail' 20 } 21 }, 22 { 23 $unwind: '$orderDetail' 24 }, 25 { 26 $lookup: { 27 from: 'products', 28 localField: 'orderDetail.productId', 29 foreignField: 'productId', 30 as: 'product' 31 } 32 }, 33 { 34 $unwind: '$product' 35 }, 36 { 37 $group: { 38 _id: '$customer.contactName', 39 spent: { 40 $sum: '$orderDetail.unitPrice' 41 } 42 } 43 }, 44 { 45 $project: { 46 _id: 0, 47 contactName: '$_id', 48 spent: 1 49 } 50 } 51 ]).toArray(); 52 }
Ao usar a funcionalidade Query Converter da ferramenta Relational Migrator, é importante observar algumas coisas:
- Embora os resultados possam ser perfeitos ou quase perfeitos na maioria das vezes, dependendo da complexidade de suas consultas, você deve sempre testar os resultados antes que eles entrem em um ambiente de produção.
- O processo de conversão pode não ser imediato. Espere que determinadas queries levem alguns minutos para serem convertidas.
- Com o código gerado por IA, os resultados podem diferir entre as gerações, mesmo ao usar os mesmos critérios de entrada mostrados neste artigo.
Ter uma AI disponível pode ser uma grande ajuda se você tiver um conhecimento limitado do MongoDB, mas a tenha como parte de seus planos futuros.
Você teve uma amostra do que é possível fazer quando se trata de migrar de um relational database para o MongoDB. Em particular, vimos como usar o Query Converter, um novo AI que é fornecido com a ferramenta Relational Migrator. O uso do Relational Migrator pode deixar o seu processo de migração mais organizado, não apenas do ponto de vista dos dados, mas também do ponto de vista da query e da camada de aplicativos.
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.