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
/ /

updateZoneKeyRange (comando de base de datos)

updateZoneKeyRange

La updateZoneKeyRange El comando administrativo puede crear o remover la asociación entre un rango de valores de clave de partición y un zona.

Puede ejecutar el comando de base de datos updateZoneKeyRange y sus asistentes sh.updateZoneKeyRange() y sh.addTagRange() en una colección no particionada o en una colección inexistente.

Tip

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

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.

Para ejecutar updateZoneKeyRange, utiliza el método db.runCommand( { <command> } ).

Debe ejecutar addShardToZone en la base de datos admin.

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(
{
updateZoneKeyRange: <string>,
min: <document>,
max: <document>,
zone: <string> | <null>
}
)

El comando toma los siguientes campos:

Parameter
Tipo
Descripción

updateZoneKeyRange

string

El namespace de la colección con la que deseas asociar el rango.

La colección debe estar fragmentada para que el comando tenga éxito.

min

Documento

El límite inferior inclusivo del rango de valores de la clave de partición.

Especifique cada campo de la clave de partición en la forma de <fieldname> : <value>. El valor debe ser del mismo tipo BSON o tipos que la clave de partición.

Para utilizar la fragmentación hash, el valor del campo min debe ser del NumberLong tipo.

max

Documento

El límite superior exclusivo del rango de valores de clave de fragmento.

Especifique cada campo de la clave de partición en la forma de <fieldname> : <value>. El valor debe ser del mismo tipo BSON o tipos que la clave de partición.

Para utilizar la fragmentación hash, el valor del campo max debe ser del NumberLong tipo.

zone

string

El nombre de la zona que se va a asociar con el rango limitado por min y max.

Si el valor no coincide con una zona existente, el comando falla.

Especifica null para remover la asociación entre el rango con límites inferiores de min y límite superior de max y la colección updateZoneKeyRange. Los valores de min y max deben coincidir exactamente en el rango objetivo.

Si ningún rango de zona coincide con los límites mínimo y máximo pasados a updateZoneKeyRange, no se elimina nada.

Solo emite updateZoneKeyRange cuando estés conectado a una instancia mongos.

mongosh proporciona dos métodos asistentes:

No puedes crear un rango de valores de la clave de partición cuyos límites inferior y superior se superpongan con un rango existente para la colección particionada. Por ejemplo, dado un **rango** existente de 1 a 10, no puede crear un nuevo **rango** de 5 a 20, ya que el nuevo **rango** se superpondría con el **rango** existente.

Una zona puede tener múltiples rangos de datos asociados a ella, pero un rango como máximo puede estar asociado con una sola zona.

Al remover la asociación entre un rango y una zona, updateZoneKeyRange no remueve la zona. Usa el comando removeShardFromZone para remover la asociación entre una zona y una partición.

Consulte la página del manual de zonas para obtener más información sobre las zonas en clústeres particionados.

Si estás considerando realizar particionado de zonas en una colección vacía o inexistente, utiliza updateZoneKeyRange para crear las zonas y rangos de zonas antes de dividir la colección (desde la versión 4.0.2). A partir de la versión 4.0.3, crear zonas y rangos de zonas en colecciones vacías o inexistentes permite a MongoDB optimizar el proceso inicial de creación y distribución de fragmentos al particionar la colección. Este proceso optimizado permite una configuración más rápida de particionamiento por zonas con menos sobrecarga del equilibrador que la creación de zonas después del particionamiento. El balanceador realiza toda la gestión de fragmentos después de la optimización inicial de creación y distribución de fragmentos.

Para un ejemplo de cómo definir zonas y rangos de zonas para la distribución inicial de fragmentos, consulta Predefinir Zonas y Rangos de Zonas para una Colección Vacía o Inexistente.

MongoDB ofrece soporte al particionado de colecciones en índices compuestos encriptados. MongoDB puede realizar una creación y distribución optimizadas de particiones iniciales al fragmentar la colección vacía o inexistente usando una clave de partición compuesta con hash.

