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
/ /
Conciencia del centro de datos

Zones

En los clústeres fragmentados, puedes crear zonas de datos particionados según la clave de partición. Puedes asociar cada zona con una o más particiones en el clúster. Una partición puede asociarse con cualquier número de zonas. En un clúster equilibrado, MongoDB migra fragmentos cubiertos por una zona solo a aquellos particiones asociados con la zona.

Algunos patrones de implementación comunes donde se pueden aplicar zonas son los siguientes:

  • Aísla un subconjunto específico de datos en un conjunto específico de particiones.

  • Asegure que los datos más relevantes residen en las particiones que están geográficamente más cercanas a los servidores de aplicaciones.

  • Enrutar datos a fragmentos en función del hardware y el rendimiento del hardware del fragmento.

La siguiente imagen ilustra un clúster fragmentado con tres fragmentos y dos zonas. A zona representa un rango con un límite inferior de 1 y un límite superior de 10. La zona B representa un rango con un límite inferior de 10 y un límite superior de 20. Las particiones Alpha y Beta tienen la zona A. La partición Beta también tiene la zona B. La partición Charlie no tiene zonas asociadas. El clúster se encuentra en un estado estable y no hay fragmentos que violen ninguna de las zonas.

Diagrama de distribución de datos basado en zonas en un clúster particionado
haga clic para ampliar

Cada zona cubre uno o más rangos de valores de la clave de partición para una colección. Cada rango cubierto por una zona siempre incluye su límite inferior y excluye su límite superior. Las zonas no pueden compartir rangos ni tener rangos superpuestos.

Por ejemplo, considere una clave de fragmento en {"x": 1}. El clúster tiene los siguientes rangos de zona:

{ "x" : 5 } --> { "x" : 10 } // Zone A
{ "x" : 10} --> { "x" : 20 } // Zone B
  • Un documento con una clave de partición con valor 7 se enruta a la zona A.

  • Un documento con un valor de clave de fragmento de 10 se enruta a la zona B.

Para las colecciones cuya clave de partición incluye un campo hasheado, los rangos de zona y la distribución de datos en ese campo dependen de los valores hasheados. La zona contiene documentos cuyo valor de clave de partición con hash cae dentro del rango definido. Un rango de zona en un campo hasheado no tiene el mismo comportamiento predecible de direccionamiento de documentos que un rango de zona en un campo no hasheado.

Por ejemplo, considera una clave de partición en {"x" : "hashed"}. El siguiente rango representa el rango encriptada entre 5 y 10:

{ "x": Long("4470791281878691347") } --> { "x": Long("7766103514953448109") } // Zone A
  • Un documento con un valor de la clave de partición de 1 se dirige a la Zona A ya que el valor encriptada de 1 cae dentro del rango definido.

  • Un documento con un valor de la clave de partición de 15 se dirige a la Zona A ya que el valor encriptada de 15 cae dentro del rango definido.

  • Un documento con un valor de la clave de partición 8 no se enruta a la zona A, ya que el valor encriptada de 8 no entra dentro del rango definido.

mongosh proporciona el convertShardKeyToHashed() para calcular el valor post-hash del parámetro especificado.

Un uso válido de los rangos de zona en un campo hasheado es restringir los datos de una colección a la partición o particiones en una única zona. Crea un rango de zona que cubra todo el rango de posibles valores de clave de fragmentación con hash utilizando minKey como límite inferior y maxkey como límite superior.

Para definir rangos, MongoDB proporciona el comando updateZoneKeyRange y los métodos auxiliares asociados sh.updateZoneKeyRange() y sh.addShardTag().

Puede ejecutar el comando de base de datosupdateZoneKeyRangey sus ayudantessh.updateZoneKeyRange()ysh.addTagRange()en una colección no fragmentada o en una colección inexistente.

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

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.

MongoDB admite particionar colecciones en índices compuestos encriptados. Al fragmentar una colección vacía o inexistente utilizando una clave de fragmento hash compuesta, se aplican requisitos adicionales para que MongoDB pueda realizar la creación y distribución inicial de fragmentos.

Consulta Predefinir zonas y rangos de zonas para una colección vacía o inexistente para un ejemplo.

Tip

El balanceador intenta distribuir uniformemente los fragmentos de una colección particionada en todas las particiones del clúster.

Para cada fragmento marcado para migración, el balanceador revisa cada posible partición de destino en busca de cualquier zona configurada. Si el rango del fragmento cae dentro de una zona, el balanceador migra el fragmento dentro de una partición en esa zona. Los fragmentos que no caen en una zona pueden existir en cualquier partición del clúster y se migran normalmente.

Durante las rondas de equilibrio, si el equilibrador detecta que algún fragmento viola las zonas configuradas para un fragmento determinado, el equilibrador migra esos fragmentos a un fragmento donde no existe ningún conflicto.

Tras asociar una zona con uno o más fragmentos y configurarla con un rango de claves de fragmento para una colección fragmentada, el clúster puede tardar un tiempo en migrar los datos afectados de la colección. Esto depende de la división de fragmentos y de la distribución actual de los datos en el clúster. Una vez completado el balanceo, las lecturas y escrituras de los documentos de una zona determinada se enrutan únicamente al fragmento o fragmentos dentro de esa zona.

Una vez configurado, el equilibrador respeta las zonas durante futuras rondas de equilibrio.

Debes usar los campos contenidos en la clave de partición al definir un nuevo rango para que una zona lo cubra. Si utilizas una clave de partición compuesta, el rango debe incluir el prefijo de la clave de partición.

Por ejemplo, dada la clave de partición { a : 1, b : 1, c : 1 }, crear o actualizar un rango para cubrir valores de b requiere incluir a como prefijo. Crear o actualizar un rango para cubrir valores de c requiere incluir a y b como prefijo.

No se pueden crear rangos con campos que no estén incluidos en la clave de partición. Por ejemplo, si se quisieran usar zonas para particionar datos según la ubicación geográfica, la clave de partición necesitaría que el primer campo contuviera datos geográficos.

Al elegir una clave de partición para una colección, considera qué campos podrías querer utilizar para configurar las zonas. Consulte Elegir una clave de partición para consideraciones al elegir una clave de partición.

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

La partición por zonas no admite colecciones de series de tiempo. El balanceador siempre distribuye los datos en colecciones de series de tiempo fragmentadas de manera uniforme en todos los fragmentos del clúster.

Volver

Particionamiento clasificado por rango

En esta página