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:
Despliegue un clúster fragmentado. Este tutorial utiliza un clúster con tres particiones.
Conéctese a una
mongosNo puede crear zonas o rangos de zonas conectándose directamente a una partición.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:
bigDataque 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 tiene tres particiones. Cada partición tiene 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. | Los conjuntos de datos que requieren más memoria, como los conjuntos de datos con índices grandes, deben estar en las particiones |
| 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 partición que utilizarás para particionar cada colección es { _id: "hashed" }. Configurarás las zonas de fragmentación antes de fraccionar las colecciones. Como resultado, los datos de cada colección solo existen en las particiones 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
Agregar, remover o cambiar zonas o rangos de zonas puede dar como resultado migraciones de fragmentos. Según el tamaño de tu conjunto de datos y la cantidad de fragmentos que afecta una zona o un rango de zonas, estas migraciones pueden impactar el rendimiento del clúster. Considera ejecutar el balanceador durante las ventanas programadas específicas. Para aprender a configurar una ventana de programación, consulta Programar la Ventana de Equilibrio.
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 fragmentos a una zona, utiliza sh.updateZoneKeyRange().
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 de
MaxKey,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 de
MaxKey,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 partición, use el método sh.status():
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: