Uso de MongoDB como origen para AWS DMS - AWS Database Migration Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de MongoDB como origen para AWS DMS

AWS DMSadmite las versiones 3.x y 4.0 de MongoDB como fuente de base de datos. A partir de la versiónAWS DMS 3.4.5,AWS DMS es compatible con las versiones 4.2 y 4.4 de MongoDB. A partir de las versiones 4.2,AWS DMS 3.4.5 y posteriores de MongoDB, se admiten transacciones distribuidas. Para obtener más información sobre las transacciones distribuidas de MongoDB, consulte Transacciones en MongoDB.

Si no está familiarizado con MongoDB, tenga en cuenta los siguientes conceptos importantes sobre las bases de datos MongoDB:

  • Un registro en MongoDB es un documento formado por una estructura de datos compuesta de pares de campo y valor. El valor de un campo puede incluir otros documentos, matrices y matrices de documentos. Un documento es más o menos equivalente a una fila en una tabla de base de datos relacional.

  • Una colección en MongoDB es un grupo de documentos y es aproximadamente equivalente a una tabla de base de datos relacional.

  • Una base de datos en MongoDB es un conjunto de colecciones y equivale aproximadamente a un esquema en una base de datos relacional.

  • Internamente, un documento de MongoDB se almacena como archivo JSON binario (BSON) en formato comprimido, que incluye un tipo para cada campo del documento. Cada documento tiene un identificador único.

AWS DMSadmite dos modos de migración cuando se usa MongoDB como fuente, modo documento o modo tabla. Usted especifica el modo de migración que se va a utilizar al crear el endpoint de MongoDB o al configurar el parámetro del modo Metadata desde laAWS DMS consola. Si lo desea, puede crear una segunda columna denominada_id que actúe como clave principal seleccionando el botón de verificación de _id como columna independiente en el panel de configuración del endpoint.

El modo de migración que elija afectará al formato resultante de los datos de destino, como se explica a continuación.

Modo documento

En el modo documento, el documento de MongoDB se migra tal cual, es decir, sus datos se consolidan en una única columna de una tabla de destino denominada _doc. El modo documento es la configuración predeterminada al usar MongoDB como punto de enlace de origen.

Por ejemplo, tenga en cuenta los siguientes documentos en una colección de MongoDB llamada myCollection.

> db.myCollection.find() { "_id" : ObjectId("5a94815f40bd44d1b02bdfe0"), "a" : 1, "b" : 2, "c" : 3 } { "_id" : ObjectId("5a94815f40bd44d1b02bdfe1"), "a" : 4, "b" : 5, "c" : 6 }

Después de migrar los datos a una tabla de base de datos relacional utilizando el modo documento, los datos se estructuran de la siguiente forma. Los campos de datos del documento de MongoDB se consolidan en la columna _doc.

oid_id _doc
5a94815f40bd44d1b02bdfe0 { "a" : 1, "b" : 2, "c" : 3 }
5a94815f40bd44d1b02bdfe1 { "a" : 4, "b" : 5, "c" : 6 }

Si lo desea, puede establecer el extractDocID del atributo de conexión adicional en true para crear otra columna denominada "_id" que actúe como clave principal. Si va a utilizar CDC, defina este parámetro como true.

En modo de documento, AWS DMS gestiona la creación y el cambio de nombre de colecciones como esta:

  • Si se añade una nueva colección a la base de datos de origen, AWS DMS crea una tabla de destino para la colección y replica los documentos.

  • Si cambias el nombre de una colección existente en la base de datos de origen,AWS DMS no cambia el nombre de la tabla de destino.

Si el punto final de destino es Amazon DocumentDB, ejecute la migración en modo Documento.

Modo de tabla

En el modo de tabla, AWS DMS transforma cada uno de los campos de nivel superior de un documento de MongoDB en una columna de la tabla de destino. Si un campo está anidad, AWS DMS reúne los valores anidados en una sola columna. A continuación, AWS DMS añade un campo clave y tipos de datos al conjunto de columnas de la tabla de destino.

Para cada documento de MongoDB, AWS DMS agrega cada clave y tipo al conjunto de columnas de la tabla de destino. Por ejemplo, con el modo de tabla, AWS DMS migra el ejemplo anterior a la siguiente tabla.

oid_id a b c
5a94815f40bd44d1b02bdfe0 1 2 3
5a94815f40bd44d1b02bdfe1 4 5 6

