Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
MongoDBchevron-right

Migração fácil: do banco de dados relacional para o MongoDB com o MongoDB Relational Migrator

Fabio Ramohitaj6 min read • Published Jan 04, 2024 • Updated Jan 04, 2024
MongoDB
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Definir o processo de migração de dados de um banco de dados relacional para o MongoDB sempre foi uma tarefa complexa. Alguns optaram por uma abordagem personalizada, adotando soluções personalizadas, como scripts, enquanto outros preferiram usar ferramentas de terceiros.
É nesse contexto que o Relational Migrator entra em ação, resolvendo a complexidade dessa transição de um relational database para o MongoDB com a mesma naturalidade com que o sol funde a nuvem.

Como o Relational Migrator vem em nosso auxílio

No contexto de um banco de dados relacional para o projeto de migração do MongoDB, surgem várias questões — por exemplo:
  • Qual ferramenta você deve usar para melhor realizar essa migração?
  • Como esse processo de migração pode ser otimizado em termos de tempo para um banco de dados de tamanho médio/grande?
  • Como os dados precisarão ser modelados no MongoDB?
  • Quanto tempo/recursos serão necessários para reestruturar as queries SQL para o MQL?
Considere a seguinte arquitetura, como exemplo:
Exemplo de arquitetura de dados
Apresentamos uma primeira abordagem, que não fará uso do Relational Migrator, mas usará uma ferramenta de terceiros para orquestrar a migração dentro dessa arquitetura: Logstash.
Faremos observações e definimos quais podem ser as limitações desta ferramenta.
O que exatamente é Logstash? Para uma definição correta, podemos consultar a documentação oficial:
O Logstash é um canal de processamento de dados gratuito e aberto do lado do servidor que ingere dados de várias fontes, os transforma e os envia para seu estoque " favorito. "
Essa ferramenta atinge o objetivo de forma eficaz, executando dinamicamente as seguintes operações:
  • Ingestão de dados da fonte — PostgreSQL
  • Transformação de dados — Logstash
  • Distribuição dos dados transformados para o destino — MongoDB
Ótimo! Portanto, será possível migrar dados e se beneficiar da alta flexibilidade em sua transformação, e também assumimos prazos relativamente curtos porque fizemos alguns ajustes muito bons, mas diferentes pipelines precisarão ser definidos manualmente.
Vamos concretizar com um exemplo o que temos dito a nós mesmos até agora, considerando o seguinte esquema:
Esquema de banco de dados para inscrição de alunos
matrículaNomesobrenomedata de nascimentoendereçoEmailTelefone
1MarioRossi1990-05-15Via Roma, 123mario.rossi@email.com123-456-7890
2LauraBianchi1992-08-22Via Garibaldi, 56laura.b@email.com987-654-3210
3GiuseppeVerdi1991-03-10Via Dante, 78giuseppe.verdi@email555-123-4567
4SofiaConti1993-11-30Via Milano, 45sofia.conti@email.com333-555-9999
5AlessiaMoretti1992-06-18Via Firenze, 7alessia.more@email.com111-222-3333
6LucaFerrari1994-09-25Via Venezia, 21luca.f@email.com444-777-8888
7MartaRomano1990-02-03Via Bologna, 34marta.rom@email.com999-888-7777
8MarcoGalli1993-07-12Via Genova, 56marco.galli@email.com666-333-1111
9ElenaPiazza1995-04-09Via Torino, 78elena.p@email.com222-999-4444
10AndreaMancini1991-12-28Via Padova, 12andrea.m@email.com777-111-5555
Tabela de inscrição:
ID de inscriçãomatrícula de alunoscódigo do cursoinscriçãodate
111CS1012023-01-15
122LI3012023-02-02
133MA2012023-03-10
141CH4012023-04-05
154CS1012023-04-15
165PH5012023-05-20
176EC6012023-06-08
187HI7012023-07-12
198EN8012023-08-05
209MU9012023-09-01
Tabela de cursos:
Código do cursonome do cursoCréditos.departamento
CS101Informatica4Informatica
MA201Matemática3Matemática
LI301Idioma Italiano5cartas
CH401Química4Química
PH501Física4Física
EC601Economia5Economia
HI701Histórico3Histórico
EN801English4Idiomas
MU901Música2Música
GE1001Geografia3Geografia
Nosso objetivo, com base em uma análise feita anteriormente, é modelar todas essas tabelas em um único documento. Portanto, prosseguiremos definindo, para o Logstash, o pipeline que consistirá na definição de:
  • Estágio de entrada: informará os parâmetros básicos para conexão com o PostgreSQL como o driver, a string de conexão, o usuário, a senha e o comando
  • Estágio de filtro: definirá como os dados devem ser modelados
  • Etapa de saída: relatará os parâmetros básicos para se conectar ao MongoDB como uma string de conexão, banco de dados e coleção
