Visión general de la fragmentación de bases de datos
- Funcionamiento de la fragmentación de bases de datos
- Ventajas de la fragmentación
- Desventajas de la fragmentación
- Tipos de fragmentación
- Alternativas a la fragmentación de bases de datos
- Cómo ayuda Couchbase Capella™ con la fragmentación de bases de datos
- Conclusión
La fragmentación de bases de datos es una potente herramienta para optimizar el rendimiento y la escalabilidad de una base de datos. Permite un acceso más rápido a los datos y hace posible que una base de datos gestione cargas de trabajo mayores distribuyendo los datos y la capacidad de procesamiento entre varios servidores. Dado que las bases de datos NoSQL están diseñadas teniendo en cuenta la computación distribuida y la fragmentación automática, suelen ser las bases de datos más asociadas a la fragmentación. Sin embargo, con el suficiente esfuerzo, la fragmentación puede lograrse con cualquier tecnología de base de datos.
¿Cómo funciona la fragmentación de bases de datos?
La fragmentación de bases de datos divide el conjunto de datos en múltiples grupos conocidos como shards. Una vez dividido, cada fragmento puede almacenarse de forma independiente, normalmente en varios servidores, a los que se suele denominar clúster. Se puede acceder a cada fragmento de forma independiente, lo que significa que se puede acceder a los datos más rápidamente y se dispone de más recursos de procesamiento, computación y almacenamiento.
¿Dónde tiene lugar la fragmentación?
Si una base de datos incorpora funciones de fragmentación, el equipo de desarrollo necesitará menos trabajo para conseguirla. Si la fragmentación es una característica opcional o requiere configuración, tendrá que planificarla con cuidado, pero no debería requerir cambios o adiciones significativos en el código base. Si la base de datos subyacente no puede hacer sharding (como es el caso de muchas bases de datos relacionales), entonces es posible que tenga que hacer cambios importantes en el código base, y los desarrolladores tendrán que construir sharding en la capa de persistencia de una aplicación.
¿Necesito fragmentar mis datos?
La conveniencia o no de utilizar la fragmentación depende de muchos factores. Entre ellos, el tamaño del conjunto de datos, el número de usuarios del sistema, el número de operaciones realizadas y las limitaciones de la infraestructura.
Si su aplicación experimenta una disminución notable del rendimiento debido al aumento del número de usuarios o de operaciones, el escalado horizontal (que a menudo utiliza la fragmentación) es una forma de aumentar los recursos informáticos disponibles para su base de datos. Pero un rendimiento deficiente también puede indicar un código subóptimo, la falta de índices adecuados, la necesidad de cambios en el modelado de datos u otros problemas. La fragmentación no siempre debe ser la primera opción para mejorar el rendimiento, pero para algunas tecnologías de bases de datos puede ser un medio de baja fricción para alcanzar sus objetivos de rendimiento.
Ventajas de la fragmentación
- Mayor rendimiento: Hay más servidores disponibles para gestionar la entrada/salida.
- Escalado horizontal: Puede añadir rápidamente servidores adicionales a un clúster.
- Costes: El escalado horizontal puede ser a menudo menos costoso que el vertical (es decir, la actualización de un servidor a otro más potente)
- Distribución/tiempo de actividad: Una base de datos distribuida a escala horizontal puede lograr un mejor tiempo de actividad que un servidor único tradicional.
Desventajas de la fragmentación
- Complejidad: Dependiendo del sistema de base de datos, la complejidad de la fragmentación puede variar. Algunas bases de datos se diseñan con distribución, escala horizontal y fragmentación incluidas. Otras requieren un enfoque más práctico.
- Reequilibrio: Cuando se añaden máquinas adicionales a un clúster, es probable que haya que reequilibrar los fragmentos para distribuir los datos uniformemente (por ejemplo, si tienes 1.000 documentos distribuidos uniformemente en tres fragmentos, son aproximadamente 333 documentos por fragmento. Si se añade un cuarto fragmento, la distribución uniforme sería de 250 documentos por fragmento). Si una base de datos no tiene funciones de fragmentación incorporadas, el reequilibrio será un complejo proceso de bricolaje manual.
Tipos de fragmentación
Existen múltiples enfoques para la fragmentación. Algunos sistemas de bases de datos llevan incorporada la función de fragmentación, mientras que otros no la soportan directamente (y requieren mucha codificación personalizada o procesos DIY). El objetivo de cada enfoque es dividir los datos en fragmentos de forma coherente para que los datos puedan consultarse o escribirse siempre en el mismo fragmento.
Fragmentación por rangos
La fragmentación basada en rangos consiste en seleccionar valores de datos y asignarlos a un fragmento en función de si se encuentran o no dentro de un rango específico. Por ejemplo, si tienes datos de usuario que contienen la edad, un fragmento podría almacenar los usuarios con edades comprendidas entre 0 y 10 años, otro fragmento almacenaría los usuarios con edades comprendidas entre 11 y 20 años, y así sucesivamente.
Este enfoque puede ser problemático porque un shard podría acabar almacenando muchos más usuarios que el otro. Y los fragmentos que almacenan una cantidad desproporcionadamente alta de datos pueden convertirse en puntos calientes que afecten al rendimiento.
Fragmentación basada en claves
La fragmentación basada en claves adopta un enfoque más independiente. Un valor de los datos (normalmente el ID del documento en una base de datos de documentos NoSQL) se ejecuta a través de un hash, y ese hash determina en qué fragmento deben almacenarse los datos.
Este enfoque puede ser problemático si no está soportado directamente por la base de datos, ya que cualquier aplicación que acceda a la base de datos debe ser capaz de construir el hash. Además, este enfoque requiere que el valor de los datos utilizados para el hash sea inmutable. Esto no suele ser un problema, pero puede serlo en casos excepcionales.
Couchbase utiliza fragmentación automática basada en claves para distribuir los datos uniformemente en un clúster, y también proporciona reequilibrio automático y replicación automática. Estas automatizaciones pueden simplificar procesos críticos y liberar tiempo valioso para su equipo de desarrollo.
Fragmentación basada en directorios
La fragmentación basada en directorios es un enfoque en el que algún valor de los datos se asigna a un fragmento concreto en función de su valor en una tabla de consulta o una configuración de consulta. Es similar al enfoque de rango, pero puede implicar una simple búsqueda. Por ejemplo, un usuario con una dirección en Ohio se almacenaría en el fragmento "Ohio", un usuario en California iría al fragmento "California", y así sucesivamente.
Este enfoque puede ser problemático porque una tabla de consulta o configuración puede dejar de estar disponible, caerse o corromperse. En tales casos, la aplicación ya no puede realizar lecturas o escrituras.
Geo fragmentación
Un geo-shard puede combinarse con las otras opciones de fragmentación o utilizarse en lugar de ellas. La idea que subyace a la fragmentación geográfica es almacenar los datos físicamente más cerca del lugar en el que se accederá a ellos con más frecuencia. Por ejemplo, un usuario con una dirección en Ohio se almacenaría en un servidor en Ohio, y un usuario con una dirección en California se almacenaría en un servidor en California.
Este enfoque puede proporcionar un acceso más rápido, pero también puede dar lugar a puntos calientes y servidores infrautilizados. La fragmentación geográfica también puede incumplir los requisitos legales para aplicaciones o jurisdicciones específicas.
Además de proporcionar la fragmentación automática, Couchbase puede soportar la fragmentación geográfica a través de replicación entre centros de datos (XDCR).
Fragmentación basada en entidades
La fragmentación basada en entidades significa que los datos separados, pero estrechamente relacionados, se almacenan juntos en el mismo fragmento. Por ejemplo, un usuario puede considerarse una entidad dentro de la lógica de una aplicación, pero el historial de compras de un usuario puede almacenarse por separado en un fragmento diferente. Al almacenar los datos relacionados en el mismo fragmento, se puede reducir la cantidad de trabajo informático necesario para recuperarlos juntos al mismo tiempo.
El inconveniente de este enfoque es la complejidad. Configurar qué datos van a dónde puede ser un proceso complejo, sobre todo si algunos datos son utilizados por varias entidades.
Alternativas a la fragmentación de bases de datos
El escalado horizontal siempre implicará la fragmentación en algún nivel, pero hay muchas opciones para cómo para fragmentar. Una forma es la fragmentación arquitectónica, como una arquitectura de microservicios o una fragmentación de disco físico opaca para el usuario. La fragmentación puede incluso ocultarse y abstraerse detrás de un base de datos en la nube.
Al considerar un sistema de base de datos, es crucial entender cómo se llevará a cabo la fragmentación. Puede ser totalmente abstracto y oculto, puede ser automático, puede estar soportado con opciones de configuración potencialmente complejas, o puede no estar soportado y requerir un enfoque DIY.
Cómo ayuda Couchbase Capella con la fragmentación de bases de datos
Couchbase Capella es la plataforma de bases de datos en la nube para empresas digitales.
Capella utiliza el mismo sistema de fragmentación que Couchbase Server, que es una fragmentación automática basada en claves. Desde el punto de vista del usuario o del desarrollador, la fragmentación con Couchbase no requiere ninguna configuración ni mantenimiento adicionales. Al utilizar un algoritmo CRC32 junto con vBuckets, Capella garantiza que su sistema no tendrá puntos calientes.
Capella automatiza la replicación. Solo tiene que seleccionar el número de réplicas que desea y Capella se encarga del resto.
Capella también automatiza el reequilibrio. Cuando añades servidores o los eliminas de un clúster, Capella los reequilibra automáticamente sin causar tiempo de inactividad.
Por último, Capella puede lograr la geo fragmentación a través de la función XDCR. XDCR replica datos entre centros de datos en tiempo real. Las réplicas XDCR pueden incluir o excluir datos en función de filtros definidos por el usuario para mejorar la latencia local o cumplir requisitos de localización de datos.
Conclusión
La fragmentación es un concepto importante que hay que entender si se está escalando una base de datos para manejar más operaciones. Y las bases de datos NoSQL son especialmente buenas para la fragmentación porque eliminan muchas de las restricciones impuestas por las bases de datos relacionales. Dicho esto, Couchbase Capella proporciona algunas de las mejores características de una base de datos relacional (sintaxis SQL y una implementación SQL completa que incluye JOINs y Transacciones ACID) a una base de datos distribuida con fragmentación automática.
Para saber más sobre sharding en Couchbase, echa un vistazo:
Otros recursos importantes para plantearse cómo escalar una base de datos: