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 comunes de implementación en los que 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.

  • Dirige los datos a particiones según el hardware y el rendimiento del hardware de la partición.

La siguiente imagen ilustra un clúster fragmentado con tres particiones y dos zonas. La 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, considera una clave de partición en {"x": 1}. El clúster tiene los siguientes rangos de zonas:

{ "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 valor clave de partición 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": NumberLong("4470791281878691347") } --> { "x": NumberLong("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 updateZoneKeyRange comando de base de datos y sus asistentes sh.updateZoneKeyRange() y sh.addTagRange() en una colección no particionada o en una colección que no existe.

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

Al definir las zonas y los rangos de zonas antes de fragmentar una colección vacía o inexistente, la operación de "shard colletion" crea fragmentos para la zona definida rangos así como cualquier fragmento adicional para cubrir todo el rango de los valores de la clave de partición y realiza una distribución inicial de fragmentos basada en los rangos de zonas. Esta creación y distribución inicial de fragmentos permite una configuración más rápida del particionado zonificado. Después de 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 balanceo, si el balanceador detecta que algún fragmento infringe las zonas configuradas para una partición determinada, el balanceador migra esos fragmentos a una partición donde no exista conflicto.

Después de asociar una zona con uno o más particiones y configurar la zona con un rango de clave de partición para una colección particionada, el clúster puede tardar algún tiempo en migrar los datos afectados para la colección particionada. Esto depende de la división de fragmentos y la distribución actual de datos en el clúster. Cuando el equilibrio está completo, las operaciones de lectura y escritura para los documentos en una zona determinada se enrutan solo a la partición o particiones 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 puedes crear rangos utilizando campos que no estén incluidos en la clave de partición. Por ejemplo, si quiere usar zonas para dividir datos según la ubicación geográfica, la clave de partición necesitaría que el primer campo contenga 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.

Volver

Particionamiento clasificado por rango

En esta página