Docs Menu
Docs Home
/ /

Sincronización filtrada

Nuevo en la versión 1.1.

Mongosync migra datos entre dos clústeres de MongoDB. Puede usar la sincronización filtrada para especificar qué bases de datos y colecciones... La utilidadmongosync transfiere datos entre los clústeres de origen y destino.

A partir de 1.1, mongosync Admite filtros de inclusión para especificar qué bases de datos y colecciones se incluirán en la sincronización. A partir de 1.6, mongosync también admite filtros de exclusión y expresiones regulares.

  • Con filtros de inclusión, mongosync sincroniza las bases de datos y colecciones coincidentes.

  • Con filtros de exclusión, mongosync sincroniza todas las bases de datos y colecciones, excepto aquellas que coinciden con los filtros.

  • Con filtros de inclusión y exclusión, mongosync solo sincroniza las bases de datos y colecciones que coinciden con los filtros de inclusión y luego excluye todas aquellas que también coinciden con los filtros de exclusión.

  • Sin filtros, mongosync sincroniza todas las bases de datos y colecciones.

El start punto final de la API acepta dos campos que configuran la sincronización filtrada: includeNamespaces excludeNamespacesy. Cada campo acepta una matriz de filtros que especifican las bases de datos y colecciones que se incluirán o excluirán de la sincronización.

Nota

Si la llamada utiliza start los includeNamespaces excludeNamespaces parámetros y, mongosync primero coincide con las bases de datos y colecciones de los filtros de inclusión y luego excluye aquellas que también coinciden con un filtro de exclusión.

Los filtros tienen la siguiente sintaxis:

"includeNamespaces": [
{
"database": "<database-name>",
"collections": [
"<collection-name>"
]
"databaseRegex": {
"pattern": "<regex-pattern>",
"options": "<options>"
},
"collectionsRegex": {
"pattern": "<regex-pattern>",
"options": "<options>"
}
}
],
"excludeNamespaces": [
{
"database": "<database-name>",
"collections": [
"<collection-name>"
]
"databaseRegex": {
"pattern": "<regex-pattern>",
"options": "<options>"
},
"collectionsRegex": {
"pattern": "<regex-pattern>",
"options": "<options>"
}
}
]

Para obtener más información sobre la pattern sintaxis de las options expresiones regulares y, consulte Expresiones regulares en filtros.

Los filtros deben incluir el campo database o el campo databaseRegex.

Si necesita que el filtro coincida con colecciones específicas, puede utilizar la matriz collections para especificar colecciones individualmente o definir una expresión regular utilizando el campo collectionsRegex.

Importante

Una vez que inicie mongosync con un filtro, este no se podrá modificar. Si necesita crear un filtro nuevo, consulte: Reiniciar Mongosync.

1

Identifique las bases de datos y colecciones que desea sincronizar con el clúster de destino.

  • Cuando agrega un conjunto de bases de datos al filtro, también excluye cualquier otra base de datos en el clúster.

  • Cuando especifica una colección en su filtro, también excluye cualquier otra colección que esté en la misma base de datos.

2

La API acepta dos parámetros que configuran filtros start opcionales:

  • El parámetro includeNamespaces toma una matriz de filtros, que se utilizan para determinar qué bases de datos y colecciones mongosync deben incluirse en la sincronización.

  • El parámetro excludeNamespaces toma una matriz de filtros, que se utilizan para determinar qué bases de datos y colecciones mongosync deben excluirse de la sincronización.

Si no especifica un filtro, mongosync realiza una sincronización completa del clúster.

Cree filtros de inclusión y/o exclusión para identificar las bases de datos y colecciones que desea sincronizar.

Por ejemplo, este filtro de inclusión configuraría mongosync para sincronizar únicamente las colecciones cuyos nombres comiencen con accounts_ de la base de datos sales, excepto la colección accounts_old:

