Introducción a la comprensión de la fragmentación de bases de datos

Publicado: 2022-11-05

La creación de un sitio web es el primer paso para configurar su presencia en Internet. Para prosperar a largo plazo, también debe asegurarse de que su sitio pueda escalar para adaptarse al crecimiento. Y uno de los primeros pasos es implementar una base de datos que pueda escalar contigo. De lo contrario, corre el riesgo de experimentar un rendimiento lento de las consultas y cortes de la base de datos.

Esta publicación discutirá cómo puede usar la fragmentación de la base de datos para lograr una alta escalabilidad y disponibilidad para sus datos. También abordaremos los inconvenientes de la fragmentación y las diferentes arquitecturas de fragmentación que puede usar.

¿Qué es la fragmentación de bases de datos?

Sharding es una técnica de optimización que distribuye tablas entre otros servidores de bases de datos. Es como particionar en el sentido de que ambos implican dividir los datos en subconjuntos más pequeños. La diferencia es que la fragmentación distribuye estos subconjuntos a diferentes servidores, mientras que la partición los almacena en una base de datos. Estos servidores utilizan el mismo motor de base de datos y tipo de hardware para lograr un nivel de rendimiento similar para todos los fragmentos.

Sharding tiene como objetivo lograr una arquitectura de no compartir nada, eliminando los cuellos de botella de procesamiento y los puntos únicos de falla.

Una ilustración para explicar la fragmentación de la base de datos.
Un ejemplo de fragmentación. (Fuente de la imagen: Analytics Vidhya)

Puede implementar la fragmentación de dos maneras: horizontal y verticalmente. La fragmentación horizontal divide la tabla según las filas, mientras que la fragmentación vertical divide las tablas según las columnas.

En este sentido, la fragmentación es como la partición, que divide las tablas grandes en otras más pequeñas.

La fragmentación horizontal es eficaz para bases de datos en las que la mayoría de las consultas devuelven un subconjunto de filas, como una base de datos de clientes que devuelve datos (como nombre, dirección, correo electrónico, etc.) a la vez.

La fragmentación vertical es eficaz para las bases de datos cuyas consultas devuelven columnas individuales. Por ejemplo, si la base de datos de clientes devuelve el nombre o el correo electrónico del cliente por separado, puede separar el nombre y el correo electrónico en diferentes grupos.

Beneficios de la fragmentación de bases de datos

A continuación se presentan algunas de las ventajas de la fragmentación de bases de datos.

Escalado horizontal mejorado

Puede escalar su base de datos vertical u horizontalmente. El escalado vertical se refiere a agregar más unidades de procesamiento central (CPU) y memoria de acceso aleatorio (RAM) al servidor para mejorar el rendimiento. El escalado vertical es una solución útil para bases de datos pequeñas y medianas. Sin embargo, a medida que crecen sus datos, la escala vertical se vuelve inviable. Hay tanto poder que puede agregar a un solo servidor.

La escala horizontal es más flexible. Le permite escalar su base de datos según sea necesario agregando más servidores a su sistema. Cada uno de estos servidores proporciona recursos a diferentes fragmentos de bases de datos. Esto distribuye la carga de trabajo y mejora la capacidad del sistema para manejar más solicitudes.

Tiempos de respuesta de consulta más rápidos

Los fragmentos tienen solo unas pocas filas y columnas. Debido a esto, lleva menos tiempo procesar las consultas de la base de datos. Por el contrario, una consulta de una base de datos no fragmentada puede requerir una búsqueda a través de cientos, o incluso miles, de filas.

Mayor confiabilidad en situaciones de interrupción

Las interrupciones de la base de datos ocurren por varias razones, incluida la eliminación accidental de datos, errores de conexión y ataques de ciberseguridad. La fragmentación minimiza los efectos de las interrupciones. Dado que cada fragmento es autónomo, solo el fragmento afectado enfrenta tiempo de inactividad. Por ejemplo, si tiene cuatro fragmentos y experimenta una interrupción en uno de ellos, solo el 25 por ciento de las operaciones se verán afectadas.

Inconvenientes de la fragmentación

Aunque la fragmentación mejora la confiabilidad y disponibilidad de una base de datos, implementarla es complejo. El uso de una arquitectura de fragmentación incorrecta puede ralentizar el rendimiento y provocar la pérdida de datos.

Asegúrese de elegir una técnica de particionamiento que permita una distribución de datos equilibrada en todos los fragmentos. Sin este equilibrio, corre el riesgo de crear puntos de acceso a la base de datos, lo que sucede cuando un fragmento almacena la mayoría de los datos mientras que otros fragmentos permanecen prácticamente vacíos. Esto reduce el rendimiento de escritura en el único fragmento.

Para resolver esto, podría particionar aún más el fragmento desequilibrado, pero ese proceso es un desafío y puede eliminar su base de datos mientras migra los datos.

Otro inconveniente de la fragmentación es que las uniones SQL que involucran varias tablas en diferentes fragmentos pueden volverse demasiado lentas y degradar el rendimiento. Sin embargo, con la arquitectura adecuada, puede evitar este problema.