Los valores anidados se aplanan en una columna que contiene nombres de clave separados por puntos. El nombre de la columna será la concatenación de los nombres de los campos reunidos, separados por puntos. Por ejemplo, AWS DMS migra un documento JSON con un campo de valores anidados, como {"a" : {"b" : {"c": 1}}}, a una columna denominada a.b.c.

Para crear las columnas de destino, AWS DMS analiza un número determinado de documentos de MongoDB y crea un conjunto de todos los campos y sus tipos. AWS DMS utiliza este conjunto a continuación para crear las columnas de la tabla de destino. Si crea o modifica el punto de enlace de origen de MongoDB mediante la consola de , puede especificar el número de documentos que se van a analizar. El valor predeterminado es de 1000 documentos. Si usa elAWS CLI, puede usar el atributo de conexión adicionaldocsToInvestigate.

En modo de tabla, AWS DMS gestiona documentos y colecciones de este modo:

  • Cuando añada un documento a una colección existente, el documento se replica. Si hay campos que no existen en el destino, estos campos no se replican.

  • Al actualizar un documento, el documento actualizado se replican. Si hay campos que no existen en el destino, estos campos no se replican.

  • Se admite en toda su extensión la eliminación de documentos.

  • Cuando se añade una colección nueva, no se crea una tabla nueva en el destino si se efectúa mientras se desarrolla una tarea de CDC.

  • No se admite cambiar el nombre a una colección.

Permisos necesarios al usar MongoDB como origen para AWS DMS

Para una migración de AWS DMS con un origen de MongoDB, puede crear una cuenta de usuario con privilegios raíz o bien un usuario que tenga permisos solamente en la base de datos que migrar.

El código siguiente crear un usuario para que sea la cuenta raíz.

use admin db.createUser( { user: "root", pwd: "password", roles: [ { role: "root", db: "admin" } ] } )

Para una fuente de MongoDB 3.x, el siguiente código crea un usuario con privilegios mínimos en la base de datos que se va a migrar.

use database_to_migrate db.createUser( { user: "dms-user", pwd: "password", roles: [ { role: "read", db: "local" }, "read"] })

Para una fuente de MongoDB 4.x, el código siguiente crea un usuario con privilegios mínimos.

{ resource: { db: "", collection: "" }, actions: [ "find", "changeStream" ] }

Por ejemplo, cree el siguiente rol en la base de datos «admin».

use admin db.createRole( { role: "changestreamrole", privileges: [ { resource: { db: "", collection: "" }, actions: [ "find","changeStream" ] } ], roles: [] } )

Y una vez creado el rol, cree un usuario en la base de datos para migrarlo.

> use test > db.createUser( { user: "dms-user12345", pwd: "password", roles: [ { role: "changestreamrole", db: "admin" }, "read"] })

Configuración de un conjunto de réplicas de MongoDB para CDC

Para utilizar la replicación continua o la CDC con MongoDB, esAWS DMS necesario acceder al registro de operaciones de MongoDB (oplog). Para crear dicho log, debe implementar un conjunto de réplicas si no existe ninguno. Para obtener más información, consulte la documentación de MongoDB.

Puede utilizar CDC con el nodo principal o secundario de un conjunto de réplicas de MongoDB como punto de enlace de origen.

Para convertir una instancia independiente a un conjunto de réplicas
  1. Usar la línea de comandos, conectarse a mongo.

    mongo localhost
  2. Detenga el servicio mongod.

    service mongod stop
  3. Reinicie mongod utilizando el siguiente comando:

    mongod --replSet "rs0" --auth -port port_number
  4. Pruebe la conexión con el conjunto de réplicas con los siguientes comandos:

    mongo -u root -p password --host rs0/localhost:port_number --authenticationDatabase "admin"

Si tiene previsto realizar una migración con el modo documento, seleccione la opción _id as a separate column al crear el punto de enlace de MongoDB. Si se selecciona esta opción, se crea otra columna denominada _id, que actúa como clave principal. AWS DMS necesita esta segunda columna para poder admitir operaciones de lenguaje de manipulación de datos (DML).

Requisitos de seguridad al utilizar MongoDB como origen para AWS DMS

AWSDMS admite dos métodos de autenticación para MongoDB. Los dos métodos de autenticación se utilizan para cifrar la contraseña, de forma que solo se pueda utilizar cuando el parámetro authType se haya establecido en PASSWORD (CONTRASEÑA).

Los métodos de autenticación de MongoDB son los siguientes:

  • MONGODB-CR — Para compatibilidad con versiones anteriores

  • SCRAM-SHA-1: el valor predeterminado cuando se utilizan las versiones 3.x y 4.0 de MongoDB

