Utiliza Atlas Data Federation y los disparadores programados de Atlas para copiar datos de un clúster de Atlas a un bucket AWS S3 en formato Apache Parquet. Parquet es un formato columnar adecuado para cargas de trabajo analíticas y de aprendizaje automático que esperan datos como archivos en lugar de documentos. Ejecute copias en un cronograma recurrente para delegar consultas analíticas de su clúster operativo.
Acerca de esta tarea
El tutorial utiliza un enfoque delta, lo que significa que cada ejecución del activador copia documentos de los últimos 60 segundos. Una alternativa es una snapshot completa, que copia toda la colección cada vez. El enfoque correcto depende de su volumen de datos y de los requisitos de los consumidores posteriores.
Los valores maxFileSize y maxRowGroupSize en este tutorial están optimizados para pruebas, no para producción. Para cargas de trabajo de producción, revisa las opciones de la etapa $out y ajusta los tamaños de archivo y la partición en función de tus patrones de consulta.
Antes de comenzar
Antes de comenzar este tutorial, complete las siguientes tareas:
Crea una cuenta de Atlas con un clúster que tenga los datos que deseas copiar. Para empezar, consulta Crear un clúster.
Cree una cuenta de AWS con privilegios para crear roles de IAM y depósitos de S3. Para configurar los permisos necesarios para Atlas Data Federation, consulte Implementar un almacén de datos de instancia federada de base de datos.
Instale y configure la AWS CLI.
Pasos
Despliega una instancia de Base de Datos Federada con S3 y los almacenes de datos Atlas.
Una instancia federada de base de datos consolida múltiples fuentes de datos en una única interfaz que se puede consultar. En este tutorial, conectas tu bucket S3 y tu clúster de Atlas como almacenes de datos en la misma instancia de base de datos federada. Conectar ambos almacenes de datos permite que el activador de copia lea del clúster y escriba en S3.
Implemente una instancia federada de base de datos con un almacenamiento de datos S3. Para aprender cómo, consulte Implementar un repositorio de datos de instancia federada de base de datos. Cuando configures el almacén de datos S3, concede al rol IAM Read and write acceso al bucket para que Atlas Data Federation pueda escribir archivos Parquet.
Agrega tu clúster de Atlas como un segundo almacén de datos en la instancia federada de base de datos.
Después de completar estos pasos, anote el nombre de su servicio de instancia federada de base de datos. Necesitarás este nombre en un paso posterior.
Crea un activador programado para insertar documentos de prueba.
Crea un activador programado que inserte un nuevo documento en tu clúster cada minuto. Esto genera datos de prueba para que puedas verificar que el activador de copia funciona.
En Atlas, diríjase a la página Triggers.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Triggers en la sección Streaming Data.
Se muestra la página de Triggers.
Haga clic en Add Trigger.
Selecciona Scheduled como el Trigger Type.
En Trigger Details, configure lo siguiente:
ConfiguraciónValorTrigger NameCreate_Event_Every_Min_TriggerSchedule TypeBasicIntervalCada
1minutoEvent TypeFunctionEn la sección Function, selecciona + New Function e ingresa el siguiente código. Reemplace los valores de los marcadores de posición con los nombres de su servicio Atlas, base de datos y colección.
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); }; Haga clic en Save.
Después de ejecutar el activador, confirma que aparezcan nuevos documentos en tu colección de clústeres cada minuto.
Crea un desencadenador programado para copiar datos a S3.
Cree un activador programado que ejecute un pipeline de agregación utilizando la etapa $out para copiar documentos recientes desde su clúster a su bucket S3 en formato Parquet cada minuto.
En la página Triggers, haz clic en Add Trigger.
Selecciona Scheduled como el Trigger Type.
En Trigger Details, configure lo siguiente:
ConfiguraciónValorTrigger NameCopy_Events_To_S3_TriggerSchedule TypeBasicIntervalCada
1minutoEvent TypeFunctionEn la sección Function, selecciona + New Function e ingresa el siguiente código. Reemplace los valores de los marcadores de posición con los nombres de su instancia federada de base de datos, base de datos virtual, colección virtual, bucket S3 y la región 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); }; Haga clic en Save.
Después de que se ejecute el activador, confirma que aparezca un archivo Parquet llamado
eventsen tu bucket S3.