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

Distribuir colecciones mediante zonas

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.

Puedes usar zona particionado para distribuir colecciones en un clúster y designar qué particiones almacenan datos para cada colección. Puedes distribuir colecciones en función de las propiedades de las particiones, tales como los recursos físicos y la memoria disponible, para garantizar que cada colección se almacene en la partición óptima para esos datos.

Para completar este tutorial, debes:

Tienes una base de datos llamada shardDistributionDB que contiene dos colecciones particionadas:

  • bigData, que contiene una gran cantidad de datos.

  • manyIndexes, que contiene muchos índices grandes.

Deseas limitar cada colección a un subconjunto de particiones para que cada colección pueda utilizar los diferentes recursos físicos de las particiones.

El clúster fragmentado consta de tres fragmentos. Cada fragmento posee recursos físicos únicos:

Nombre de la partición
Recursos físicos

shard0

Gran capacidad de memoria

shard1

Almacenamiento flash rápido

shard2

Alta capacidad de memoria y almacenamiento flash rápido

Para distribuir colecciones en función de recursos físicos, utilice zonas de partición. Una zona de particiones asocia colecciones con un subconjunto específico de particiones, lo que restringe las particiones que almacenan los datos de la colección. En este ejemplo, necesitas dos zonas de partición:

Nombre de la zona
Descripción
Colecciones en esta zona

HI_RAM

Servidores con gran capacidad de memoria.

Las colecciones que requieren más memoria, como las colecciones con índices grandes, deben estar en los fragmentos HI_RAM.

FLASH

Servidores con unidades flash para velocidades de almacenamiento rápidas.

Las colecciones grandes que requieren recuperación rápida de datos deben estar en las FLASH particiones.

En este tutorial, la clave de fragmentación que usará para fragmentar cada colección { _id: "hashed" } es. Configurará las zonas de fragmentación antes de fragmentar las colecciones. Como resultado, los datos de cada colección solo existen en los fragmentos de la zona correspondiente.

Con particionado encriptada, si divide colecciones antes de configurar zonas, MongoDB asigna fragmentos equitativamente entre todas las particiones cuando el particionado está habilitado. Esto significa que los fragmentos pueden asignarse temporalmente a una partición que no esté bien preparada para gestionar los datos de ese fragmento.

El balanceador migra fragmentos a la partición correspondiente, respetando las zonas configuradas. Cuando el balanceo se completa, las particiones sólo contienen fragmentos cuyos rangos coinciden con sus zonas asignadas.

Importante

Rendimiento

Añadir, eliminar o modificar zonas o rangos de zonas puede provocar migraciones de fragmentos. Según el tamaño del conjunto de datos y la cantidad de fragmentos afectados por una zona o rango de zonas, estas migraciones pueden afectar el rendimiento del clúster. Considere ejecutar el balanceador durante períodos programados específicos. Para saber cómo configurar un período de programación, consulte Programar el período de balanceo.

Use el siguiente procedimiento para configurar zonas de particiones y distribuir colecciones en función de los recursos físicos de particiones.

1

Para configurar las particiones en cada zona, utiliza el comando addShardToZone.

Agregue shard0 y shard2 a la zona HI_RAM:

sh.addShardToZone("shard0", "HI_RAM")
sh.addShardToZone("shard2", "HI_RAM")

Agregue shard1 y shard2 a la zona FLASH:

sh.addShardToZone("shard1", "FLASH")
sh.addShardToZone("shard2", "FLASH")
2

Para asociar un rango de claves de fragmento a una zona,sh.updateZoneKeyRange() utilice.

En este escenario, desea asociar todos los documentos de una colección a la zona correspondiente. Para asociar todos los documentos de la colección a una zona, especifica el siguiente rango de zonas:

  • un límite inferior de { "_id" : MinKey }

  • un límite superior de { "_id" : MaxKey }

Para la colección bigData, configura:

  • El namespace para shardDistributionDB.bigData,

  • El límite inferior para MinKey,

  • El límite superior MaxKey de,

  • La zona a FLASH

sh.updateZoneKeyRange(
"shardDistributionDB.bigData",
{ "_id" : MinKey },
{ "_id" : MaxKey },
"FLASH"
)

Para la colección manyIndexes, configura:

  • El namespace para shardDistributionDB.manyIndexes,

  • El límite inferior para MinKey,

  • El límite superior MaxKey de,

  • La zona a HI_RAM

sh.updateZoneKeyRange(
"shardDistributionDB.manyIndexes",
{ "_id" : MinKey },
{ "_id" : MaxKey },
"HI_RAM"
)
3

Para fragmentar ambas colecciones (bigData y manyIndexes), especifique una clave de partición de { _id: "hashed" }.

Ejecute los siguientes comandos:

sh.shardCollection(
"shardDistributionDB.bigData", { _id: "hashed" }
)
sh.shardCollection(
"shardDistributionDB.manyIndexes", { _id: "hashed" }
)
4

Para ver la distribución de fragmentos y las zonas de fragmentos, utilice el sh.status() método:

sh.status()

La próxima vez que se ejecute el balanceador, dividirá los fragmentos donde sea necesario y migrará fragmentos entre las particiones, respetando las zonas configuradas. La cantidad de tiempo que el equilibrador tarda en completarse depende de varios factores, incluyendo la cantidad de particiones, la memoria disponible y IOPS.

Cuando finaliza el balanceo:

  • Los fragmentos para documentos en la colección manyIndexes residen en shard0 y shard2

  • Los fragmentos de documentos en la colección bigData residen en shard1 y shard2.

Para aprender más sobre particionado y balanceo, consulta las siguientes páginas:

Volver

Escrituras locales distribuidas para cargas de trabajo solo de inserción

En esta página