MongoDB Fragmentación: tutorial paso a paso con ejemplo
⚡ Resumen inteligente
MongoDB El sharding divide grandes conjuntos de datos en subconjuntos más pequeños distribuidos en múltiples ubicaciones. MongoDB instancias, lo que reduce la carga de CPU en cualquier servidor individual. Un clúster fragmentado combina fragmentos, un servidor de configuración y un enrutador para escalar horizontalmente el almacenamiento y el rendimiento de las consultas.
¿En qué se fragmenta? MongoDB?
La fragmentación es un concepto en MongoDB, que divide grandes conjuntos de datos en pequeños conjuntos de datos en múltiples MongoDB instancias.
A veces los datos dentro MongoDB será tan grande que las consultas sobre conjuntos de datos tan grandes pueden causar una gran utilización de la CPU en el servidor. Para abordar esta situación, MongoDB tiene un concepto de fragmentación, que es básicamente la división de conjuntos de datos en múltiples MongoDB instancias.
La colección, que podría ser de gran tamaño, en realidad está dividida en varias colecciones, o fragmentos, como se les llama. Lógicamente, todos los fragmentos funcionan como una sola colección.
Ventajas de la fragmentación en MongoDB
Antes de implementar un clúster fragmentado, es útil comprender por qué los equipos adoptan la fragmentación. Los principales beneficios son:
- Escalabilidad horizontal: Los datos se distribuyen entre muchos servidores estándar en lugar de obligar a una sola máquina a aumentar progresivamente su tamaño.
- Mayor rendimiento: Las operaciones de lectura y escritura se ejecutan en paralelo en todos los fragmentos, por lo que el clúster gestiona más solicitudes por segundo.
- Mayor capacidad de almacenamiento: El disco combinado de todos los fragmentos puede almacenar conjuntos de datos mucho mayores de los que podría almacenar un solo servidor.
- Alta disponibilidad: Cuando cada fragmento se implementa como un conjunto de réplicas, el fallo de un solo nodo no provoca la caída del clúster.
- Carga equilibrada: El MongoDB El balanceador redistribuye automáticamente los fragmentos de datos para evitar que alguno se convierta en un punto crítico.
En conjunto, estas ventajas hacen del particionamiento el enfoque estándar para la escalabilidad. MongoDB más allá de los límites de un solo servidor.
Cómo implementar la fragmentación
Los fragmentos se implementan mediante el uso de clústeres, que no son más que un grupo de MongoDB instancias.
Los componentes de un Fragmento incluyen:
- Tan dificil – Esto es lo básico, y esto no es más que una MongoDB instancia que contiene el subconjunto de datos. En entornos de producción, todos los fragmentos deben formar parte de conjuntos de réplicas.
- Servidor de configuración - Se trata de un MongoDB instancia que contiene metadatos sobre el clúster, básicamente información sobre los distintos MongoDB instancias que contendrán los datos fragmentados.
- un enrutador - Se trata de un MongoDB instancia que es básicamente responsable de redirigir los comandos enviados por el cliente a los servidores correctos.
Fragmentación paso a paso Cluster Ejemplo
Paso 1) Cree una base de datos separada para el servidor de configuración.
mkdir /data/configdb
Paso 2) Iniciar el MongoDB Instancia en modo de configuración. Supongamos que tenemos un servidor llamado Servidor D, que sería nuestro servidor de configuración. Necesitaríamos ejecutar el siguiente comando para configurar el servidor como tal.
mongod --configdb ServerD:27019
Paso 3) Inicie la instancia de mongos especificando el servidor de configuración.
mongos --configdb ServerD:27019
Paso 4) Desde la consola de mongo, conéctese a la instancia de mongos.
mongo --host ServerD --port 27017
Paso 5) Si tiene el servidor A y el servidor B que necesita agregar al clúster, ejecute los siguientes comandos.
sh.addShard("ServerA:27017") sh.addShard("ServerB:27017")
Paso 6) Habilitar el particionamiento para la base de datos. Si necesitamos particionar la base de datos Employeedb, ejecute el siguiente comando.
sh.enableSharding("Employeedb")
Paso 7) Habilitar la fragmentación para la colección. Por lo tanto, si necesitamos fragmentar la colección Employee, ejecute el siguiente comando.
sh.shardCollection("Employeedb.Employee", { "Employeeid": 1, "EmployeeName": 1 })
Cómo elegir una clave de fragmento en MongoDB
La clave de fragmentación es el campo indexado, o conjunto de campos, que MongoDB Se utiliza para decidir qué fragmento almacena cada documento. Dado que la clave determina la distribución de datos, elegirla correctamente es la decisión más importante en una implementación fragmentada. Una clave inadecuada concentra los datos y el tráfico en un solo fragmento, anulando las ventajas de la fragmentación.
Una clave de fragmentación robusta generalmente tiene las siguientes características:
- Alta cardinalidad: El campo debe tener muchos valores posibles para que los datos puedan dividirse en muchos fragmentos más pequeños.
- Baja frecuencia: Ningún valor individual debe predominar, de lo contrario, los documentos que comparten ese valor se acumularán en un solo fragmento.
- Cambio no monótono: Las claves que aumentan continuamente, como las marcas de tiempo, envían cada nueva escritura al mismo fragmento, creando un punto crítico.
MongoDB Admite dos estrategias de fragmentación basadas en la clave. La fragmentación por rango divide los datos en rangos contiguos y es adecuada para consultas de rango, mientras que la fragmentación por hash aplica una función hash para distribuir las escrituras uniformemente entre los fragmentos. Los equipos suelen comenzar con la fragmentación por hash cuando las escrituras son intensas y cambian a la fragmentación por rango cuando predominan las lecturas basadas en rango. Independientemente de la estrategia que elija, pruebe la clave con patrones de consulta realistas antes de confirmarla, ya que la clave de fragmentación no se puede cambiar fácilmente una vez que se han cargado los datos.
Fragmentación frente a replicación en MongoDB
El particionamiento y la replicación son características complementarias pero distintas. La siguiente tabla destaca las diferencias para que pueda aplicarlas correctamente; en la práctica, los clústeres de producción utilizan ambas conjuntamente.
| Aspecto | Sharding | Replicación |
|---|---|---|
| Propósito | Escalar horizontalmente dividiendo los datos | Proteja los datos y manténgalos disponibles. |
| Datos en cada nodo | Un subconjunto (un fragmento) de los datos | Una copia completa de los datos |
| Beneficio principal | Mayor capacidad de almacenamiento y rendimiento. | Tolerancia a fallos y escalado de lectura |
| Componentes claves | Fragmentos, servidor de configuración, enrutador mongos | Miembros primarios y secundarios |
En resumen, el particionamiento satisface la necesidad de escalabilidad, mientras que la replicación satisface la necesidad de disponibilidad, y una implementación robusta combina ambas.

