Todos los productos
Search
Centro de documentos

Data Transmission Service:Synchronize or migrate MongoDB collections with TTL indexes

Última actualización: Sep 07, 2026

Cuando utiliza Data Transmission Service (DTS) para sincronizar o migrar colecciones de MongoDB que tienen índices Time-to-Live (TTL), la eliminación automática basada en TTL en el destino provoca retrasos en la tarea e inconsistencias en los datos. Para evitarlo, establezca temporalmente los índices TTL del destino en el valor de expiración máximo durante la sincronización o migración.

Contexto

Al migrar una instancia de MongoDB que contiene colecciones con índices TTL (por ejemplo, sesiones de usuario, registros o datos de caché), puede usar DTS para la sincronización completa e incremental. El objetivo es lograr cero pérdida de datos con un impacto mínimo en el servicio.

Sin embargo, el mecanismo de eliminación automática por TTL entra en conflicto con la sincronización de DTS. Esto genera latencia en la tarea e inconsistencia en los datos:

  • Las operaciones DELETE redundantes reducen la eficiencia: cuando el índice TTL del origen elimina datos caducados, escribe un registro DELETE en el Oplog. DTS replica este DELETE en el destino. Si el índice TTL del destino ya eliminó esos mismos datos, MongoDB devuelve un recuento de filas afectadas inesperado. Esto activa el manejo de excepciones y ralentiza la migración.

  • Inconsistencia de datos por la eliminación asíncrona del TTL: los índices TTL no eliminan los datos en tiempo real. Los datos caducados pueden seguir existiendo en el origen mientras el destino ya los eliminó, lo que causa inconsistencia.

    Por ejemplo:

    El Oplog o ChangeStream de MongoDB registra únicamente los campos actualizados de una operación UPDATE, no el documento completo. Si un UPDATE no encuentra los datos de destino, DTS omite la operación.

    Momento

    Instancia de origen

    Instancia de destino

    1

    El servicio inserta datos

    2

    DTS sincroniza la operación INSERT

    3

    Los datos caducaron, pero el índice TTL aún no los elimina

    4

    El servicio actualiza los datos (por ejemplo, modifica el campo del índice TTL para cambiar el tiempo de expiración)

    5

    El índice TTL elimina los datos

    6

    DTS sincroniza el UPDATE, pero no encuentra los datos. La operación se omite.

    Como resultado, este documento queda ausente en la instancia de MongoDB de destino.

Solución

Establezca temporalmente los índices TTL del destino en el valor de expiración máximo durante toda la sincronización o migración (etapas completa e incremental). Restaure la configuración original de TTL después de cambiar el tráfico a la nueva instancia.

Procedimiento:

  1. Haga una copia de seguridad de la configuración de los índices TTL: en la base de datos de origen, ejecute un script para identificar todas las colecciones con índices TTL y registre sus valores de expiración.

    Haga clic en para ver el script de ejemplo

    // Script: Find and print information about all TTL indexes
    const collections = db.getCollectionNames();
    let ttlIndexes = [];
    collections.forEach(collName => {
        const indexes = db.getCollection(collName).getIndexes();
        indexes.forEach(idx => {
            if (idx.hasOwnProperty('expireAfterSeconds')) {
                console.log(`Found TTL index -> Collection: ${collName}, Index name: ${idx.name}, Expires after: ${idx.expireAfterSeconds} seconds`);
                ttlIndexes.push({
                    collection: collName,
                    name: idx.name,
                    expireAfterSeconds: idx.expireAfterSeconds
                });
            }
        });
    });
    // Save the following JSON output to a file for later steps.
    printjson(ttlIndexes);
  2. Deshabilite la eliminación automática por TTL en el destino:

    1. Compruebe si la instancia de destino ya contiene las colecciones y los índices TTL requeridos.

    2. Si no los contiene, use la migración de esquemas para sincronizar primero las colecciones. Luego, conéctese a la base de datos de destino y establezca el tiempo de expiración en el valor máximo para evitar la eliminación automática durante el proceso.

    3. Si ya los contiene, conéctese a la base de datos de destino antes de iniciar la tarea de DTS y establezca la expiración TTL en el valor máximo para evitar la eliminación automática durante el proceso.

  3. Ejecute y supervise la tarea de DTS: inicie la tarea de sincronización completa e incremental de DTS. Con la eliminación automática por TTL deshabilitada en el destino, DTS replica todas las operaciones del origen sin conflictos.

    1. Cree e inicie la tarea de sincronización o migración de datos en la consola de DTS.

    2. Supervise a continuación las siguientes métricas durante el proceso:

      • Latencia de la tarea de DTS: compruebe en la página de detalles de la tarea que la latencia de la sincronización incremental se mantenga baja.

      • Uso de almacenamiento en el destino: dado que los datos del destino no caducan durante la migración, el uso de almacenamiento crece de forma continua. Asegúrese de que haya suficiente espacio de almacenamiento disponible.

  4. Restaure la configuración de TTL: una vez que finalice la sincronización de DTS y el tráfico cambie a la nueva instancia, restaure los valores originales de expiración TTL desde su copia de seguridad. Después, un hilo en segundo plano de MongoDB limpia los documentos caducados que se acumularon durante la migración.

Notas:

  • Durante la sincronización o migración incremental, DTS sigue replicando en el destino las operaciones DELETE que genera el índice TTL del origen sobre los datos caducados.

  • Al aumentar la expiración TTL del destino, este almacena datos que ya caducaron en el origen si ocurre latencia durante la sincronización o migración. Aprovisione almacenamiento suficiente en el destino según el volumen de escritura del origen.

  • Para las colecciones con valores TTL muy cortos (datos temporales o registros), evite migrar datos históricos. En casos extremos, los datos migrados por completo podrían caducar en el destino casi de inmediato y dejar la colección vacía. Considere usar una estrategia de escritura dual o una migración exclusivamente incremental.