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.
Requisitos previos
Para completar este tutorial, debes:
Implementar un clúster fragmentado. Este tutorial utiliza un clúster fragmentado con tres fragmentos.
Conéctese a una
mongosNo es posible crear zonas ni rangos de zonas conectándose directamente a un fragmento.Autentíquese como usuario con al menos el rol
clusterManageren la base de datosadmin. Para ver los permisos de los usuarios, utiliza el métododb.getUser().
Scenario
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.
Arquitectura
El clúster fragmentado consta de tres fragmentos. Cada fragmento posee recursos físicos únicos:
Nombre de la partición | Recursos físicos |
|---|---|
| Gran capacidad de memoria |
| Almacenamiento flash rápido |
| Alta capacidad de memoria y almacenamiento flash rápido |
Zones
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 |
|---|---|---|
| Servidores con gran capacidad de memoria. | Las colecciones que requieren más memoria, como las colecciones con índices grandes, deben estar en los fragmentos |
| 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 |
clave de partición
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.
Balanceador
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.
Pasos
Use el siguiente procedimiento para configurar zonas de particiones y distribuir colecciones en función de los recursos físicos de particiones.
Agregue cada partición a la zona apropiada.
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")
Agrega rangos de zona para las colecciones correspondientes.
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
MaxKeyde,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
MaxKeyde,La zona a
HI_RAM
sh.updateZoneKeyRange( "shardDistributionDB.manyIndexes", { "_id" : MinKey }, { "_id" : MaxKey }, "HI_RAM" )
Fragmentar las colecciones.
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" } )
Revisa los cambios.
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
manyIndexesresiden enshard0yshard2Los fragmentos de documentos en la colección
bigDataresiden enshard1yshard2.
Obtén más información
Para aprender más sobre particionado y balanceo, consulta las siguientes páginas: