En los clústeres fragmentados, puedes crear zonas que representen un grupo de particiones y asociar uno o más rangos de Valores declave de fragmento a esa zona. MongoDB enruta las lecturas y escrituras dentro de un rango de zona solo a los fragmentos dentro de esa zona.
Tip
Al definir las zonas y sus rangos antes de fragmentar una colección vacía o inexistente, la operación de recopilación de fragmentos crea fragmentos para los rangos de zona definidos, así como fragmentos adicionales para cubrir todo el rango de valores de clave de fragmento, y realiza una distribución inicial de fragmentos basada en los rangos de zona. Esta creación y distribución inicial de fragmentos permite una configuración más rápida de la fragmentación por zonas. Tras la distribución inicial, el balanceador gestiona la distribución de fragmentos en adelante.
Consulte Zonas predefinidas y rangos de zonas para una colección vacía o inexistente para ver un ejemplo.
Añadir particiones a una zona
Asocie una zona con un fragmento en particular usando el
sh.addShardToZone() método cuando se conecta a una instancia de mongos. Una sola partición puede tener varias zonas, y varias particiones también pueden tener la misma zona.
Ejemplo
El siguiente ejemplo agrega la zona NYC a dos particiones, y las zonas SFO y NRT a una tercera partición:
sh.addShardToZone("shard0000", "NYC") sh.addShardToZone("shard0001", "NYC") sh.addShardToZone("shard0002", "SFO") sh.addShardToZone("shard0002", "NRT")
Puede eliminar una zona de un fragmento en particular usando el sh.removeShardFromZone() método cuando esté conectado a una instancia, como en el siguiente ejemplo, que elimina mongos la NRT zona de un fragmento:
sh.removeShardFromZone("shard0002", "NRT")
Crear un rango de zonas
Para definir el rango de claves de fragmentos de la zona, utilice el método sh.updateZoneKeyRange() cuando esté conectado a una instancia mongos. Cualquier rango de clave de partición solo puede tener una zona asignada. No puedes superponer rangos definidos.
Ejemplo
Dada una colección llamada users en la base de datos records, fragmentada por el campo zipcode. Se asignan las siguientes operaciones:
dos rangos de códigos postales en Manhattan y Brooklyn la zona
NYCun rango de códigos postales en San Francisco, la zona
SFO
sh.updateZoneKeyRange("records.users", { zipcode: "10001" }, { zipcode: "10281" }, "NYC") sh.updateZoneKeyRange("records.users", { zipcode: "11201" }, { zipcode: "11240" }, "NYC") sh.updateZoneKeyRange("records.users", { zipcode: "94102" }, { zipcode: "94135" }, "SFO")
Nota
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.
Eliminar un rango de zona
Utilice el método asistente de shell sh.removeRangeFromZone() para remover un rango de una zona.
Ejemplo
El siguiente ejemplo remueve la asignación de zona NYC para el rango de códigos postales dentro de Manhattan:
sh.removeRangeFromZone("records.user", {zipcode: "10001"}, {zipcode: "10281"})
Nota
Al descartar una colección, se borran sus rangos de zona/etiqueta asociados.
Ver zonas existentes
Utilicesh.status()para listar las zonas asociadas a cada fragmento del clúster. También puede ver las zonas de un fragmento consultando la colecciónshardsen la base de datos config.
El siguiente ejemplo utiliza el método find() para devolver todas las particiones con la NYC zona.
use config db.shards.find({ tags: "NYC" })
Puedes encontrar rangos de zona para todos los espacios de nombres en la colección tags de la base de datos config. La salida de sh.status() también muestra todos los rangos de zona.
El siguiente ejemplo utiliza el método find() para devolver cualquier rango asociado a la zona NYC.
use config db.tags.find({ tag: "NYC" })