"includeNamespaces": [
{
"database": "sales",
"collectionsRegex": {
"pattern": "^accounts_.+?$",
"options": "ms"
}
],
"excludeNamespaces": [
{
"database": "sales",
"collections": [
"accounts_old"
]
}
]

Para obtener más información sobre los filtros, consulte Sintaxis de filtro.

3

Para usar el filtro, adjunte el json del filtro cuando realice la llamada API /start para comenzar la sincronización.

curl -X POST "http://localhost:27182/api/v1/start" --data '
{
"source": "cluster0",
"destination": "cluster1",
"includeNamespaces": [
{
"database": "sales",
"collectionsRegex": {
"pattern": "^accounts_.+$",
"options": "i"
}
}, {
"database": "marketing"
}
]
} '

Para ver un ejemplo de configuración, consulte: Iniciar mongosync con un filtro.

No se puede actualizar un filtro existente. Debes detener el proceso de sincronización en curso, preparar el clúster de destino y reiniciar mongosync con un nuevo filtro. Para reiniciar mongosync, consulta: Reiniciar Mongosync.

Puede, con algunas restricciones, agregar o durante una sincronización rename a collection filtrada.

Advertencia

Si su operación de cambio de nombre viola las restricciones de cambio de nombre, mongosync deja de sincronizar y reporta un error.

Para limpiar y reiniciar después de un error, siga los pasos para reemplazar un filtro existente.

Puede agregar nuevas colecciones o cambiar el nombre de una colección existente si toda la base de datos es parte del filtro.

También puedes cambiar el nombre de una colección si el nombre antiguo y el nuevo están especificados en el filtro.

Vea los ejemplos de cambio de nombre.

Solo se puede renombrar una colección en distintas bases de datos si toda la base de datos de destino forma parte de un filtro. Si el filtro especifica colecciones individuales en la base de datos de destino, no es posible renombrar entre distintas bases de datos.

Vea los ejemplos de cambio de nombre.

Para utilizar la $out etapa de agregación o el comando (cuando mapReduce se configura para crear o reemplazar una colección) con filtrado, debe filtrar toda la base de datos y no solo la colección especificada.

Por ejemplo, considere esta canalización de agregación:

use library
db.books.aggregate( [
{ $group : { _id : "$author", titles: { $push: "$title" } } },
{ $out : "authors" }
] )

La etapa $out crea la colección authors en la base de datos library. Si desea sincronizar la colección authors, debe especificar toda la base de datos library en su filtro. El filtro no funcionará si solo especifica la colección authors.

Este filtro funciona:

"includeNamespaces": [
{
"database": "library"
}
]

Este filtro no funciona:

"includeNamespaces": [
{
"database": "library",
"collections": [ "authors", "books" ] // DOES NOT WORK WITH $OUT
}
]
  • El filtrado no es compatible con la sincronización reversible.

  • El clúster de destino no debe contener datos de usuario antes de iniciarse a menos que establezca el parámetro preExistingDestinationData en true cuando llame /start a.

  • El clúster de destino no debe contener la base de datos del sistema mongosync_reserved_for_internal_use antes de iniciar.

  • No se puede modificar un filtro en uso. Para crear un filtro nuevo, consulte: Reemplazar un filtro existente.

  • Solo se pueden renombrar colecciones en ciertas situaciones. Para más información, consulte: Agregar y renombrar colecciones.

  • Si un filtro incluye una vista, pero no la colección base, solo los metadatos de la vista se sincronizan con el clúster de destino. Para incluir los documentos de la vista, también debe sincronizar la colección base.

  • No se pueden especificar colecciones del sistema ni bases de datos del sistema en un filtro.

  • Para usar la $out etapa de agregación o el comando (cuando mapReduce se configura para crear o reemplazar una colección) con filtrado, debe configurar el filtro para que use toda la base de datos. No puede limitar el filtro a colecciones dentro de la base de datos.

    Para obtener más información,consulte Filtrado con mapReduce y $out.

  • El filtrado no admite el bloqueo de escritura dual. Puede usar el bloqueo de escritura solo en el destino.

El siguiente ejemplo inicia un trabajo de sincronización entre el clúster de origen cluster0 y el clúster de destino cluster1.

cluster0 contiene las bases de datos sales, marketing y engineering.

La base de datos sales contiene las colecciones EMEA, APAC y AMER.

La matriz includeNamespaces en este ejemplo define un filtro en dos de las bases de datos, sales y marketing.

La base de datos sales también filtra las colecciones EMEA y APAC.

"includeNamespaces" : [
{
"database" : "sales",
"collections": [ "EMEA", "APAC" ]
},
{
"database" : "marketing"
}
]

Después de llamar a la API /start con este filtro implementado, mongosync:

  • Sincroniza todas las colecciones en la base de datos marketing

  • Filtra la base de datos engineering

  • Sincroniza las colecciones EMEA y APAC de la base de datos sales

  • Filtra la colección AMER

El siguiente ejemplo inicia un trabajo de sincronización entre el clúster de origen cluster0 y el clúster de destino cluster1.

cluster0 contiene las bases de datos students, staff y prospects.

  • La base de datos students contiene las colecciones undergrad, graduate y adjuncts.

  • La base de datos staff contiene las colecciones employees y contractors.

La matriz includeNamespaces en este ejemplo define un filtro en dos de las bases de datos:

{
"source": "cluster0",
"destination": "cluster1",
"includeNamespaces":
[
{ "database" : "students", "collections": ["undergrad", "graduate", "adjuncts"] },
{ "database" : "staff" }
]
}

Con este filtro activado, mongosync se sincroniza:

  • Toda la base de datos staff

  • Las colecciones undergrad, graduate y adjuncts en la base de datos students

mongosync no sincroniza ninguna información de la base de datos prospects.

mongosync Sincroniza toda la base de datos staff. Si agrega nuevas colecciones a la base de datos staff, mongosync también las sincroniza.

mongosync no sincroniza las nuevas colecciones que se agregan a la base de datos students a menos que la colección sea parte del filtro.

Por ejemplo, mongosync no sincroniza la nueva colección si se añade la colección postdocs a la base de datos students. Si se añade la colección adjuncts, mongosync la sincroniza, ya que adjuncts forma parte del filtro.

Puede cambiar el nombre de cualquier colección en la base de datos staff.

// This code works
use admin
db.runCommand( { renameCollection: "staff.employees", to: "staff.salaried" } )

Solo puedes renombrar una colección dentro de la base de datos students si los nombres nuevo y antiguo están ambos en el filtro. Si alguno de los nombres no está en el filtro, monogsync informa de un error y termina la operación.

// This code works
use admin
db.runCommand( { renameCollection: "students.graduate", to: "students.adjuncts" } )

Si se especifica una colección en el filtro, puedes eliminarla, pero no puedes cambiarle el nombre para eliminarla del filtro.

// This code produces an error and mongosync stops syncing
use admin
db.runCommand( { renameCollection: "students.graduate", to: "students.notAFilteredCollection" } )

Cuando toda la base de datos de destino esté incluida en el filtro, puede cambiar el nombre de las colecciones para agregarlas al filtro:

  • La colección de origen se especifica en el filtro

    use admin
    db.runCommand( { renameCollection: "students.adjuncts", to: "staff.adjuncts" } )
  • La colección de origen no está especificada en el filtro

    use admin
    db.runCommand( { renameCollection: "prospects.current", to: "staff.newHires" } )

También puedes cambiar el nombre de las colecciones en la base de datos de origen cuando toda la base de datos de destino está en el filtro:

use admin
db.runCommand( { renameCollection: "staff.employees", to: "staff.onPayroll" } )

Importante

Si prevé cambiar el nombre de las colecciones, considere agregar la base de datos completa al filtro en lugar de especificar colecciones individuales.

Volver

Estados de mongosync

En esta página