Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
particionado

mergeChunks (comando de base de datos)

mergeChunks

Para una colección particionada, mergeChunks combina fragmentos contiguos fragmento rangos en una partición en un solo fragmento. Emitir el comando mergeChunks en la base de datos admin desde una instancia de mongos.

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

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

  • 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(
{
mergeChunks: <namespace>,
bounds : [
{ <shardKeyField>: <minFieldValue> },
{ <shardKeyField>: <maxFieldValue> }
]
}
)

Para claves de partición compuestas, debes incluir la clave de partición completa en la especificación de bounds. Por ejemplo, si la clave de partición es { x: 1, y: 1 }, mergeChunks tiene la siguiente forma:

db.adminCommand(
{
mergeChunks: <namespace>,
bounds: [
{ x: <minValue>, y: <minValue> },
{ x: <maxValue>, y: <maxValue> }
]
}
)

El comando toma los siguientes campos:

Campo
Tipo
Descripción

mergeChunks

namespace

El namespace completamente calificado de la colección donde existen ambos fragmentos. Los namespaces toman la forma de <database>.<collection>.

bounds

arreglo

Un arreglo que contiene los valores mínimo y máximo de clave del nuevo fragmento.

En implementaciones que se ejecutan con authorization, el rol integrado clusterManager proporciona los privilegios necesarios.

Nota

Utiliza el mergeChunks sólo en circunstancias especiales. Por ejemplo, al limpiar el clúster particionado después de haber eliminado muchos documentos.

Para fusionar exitosamente los fragmentos, lo siguiente debe ser cierto:

  • En el campo bounds, <minkey> y <maxkey> deben corresponder a los límites inferior y superior de los fragmentos a fusionar.

  • Los fragmentos deben residir en la misma partición.

  • Los fragmentos deben ser contiguos.

mergeChunks retorna un error si estas condiciones no se cumplen.

En caso de éxito, mergeChunks devuelve este documento:

{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1510767081, 1),
"signature" : {
"hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="),
"keyId" : Long("6488693018630029321")
}
},
"operationTime" : Timestamp(1510767081, 1)
}

mergeChunks devuelve el siguiente mensaje de error si otra operación de metadatos está en curso en la colección chunks:

errmsg: "The collection's metadata lock is already taken."

Si otro proceso, como el proceso de balanceador, modifica los metadatos mientras se ejecuta mergeChunks, puede que vea este error. Puede reintentar la mergeChunks operación sin efectos secundarios.

Si los fragmentos de entrada no están en la misma partición, mergeChunks devuelve un error similar al siguiente:

{
"ok" : 0,
"errmsg" : "could not merge chunks, collection test.users does not contain a chunk ending at { username: \"user63169\" }",
"$clusterTime" : {
"clusterTime" : Timestamp(1510767081, 1),
"signature" : {
"hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="),
"keyId" : Long("6488693018630029321")
}
},
"operationTime" : Timestamp(1510767081, 1)
}

Si los fragmentos de entrada no son contiguos, mergeChunks devuelve un error similar a lo siguiente:

{
"ok" : 0,
"errmsg" : "could not merge chunks, collection test.users has more than 2 chunks between [{ username: \"user29937\" }, { username: \"user49877\" })"
"$clusterTime" : {
"clusterTime" : Timestamp(1510767081, 1),
"signature" : {
"hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="),
"keyId" : Long("6488693018630029321")
}
},
"operationTime" : Timestamp(1510767081, 1)
}

Volver

moveRange

En esta página