Definición
updateZoneKeyRangeLa
updateZoneKeyRangeEl 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
updateZoneKeyRangey sus asistentessh.updateZoneKeyRange()ysh.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 asistentesh.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étododb.runCommand( { <command> } ).Debe ejecutar
addShardToZoneen la base de datos admin.
Compatibilidad
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.
Sintaxis
El comando tiene la siguiente sintaxis:
db.adminCommand( { updateZoneKeyRange: <string>, min: <document>, max: <document>, zone: <string> | <null> } )
Campos de comandos
El comando toma los siguientes campos:
Parameter | Tipo | Descripción |
|---|---|---|
| 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. |
| 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 Para utilizar la fragmentación hash, el valor del campo |
| 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 Para utilizar la fragmentación hash, el valor del campo |
| string | El nombre de la zona que se va a asociar con el rango limitado por Si el valor no coincide con una zona existente, el comando falla. Especifica |
Comportamiento
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:
sh.updateZoneKeyRange()para agregar un rango de valores de clave de fragmento a una zona.sh.removeRangeFromZone()para eliminar un rango de valores de clave de fragmento de una zona.
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.
Distribución inicial de fragmentos para colecciones vacías o inexistentes
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.
Distribución inicial de fragmentos con claves de fragmentos con hash compuesto
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
MinKeypara todos los campos de límite inferior yMaxKeypara 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
MinKeypara 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.
Balanceador
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.
Límites
Los rangos de zona siempre incluyen el límite inferior y excluyen el límite superior.
Colecciones descartadas
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.
Seguridad
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
enableShardingsobre 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.
Ejemplo
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.
Clave compuesta de fragmento
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" } )