Sharding distribuye horizontalmente una colección entre varios . Cada shard almacena una parte de los documentos; enruta las operaciones y los config servers conservan metadata de distribución.
shards
mongos
Texto
application
↓
mongos
/ | \
shard A shard B shard C
Cada shard suele ser un replica set, por lo que sharding añade distribución sobre la alta disponibilidad.
Sharding tiene sentido cuando un replica set bien diseñado no puede sostener de forma razonable:
volumen de datos;
throughput de lectura o escritura;
working set;
crecimiento futuro;
requisitos de localidad o residencia.
Antes corrige queries, índices, documentos y capacidad. Sharding no transforma un COLLSCAN en una query eficiente; puede ejecutar el scan en varios shards.
La distribución se representa mediante rangos. MongoDB divide y mueve rangos para equilibrar datos. Los detalles y terminología operacional evolucionan por versión, por lo que debes verificar la documentación del servidor objetivo.
Cada shard necesita índices que soporten las query shapes locales. La shard key también impone requisitos de índice y uniqueness.
Un índice unique en una colección sharded solo puede garantizar ciertas identidades cuando incorpora la shard key según las reglas de versión. Diseña la identidad antes de sharding.
Las transacciones cross-shard son posibles en versiones modernas compatibles, pero añaden coordinación. Colocar datos que cambian juntos en el mismo shard reduce coste.
No uses sharding como sustituto de document boundaries adecuados.
Cambiar la shard key histórica era extremadamente costoso; versiones modernas ofrecen mecanismos de resharding bajo condiciones. Aun así, es una operación pesada que requiere capacidad, monitoreo, compatibilidad y plan de rollback.
Sharding distribuye capacidad y datos, pero convierte routing y shard key en decisiones estructurales. Las queries targeted escalan; scatter-gather multiplica trabajo. El diseño debe considerar distribución, localidad, índices, transacciones y operación antes de habilitar el primer shard.
Comprueba lo aprendido
¿Qué función cumple mongos?
¿Qué diferencia existe entre targeted y scatter-gather?