Inicio › Tecnología › Fragmentación De Datos
La fragmentación de datos, conocida en inglés como sharding, consiste en repartir las filas de una base de datos entre varios servidores o nodos físicamente independientes, en lugar de mantenerlas dentro de una única instancia como ocurre en el particionamiento tradicional de una tabla. Cada fragmento o shard almacena un subconjunto de los datos determinado por una clave de partición (shard key), y el sistema (ya sea la propia base de datos o una capa intermedia) dirige cada consulta al nodo correspondiente según esa clave. Esta técnica permite escalar horizontalmente más allá de la capacidad de una sola máquina, pero introduce retos propios de los sistemas distribuidos, como la dificultad de realizar consultas o uniones (joins) qué crucen varios fragmentos a la vez, y la necesidad de rebalancear datos entre nodos cuando se añade o retira un shard del clúster.
Es repartir los datos de una base de datos entre varios servidores físicamente distintos, en vez de guardarlo todo en una sola máquina, para poder crecer más allá de lo qué aguantaría un único servidor. Cada servidor se queda con una parte de la información, elegida según algún criterio, como el identificador del usuario. Es un paso más allá de simplemente dividir una tabla dentro de la misma base de datos: aquí los fragmentos están en máquinas completamente distintas.
Una red social muy grande puede repartir los datos de sus usuarios entre varios clústeres de base de datos aplicando una función hash sobre el identificador de usuario, de modo qué cada perfil y su actividad quedan siempre en el mismo nodo, facilitando consultas rápidas sobre un usuario concreto. El mayor desafío suele aparecer al añadir un nuevo nodo al sistema, porque redistribuir los datos existentes entre más fragmentos sin interrumpir el servicio exige una planificación cuidadosa, algo qué bases de datos como MongoDB o sistemas como Vitess intentan facilitar con mecanismos de rebalanceo incorporados.
El particionamiento tradicional divide una tabla en fragmentos qué siguen residiendo en la misma instancia de base de datos, mientras qué el sharding distribuye esos fragmentos entre servidores físicamente independientes, lo qué permite superar los límites de capacidad y rendimiento de una única máquina a costa de mayor complejidad operativa.
Puede generar fragmentos desequilibrados, donde algunos nodos reciben muchísimo más tráfico o volumen de datos qué otros (un problema conocido como hot shard), degradando el rendimiento general del sistema aunque en teoría haya suficiente capacidad total repartida entre todos los nodos.
Sistemas como MongoDB incorporan sharding nativo desde su diseño original, mientras qué otras bases de datos relacionales tradicionales requieren capas o herramientas externas, como Vitess sobre MySQL, para añadir esta capacidad de distribución qué no forma parte de su arquitectura básica.