Definición
updateZoneKeyRangeEl comando administrativo puede crear o eliminar la asociación entre un rango de valores de clave de fragmento y
updateZoneKeyRangeuna 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
mongoshEn, este comando también se puede ejecutar a través del métodosh.updateZoneKeyRange()auxiliar.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 en la base de datos de
addShardToZoneadministración.
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 espacio de nombres de la colección que se asociará con 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 clave de fragmento. Especifique cada campo de la clave de fragmento con el formato 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 fragmento con el formato Para utilizar la fragmentación hash, el valor del campo |
| string | El nombre de la zona que se asociará con el rango delimitado por Si el valor no coincide con una zona existente, el comando falla. Especifique |
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 auxiliares:
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 se puede crear un rango de valores de clave de fragmento cuyos límites inferior y superior se superpongan con un rango existente para la colección fragmentada. Por ejemplo, dado un rango existente de 1 a 10, no se puede crear un nuevo rango de 5 a 20, ya que este se superpondría con el rango existente.
Una zona puede tener varios rangos de datos asociados a ella, pero un rango puede estar asociado, como máximo, a una sola zona.
Al eliminar la asociación entre un rango y una zona, no eliminaupdateZoneKeyRange removeShardFromZone la zona. Utilice el comando para eliminar la asociación entre una zona y un fragmento.
Consulte la página del manual de zonas para obtener más información sobre las zonas en clústeres fragmentados.
Distribución inicial de fragmentos para colecciones vacías o inexistentes
Si está considerando realizar la fragmentación de zonas en una colección vacía o inexistente, use updateZoneKeyRange para crear las zonas y los rangos de zonas antes de fragmentar la colección (desde). A 4.0.2partir 4 0de3 la versión, y, la creación de 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 fragmentar la colección. Este proceso optimizado permite una configuración más rápida de la fragmentación por zonas con menos sobrecarga del balanceador que la creación de zonas después de la fragmentación.El balanceador realiza toda la gestión de fragmentos después de la creación y distribución inicial optimizada de fragmentos.
Para obtener un ejemplo de cómo definir zonas y rangos de zonas para la distribución inicial de fragmentos, consulte 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 admite la fragmentación de colecciones en índices con hash compuesto. Al fragmentar la colección vacía o inexistente en una clave de fragmento con hash compuesto, MongoDB optimiza la creación y distribución inicial de fragmentos.
Si el campo hash es el prefijo de la clave de fragmento (es decir, el primer campo en la clave de fragmento), 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 ú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 que preceden al campo hash).
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 cómo definir zonas y rangos de zonas para la distribución inicial de fragmentos en una clave de fragmento con hash compuesto, consulte Predefinir zonas y rangos de zonas para una colección vacía o inexistente.
Balanceador
Después de ejecutar con updateZoneKeyRange éxito, es posible que haya migraciones de fragmentos durante la siguiente ronda de equilibrador.
Tras añadir un rango a una zona, el balanceador debe ejecutarse primero para migrar los fragmentos cuyos rangos estén cubiertos por la zona a fragmentos dentro de ella. Hasta que se complete el balanceo, algunos fragmentos podrían residir en el fragmento incorrecto, dadas las zonas configuradas para el clúster fragmentado.
Al eliminar la asociación entre un rango y una zona, se eliminan las restricciones que mantienen los fragmentos cubiertos por el rango en los fragmentos dentro de esa zona. Durante la siguiente ronda de balanceo, 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 abandonadas
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 incluyen en
enableShardingel recurso del clúster.
Los roles clusterAdmin integrados o clusterManager tienen los permisos adecuados para updateZoneKeyRange emitir. Consulte la página de documentación sobre el control de acceso basado en roles para obtener más información.
Ejemplo
Dada una colección fragmentada exampledb.collection con una clave de fragmento de { 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 previamente pasando null al campo zone.
admin = db.getSiblingDB("admin") admin.runCommand( { updateZoneKeyRange : "exampledb.collection", min : { a : 1 }, max : { a : 10 }, zone : null } )
Los valores min y max deben coincidir exactamente con los límites del rango objetivo. La siguiente operación intenta eliminar 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 de fragmento compuesto
Dada una colección fragmentada exampledb.collection con una clave de fragmento de { a
: 1, b : 1 }, la siguiente operación crea un rango que cubre 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" } )