Use o Atlas Data Federation e o Atlas Scheduled Triggers para copiar dados de um cluster Atlas para um bucket AWS S3 no formato Apache Parquet. O Parquet é um formato colunar adequado para cargas de trabalho de análise e aprendizado de máquina que esperam dados como arquivos em vez de documentos. Execute cópias em um agendamento recorrente para descarregar queries de análise do seu cluster operacional.
Sobre esta tarefa
O tutorial usa uma abordagem delta, o que significa que cada execução do trigger copia documentos dos últimos 60 segundos. Uma alternativa é um snapshot completo, que copia toda a coleção a cada vez. A abordagem correta depende do volume de dados e dos requisitos dos consumidores downstream.
Os valores maxFileSize e maxRowGroupSize neste tutorial são otimizados para teste, não para produção. Para cargas de trabalho de produção, revise as opções de estágio $out e ajuste os tamanhos de arquivo e o particionamento com base nos seus padrões de query.
Antes de começar
Antes de iniciar este tutorial, conclua as seguintes tarefas:
Crie uma conta Atlas com um cluster que tenha os dados que você deseja copiar. Para começar, consulte Criar um cluster.
Crie uma conta AWS com privilégios para criar funções IAM e buckets S3. Para configurar as permissões necessárias para o Atlas Data Federation, consulte Implantar um armazenamento de dados de instância do banco de dados federado.
Instale e configure a AWS CLI.
Passos
Implante uma instância do banco de dados federado com S3 e armazenamentos de dados do Atlas.
Uma instância do banco de dados federado consolida várias fontes de dados em uma única interface consultável. Neste tutorial, você conecta seu bucket S3 e seu cluster Atlas como armazenamentos de dados na mesma instância do banco de dados federado. A conexão de ambos os armazenamentos de dados permite que o trigger de cópia leia do cluster e grave em S3.
Implantar uma instância do banco de dados federado com um armazenamento de dados S3. Para saber como, consulte Implantar uma instância do banco de dados federado para armazenar dados. Ao configurar o armazenamento de dados S3, conceda à função IAM Read and write acesso ao bucket para que o Atlas Data Federation possa gravar arquivos Parquet.
Adicione seu cluster Atlas como um segundo armazenamento de dados na instância do banco de dados federado.
Depois de concluir estas etapas, anote o nome do serviço da instância do banco de dados federado. Você precisará desse nome em uma etapa posterior.
Crie um trigger agendado para inserir documentos de teste.
Crie um trigger agendado que insere um novo documento no seu cluster a cada minuto. Isso gera dados de teste para que você possa verificar se o trigger de cópia funciona.
No Atlas, acesse a página Triggers.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione seu projeto no menu Projects na barra de navegação.
Na barra lateral, clique em Triggers sob o título Streaming Data.
A página Acionadores é exibida.
Clique em Add Trigger.
Selecione Scheduled como Trigger Type.
No Trigger Details, defina a seguinte configuração:
ContextoValorTrigger NameCreate_Event_Every_Min_TriggerSchedule TypeBasicIntervalA cada
1minutoEvent TypeFunctionNa seção Function, selecione + New Function e insira o seguinte código. Substitua os valores do espaço reservado pelos nomes do serviço, banco de dados e coleção do Atlas.
exports = function () { const mongodb = context.services.get( "NAME_OF_YOUR_ATLAS_SERVICE" ); const db = mongodb.db("NAME_OF_YOUR_DATABASE"); const events = db.collection( "NAME_OF_YOUR_COLLECTION" ); const event = events.insertOne({ time: new Date(), aNumber: Math.random() * 100, type: "event" }); return JSON.stringify(event); }; Clique em Save.
Depois que o trigger for executado, confirme se novos documentos aparecem na coleção do cluster a cada minuto.
Crie um trigger agendado para copiar dados para S3.
Crie um trigger agendado que execute um pipeline de agregação usando o estágio $out para copiar documentos recentes do seu cluster para o seu bucket S3 no formato Parquet a cada minuto.
Na página Triggers, clique em Add Trigger.
Selecione Scheduled como Trigger Type.
No Trigger Details, defina a seguinte configuração:
ContextoValorTrigger NameCopy_Events_To_S3_TriggerSchedule TypeBasicIntervalA cada
1minutoEvent TypeFunctionNa seção Function, selecione + New Function e insira o código a seguir. Substitua os valores de espaço reservado pelos nomes do serviço de instância do banco de dados federado, banco de dados virtual, coleção virtual, bucket S3 e região do AWS.
exports = function () { const service = context.services.get( "NAME_OF_YOUR_FEDERATED_DATA_SERVICE" ); const db = service.db( "NAME_OF_YOUR_VIRTUAL_DATABASE" ); const events = db.collection( "NAME_OF_YOUR_VIRTUAL_COLLECTION" ); const pipeline = [ { $match: { "time": { $gt: new Date( Date.now() - 60 * 1000 ), $lt: new Date(Date.now()) } } }, { "$out": { "s3": { "bucket": "YOUR_S3_BUCKET_NAME", "region": "YOUR_AWS_REGION", "filename": "events", "format": { "name": "parquet", "maxFileSize": "10GB", "maxRowGroupSize": "100MB" } } } } ]; return events.aggregate(pipeline); }; Clique em Save.
Depois que o trigger for executado, confirme se um arquivo Parquet chamado
eventsaparece no seu bucket S3.