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 .

Join us at AWS re:Invent 2024! Learn how to use MongoDB for AI use cases.
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
Atlaschevron-right

Como automatizar a cópia contínua de dados do MongoDB para o S3

Joe Karlsson8 min read • Published Feb 07, 2022 • Updated Jan 23, 2024
ParquetAWSAtlasFederação de Dados
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Aplicativos modernos sempre ativos contam com recursos de failover automático e acesso a dados em tempo real. O MongoDB Atlas já oferece suporte a backups automáticos prontos para uso, mas talvez você ainda queira copiar seus dados para outro local para executar análises avançadas em seus dados ou isolar seu volume de trabalho operacional. Por esse motivo, pode ser muito útil configurar a replicação contínua automática dos dados para seu volume de trabalho.
Nesta publicação, vamos configurar uma maneira de copiar continuamente dados de um banco de dados MongoDB para um bucket do AWS S3 no formato de dados Parquet usando MongoDB Atlas Database Triggers. Primeiro, configuramos uma instância do banco de dados federado usando o MongoDB Atlas Data Federation para consolidar um MongoDB database e nosso bucket do AWS S3. Em seguida, configuramos um trigger para adicionar automaticamente um novo documento a uma coleção a cada minuto e outro trigger para copiar automaticamente nossos dados para o bucket S3. Em seguida, executamos um teste para garantir que nossos dados estejam sendo copiados continuamente para o S3 do MongoDB. Por fim, abordamos alguns itens que você deve considerar ao criar algo assim para seu aplicativo.
Observação: os valores que usamos para determinados parâmetros neste blog são para fins de demonstração e teste. Se você pretende usar essa funcionalidade, recomendamos consultar a seção "Production Considerations" e ajustar conforme suas necessidades.

O que é o Parquet?

Para quem não estiver familiarizado com o Parquet, é um formato de arquivo surpreendente que faz grande parte do trabalho pesado para garantir um desempenho de query ultrarrápido em dados armazenados em arquivos. Esse é um formato de arquivo popular no espaço de Data Sync e Data Lake, bem como em diversas tarefas de aprendizado de máquina.
Algo com o qual os usuários costumam ter dificuldade é obter dados NoSQL no Parquet, pois é um formato colunar. Historicamente, você teria que escrever um código personalizado para obter os dados do banco de dados, transformá-los em uma estrutura apropriada e, em seguida, provavelmente usar uma biblioteca de terceiros para gravá-los no Parquet. Felizmente, com o $out to S3 do MongoDB Atlas Data Federation, agora você pode converter o MongoDB Data em Parquet com pouco esforço.

Pré-requisitos

Para acompanhar este tutorial, você precisará fazer o seguinte:
  1. Crie uma conta do MongoDB Atlas, se você ainda não tiver uma.
  2. Crie uma conta AWS com privilégios para criar funções IAM e buckets S3 (para dar acesso ao Data Federation e gravar dados em seu bucket S3). Já tem uma conta na AWS? O Atlas permite pagamento por uso por meio do AWS Marketplace (AWS MP) sem qualquer compromisso inicial, basta
    Inscreva-se no MongoDB Atlas por meio do AWS Marketplace.

Crie uma instância de banco de dados federado e conecte-se ao S3

Precisamos configurar uma instância de banco de dados federado para copiar nossos dados do MongoDB e utilizar o $out to S3 do MongoDB Atlas Data Federation para converter nossos dados do MongoDB em Parquet e colocá-los em um bucket S3.
A primeira coisa que você precisa fazer é navegar até "Data Federation" no lado esquerdo do seu Atlas Dashboard e clicar em “set up manually” no menu suspenso "criar novo banco de dados federado" no canto superior direito da interface do usuário.
Criando um novo banco de dados federado
Em seguida, você precisa conectar seu bucket do S3 à sua instância do banco de dados federado. É aqui que escreveremos os arquivos Parquet. O assistente de configuração deve guiá-lo rapidamente, mas você precisará de acesso às suas credenciais da AWS.
Observação: para obter mais informações, consulte a documentação sobre a implantação de uma instância de banco de dados federado para um armazenamento de dados S3. (Lembre-se de conceder ao Atlas Data Federation acesso de "leitura e gravação" ao bucket, para que ele possa gravar os arquivos Parquet lá).
Captura de tela do modal Adicionar fonte de dados
Selecione uma função do AWS IAM para Atlas.
  • Se você criou uma função que o Atlas já está autorizado a ler e gravar no seu bucket S3, selecione esse usuário.
  • Se você estiver autorizando o Atlas para uma função existente ou estiver criando uma nova função, certifique-se de consultar a documentação para saber como fazer isso.
Insira as informações do bucket S3.
  • Insira o nome do seu3 bucket S . Dei um nome ao meu bucket mongodb-data-lake-demo.
  • Escolha "Ler e gravar" para poder gravar documentos no seu bucket S3.
Atribua uma política de acesso para sua função do Amazon Web Services IAM.
  • Siga as etapas na IU do Atlas para atribuir uma política de acesso à sua função do Amazon Web Services IAM.
  • Sua política de função para acesso somente leitura ou leitura e gravação deve ser semelhante à seguinte:
1{
2 "Version": "2012-10-17",
3 "Statement": [
4 {
5 "Effect": "Allow",
6 "Action": [
7 "s3:ListBucket",
8 "s3:GetObject",
9 "s3:GetObjectVersion",
10 "s3:GetBucketLocation"
11 ],
12 "Resource": [
13 <role arn>
14 ]
15 }
16 ]
17}
  • Defina a estrutura do caminho para seus arquivos no bucket S3 e clique em Avançar.
  • Depois de conectar seu bucket S3, criaremos uma fonte de dados simples para consultar os dados em S3, para que possamos verificar se gravamos os dados em S3 no final deste tutorial.

Conecte seu MongoDB database à sua instância do banco de dados federado

Agora vamos conectar nosso cluster do Atlas, para que possamos escrever dados dele nos arquivos Parquet em S3. Isso inclui escolher o cluster em uma lista de clusters em seu projeto Atlas e, em seguida, selecionar os banco de dados e coleções dos quais você deseja criar fonte de dados e arrastá-los para sua instância do banco de dados federado.
Captura de tela do modal Adicionar fonte de dados com coleções selecionadas
Captura da tela de configuração

Crie um trigger MongoDB Atlas para criar um novo documento a cada minuto

Agora que temos todas as nossas fontes de dados configuradas em nossa nova instância do banco de dados federado, podemos agora configurar um MongoDB database para gerar automaticamente novos documentos a cada minuto para nossa demonstração de replicação contínua. Os Triggers permitem executar a lógica do lado do servidor em resposta a eventos do banco de dados ou de acordo com uma programação. O Atlas fornece dois tipos de triggers: banco de dados e triggers agendados. Usaremos um trigger agendado para garantir que esses documentos sejam automaticamente arquivados em nosso bucket S3.
  1. Clique na aba Atlas na navegação superior da sua tela se você ainda não navegou no Atlas.
  2. Clique em Triggers na navegação à esquerda.
  3. Na guia Visão geral da página Triggers, clique em "Adicionar trigger" para abrir a página de configuração do trigger.
  4. Insira estes valores de configuração para nosso trigger:
Captura de tela da página de configuração do MongoDB Atlas Trigger mostrando as opções para nosso novo trigger. Tipo de trigger: agendado. Nome: Create_Event_Every_Min_Trigger. Habilitar: ligado. Tipo de programação: básica. Fontes de dados do link: Cluster 1 e atlas_data_lake. Selecione um tipo de evento: função.
E nossa função trigger fica assim:
1exports = function () {
2
3 const mongodb = context.services.get("NAME_OF_YOUR_ATLAS_SERVICE");
4 const db = mongodb.db("NAME_OF_YOUR DATABASE")
5 const events = db.collection("NAME_OF_YOUR_COLLECTION");
6
7 const event = events.insertOne(
8 {
9 time: new Date(),
10 aNumber: Math.random() * 100,
11 type: "event"
12 }
13 );
14
15 return JSON.stringify(event);
16
17};
Por fim, clique em Executar e verifique se o banco de dados está recebendo novos documentos inseridos a cada 60 segundos.
Captura de tela da página da web do MongoDB Atlas mostrando os dados que foram gerados pelo Create_Event_Every_Min_Trigger com uma caixa vermelha em torno dos novos dados.

Crie um trigger MongoDB Atlas para copiar novos dados do MongoDB para o S3 a cada minuto

Agora vem a parte divertida. Vamos criar um novo MongoDB Trigger que copia nossos dados do MongoDB a cada 60 segundos, usando o $out do MongoDB Atlas Data Federation para o pipeline de agregação S3. Crie um novo trigger e use essas definições de configuração.
Captura de tela da página de configuração do trigger MongoDB Atlas mostrando as opções para o nosso novo trigger
Sua função Trigger terá a seguinte aparência. Mas há muita coisa acontecendo, então vamos analisar.
  • Primeiro, vamos nos conectar à nossa nova instância do banco de dados federado. Isso é diferente do trigger anterior que se conectou ao nosso banco de dados do Atlas. Certifique-se de colocar seu nome do banco de dados virtual para context.services.get. Você deve se conectar à sua instância do banco de dados federado para usar $out para S3.
  • Em seguida, criaremos uma função de pipeline de agregação para primeiro consultar nossos dados MongoDB que têm mais de 60 segundos.
  • Em seguida, utilizaremos o operador agregado $out para replicar os dados de nosso estágio de agregação anterior em S3.
  • No formato, vamos especificar parquet e determinar um maxFileSize e maxRowGroupSize.
    • maxFileSize determina o tamanho máximo de cada partição. maxRowGroupSize determina como os registros são agrupados dentro do arquivo parquet em "grupos de linhas", o que impacta o desempenho da query de seus arquivos Parquet de forma semelhante ao tamanho do arquivo.
  • Por último, vamos definir nosso caminho S3 para corresponder ao valor dos dados.
