Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

reshardCollection (comando de base de datos)

reshardCollection

La reshardCollection el comando cambia la clave de partición de una colección y cambia la distribución de los datos.

Tip

En mongosh, este comando también se puede ejecutar a través del sh.reshardCollection() método asistente.

Los métodos asistente son convenientes para usuarios de mongosh, pero es posible que no proporcionen el mismo nivel de información que los comandos de base de datos. En los casos en que no se necesite la conveniencia o se requieran campos de retorno adicionales, utiliza el comando de base de datos.

Este comando está disponible en implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

Nota

Este comando es compatible con todos los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulte Comandos no compatibles.

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

El comando tiene la siguiente sintaxis:

db.adminCommand(
{
reshardCollection: "<database>.<collection>",
key: { "<shardkey>" },
unique: <boolean>,
numInitialChunks: <integer>,
numSamplesPerChunk: <integer>, // New in MongoDB 8.0.20
collation: { locale: "simple" },
zones: [
{
min: { "<document with same shape as shardkey>" },
max: { "<document with same shape as shardkey>" },
zone: <string> | null
},
],
forceRedistribution: <bool>
}
)

El comando toma los siguientes campos:

Campo
Tipo
Descripción

reshardCollection

string

El namespace de la colección que se reasignará. Toma la forma <database>.<collection>.

key

Documento

El documento que especifica el nuevo campo o los nuevos campos a utilizar como clave de partición.

{ <field1>: <1|"hashed">, ... }

Establecer los valores de campo en:

unique

booleano

opcional. Especifica si existe una restricción de unicidad en la clave de partición. Sólo se admite false. Por defecto en false.

numInitialChunks

entero

Opcional. Especifica el número inicial de fragmentos a crear en todas las particiones del clúster al reshardeando una colección. El valor por defecto es 90. Luego MongoDB crea y equilibra los fragmentos a lo largo del clúster. El numInitialChunks debe resultar en menos de 8192 por partición.

Si ves el error “La clave de partición proporcionada no tiene suficiente cardinalidad para generar la cantidad requerida de fragmentos”, vuelva a hacer el sharding en la colección con un valor de numInitialChunks menor.

Las operaciones de resharding ignoran la configuración numInitialChunks cuando la clave de partición contiene un prefijo encriptada. En su lugar, MongoDB divide determinísticamente el espacio de claves encriptada entre los destinatarios, utilizando el mismo enfoque que la creación inicial de fragmentos para colecciones iniciales de valores hash vacías.

numSamplesPerChunk

entero

opcional. Especifica el número de documentos a muestrear en nuevos fragmentos. Por defecto, MongoDB toma muestras de 10 documentos en cada fragmento.

Nuevo en la versión 8.0.20.

collation

Documento

opcional. Si la colección especificada en reshardCollection tiene una <a class=\" \"href=\" \">intercalación predeterminada,debes incluir un documento de intercalación { locale : "simple" } con, o el reshardCollection comando fallará.

zones

arreglo

opcional. Especifica las zonas para la colección.

Para mantener o agregar zonas, especifica las zonas para tu colección en un array:

[
{
min: <document with same shape as shardkey>,
max: <document with same shape as shardkey>,
zone: <string> | null
},
...
]

forceRedistribution

booleano

opcional. Si se establece en true, la operación se ejecuta incluso si la nueva clave de partición es igual a la antigua clave de partición. Usar con la opción zones para mover datos a zonas específicas.

Nuevo en la versión 8.0.

demoMode

booleano

opcional. Permite completar las operaciones de reconfiguración rápida de particiones. Cuando se establece en verdadero, demoMode omite la duración mínima de la operación de nueva partición de 5 minutos. Puedes usar este parámetro para pruebas o demostraciones de la reconfiguración rápida de particiones.

Las creaciones de índices que ocurren durante el rehashing podrían fallar silenciosamente.

  • No cree índices durante el proceso de reconfiguración de particiones.

  • No inicie el proceso de redistribución si hay creaciones de índices en curso.

Si la colección que estás redistribuyendo usa MongoDB Search, el índice de búsqueda se vuelve inaccesible cuando la operación de redistribución finaliza. Debes reconstruir manualmente el índice de búsqueda una vez completada la operación de redistribución.

  • Si la colección usa Atlas Search, el índice de búsqueda dejará de estar disponible una vez que se complete la operación. Para restaurar, reconstruye manualmente el índice de búsqueda.

  • Las colecciones que utilizan Queryable Encryption no son compatibles.

