MongoDB: fragmentación
Sharding es el proceso de almacenar registros de datos en múltiples máquinas y es el enfoque de MongoDB para satisfacer las demandas del crecimiento de datos. A medida que aumenta el tamaño de los datos, es posible que una sola máquina no sea suficiente para almacenar los datos ni proporcionar un rendimiento de lectura y escritura aceptable. La fragmentación resuelve el problema de la escala horizontal. Con la fragmentación, agrega más máquinas para respaldar el crecimiento de datos y las demandas de las operaciones de lectura y escritura.
¿Por qué Sharding?
En la replicación, todas las escrituras van al nodo maestro
Las consultas sensibles a la latencia aún van a master
El conjunto de réplicas único tiene una limitación de 12 nodos
La memoria no puede ser lo suficientemente grande cuando el conjunto de datos activo es grande
El disco local no es lo suficientemente grande
El escalado vertical es demasiado caro
Fragmentación en MongoDB
El siguiente diagrama muestra la fragmentación en MongoDB utilizando un clúster fragmentado.
En el siguiente diagrama, hay tres componentes principales:
Shards- Los fragmentos se utilizan para almacenar datos. Proporcionan alta disponibilidad y consistencia de datos. En el entorno de producción, cada fragmento es un conjunto de réplicas independiente.
Config Servers- Los servidores de configuración almacenan los metadatos del clúster. Estos datos contienen una asignación del conjunto de datos del clúster a los fragmentos. El enrutador de consultas usa estos metadatos para orientar operaciones a fragmentos específicos. En el entorno de producción, los clústeres fragmentados tienen exactamente 3 servidores de configuración.
Query Routers- Los enrutadores de consultas son básicamente instancias de mongo, interactúan con las aplicaciones cliente y dirigen las operaciones al fragmento apropiado. El enrutador de consultas procesa y dirige las operaciones a fragmentos y luego devuelve los resultados a los clientes. Un clúster fragmentado puede contener más de un enrutador de consultas para dividir la carga de solicitudes del cliente. Un cliente envía solicitudes a un enrutador de consultas. Generalmente, un clúster fragmentado tiene muchos enrutadores de consultas.