1exports = function () {
2
3 const service = context.services.get("NAME_OF_YOUR_FEDERATED_DATA_SERVICE");
4 const db = service.db("NAME_OF_YOUR_VIRTUAL_DATABASE")
5 const events = db.collection("NAME_OF_YOUR_VIRTUAL_COLLECTION");
6
7 const pipeline = [
8 {
9 $match: {
10 "time": {
11 $gt: new Date(Date.now() - 60 * 60 * 1000),
12 $lt: new Date(Date.now())
13 }
14 }
15 }, {
16 "$out": {
17 "s3": {
18 "bucket": "mongodb-federated-data-demo",
19 "region": "us-east-1",
20 "filename": "events",
21 "format": {
22 "name": "parquet",
23 "maxFileSize": "10GB",
24 "maxRowGroupSize": "100MB"
25 }
26 }
27 }
28 }
29 ];
30
31 return events.aggregate(pipeline);
32};
Se tudo estiver bem, você deverá ver o novo documento Parquet em seu bucket S3. Habilitei a GUI da AWS para mostrar as versões para que você possa ver como ela está sendo atualizada automaticamente a cada 60 segundos.
Captura de tela do console de gerenciamento do AWS S3 mostrando o novo documento events.parquet que foi gerado por nossa função de trigger $out.

Considerações de produção

Algumas das configurações escolhidas acima foram feitas para facilitar a instalação e o teste, mas se você for usá-las na produção, será necessário ajustá-las.
Em primeiro lugar, este blog foi configurado com uma abordagem “deltas. Isso significa que estamos copiando apenas os novos documentos de nossa coleção para nossos arquivos Parquet. Outra abordagem seria fazer um snapshot completo, ou seja, copiar toda a coleção para o Parquet a cada vez. A abordagem adotada deve depender da quantidade de dados em sua coleção e do que é exigido pelo consumidor downstream.
Em segundo lugar, independentemente da quantidade de dados que você esteja copiando, o ideal é que os arquivos do Parquet sejam maiores e que sejam particionados com base em como você fará a query. O Apache recomenda tamanhos de grupo de linhas de 512MB a 1GB. Você pode usar tamanhos menores dependendo de seus requisitos, mas, no caso, o ideal são arquivos maiores. A outra consideração é que, se você planeja executar uma query desses dados no formato parquet, deve particioná-los para que eles se alinham com seu padrão de query. Se você for fazer query de um campo de data, por exemplo, é melhor que cada arquivo tenha os dados de um único dia..
Por último, dependendo de suas necessidades, pode ser apropriado procurar um dispositivo de agendamento alternativo aos triggers, como o Temporal ou o Apache Airflow.

Embrulhar

Nesta publicação, mostramos como configurar uma replicação contínua automatizada de um MongoDB database em um bucket AWS S3 no formato de dados Parquet usando o MongoDB Atlas Data Federation e o MongoDB Atlas Database Triggers. Primeiro, configuramos uma nova instância do banco de dados federado para consolidar um MongoDB database e nosso bucket AWS S3. Em seguida, configuramos um trigger para adicionar automaticamente um novo documento a uma coleção a cada minuto, e outro trigger para fazer backup automático desses novos documentos gerados automaticamente em nosso bucket S3.
Também mencionamos como o Parquet é um ótimo formato para os dados do MongoDB quando você precisa usar ferramentas orientadas por colunas, como o Tableau, para visualizações ou frameworks de aprendizado de máquina que usam Data Frames. O Parquet pode ser convertido de forma rápida e fácil em Pandas Data Frames no Python.
Se tiver dúvidas, acesse o site da nossa comunidade de desenvolvedores, no qual os engenheiros e a comunidade do MongoDB ajudarão você a desenvolver sua próxima grande ideia com o MongoDB.
Recursos adicionais:

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Modelagem de dados em várias linguagens do Atlas Search


Sep 09, 2022 | 2 min read
Artigo

Automatize a automação no MongoDB Atlas


Sep 11, 2024 | 4 min read
Tutorial

Desmistificando procedimentos armazenados no MongoDB


Aug 01, 2024 | 6 min read
Artigo

Realm Atlas Triggers Mimos e Triggers - Agendamento trigger baseado em documentos


Sep 09, 2024 | 5 min read
Sumário