Data Transmission Service (DTS) captura los cambios incrementales de un clúster fragmentado de ApsaraDB for MongoDB y entrega cada evento de cambio a una función de Function Compute en formato Canal JSON. Escriba el código de su función para procesar, transformar o reenviar los eventos a sistemas posteriores.
Datos que recibe la función
Cada invocación pasa un objeto con un arreglo Records. Cada elemento del arreglo representa un evento de cambio:
|
Campo |
Tipo |
Descripción |
|
|
Boolean |
|
|
|
String |
DML: |
|
|
String |
Nombre de la base de datos MongoDB |
|
|
String |
Nombre de la colección |
|
|
String |
Nombre de la clave primaria. Siempre es |
|
|
Long |
Marca de tiempo UNIX de 13 dígitos (ms): momento en que se ejecutó la operación en el origen |
|
|
Long |
Marca de tiempo UNIX de 13 dígitos (ms): momento en que DTS comenzó a escribir en el destino |
|
|
Object Array |
Arreglo de un solo elemento. El elemento tiene una clave |
|
|
Object Array |
Mismo formato que |
|
|
Int |
Número de serie de la operación |
La función recibe dos categorías de operaciones:
DDL: cambios de esquema, como
CreateIndex,CreateCollection,DropIndexyDropCollectionDML: cambios de datos, como
INSERT,UPDATEyDELETE
Ejemplos de cargas útiles
Crear una colección (DDL)
db.createCollection("testCollection")
{
"Records": [{
"data": [{"doc": "{\"create\": \"testCollection\", \"idIndex\": {\"v\": 2, \"key\": {\"_id\": 1}, \"name\": \"_id_\"}}"}],
"pkNames": ["_id"],
"type": "DDL",
"es": 1694056437000,
"database": "MongoDBTest",
"id": 0,
"isDdl": true,
"table": "testCollection",
"ts": 1694056437510
}]
}
Eliminar una colección (DDL)
db.testCollection.drop()
{
"Records": [{
"data": [{"doc": "{\"drop\": \"testCollection\"}"}],
"pkNames": ["_id"],
"type": "DDL",
"es": 1694056577000,
"database": "MongoDBTest",
"id": 0,
"isDdl": true,
"table": "testCollection",
"ts": 1694056577789
}]
}
Crear un índice (DDL)
db.testCollection.createIndex({name: 1})
{
"Records": [{
"data": [{"doc": "{\"createIndexes\": \"testCollection\", \"v\": 2, \"key\": {\"name\": 1}, \"name\": \"name_1\"}"}],
"pkNames": ["_id"],
"type": "DDL",
"es": 1694056670000,
"database": "MongoDBTest",
"id": 0,
"isDdl": true,
"table": "testCollection",
"ts": 1694056670719
}]
}
Eliminar un índice (DDL)
db.testCollection.dropIndex({name: 1})
{
"Records": [{
"data": [{"doc": "{\"dropIndexes\": \"testCollection\", \"index\": \"name_1\"}"}],
"pkNames": ["_id"],
"type": "DDL",
"es": 1694056817000,
"database": "MongoDBTest",
"id": 0,
"isDdl": true,
"table": "$cmd",
"ts": 1694056818035
}]
}
Insertar documentos (DML)
// Batch insert
db.runCommand({insert: "user", documents: [{"name": "jack", "age": 20}, {"name": "lili", "age": 20}]})
// Single insert
db.user.insert({"name": "jack", "age": 20})
{
"Records": [
{
"data": [{"doc": "{\"_id\": {\"$oid\": \"64f9397f6e255f74d65a****\"}, \"name\": \"jack\", \"age\": 20}"}],
"pkNames": ["_id"],
"type": "INSERT",
"es": 1694054783000,
"database": "MongoDBTest",
"id": 0,
"isDdl": false,
"table": "user",
"ts": 1694054784427
},
{
"data": [{"doc": "{\"_id\": {\"$oid\": \"64f9397f6e255f74d65a****\"}, \"name\": \"lili\", \"age\": 20}"}],
"pkNames": ["_id"],
"type": "INSERT",
"es": 1694054783000,
"database": "MongoDBTest",
"id": 0,
"isDdl": false,
"table": "user",
"ts": 1694054784428
}
]
}
Actualizar un documento (DML)
db.user.update({"name": "jack"}, {$set: {"age": 30}})
{
"Records": [{
"data": [{"doc": "{\"$set\": {\"age\": 30}}"}],
"pkNames": ["_id"],
"old": [{"doc": "{\"_id\": {\"$oid\": \"64f9397f6e255f74d65a****\"}}"}],
"type": "UPDATE",
"es": 1694054989000,
"database": "MongoDBTest",
"id": 0,
"isDdl": false,
"table": "user",
"ts": 1694054990555
}]
}
En las operaciones UPDATE, solo el comando $set se ejecuta de forma síncrona cuando DTS sincroniza datos incrementales.
Eliminar un documento (DML)
db.user.remove({"name": "jack"})
{
"Records": [{
"data": [{"doc": "{\"_id\": {\"$oid\": \"64f9397f6e255f74d65a****\"}}"}],
"pkNames": ["_id"],
"type": "DELETE",
"es": 1694055452000,
"database": "MongoDBTest",
"id": 0,
"isDdl": false,
"table": "user",
"ts": 1694055452852
}]
}
Límites
Revise estas restricciones antes de crear la tarea de sincronización.
Restricciones de alcance:
Solo se admite la sincronización incremental de datos. No se admite la sincronización completa de datos.
No se admite la sincronización entre regiones.
DTS no puede sincronizar datos de las bases de datos
admin,confignilocal.No se admite la asignación de objetos.
No se conserva la información de transacciones. Las transacciones se convierten en registros individuales en el destino.
Restricciones de la base de datos de origen:
El origen debe usar la arquitectura de clúster fragmentado, con un máximo de 10 nodos Mongos.
El origen no puede ser un clúster de Azure Cosmos DB for MongoDB ni un clúster elástico de Amazon DocumentDB.
Las colecciones que se van a sincronizar deben tener restricciones PRIMARY KEY o UNIQUE, y todos los campos deben ser únicos. De lo contrario, la base de datos de destino podría contener registros de datos duplicados.
Un solo documento no puede superar los 16 MB. Los documentos que excedan este tamaño no se pueden escribir en la función de destino y generan un error. Si es necesario, utilice la función de extracción, transformación y carga (ETL) para filtrar campos grandes.
Se pueden sincronizar hasta 1,000 colecciones por tarea. Para más colecciones, cree varias tareas o sincronice a nivel de base de datos.
No se puede escalar la instancia de origen mientras se ejecuta una tarea de sincronización.
DTS no puede conectarse a una base de datos MongoDB mediante un endpoint SRV.
Si el balanceador de la base de datos de origen está activo, la tarea podría experimentar retrasos.
Si la base de datos de origen es una base de datos MongoDB autogestionada con arquitectura de clúster fragmentado, establezca el parámetro Access Method en Express Connect, VPN Gateway, or Smart Access Gateway o Cloud Enterprise Network (CEN).
Restricciones de escritura:
En las operaciones INSERT, los datos que se insertan deben contener claves de fragmentación.
En las operaciones UPDATE, no se pueden modificar las claves de fragmentación.
Configure solo una tarea de DTS por función de destino. Varias tareas que escriban en la misma función pueden causar errores de datos.
Requisitos de oplog y change stream:
El oplog debe estar habilitado y conservar al menos 7 días de datos de registro, O BIEN los change streams deben estar habilitados para cubrir al menos los últimos 7 días de cambios. Si no se cumple ninguna de estas condiciones, DTS podría no capturar los cambios del origen, lo que puede provocar inconsistencia o pérdida de datos no cubierta por el acuerdo de nivel de servicio (SLA) de DTS.
Restricciones de change stream (si aplica):
Los change streams requieren MongoDB 4.0 o posterior.
No se admite la sincronización bidireccional cuando se usan change streams.
Para clústeres no elásticos de Amazon DocumentDB, use change streams: establezca Migration Method en ChangeStream y Architecture en Sharded Cluster.
Nuevas bases de datos:
DTS no sincroniza datos incrementales de bases de datos creadas después de que inicia la tarea de sincronización.
Operaciones compatibles
Las operaciones capturadas dependen del método de migración.
Con oplog (recomendado):
CREATE COLLECTION,CREATE INDEXDROP DATABASE,DROP COLLECTION,DROP INDEXRENAME COLLECTIONINSERT, UPDATE y DELETE a nivel de documento
Con change streams:
DROP DATABASE,DROP COLLECTIONRENAME COLLECTIONINSERT, UPDATE y DELETE a nivel de documento
Facturación
La sincronización incremental de datos tiene costo. Para obtener detalles sobre precios, consulte Billing overview.
|
Método de facturación |
Descripción |
|
Subscription |
Pago anticipado por 1–9 meses, o 1, 2, 3 o 5 años. Más rentable para uso a largo plazo |
|
Pay-as-you-go |
Facturación por hora. Libere la instancia cuando ya no la necesite para detener los cargos |
DTS cobra por la instancia durante los períodos de reintento de conexión.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Una instancia de clúster fragmentado de ApsaraDB for MongoDB en ejecución. Consulte Create a sharded cluster instance
Un servicio y una función de Function Compute, con Handler Type establecido en Event Handler. Consulte Crear rápidamente una función
-
Una cuenta de base de datos en la instancia de ApsaraDB for MongoDB de origen con permisos de lectura en las bases de datos de origen,
adminylocal. Consulte Manage the permissions of MongoDB database usersNotaSi utiliza ChangeStream como método de sincronización incremental, la cuenta de la base de datos de origen requiere permisos de lectura de Change Streams a nivel de instancia (como
readAnyDatabase). Si el origen es una instancia de ApsaraDB for MongoDB con una cuenta personalizada, también debe otorgar a la cuenta permiso de lectura en la base de datosadmin. Para obtener más información, consulte Permissions of the root account specified during instance creation.
Crear una tarea de sincronización
Paso 1: Abrir la página Data Synchronization
Vaya a la página Data Synchronization mediante cualquiera de las siguientes consolas:
Consola de DTS
Inicie sesión en la consola de DTS.DTS console
En el panel de navegación izquierdo, haga clic en Data Synchronization.
En la esquina superior izquierda, seleccione la región donde se ejecutará la tarea de sincronización.
Consola de DMS
La ruta de navegación exacta depende del diseño de su consola de DMS. Consulte Modo simple y Personalizar el diseño y estilo de la consola de DMS.
Inicie sesión en la consola de DMS.DMS console
En la barra de navegación superior, pase el puntero sobre Data + AI y elija DTS (DTS) > Data Synchronization.
En el menú desplegable a la derecha de Data Synchronization Tasks, seleccione la región de destino.
Paso 2: Configurar las bases de datos de origen y destino
Haga clic en Create Task y configure los siguientes parámetros:
| Sección | Parámetro | Descripción |
|---|---|---|
| N/A | Task Name | DTS genera automáticamente un nombre. Especifique un nombre descriptivo para identificar fácilmente la tarea. No es necesario que sea único |
| Source Database | Select Existing Connection | Seleccione una instancia de base de datos registrada para completar automáticamente los parámetros siguientes o configúrelos manualmente |
| Database Type | Seleccione MongoDB | |
| Access Method | Seleccione Alibaba Cloud Instance | |
| Instance Region | Región de la instancia de MongoDB de origen | |
| Replicate Data Across Alibaba Cloud Accounts | Seleccione No para sincronización dentro de la misma cuenta | |
| Architecture | Seleccione Sharded Cluster | |
| Migration Method | Forma en que DTS captura los datos incrementales. Opciones: Oplog (recomendado) o ChangeStream (consulte los detalles a continuación) | |
| Instance ID | ID de la instancia de MongoDB de origen | |
| Authentication Database | Base de datos que almacena las credenciales de la cuenta. Valor predeterminado: admin |
|
| Database Account | Cuenta de la base de datos de origen con los permisos de lectura necesarios | |
| Database Password | Contraseña de la cuenta de la base de datos | |
| Shard account | Cuenta para acceder a los shards en la instancia de origen | |
| Shard password | Contraseña de la cuenta del shard | |
| Encryption | Modo de cifrado de la conexión. Opciones: Non-encrypted, SSL-encrypted o Mongo Atlas SSL. Las opciones disponibles dependen de las selecciones de Access Method y Architecture. SSL-encrypted no está disponible cuando Architecture es Sharded Cluster y Migration Method es Oplog | |
| Destination Database | Select Existing Connection | Seleccione una instancia de Function Compute registrada para completar automáticamente los parámetros siguientes o configúrelos manualmente |
| Database Type | Seleccione Function Compute | |
| Access Method | Seleccione Alibaba Cloud Instance | |
| Instance Region | Coincide con la región de origen. No se puede cambiar | |
| Service | Servicio de Function Compute que contiene la función de destino | |
| Function | Función que recibe los datos sincronizados | |
| Service Version and Alias | Versión o alias del servicio. Opciones: Default Version (fijo en LATEST), Specified Version (requiere Service Version) o Specified Alias (requiere Service Alias). Consulte Términos |
Elija un método de migración:
|
Método |
Cuándo utilizarlo |
|
Oplog (recomendado) |
El oplog está habilitado en el origen (valor predeterminado tanto para MongoDB autogestionado como para ApsaraDB for MongoDB). Proporciona menor latencia de sincronización gracias a una extracción de registros más rápida |
|
ChangeStream |
El oplog está deshabilitado o se usa un clúster no elástico de Amazon DocumentDB (se requieren change streams). Requiere MongoDB 4.0 o posterior. No se admite la sincronización bidireccional |
Cuando Architecture es Sharded Cluster y Migration Method es ChangeStream , los parámetros Shard account y Shard password no son obligatorios.
Paso 3: Probar la conectividad
Haga clic en Test Connectivity and Proceed.
Asegúrese de que los bloques CIDR del servidor de DTS estén agregados al security group o a la lista de permitidos tanto del origen como del destino. Consulte Agregar los bloques CIDR de los servidores de DTS . Si el origen o el destino utiliza un método de acceso autogestionado, haga clic primero en Test Connectivity en el cuadro de diálogo CIDR Blocks of DTS Servers .
Paso 4: Seleccionar los objetos a sincronizar
En el paso Configure Objects, configure lo siguiente:
|
Parámetro |
Descripción |
|
Synchronization Types |
Fijo en Incremental Data Synchronization. No se puede cambiar |
|
Data Format |
Fijo en Canal Json. Para descripciones de los campos, consulte Canal Json section del tema Formatos de datos de un clúster de Kafka |
|
Source Objects |
Seleccione las bases de datos o colecciones a sincronizar y luego haga clic en |
|
Selected Objects |
Revise los objetos seleccionados. Haga clic en |
Paso 5: Configurar opciones avanzadas
Haga clic en Next: Advanced Settings y configure lo siguiente:
|
Parámetro |
Descripción |
|
Dedicated Cluster for Task Scheduling |
De forma predeterminada, DTS programa la tarea en el clúster compartido. Adquiera un clúster dedicado para mayor estabilidad. Consulte ¿Qué es un clúster dedicado de DTS? |
|
Retry Time for Failed Connections |
Tiempo durante el cual DTS reintenta la conexión cuando el origen o el destino no son accesibles. Rango: 10–1440 minutos. Valor predeterminado: 720. Establezca un mínimo de 30 minutos. Si varias tareas comparten el mismo origen o destino, prevalece el tiempo de reintento más corto |
|
Retry Time for Other Issues |
Tiempo durante el cual DTS reintenta operaciones DDL o DML fallidas. Rango: 1–1440 minutos. Valor predeterminado: 10. Establezca un mínimo de 10 minutos. Debe ser menor que Retry Time for Failed Connections |
|
Obtain the entire document after it is updated |
Solo para ChangeStream. Yes: envía el documento completo después de una actualización. No: envía solo los campos modificados |
|
Enable Throttling for Incremental Data Synchronization |
Limita el throughput de sincronización para reducir la carga en el destino. Configure RPS of Incremental Data Synchronization y Data synchronization speed for incremental synchronization (MB/s) |
|
Environment Tag |
Etiqueta para identificar el entorno de la instancia de DTS. Opcional |
|
Configure ETL |
Habilite la función ETL para transformar datos en tránsito. Consulte ¿Qué es ETL? y Configurar ETL en una tarea de migración o sincronización de datos |
|
Monitoring and Alerting |
Envía alertas cuando la tarea falla o la latencia de sincronización supera un umbral. Consulte Configurar monitoreo y alertas al crear una tarea de DTS |
Paso 6: Ejecutar la verificación previa
Haga clic en Next: Save Task Settings and Precheck.
Para previsualizar los parámetros de API de esta configuración de tarea, pase el cursor sobre Next: Save Task Settings and Precheck y haga clic en Preview OpenAPI parameters .
DTS ejecuta una verificación previa antes de iniciar la tarea de sincronización. La tarea comienza solo después de superar dicha verificación.
Si un elemento falla: haga clic en View Details junto al elemento con errores, corrija el problema reportado y luego haga clic en Precheck Again.
-
Si se activa una alerta:
Si la alerta no se puede ignorar: haga clic en View Details, corrija el problema y vuelva a ejecutar la verificación previa.
Si la alerta se puede ignorar: haga clic en Confirm Alert Details, haga clic en Ignore en el cuadro de diálogo, confirme con OK y luego haga clic en Precheck Again. Ignorar alertas puede provocar inconsistencia en los datos.
Paso 7: Adquirir una instancia
Espere hasta que Success Rate alcance 100% y luego haga clic en Next: Purchase Instance.
En la página buy, configure lo siguiente:
| Sección | Parámetro | Descripción |
|---|---|---|
| New Instance Class | Billing Method | Subscription o Pay-as-you-go |
| Resource Group Settings | Grupo de recursos para la instancia. Valor predeterminado: default resource group. Consulte ¿Qué es Resource Management? | |
| Instance Class | Determina la velocidad de sincronización. Consulte Clases de instancia de sincronización de datos | |
| Subscription Duration | Disponible solo para facturación Subscription. Opciones: 1–9 meses, o 1, 2, 3 o 5 años |
Lea y seleccione Data Transmission Service (Pay-as-you-go) Service Terms.
Haga clic en Buy and Start y luego en OK en el cuadro de diálogo de confirmación.
Puede seguir el progreso de la tarea en la lista de tareas.
Pasos siguientes
Escriba su controlador de eventos de Function Compute para procesar la carga útil Canal JSON. Utilice el campo
isDdlpara bifurcar entre la lógica DDL y DML, y deserialice la cadenadocen cada elementodatapara acceder a los campos del documento.Para reducir la carga de documentos con campos grandes en su función, configure filtros ETL antes de que los datos lleguen a ella. Consulte Configurar ETL en una tarea de migración o sincronización de datos.
Para monitorear el estado de la sincronización, configure alertas en Advanced Settings o después de crear la tarea. Consulte Configurar monitoreo y alertas al crear una tarea de DTS.
Si una tarea falla, el soporte técnico de DTS intentará restaurarla en un plazo de 8 horas. Durante la restauración, la tarea podría reiniciarse y se podrían ajustar sus parámetros (no los de la base de datos). Para consultar la lista de parámetros que se pueden modificar, vea Modificar parámetros de instancia.