Si el campo encriptada es el prefijo de la clave de partición (es decir, el primer campo en la clave de partición), todo lo siguiente debe ser cierto para que MongoDB realice la creación inicial y la distribución de fragmentos:

  • La colección tiene un rango de zona único con MinKey para todos los campos de límite inferior y MaxKey para todos los campos de límite superior.

  • sh.shardCollection() especifica la opción presplitHashedZones: true.

Si el campo con hash no es el prefijo de la clave de fragmento (es decir, la clave de fragmento tiene uno o más campos principales no con hash), todo lo siguiente debe ser verdadero para que MongoDB realice la creación y distribución del fragmento inicial:

  • La colección tiene un rango de zona para cada combinación de valores de campo de prefijo distintos (es decir, todos los campos anteriores al campo encriptado).

  • Para el límite inferior de cada rango de zona, especifique MinKey para el campo con hash y todos los campos subsiguientes.

  • Para cada rango de zona, al menos un campo de prefijo de límite superior debe ser diferente de su contraparte de límite inferior.

  • sh.shardCollection() especifica la opción presplitHashedZones: true.

Para obtener un ejemplo más completo de la definición de zonas y rangos de zonas para la distribución inicial de fragmentos con unas claves de partición compuestas con hash, consulte Predefinición de zonas y rangos de zonas para una colección vacía o inexistente.

Después de ejecutar con éxito updateZoneKeyRange, podría haber migraciones de fragmentos durante la próxima ronda del balanceador.

Después de agregar un rango a una zona, el balanceador debe ejecutarse primero para migrar cualquier fragmento cuyos rangos estén cubiertos por la zona a fragmentos dentro de esa zona. Hasta que se complete el balanceo, algunos fragmentos pueden residir en la partición incorrecta dado las zonas configuradas para el clúster.

Eliminar la asociación entre un rango y una zona elimina las restricciones que mantienen los fragmentos cubiertos por el rango en las particiones dentro de esa zona. Durante la próxima ronda del equilibrador, este puede migrar fragmentos que anteriormente estaban cubiertos por la zona.

Consulte la documentación del equilibrador de clúster fragmentado para obtener más información sobre cómo funcionan las migraciones en un clúster fragmentado.

Los rangos de zona siempre incluyen el límite inferior y excluyen el límite superior.

Al descartar una colección, se borran sus rangos de zona/etiqueta asociados.

En versiones anteriores, MongoDB no remueve las asociaciones de etiquetas de una colección descartada y, si luego creas una nueva colección con el mismo nombre, las asociaciones de etiquetas antiguas se aplicarán a la nueva colección.

Para los clústeres fragmentados que se ejecutan con autenticación, debe autenticarse como:

  • un usuario cuyos privilegios incluyen las acciones especificadas en varias colecciones en la base de datos config:

    o, alternativamente,

  • un usuario cuyos privilegios incluyan enableSharding sobre el recurso clúster.

Las clusterAdmin o clusterManager roles integradas tienen los permisos adecuados para emitir updateZoneKeyRange. Consulta la página de documentación sobre Control de Acceso Basado en Roles para obtener más información.

Dada una colección particionada exampledb.collection con una clave de partición { a : 1 }, la siguiente operación crea un rango con un límite inferior de 1 y un límite superior de 10 en la zona alpha:

admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 1 },
max : { a : 10 },
zone : "alpha"
}
)

La siguiente operación elimina el rango creado anteriormente al pasar null al campo zone.

admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 1 },
max : { a : 10 },
zone : null
}
)

El min y el max deben coincidir exactamente con los límites del rango objetivo. La siguiente operación intenta remover el rango creado previamente, pero especifica { a : 0 } como el límite min:

admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 0 },
max : { a : 10 },
zone : null
}
)

Si bien el rango de { a : 0 } y { a : 10 } abarca el rango existente, no es una coincidencia exacta y, por lo tanto, no elimina updateZoneKeyRange nada.

Dada una colección particionada exampledb.collection con una clave de partición de { a : 1, b : 1 }, la siguiente operación crea un rango que abarca el límite inferior de { a: 1, b : 1 } y un límite superior de { a : 10, b : 10}, y lo asocia con la zona alpha:

admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 1, b : 1 },
max : { a : 10, b : 10 },
zone : "alpha"
}
)

Volver

unshardCollection

En esta página