Si no se especifica un método de autenticación,AWS DMS usa el método predeterminado para la versión de la fuente de MongoDB.

Segmentar colecciones de MongoDB y migrar en parallel

Para mejorar el rendimiento de una tarea de migración, los extremos de origen de MongoDB admiten dos opciones para el mapeo de tablas a carga completa en parallel.

En otras palabras, puede migrar una colección en parallel mediante la segmentación automática o la segmentación por rangos con mapeo de tablas para obtener una carga completa en parallel en la configuración de JSON. Con la segmentación automática, puedes especificar los criteriosAWS DMS para segmentar automáticamente tu fuente para la migración en cada hilo. Con la segmentación de rangos, puede indicarAWS DMS el rango específico de cada segmento para que el DMS lo migre en cada subproceso. Para obtener más información acerca de estas opciones, consulteConfiguración, reglas y operaciones de tablas y colecciones.

Migración de una base de datos MongoDB en parallel mediante rangos de autosegmentación

Puede migrar sus documentos en parallel especificando los criterios paraAWS DMS particionar (segmentar) automáticamente los datos de cada hilo. En concreto, se especifica el número de documentos que se van a migrar por hilo. Con este enfoque,AWS DMS intenta optimizar los límites de los segmentos para obtener el máximo rendimiento por subproceso.

Puede especificar los criterios de segmentación mediante las opciones de configuración de la tabla que aparecen en el mapeo de tablas.

Opción de configuración de tablas

Descripción

"type"

(Obligatorio)"partitions-auto" Establézcalo en para MongoDB como fuente.

"number-of-partitions"

(Opcional) Número total de particiones (segmentos) utilizadas para la migración. El valor predeterminado es 16.

"collection-count-from-metadata"

(Opcional) Si esta opción está establecida entrue,AWS DMS utiliza un recuento estimado de colecciones para determinar el número de particiones. Si esta opción está configurada enfalse,AWS DMS utiliza el recuento de colecciones real. El valor predeterminado es true.

"max-records-skip-per-page"

(Opcional) El número de registros que se van a omitir a la vez al determinar los límites de cada partición. AWS DMSutiliza un enfoque de omisión paginado para determinar el límite mínimo de una partición. El valor predeterminado es 10 000.

Establecer un valor relativamente grande puede provocar tiempos de espera del cursor y errores en las tareas. Establecer un valor relativamente bajo da como resultado más operaciones por página y una carga completa más lenta.

"batch-size"

(opcional) limita el número de documentos que se devuelven en un lote. Cada lote requiere un viaje de ida y vuelta al servidor. Si el tamaño del lote es cero (0), el cursor utiliza el tamaño máximo de lote definido por el servidor. El valor predeterminado es 0.

El siguiente ejemplo muestra un mapeo de tablas para la segmentación automática.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "admin", "table-name": "departments" }, "rule-action": "include", "filters": [] }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "admin", "table-name": "departments" }, "parallel-load": { "type": "partitions-auto", "number-of-partitions": 5, "collection-count-from-metadata": "true", "max-records-skip-per-page": 1000000, "batch-size": 50000 } } ] }

La segmentación automática tiene la siguiente limitación. La migración de cada segmento obtiene el recuento de colecciones y el mínimo_id de la colección por separado. A continuación, utiliza un salto paginado para calcular el límite mínimo de ese segmento.

Por lo tanto, asegúrese de que el_id valor mínimo de cada colección permanezca constante hasta que se calculen todos los límites de los segmentos de la colección. Si cambia el_id valor mínimo de una colección durante el cálculo del límite de segmento, puede provocar la pérdida de datos o errores de duplicación de filas.

Migración de una base de datos MongoDB en parallel mediante la segmentación de rangos

Puede migrar sus documentos en parallel especificando los rangos para cada segmento de un hilo. Con este enfoque, se indica aAWS DMS los documentos específicos que se migren en cada subproceso de acuerdo con los rangos de documentos por subproceso que haya elegido.

La siguiente imagen muestra una colección de MongoDB que tiene siete elementos y_id como clave principal.


                        Colección MongoDB con siete elementos.

Para dividir la colección en tres segmentos específicosAWS DMS para migrarla en parallel, puede añadir reglas de mapeo de tablas a su tarea de migración. Este enfoque se muestra en el siguiente ejemplo de JSON.

{ // Task table mappings: "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "testdatabase", "table-name": "testtable" }, "rule-action": "include" }, // "selection" :"rule-type" { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "testdatabase", "table-name": "testtable" }, "parallel-load": { "type": "ranges", "columns": [ "_id", "num" ], "boundaries": [ // First segment selects documents with _id less-than-or-equal-to 5f805c97873173399a278d79 // and num less-than-or-equal-to 2. [ "5f805c97873173399a278d79", "2" ], // Second segment selects documents with _id > 5f805c97873173399a278d79 and // _id less-than-or-equal-to 5f805cc5873173399a278d7c and // num > 2 and num less-than-or-equal-to 5. [ "5f805cc5873173399a278d7c", "5" ] // Third segment is implied and selects documents with _id > 5f805cc5873173399a278d7c. ] // :"boundaries" } // :"parallel-load" } // "table-settings" :"rule-type" ] // :"rules" } // :Task table mappings

Esa definición de mapeo de tablas divide la colección de fuentes en tres segmentos y migra en parallel. Los siguientes son los límites de segmentación.

Data with _id less-than-or-equal-to "5f805c97873173399a278d79" and num less-than-or-equal-to 2 (2 records) Data with _id > "5f805c97873173399a278d79" and num > 2 and _id less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5 (3 records) Data with _id > "5f805cc5873173399a278d7c" and num > 5 (2 records)

Una vez finalizada la tarea de migración, puede comprobar en los registros de tareas que las tablas se cargaron en parallel, como se muestra en el siguiente ejemplo. También puede comprobar lafind cláusula MongoDB utilizada para descargar cada segmento de la tabla fuente.

[TASK_MANAGER ] I: Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86 (replicationtask_util.c:752) [SOURCE_UNLOAD ] I: Range Segmentation filter for Segment #0 is initialized. (mongodb_unload.c:157) [SOURCE_UNLOAD ] I: Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } } (mongodb_unload.c:328) [SOURCE_UNLOAD ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent. [TASK_MANAGER ] I: Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86 (replicationtask_util.c:752) [SOURCE_UNLOAD ] I: Range Segmentation filter for Segment #0 is initialized. (mongodb_unload.c:157) [SOURCE_UNLOAD ] I: Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } } (mongodb_unload.c:328) [SOURCE_UNLOAD ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent. [TARGET_LOAD ] I: Load finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 1 rows received. 0 rows skipped. Volume transfered 480. [TASK_MANAGER ] I: Load finished for segment #1 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. 2 records transferred.

Actualmente,AWS DMS admite los siguientes tipos de datos de MongoDB como columna clave de segmento:

  • Doble

  • Cadena

  • ObjectId

  • Entero de 32 bits

  • Entero de 64 bits

Migración de múltiples bases de datos cuando se usa MongoDB como fuente paraAWS DMS

AWS DMSlas versiones 3.4.5 y posteriores admiten la migración de varias bases de datos en una sola tarea para todas las versiones de MongoDB compatibles. Si desea migrar varias bases de datos, realice estas operaciones:

  1. Cuando cree el punto de conexión de origen de MongoDB, realice alguna de las siguientes operaciones:

    • En la página Crear punto de conexión de la consola de DMS, asegúrese de que el nombre de la base de datos esté vacío en Configuración de punto de conexión.

    • Mediante elAWS CLICreateEndpoint comando, asigne un valor de cadena vacío alDatabaseName parámetro enMongoDBSettings.

  2. Para cada base de datos que desee migrar desde una fuente de MongoDB, especifique el nombre de la base de datos como nombre de esquema en el mapeo de tablas de la tarea. Puede hacerlo mediante la entrada guiada en la consola o directamente en JSON. Para obtener más información sobre la entrada guiada, consulte Especificar las reglas de selección y transformación de tablas desde la consola. Para obtener más información acerca del JSON, consulteReglas y acciones de selección.

Por ejemplo, puede especificar el siguiente datashare para migrar tres bases de datos de MongoDB.

ejemplo Migrar todas las tablas de un esquema

El siguiente JSON migra todas las tablas deCustomersOrders, y lasSuppliers bases de datos de su punto de enlace de origen a su punto de enlace de destino.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Customers", "table-name": "%" }, "rule-action": "include", "filters": [] }, { "rule-type": "selection", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "Orders", "table-name": "%" }, "rule-action": "include", "filters": [] }, { "rule-type": "selection", "rule-id": "3", "rule-name": "3", "object-locator": { "schema-name": "Inventory", "table-name": "%" }, "rule-action": "include", "filters": [] } ] }

Restricciones al usar MongoDB como origen para AWS DMS

A continuación, se describen las restricciones que se aplican cuando se utiliza MongoDB como origen para AWS DMS:

  • Cuando la _id opción se establece como una columna independiente, la cadena del identificador no puede superar los 200 caracteres.

  • Las claves de ID de objeto y de tipo de matriz se convierten en columnas que tienen los prefijos oid y array en el modo de tabla.

    Internamente, se hace referencia a estas columnas con los nombres con prefijos. Si utiliza reglas de transformaciónAWS DMS que hagan referencia a estas columnas, asegúrese de especificar la columna con prefijo. Por ejemplo, especifique ${oid__id} y no ${_id} o ${array__addresses} y no ${_addresses}.

  • Los nombres de las colecciones y los nombres clave no pueden incluir el símbolo del dólar ($).

  • El modo de tabla y el modo de documento tienen las limitaciones descritas anteriormente.

  • La migración en parallel mediante la segmentación automática tiene las limitaciones descritas anteriormente.

  • Los filtros de origen no son compatibles con MongoDB.

  • AWS DMSno admite documentos en los que el nivel de anidamiento sea superior a 97.

Ajustes de configuración de endpoint cuando se usa MongoDB como fuente paraAWS DMS

Al configurar su punto de enlace fuente de MongoDB, puede especificar varios ajustes de configuración de punto de enlace mediante laAWS DMS consola.

En la siguiente tabla se describen las opciones de configuración disponibles cuando se utilizan bases de datos de MongoDB comoAWS DMS fuente.

Configuración (atributo) Valores válidos Valor predeterminado y descripción

Modo de autenticación

"none"

"password"

Es un valor"password" que solicita un nombre de usuario y una contraseña. Cuando"none" se especifica, no se utilizan los parámetros de nombre de usuario y contraseña.

Fuente de autenticación

Un nombre de la base de datos MongoDB válido.

Es el nombre de la base de datos de MongoDB que desea utilizar para validar sus credenciales para la autenticación. El valor predeterminado es "admin".

Mecanismo de autenticación

"default"

"mongodb_cr"

"scram_sha_1"

El mecanismo de autenticación. El valor "default" es "scram_sha_1". Esta configuración no se utiliza cuando authType se establece en "no".

Modo de metadatos

Documento y tabla

Elige el modo de documento o el modo de tabla.

Número de documentos a escanear (docsToInvestigate)

Un número entero positivo mayor que 0.

Utilice esta opción solo en modo tabla para definir la definición de la tabla de destino.

_id como columna independiente

Marca de verificación en la casilla

Casilla de verificación opcional que crea una segunda columna denominada_id que actúa como clave principal.

SocketTimeoutMS

NUMBER

Solo atributo de conexión adicional (ECA).

Esta configuración está en unidades de milisegundos y configura el tiempo de espera de conexión para los clientes de MongoDB. Si el valor es menor o igual a cero, se utiliza el predeterminado del cliente MongoDB.

Si elige el modo Documento como metadatos, hay diferentes opciones disponibles.

Si el punto final de destino es DocumentDB, asegúrese de ejecutar la migración en modo Documento. Además, modifique el punto final de origen y seleccione la opción _id como columna independiente. Este es un requisito previo obligatorio si la carga de trabajo de MongoDB de origen implica transacciones.

Tipos de datos de origen para MongoDB

La migración de datos que utiliza MongoDB como origen para AWS DMS admite la mayoría de los tipos de datos de MongoDB. En la tabla siguiente, puede encontrar los tipos de datos de origen de MongoDB que se admiten cuando se utiliza AWS DMS y el mapeo predeterminado de los tipos de datos de AWS DMS. Para obtener más información sobre los tipos de datos de MongoDB, consulte BSON types en la documentación de MongoDB.

Para obtener más información sobre cómo ver el tipo de datos que se asigna en el destino, consulte la sección del punto de enlace de destino que esté utilizando.

Para obtener más información sobre los tipos de datos de AWS DMS, consulte Tipos de datos para elAWS Database Migration Service.

Tipos de datos de MongoDB

Tipos de datos de AWS DMS

Booleano

Bool

Binario

BLOB

Fecha

Fecha

Marca temporal

Fecha

Int

INT4

Largo

INT8

Doble

REAL8

Cadena (UTF-8)

CLOB

Array (Matriz)

CLOB

OID

Cadena

REGEX

CLOB

CODE

CLOB