Crear un sitio web es el primer paso para establecer tu presencia en Internet. Para prosperar a largo plazo, también debes asegurarte de que tu sitio puede escalar para adaptarse al crecimiento. Y uno de los primeros pasos es implementar una base de datos que pueda escalar contigo. De lo contrario, te arriesgas a experimentar un rendimiento lento de las consultas y cortes de la base de datos.

En este artículo hablaremos de cómo puedes utilizar la fragmentación de la base de datos para conseguir una alta escalabilidad y disponibilidad de tus datos. También abordaremos los inconvenientes de la fragmentación y las diferentes arquitecturas de fragmentación que puedes utilizar.

¿Qué es la Fragmentación de Bases de Datos?

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

El objetivo de la fragmentación es lograr una arquitectura de no compartir nada, eliminando los cuellos de botella de procesamiento y los puntos únicos de fallo.

Un ejemplo de fragmentación.
Un ejemplo de fragmentación. (Fuente de la imagen: Analytics Vidhya)

Puedes implementar la fragmentación de dos maneras: horizontal y verticalmente. La fragmentación horizontal divide la tabla en función de las filas, mientras que la vertical divide las tablas en función de 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 las 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 el nombre, la dirección, el 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 devolviera el nombre o el correo electrónico del cliente por separado, podrías separar el nombre y el correo electrónico en clusters diferentes.

Ventajas de la Fragmentación de Bases de Datos

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

Mejora del escalado horizontal

Puedes escalar tu base de datos vertical u horizontalmente. El escalado vertical consiste en añadir más unidades centrales de procesamiento (CPU) y memoria de acceso aleatorio (RAM) al servidor para mejorar el rendimiento. El escalado vertical es una solución útil para las bases de datos pequeñas y medianas. Sin embargo, cuando tus datos crecen, el escalado vertical se vuelve inviable. La potencia que puedes añadir a un solo servidor es limitada.

El escalado horizontal es más flexible. Te permite escalar tu base de datos según sea necesario, añadiendo más servidores a tu sistema. Cada uno de estos servidores proporciona recursos a diferentes fragmentos de la base de datos. Esto distribuye la carga de trabajo y mejora la capacidad del sistema para gestionar más peticiones.

Tiempos de respuesta a las consultas más rápidos

Los fragmentos sólo tienen unas pocas filas y columnas. Por ello, se tarda menos en procesar las consultas a la base de datos. Por el contrario, una consulta a una base de datos no fragmentada podría requerir una búsqueda a través de cientos – o incluso miles – de filas.

Mayor fiabilidad en situaciones de interrupción

Las interrupciones de la base de datos se producen por varias razones, como la eliminación accidental de datos, los errores de conexión y los ataques de ciberseguridad. La fragmentación minimiza los efectos de las interrupciones. Como cada fragmento es autónomo, sólo el fragmento afectado se enfrenta a un tiempo de inactividad. Por ejemplo, si tienes cuatro fragmentos y se produce una interrupción en uno de ellos, sólo el 25% de las operaciones se verán afectadas.

Inconvenientes de la Fragmentación

Aunque la fragmentación mejora la fiabilidad y disponibilidad de una base de datos, su aplicación es compleja. Utilizar una arquitectura de fragmentación incorrecta puede ralentizar el rendimiento y provocar la pérdida de datos.

Asegúrate de elegir una técnica de fragmentación que permita una distribución equilibrada de los datos en todos los fragmentos. Sin este equilibrio, corres el riesgo de crear puntos calientes en la base de datos, que se producen cuando un fragmento almacena la mayor parte de los datos mientras otros fragmentos permanecen prácticamente vacíos. Esto reduce el rendimiento de escritura en el fragmento único.

Para solucionarlo, podrías particionar aún más el fragmento desequilibrado, pero ese proceso es difícil y puede hacer que tu base de datos se caiga mientras migras los datos.

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

Arquitecturas de Fragmentación

Puedes implementar la fragmentación utilizando tres arquitecturas:

  • Separación basada en claves
  • Reparto basado en rangos
  • Distribución basada en directorios

La arquitectura que elijas depende de tu caso de uso.

Fragmentación basada en claves

En una arquitectura de fragmentación basada en claves o hashes, una aplicación de base de datos utiliza una clave de fragmentación para localizar un fragmento. Una función de hashing convierte en hash el valor de la clave de fragmentación, y el resultado asigna los datos a un fragmento concreto. 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. Por ello, la fragmentación basada en claves es adecuada para los registros de datos que pueden tener claves compartidas. La distribución algorítmica de los datos minimiza la posibilidad de crear puntos calientes en la base de datos, en los que un fragmento contiene más datos que el otro.

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

Reparto basado en rangos

La fragmentación basada en rangos implica la fragmentación de una base de datos en función de un rango específico de valores.

Utiliza una clave de fragmentación para determinar a qué fragmento debe asignarse 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. Por ello, la fragmentación basada en rangos es fácil de diseñar e implementar.

Por ejemplo, puedes utilizar el valor del ID de usuario en una base de datos de usuarios como clave de fragmentación. Podrías almacenar los usuarios con ID de 0 a 2.000 en un fragmento, los de 2.000 a 4.000 en otro fragmento, y así sucesivamente.

La fragmentación basada en rangos puede provocar puntos calientes en la base de datos. Considera una base de datos de usuarios en la que la mayoría de sus IDs se encuentran entre 2.001 y 4.000. El proceso los asigna a un único fragmento, creando un desequilibrio en el tiempo. La fragmentación basada en rangos, por tanto, funciona mejor para datos distribuidos uniformemente.

Repartición basada en directorios

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

La fragmentación basada en directorios es más flexible que la basada en rangos o en claves, porque puedes añadir datos a los fragmentos de forma dinámica. No hay ninguna función de fragmentación que seguir ni valores de rango que mantener. Esta flexibilidad aumenta la eficiencia de la base de datos: Puedes almacenar datos relacionados en un solo fragmento, lo que significa que la ejecución de consultas comunes lleva menos tiempo.

Por ejemplo, si utilizas la fragmentación basada en directorios y agrupas a los usuarios según su ubicación, para recuperar a los usuarios de un lugar concreto, sólo tienes que consultar un único fragmento.

Desagregación de bases de datos con Kinsta

La mayoría de los motores de bases de datos modernos ofrecen soporte para la fragmentación de bases de datos. Uno de estos motores de bases 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 forma 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 la partición y las transacciones de arquitectura extendida (XA). Te permite tratar tablas remotas de diferentes instancias como si estuvieran en la misma instancia. Una vez que creas una tabla en el motor de almacenamiento 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 en diferentes servidores llamados shards. Puedes implementar la fragmentación por varios medios, como la fragmentación basada en claves, la fragmentación basada en rangos y la fragmentación basada en directorios.

Aunque la fragmentación mejora la escalabilidad, fiabilidad y disponibilidad de una base de datos, es muy compleja de implementar. Además, una vez creado un fragmento, no es fácil revertir la base de datos a su estado no fragmentado. Por ello, utiliza la fragmentación para la optimización sólo cuando estés seguro de que otras opciones de escalabilidad no funcionarán.

Tanto si tu negocio es una organización sin fines de lucro como una empresa de nivel empresarial, las soluciones expertas de Kinsta pueden eliminar tus preocupaciones sobre el alojamiento del sitio, permitiéndote centrarte en lo que más importa.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.