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.
Requisitos previos
Para completar este tutorial, debes:
Implementar un clúster fragmentado. Este tutorial utiliza un clúster fragmentado con tres fragmentos.
Conectarse a un
mongosNo es posible crear zonas ni rangos de zonas conectándose directamente a un fragmento.Autentíquese como usuario con al menos el rol en
clusterManagerlaadminbase de datos. Para ver los permisos de usuario, utilice eldb.getUser()método.
Scenario
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.
Arquitectura
El clúster fragmentado consta de tres fragmentos. Cada fragmento posee recursos físicos únicos:
Nombre del fragmento | Recursos físicos |
|---|---|
| Alta capacidad de memoria |
| Almacenamiento flash rápido |
| Alta capacidad de memoria y almacenamiento flash rápido |
Zones
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 |
|---|---|---|
| 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 una recuperación rápida de datos deben estar en los fragmentos |
Clave de fragmento
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
Utilice el siguiente procedimiento para configurar zonas de fragmentos y distribuir colecciones en función de los recursos físicos de los fragmentos.
Añade cada fragmento a la zona apropiada.
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")
Agregue rangos de zonas para las colecciones relevantes.
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
MinKeyde,El límite superior
MaxKeyde,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
MinKeyde,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 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" } )
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 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
manyIndexesresiden enshard0yshard2Los fragmentos de documentos de la colección
bigDataresiden enshard1yshard2.
Obtén más información
Para obtener más información sobre fragmentación y equilibrio, consulte las siguientes páginas: