Docs Menu
Docs Home
/ /

updateZoneKeyRange (comando de base de datos)

updateZoneKeyRange

El updateZoneKeyRange El comando administrativo puede crear o eliminar la asociación entre un rango de valores de clave de fragmento 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

mongoshEn, este comando también se puede ejecutar a través del método sh.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étodo db.runCommand( { <command> } ).

Debe ejecutar en la base de datos de addShardToZone administración.

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

min

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 <fieldname> : <value>. El valor debe ser del mismo tipo o tipos BSON que la clave de fragmento.

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 fragmento con el formato <fieldname> : <value>. El valor debe ser del mismo tipo o tipos BSON que la clave de fragmento.

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 asociará con el rango delimitado por min y max.

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

Especifique null para eliminar la asociación entre el rango con límites inferior min y superior max y la colección updateZoneKeyRange. Los valores de min y max deben coincidir exactamente con 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 auxiliares:

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.

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.

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 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 que preceden al campo hash).

  • 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 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.

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.

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 incluyen en enableSharding el 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.

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.

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"
}
)

Volver

unshardCollection

En esta página