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.