Docs Menu
Docs Home
/ /

Distribuir colecciones mediante zonas

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.

Puede usar la fragmentación de zonas para distribuir colecciones en un clúster fragmentado y determinar qué fragmentos almacenan datos para cada colección. Puede distribuir las colecciones según sus propiedades, como los recursos físicos y la memoria disponible, para garantizar que cada colección se almacene en el fragmento óptimo para esos datos.

Para completar este tutorial, debes:

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

  • bigData, que contiene una gran cantidad de datos.

  • manyIndexes, que contiene muchos índices grandes.

Desea limitar cada colección a un subconjunto de fragmentos para que cada colección pueda usar los diferentes recursos físicos de los fragmentos.

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

Nombre del fragmento
Recursos físicos

shard0

Alta capacidad de memoria

shard1

Almacenamiento flash rápido

shard2

Alta capacidad de memoria y almacenamiento flash rápido

Para distribuir colecciones según los recursos físicos, utilice zonas de fragmentos. Una zona de fragmentos asocia las colecciones con un subconjunto específico de fragmentos, lo que restringe los fragmentos que almacenan los datos de la colección. En este ejemplo, se necesitan dos zonas de fragmentos:

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 una recuperación rápida de datos deben estar en los fragmentos FLASH.

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.

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

1

Para configurar los fragmentos en cada zona, utilice el addShardToZone comando.

Añade shard0 y shard2 a la zona HI_RAM:

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

Añade 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 caso, desea asociar todos los documentos de una colección a la zona correspondiente. Para ello, especifique el siguiente rango de zonas:

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

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

Para la colección bigData, configure:

  • El espacio de nombres a shardDistributionDB.bigData,

  • El límite inferior MinKey de,

  • El límite superior MaxKey de,

  • La zona a FLASH

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

Para la colección manyIndexes, configure:

  • El espacio de nombres a shardDistributionDB.manyIndexes,

  • El límite inferior MinKey de,

  • 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 manyIndexesy), especifique una clave de fragmentación { _id: "hashed" } de.

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 los migrará entre los fragmentos, respetando las zonas configuradas. El tiempo que tarda el balanceador en completarse depende de varios factores, como la cantidad de fragmentos, la memoria disponible y IOPS.

Al finalizar el equilibrio:

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

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

Para obtener más información sobre fragmentación y equilibrio, consulte las siguientes páginas:

Volver

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

En esta página