Arquitecturas fragmentadas

Puede implementar la fragmentación utilizando tres arquitecturas:

  • Fragmentación basada en claves
  • Fragmentación basada en rango
  • Fragmentación basada en directorios

La arquitectura que elija depende de su caso de uso.

Fragmentación basada en claves

En una arquitectura de fragmentación basada en clave o hash, una aplicación de base de datos utiliza una clave de fragmento para ubicar un fragmento. Una función hash calcula el valor de la clave de fragmentación y la salida asigna los datos a una partición en particular. Una función hash simple puede ser el módulo de la clave y el número de fragmentos.

La función hash puede tomar más de una clave de fragmentación. Debido a esto, la fragmentación basada en claves es adecuada para registros de datos que pueden tener claves compartidas. La distribución algorítmica de los datos minimiza la posibilidad de crear puntos de acceso a la base de datos donde un fragmento contiene más datos que el otro.

Sin embargo, dado que la distribución se basa únicamente en la función hash, es imposible agrupar los datos de forma lógica. Por lo tanto, las operaciones de base de datos que requieren datos de varios fragmentos pueden ser ineficaces, ya que requieren la lectura de datos de cada fragmento.

Fragmentación basada en rango

La fragmentación basada en rango implica fragmentar una base de datos según un rango de valores especificado.

Utiliza una clave de fragmentación para determinar a qué fragmento asignar un valor. La aplicación de la base de datos comprueba el fragmento que corresponde a la clave de fragmentación en una tabla de búsqueda y almacena los datos. Debido a esto, la fragmentación basada en rangos es fácil de diseñar e implementar.

Por ejemplo, podría usar el valor de ID de usuario en una base de datos de usuario como clave de fragmentación. Puede almacenar usuarios con ID de 0 a 2000 en un fragmento, aquellos entre 2000 y 4000 en otro fragmento, y así sucesivamente.

La fragmentación basada en rangos puede causar puntos críticos en la base de datos. Considere una base de datos de usuarios en la que la mayoría de sus ID de usuario se encuentran entre 2001 y 4000. El proceso los asigna a un solo fragmento, creando un desequilibrio con el tiempo. La fragmentación basada en rangos, por lo tanto, funciona mejor para datos distribuidos uniformemente.

Fragmentación basada en directorios

La fragmentación basada en directorios agrupa datos relacionados lógicamente en el mismo fragmento. Utiliza una tabla de búsqueda que contiene una lista de asignaciones para cada entidad en la base de datos. Cada asignación corresponde a un fragmento de base de datos.

La fragmentación basada en directorios es más flexible que la fragmentación basada en rangos o claves porque puede agregar datos a las particiones de forma dinámica. No hay una función de fragmentación para seguir o valores de rango para permanecer dentro. Esta flexibilidad aumenta la eficiencia de la base de datos: puede almacenar datos relacionados en un fragmento, lo que significa que la ejecución de consultas comunes lleva menos tiempo.

Por ejemplo, si utilizó la fragmentación basada en directorios y agrupó a los usuarios según su ubicación, recuperando a los usuarios de un lugar en particular, solo consultará una única partición.

Fragmentación de base de datos con Kinsta

La mayoría de los motores de bases de datos modernos brindan soporte para fragmentación de bases de datos. Uno de estos motores de base de datos es MariaDB, una bifurcación comercial de MySQL. Es un sistema de base de datos de código abierto de alto rendimiento adoptado por empresas como IBM, GitHub y Wikimedia. También es parte de la pila de servidores de alto rendimiento de Kinsta.

MariaDB ofrece funciones de fragmentación integradas a través del motor de almacenamiento de araña. El motor de almacenamiento spider es un motor de formación de clústeres que admite transacciones de partición y arquitectura extendida (XA). Le permite tratar tablas remotas de diferentes instancias como si estuvieran en la misma instancia. Una vez que crea una tabla en el motor de almacenamiento de araña, la tabla se vincula a otra tabla en el servidor MariaDB remoto. Una vez establecida la conexión, el motor de almacenamiento comparte el enlace con todas las tablas que forman parte de la misma transacción.

Resumen

La fragmentación de la base de datos es una técnica de escalado que divide las tablas en subconjuntos más pequeños y los distribuye a diferentes servidores llamados fragmentos. Puede implementar la fragmentación a través de varios medios, como la fragmentación basada en claves, la fragmentación basada en rangos y la fragmentación basada en directorios.

Si bien la fragmentación mejora la escalabilidad, la confiabilidad y la disponibilidad de una base de datos, es muy compleja de implementar. Además, una vez que crea un fragmento, no es fácil revertir la base de datos a su estado sin fragmentos. Debido a esto, use la fragmentación para la optimización solo cuando esté seguro de que otras opciones de escalabilidad no funcionarán.

Ya sea que su empresa sea una organización sin fines de lucro o de nivel empresarial, las soluciones expertas de Kinsta pueden eliminar sus preocupaciones sobre el alojamiento de sitios, lo que le permite concentrarse en lo que más importa.