En una operación de re-sharding de una colección, una partición puede ser:

  • dador, que actualmente almacena los fragmentos para la colección particionada.

  • destinatario, que almacena nuevos fragmentos para la colección particionada en función de las claves de partición y zonas.

Una partición puede ser donante y receptor al mismo tiempo.

El servidor de configuración primario es siempre el coordinador de replanificación y comienza cada fase de la operación de replanificación.

Durante la fase de inicialización, el coordinador de redistribución determina la nueva distribución de datos para la colección particionada.

Durante la fase de clonación:

  • Cada partición receptora crea una colección particionada temporal y vacía con las mismas opciones de colección que la colección particionada donante. Esta nueva colección es el objetivo donde las particiones receptoras guardan los nuevos datos. Las particiones receptoras no crean ningún índice, excepto el índice _id hasta la fase de índice.

  • Cada partición receptora clona los datos de la colección de la partición donante, incluyendo todos los documentos que la partición receptora posee bajo la nueva clave de partición.

Durante la fase de índice, cada partición destinataria construye los nuevos índices necesarios. Estos incluyen todos los índices existentes en la colección particionada y un índice compatible con el nuevo patrón de clave de partición si dicho índice aún no existe en la colección particionada.

Cambiado en la versión 8.2.

Durante la fase de aplicación y puesta al día:

  • Cada partición receptora comienza a aplicar las entradas de oplog que se escribieron en la partición donante correspondiente después de que la receptora clonó los datos.

  • Cuando la estimación del tiempo restante para completar la operación de redistribución está por debajo de 500 ms, la partición donante bloquea las escrituras en la colección fuente.

Nota

Si lo deseas, puedes forzar manualmente la finalización de la operación de redistribución emitiendo el comando commitReshardCollection. Esto es útil si la estimación actual de tiempo para completar la operación de resharding es una duración aceptable para el bloqueo de escrituras de tu colección. El comando commitReshardCollection bloquea las escrituras antes y fuerza la finalización de la operación de redistribución de instancias. Durante el periodo en el que los guardados están bloqueados, tu aplicación experimenta un aumento en la latencia.

Durante la fase de confirmación:

  • El coordinador de repartición espera que todas las particiones alcancen una consistencia estricta y luego confirma la operación de repartición.

  • El coordinador de reequilibrio instruye por separado a cada primario de particiones donante y receptor para que cambie el nombre de la colección particionada temporal. La colección temporal se convierte en la nueva colección resharded.

  • Cada partición donante descarta la colección particionada anterior.

Nota

Una vez que el proceso de redistribución alcance la fase de confirmación, el proceso no se puede finalizar con abortReshardCollection..

El siguiente ejemplo redivide la colección sales.orders con la nueva clave de partición { order_id: 1 }:

db.adminCommand({
reshardCollection: "sales.orders",
key: { order_id: 1 }
})

Salida:

{
ok: 1,
'$clusterTime': {
clusterTime: Timestamp(1, 1624887954),
signature: {
hash: Binary(Buffer.from("0000000000000000000000000000000000000000", "hex"), 0),
keyId: 0
}
},
operationTime: Timestamp(1, 1624887947)
}

A partir de MongoDB 8.0, puedes reconfigurar una colección en la misma clave, lo que puede utilizarse para redistribuir datos en nuevas particiones.

Después de agregar una partición al clúster, use el comando reshardCollection con la opción forceRedistribution para redistribuir los datos en todo el clúster:

db.adminCommand({
reshardCollection: "accounts.invoices",
key: { store_id: "hashed" },
forceRedistribution: true
})

A partir de MongoDB 8.0, puede usar el comando reshardCollection para trasladar datos a nuevas zonas sin cambiar la clave de partición.

El siguiente comando redistribuye los datos de la colección accounts.sales usando la misma clave de partición, moviendo los datos a las particiones asociadas con las zonas zone04 y zone05:

db.adminCommand({
reshardCollection: "accounts.sales",
key: { region_id: "hashed" },
forceRedistribution: true,
zones: [
{
zone: "zone04",
min: { region_id: MinKey() },
max: { region_id: 10 }
},
{
zone: "zone05",
min: { region_id: 10 },
max: { region_id: MaxKey() }
}
]
})

Volver

removeShardFromZone

En esta página