Docs Menu
Docs Home
/

Zones

En clústeres fragmentados, puedes crear Zonas de datos fragmentados según la clave de fragmento. Puede asociar cada zona con uno o más fragmentos del clúster. Un fragmento puede asociarse con cualquier número de zonas. En un clúster equilibrado, MongoDB migra los fragmentos cubiertos por una zona únicamente a los fragmentos asociados a ella.

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

  • Aislar un subconjunto específico de datos en un conjunto específico de fragmentos.

  • Asegúrese de que los datos más relevantes residan en fragmentos que estén geográficamente más cerca de los servidores de aplicaciones.

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

The following image illustrates a sharded cluster with three shards and two zones. The A zone represents a range with a lower boundary of 1 and an upper bound of 10. The B zone represents a range with a lower boundary of 10 and an upper boundary of 20. Shards Alpha and Beta have the A zone. Shard Beta also has the B zone. Shard Charlie has no zones associated with it. The cluster is in a steady state and no chunks violate any of the zones.

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

Cada zona abarca uno o más rangos de valores de clave de fragmento para una colección. Cada rango que abarca 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 un valor de clave de fragmento de 7 se enruta a la zona A.

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

En las colecciones cuya clave de fragmento incluye un campo con hash, los rangos de zona y la distribución de datos en dicho campo se basan en valores con hash. La zona contiene documentos cuyo valor de clave de fragmento con hash se encuentra dentro del rango definido. Un rango de zona en un campo con hash no tiene el mismo comportamiento predecible de enrutamiento de documentos que un rango de zona en un campo sin hash.

Por ejemplo, considere una clave de fragmento {"x" : "hashed"} en. El siguiente rango representa el rango hash entre 5 10y:

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

  • Un documento con un valor de clave de fragmento de 15 se enruta a la Zona A ya que el valor hash de 15 cae dentro del rango definido.

  • Un documento con un valor de clave de fragmento de 8 no se enruta a la Zona A porque el valor hash de 8 no cae dentro del rango definido.

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

Un uso válido de los rangos de zona en un campo hash es restringir los datos de una colección al fragmento o fragmentos de una sola zona. Cree un rango de zona que cubra todo el rango de posibles valores de clave de fragmento hash utilizando como MinKey MaxKey límite inferior y 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 la fragmentación de colecciones en índices con hash compuesto. Al fragmentar una colección vacía o inexistente mediante una clave de fragmento con hash compuesto, se aplican requisitos adicionales para que MongoDB pueda crear y distribuir fragmentos iniciales.

Consulte Zonas predefinidas y rangos de zonas para una colección vacía o inexistente para ver un ejemplo.

Tip

El equilibrador intenta distribuir uniformemente los fragmentos de una colección fragmentada entre todos los fragmentos del clúster.

Para cada fragmento marcado para migración, el balanceador comprueba cada posible fragmento de destino en busca de zonas configuradas. Si el rango del fragmento se encuentra dentro de una zona, el balanceador migra el fragmento a un fragmento dentro de esa zona. Los fragmentos que no se encuentran dentro de una zona pueden existir en cualquier fragmento del clúster y se migran con normalidad.

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 balanceador respeta las zonas durante futuras rondas de balanceo.

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 una clave de fragmento { a : 1, b : 1, c : 1 }, crear o actualizar un rango que cubra valores de b requiere incluir a como prefijo. Crear o actualizar un rango que cubra valores de c requiere incluir a y b como prefijos.

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 fragmento para una colección, considere qué campos podría usar para configurar las zonas. Consulte "Elegir una clave de fragmento" para conocer las consideraciones al elegir una clave de fragmento.

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

Hardware escalonado para variar SLA o SLO

En esta página