Isso nos permitirá gerar documentos de acordo com a especificação desejada:
1input {
2 jdbc {
3 jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/postgresql-42.7.0.jar"
4 jdbc_driver_class => "org.postgresql.Driver"
5 jdbc_connection_string => "jdbc:postgresql://postgresql.test.com:5432/formigration?sslmode=disable"
6 jdbc_user => "migratoruser"
7 jdbc_password => "test"
8 statement => "SELECT *
9 FROM enrollment INNER JOIN student ON student.matriculation=enrollment.studentmatriculation
10 INNER JOIN course ON course.coursecode=enrollment.coursecode
11 ORDER BY student.matriculation"
12 }
13 }
14
15 filter {
16 aggregate {
17 task_id => "%{matriculation}"
18 code => "
19 map['matriculation'] = event.get('matriculation')
20 map['address'] = event.get('address')
21 map['birthdate'] = event.get('birthdate')
22 map['email'] = event.get('email')
23 map['name'] = event.get('name')
24 map['phone'] = event.get('phone')
25 map['surname'] = event.get('surname')
26 map['enrollments'] ||= []
27 map['enrollments'] << {'enrollmentid' => event.get('enrollmentid'), 'studentmatriculation' => event.get('studentmatriculation'), 'coursecode' => event.get('coursecode'), 'enrollmentdate' => event.get('enrollmentdate'), 'course' => {'coursecode' => event.get('coursecode'), 'coursename' => event.get('coursename'), 'credits'=> event.get('credits'), 'department' => event.get('department')} }
28 event.cancel()
29 "
30 push_previous_map_as_event => true
31 }
32 }
33
34 output {
35 mongodb {
36 uri => "mongodb://mongodbstandalone.test.com:27017/test"
37 database => "test"
38 collection => "test_migration"
39 isodate => true
40 }
41 }
E o resultado será o seguinte:
Exemplo de esquema do MongoDB
Isso resulta nos dados modelados como documentos, mas também é necessário chamar atenção para alguns pontos:
  • Quanto tempo/recursos serão necessários para reestruturar queries SQL em MQL?
  • Quanto esforço foi necessário para modelar a parte do filtro?
  • Nenhum dado pode ser gravado na origem durante a migração, caso contrário, a consistência dos dados será perdida.
  • Também será útil definir uma solução personalizada para validação de dados.
Além disso, deve-se observar que o Logstash não permite a migração direta de dados para o cluster MongoDB de destino. É necessário passar por uma máquina intermediária e, em seguida, executar um despejo/restauração do MongoDB autônomo para o cluster MongoDB Atlas de destino, o que introduzirá esforço adicional na migração.
Referindo-se à última parte deste processo de migração, é apropriado perguntar:
Os clientes estariam dispostos a investir recursos econômicos adicionais em um servidor bridge? (Talvez possa haver restrições orçamentárias).
Tendo feito várias considerações sobre essa arquitetura, podemos passar a discutir a próxima arquitetura.
Vamos considerar esta outra arquitetura:
Arquitetura do Relational Migrator do MongoDB
Para orquestrar a migração dentro dessa arquitetura, optamos por adotar o Relational Migrator, o produto oficial do MongoDB. Mas o que é o Relational Migrator?
O Relational Migrator do MongoDB é uma ferramenta para ajudá-lo a migrar volumes de trabalho relacionais para o MongoDB. O Relational Migrator permite que você:
  • Crie um esquema MongoDB efetivo, derivado de um esquema relacional existente.
  • Migre dados do Oracle, SQL Server, MySQL e PostgreSQL para o MongoDB enquanto transforma ao esquema de destino.
  • Gere artefatos de código para reduzir o tempo necessário para atualizar o código do aplicativo.
Utilizando como referência o esquema e tabelas definidos anteriormente, uma vez que a conexão com o banco de dados relacional for feita, poderemos ver, como na imagem a seguir, a representação visual do esquema relacional na parte superior e, abaixo disso, a coleção modelado pelo Relational Migrator:
Esquema modelado pelo MongoDB Relational Migrator
Depois que o modelo de dados for definido, será possível e muito fácil definir um novo trabalho de sincronização. Precisamos configurar a opção de origem, destino e migração. Também será possível definir uma verificação de validação de dados e eliminar as collection que possam ser o resíduo de algumas etapas realizadas anteriormente.
Instruções de tarefa de migração
Depois que tudo estiver configurado, basta iniciar o trabalho de sincronização, obtendo o seguinte resultado:
Resultados do Relational Migrator
Por último, mas não menos importante, temos a possibilidade de usar o gerador de aplicativos de código e o conversor de consulta em visualização privada!
Gerador de código e conversor de consulta
Gerador de código e conversor de consulta

Conclusão

Armados com o que discutimos até agora sobre os recursos dos dois produtos, aqui está o que podemos dizer:
  • Relational Migrator
    • Sua facilidade de configuração oferece uma vantagem significativa para os usuários, economizando tempo e esforço na implementação.
    • Sua interface intuitiva e recursos avançados tornam a experiência geral mais eficiente e eficaz.
    • Representa uma solução ideal para quem busca uma experiência fácil de usar.
    • O usuário pode entrar em contato com o suporte para resolver problemas relacionados ao produto.
  • Logstash
    • Permite grande flexibilidade na modelagem de documentos.
    • É possível definir vários pipelines e executar mais de um pipeline no mesmo processo.
Independentemente da solução que será usada para migrar, você poderá entrar em contato com o suporte do MongoDB para fazer uma migração bem-sucedida para sua infraestrutura.
Se você tiver dúvidas ou comentários, pode nos encontrar na Comunidade de Desenvolvedores do MongoDB!

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Início rápido

Aggregation Framework com Node.js 3.3.2 Tutorial


Oct 01, 2024 | 9 min read
Início rápido

Início rápido: tipos de dados BSON - Decimal128


Sep 23, 2022 | 2 min read
Início rápido

Reagindo às mudanças do banco de dados com o MongoDB Change Streams e Go


Feb 03, 2023 | 5 min read
Início rápido

Introdução ao framework de agregação do MongoDB


Sep 23, 2022 | 5 min read
Sumário
  • Como o Relational Migrator vem em nosso auxílio