UNIR Revista
El sharding es un concepto basado en la división de bases de datos grandes en otras más pequeñas para aumentar la capacidad de almacenamiento del sistema y su rapidez.
La evolución tecnológica de la última década va acompañada de un crecimiento exponencial de la información que generan, almacenan y procesan las organizaciones, haciendo que las bases de datos que soportan las aplicaciones de negocio se conviertan en un cuello de botella para el funcionamiento de estas. Para evitarlo o mitigarlo, el sharding o fragmentación se convierte en una técnica fundamental.
El sharding es un método que consiste en distribuir un gran conjunto de datos en varias bases de datos y almacenarlo entre distintas máquinas. Esto es, los conjuntos de datos grandes se dividen en fragmentos más pequeños y se almacenan en múltiples nodos de datos, lo que aumenta la capacidad de almacenamiento total del sistema y su rapidez.
Esta técnica se basa en el concepto de escalado horizontal, que consiste en incorporar al sistema nodos adicionales que comparten la carga de trabajo y dotan al sistema de una escalabilidad casi ilimitada permitiéndole trabajar con el Big Data.
La fragmentación implica una configuración compleja, el mantenimiento de los fragmentos de datos en cada nodo y el enrutamiento de las cargas de trabajo, por lo que es necesario considerar si otras alternativas menos costosas podrían ser suficientes:
- Escalado vertical, es decir, incrementar los recursos de la máquina que soporta la BBDD (RAM, CPU, disco…).
- Desplegar la base de datos en una máquina dedicada distinta a las otras que soportan la aplicación o sistema (frontend, backend, etc.).
- Si la carga de trabajo de la aplicación o sistema es principalmente de lectura, una alternativa interesante es la replicación, que consisten en desplegar copias adicionales de la base de datos y distribuir las operaciones de lectura mediante un balanceo de carga o mediante el enrutamiento de consultas geolocalizadas.
Ventajas del sharding
La fragmentación le permite escalar una base de datos para manejar una mayor carga de trabajo, de manera casi ilimitada, al proporcionar un mayor rendimiento de lectura/escritura, capacidad de almacenamiento y alta disponibilidad:
Mayor rendimiento de lectura/escritura
Al distribuir el conjunto de datos en varios fragmentos, la capacidad de operaciones de lectura y escritura aumenta siempre que las operaciones de lectura y escritura se limiten a un solo fragmento.
Mayor capacidad de almacenamiento
De manera similar, al aumentar la cantidad de fragmentos también puede incrementar la capacidad de almacenamiento total general, lo que permite una escalabilidad casi infinita.
Alta disponibilidad
Finalmente, los fragmentos brindan alta disponibilidad de dos maneras. En primer lugar, dado que cada fragmento es un conjunto de réplicas, todos los datos se replican. En segundo lugar, incluso si un fragmento completo deja de estar disponible desde que se distribuyen los datos, la base de datos en su conjunto sigue siendo parcialmente funcional, con parte del esquema en diferentes fragmentos.
Desventajas del sharding
La fragmentación tiene varios inconvenientes: la sobrecarga en la compilación de resultados de consultas, la complejidad de la administración y el aumento de los costes de infraestructura.
Sobrecarga de consultas
Cada base de datos fragmentada debe tener una máquina o servicio independiente que comprenda cómo enrutar una operación de consulta al fragmento apropiado. Esto introduce una latencia adicional en cada operación. Además, si los datos necesarios para la consulta se dividen horizontalmente en varios fragmentos, el enrutador debe consultar cada fragmento y fusionar el resultado. Esto puede hacer que una operación que de otro modo sería simple sea bastante costosa y ralentizar los tiempos de respuesta.
Complejidad de la administración
Con una sola base de datos no fragmentada, solo el servidor de la base de datos en sí requiere mantenimiento. Con cada base de datos fragmentada, además de administrar los propios fragmentos, hay nodos de servicio adicionales que se deben mantener. Además, en los casos en que se utiliza la replicación, cualquier actualización de datos debe reflejarse en cada nodo replicado. En general, una base de datos fragmentada es un sistema más complejo que requiere más administración.
Mayores costes de infraestructura
La fragmentación, por su naturaleza, requiere máquinas adicionales y capacidad de computación en cada servidor de base de datos. Si bien esto permite que la base de datos crezca más allá de los límites de una sola máquina, cada fragmento adicional conlleva costes más altos. El coste de un sistema de base de datos distribuido, especialmente si le falta la optimización adecuada, puede ser significativo.
Principales tipos de sharding
Si bien existen muchos métodos de fragmentación diferentes, los principales tipos son:
Sharding a distancia/dinámico
Toma un campo del registro como entrada y, en función de un rango predefinido, asigna ese registro a la partición adecuada. Requiere que haya una tabla de búsqueda o un servicio disponible para todas las consultas o escrituras. El campo en el que se basa el rango es la clave de partición.
Naturalmente, la elección de la clave de fragmento, así como los rangos, son fundamentales para que la fragmentación basada en rango sea efectiva. Una mala elección de la clave de fragmento dará lugar a fragmentos desequilibrados, lo que conduce a una disminución del rendimiento. Una clave de fragmento eficaz permitirá que las consultas se orienten a un número mínimo de fragmentos.
Dos atributos clave de una clave de fragmento eficaz son la alta cardinalidad y la frecuencia bien distribuida. La cardinalidad se refiere al número de valores posibles de esa clave. Si una clave de fragmento tiene únicamente tres valores posibles, solo puede haber un máximo de tres fragmentos. La frecuencia se refiere a la distribución de los datos a lo largo de los posibles valores. Si el 95 % de los registros se producen con un solo valor de clave de fragmento, entonces, debido a este punto de acceso, el 95 % de los registros se asignarán a un solo fragmento.
Sharding algorítmico/hashed
Toma un registro como entrada y le aplica una función hash que genera una salida o valor de hash. Esta salida se usa luego para asignar cada registro al fragmento apropiado. La función puede tomar cualquier subconjunto de valores en el registro como entradas. Esto es similar a la fragmentación basada en rango: un conjunto de campos determina la asignación del registro a una partición determinada.
El hash de las entradas permite una distribución más uniforme entre fragmentos, incluso cuando no hay una clave de fragmento adecuada y no es necesario mantener una tabla de búsqueda. Sin embargo, hay algunos inconvenientes.
En primer lugar, es más probable que las operaciones de consulta de varios registros se distribuyan en varios fragmentos. Mientras que la fragmentación a distancia refleja la estructura natural de los datos entre fragmentos, la fragmentación hash generalmente ignora el significado de los datos. Esto se refleja en una mayor ocurrencia de operaciones de transmisión.
En segundo lugar, volver a fragmentar puede ser costoso. Cualquier actualización de la cantidad de fragmentos probablemente requiera reequilibrar todos los fragmentos para mover los registros, lo cual implicará una interrupción de servicio.
Sharding basado en entidad/relación
Mantiene los datos relacionados juntos en un único fragmento físico. En una base de datos relacional (como PostgreSQL, MySQL o SQL Server), los datos relacionados a menudo se distribuyen en varias tablas diferentes. Mantener los datos relacionados en el mismo fragmento reduce la necesidad de operaciones de transmisión, lo que aumenta el rendimiento.
Sharding basado en geografía o geosharding
También mantiene los datos relacionados juntos en un solo fragmento, pero en este caso, están vinculados por la geografía. Esto es esencialmente fragmentación a distancia donde la clave de fragmento contiene información geográfica y los propios fragmentos están geolocalizados.
La fragmentación es una excelente solución para aplicaciones con grandes requisitos de datos y cargas de trabajo de lectura/escritura de alto volumen, pero tiene una complejidad importante. Se debe considerar si los beneficios superan los costes o si existe una solución más simple antes de comenzar con su implementación. En todo caso, es fundamental contar con especialistas formados con posgrados como el Máster en Big Data online de UNIR.