Comprender la fragmentación de bases de datos

Comprender la fragmentación de bases de datos
Los sitios web y las aplicaciones modernas dependen en gran medida de las tecnologías de bases de datos para gestionar las solicitudes de lectura y escritura de varios usuarios. Sin embargo, a medida que aumenta la popularidad de una aplicación, se incrementa el número de usuarios y se convierte en un reto proporcionar una experiencia óptima al cliente debido a las frecuentes caídas de la base de datos.
Entonces, ¿cómo pueden los desarrolladores ampliar sus bases de datos para hacer frente a la creciente demanda? Aunque la respuesta puede variar en función del caso de uso, la fragmentación de bases de datos es un método sencillo y rentable. Es fácil de implementar y ofrece importantes mejoras de rendimiento.
A pesar de su simplicidad, la fragmentación de bases de datos puede ser un concepto confuso. Este post explicará su significado, técnicas de implementación, alternativas, beneficios y retos, y casos de uso para ayudarle a entender cuándo y cómo aplicar el método de fragmentación más adecuado.
¿Qué es la fragmentación de bases de datos?
La fragmentación de bases de datos divide una base de datos extensa en fragmentos más pequeños llamados shards y los distribuye entre varias máquinas. Cada máquina utiliza la misma tecnología y trabaja en paralelo para procesar grandes volúmenes de datos.
Es uno de los muchos métodos que ayudan a acelerar el procesamiento de datos y garantizar la alta disponibilidad. Si una sola máquina o servidor de base de datos falla por sobrecarga de peticiones, los demás servidores pueden seguir procesando las peticiones de lectura y escritura, manteniendo una experiencia de usuario fluida.
Sin embargo, la fragmentación sólo funciona mientras los datos estén disponibles y accesibles. Permite a los desarrolladores distribuir orgánicamente la carga de trabajo y reducir la latencia.
La replicación y la partición son otras técnicas para evitar el tiempo de inactividad. Estos métodos son más apropiados para bases de datos pequeñas. La replicación consiste en copiar una base de datos completa en varios servidores, mientras que la partición descompone una base de datos y la almacena en una sola máquina. En secciones posteriores se explicarán estos métodos con más detalle.
¿Cómo funciona la fragmentación de bases de datos?
La fragmentación es una forma de escalado horizontal en la que los desarrolladores instalan nodos o servidores adicionales para almacenar múltiples particiones de datos. Cada partición se convierte en una tabla independiente que comparte el mismo esquema que la base de datos original. Sin embargo, la información de cada fragmento es única, y los desarrolladores almacenan los fragmentos individuales en varios ordenadores, denominados nodos.
Por ejemplo, la siguiente tabla ilustra una única base de datos que representa información sobre los clientes y los artículos que han comprado.
| ID de cliente** Nombre** Artículo comprado** 10001 | ||
| 10001 A Camisa | ||
| 10002 B Gorra | ||
| 10003 C Camisa | ||
| 10004 D Zapatos |
Un desarrollador puede utilizar la fragmentación de bases de datos para dividir la base de datos en particiones más pequeñas, llamadas shards lógicos, en máquinas separadas o shards físicos.
**Servidor 1
Identificación de cliente Nombre Artículo comprado | 10001 A Camisa | 10002 B Gorra
Servidor 2
Identificación de cliente Nombre Artículo comprado | 10003 C Camisa | 10004 D Zapatos
La fragmentación funciona en una arquitectura compartida-nada, en la que un único nodo de un clúster de ordenadores procesa las peticiones de los usuarios de forma independiente. Cuando un usuario intenta acceder a la base de datos, sólo el fragmento que contiene la información del usuario se activa y procesa la solicitud entrante.
Los desarrolladores dividen los datos en fragmentos lógicos utilizando una clave de fragmento. Pueden seleccionar la clave basándose en una columna que organiza los datos en grupos o crear una nueva. En las siguientes secciones se explicará cómo funciona una clave de fragmentación y cómo ayuda a desarrollar grupos de datos para una fragmentación eficaz.
Métodos de fragmentación
Los desarrolladores pueden implementar múltiples técnicas de fragmentación basadas en el caso de uso y la naturaleza de los datos que quieren procesar. Entre los métodos más populares se encuentran la fragmentación basada en rangos, la fragmentación en hash, la fragmentación en directorios y la fragmentación geográfica.
Fragmentación basada en rangos
La fragmentación dinámica o basada en rangos divide una base de datos en fragmentos en función de un rango de valores específico. El siguiente diagrama ilustra cómo un desarrollador puede dividir una tabla en fragmentos utilizando un rango de precios.
Reparto basado en rangos basado en precios.png](https://assets.zilliz.com/Range_based_sharding_based_on_price_c04d22c905.png)
Fragmentación basada en rangos de precios
El ejemplo muestra tres fragmentos lógicos creados utilizando rangos de precios. El desarrollador puede asignar a cada fragmento una clave de fragmento única y almacenarlos en fragmentos físicos o máquinas independientes. Al escribir un registro en la base de datos, el sistema determinará el fragmento adecuado al que pertenecen los datos en función del rango de precios y lo actualizará en consecuencia.
Aunque la implementación de la fragmentación dinámica es sencilla, puede sobrecargar un fragmento concreto si contiene más registros que otros. En el ejemplo anterior, si más clientes compran artículos con un precio superior a 100 dólares, el volumen de datos del tercer fragmento será mayor que el de los demás.
La distribución desigual puede ir en contra del propósito de la fragmentación, ya que un único fragmento contendrá la mayor parte de los datos, provocando la ralentización del sistema. Además, el método requiere una tabla de consulta que almacene la clave única del fragmento y los rangos correspondientes.
Hashed Sharding
La fragmentación hash asigna una clave hash a cada registro en función de una columna específica. Los desarrolladores generan claves hash utilizando una función hash que toma los valores de la columna como entrada. Pueden dividir los datos determinando los registros que pertenecen a una clave o valor hash correspondiente.
Por ejemplo, los desarrolladores pueden seleccionar una columna y utilizar sus valores para generar valores hash. Estos valores pueden servir como clave para cada fragmento, y los desarrolladores pueden almacenarlos en diferentes máquinas. El diagrama siguiente ilustra el proceso.
Hashed sharding.png](https://assets.zilliz.com/Hashed_sharding_79c1b1d3d8.png)
La fragmentación hash resuelve el problema de la distribución desigual, ya que la función o algoritmo hash no necesita una clave de fragmentación definida por el usuario para dividir los datos. Sin embargo, resulta difícil consultar los datos de cada uno de los fragmentos, ya que las claves no agrupan los datos en función de ningún criterio significativo. Un algoritmo genera aleatoriamente los valores hash y divide los datos de forma ad hoc.
Por ejemplo, en la fragmentación basada en rangos, las claves reflejan los rangos de un valor concreto de la tabla y se relacionan con la estructura de datos de forma más significativa. [La consulta de fragmentos (https://zilliz.com/learn/an-ultimate-guide-to-vectorizing-structured-data) basada en rangos de valores es más rápida que la consulta de datos basada en claves hash.
Además, añadir más fragmentos o actualizar los sistemas requiere que el desarrollador vuelva a ejecutar todo el algoritmo hash en todos los registros. Este proceso es necesario para equilibrar el volumen de datos entre las máquinas, pero puede implicar un tiempo de inactividad y unos recursos informáticos considerables.
Fragmentación de directorios
La fragmentación de directorios es más flexible que los métodos anteriores. Divide los datos en función de los valores de una columna concreta y utiliza una tabla de consulta para determinar a qué fragmento pertenece un registro.
Directorio basado en zona de entrega.png](https://assets.zilliz.com/Directory_sharding_based_on_delivery_zone_72e48ce365.png)
Directorio basado en zona de entrega
Por ejemplo, la ilustración muestra cómo utilizar la columna Zona de entrega como clave de fragmentación y dividir los datos en función de las zonas a las que pertenece un cliente. El método creó cuatro fragmentos distintos, ya que la tabla tiene cuatro zonas.
A diferencia de la fragmentación basada en rangos, las particiones de datos son más versátiles, ya que no tienen que ceñirse a rangos de valores estrictos. Además, permite a los desarrolladores actualizar los fragmentos más rápidamente, ya que no tienen que generar claves algorítmicamente para todos los valores de una columna concreta.
Sin embargo, esta técnica requiere una tabla de consulta para responder a las solicitudes entrantes, lo que ralentiza la velocidad de procesamiento. Además, seleccionar una columna que genere un gran número de fragmentos puede aumentar significativamente el tamaño de la tabla de consulta y la latencia.
Selección de una clave de fragmento
Una fragmentación eficiente de la base de datos requiere que los desarrolladores determinen una clave de fragmentación apropiada para asegurar una distribución equitativa de los datos entre los fragmentos. Si la distribución es desigual, determinados fragmentos pueden convertirse en puntos calientes que contengan más datos que otros.
La clave de fragmentación también debe simplificar el proceso de consulta para aumentar la velocidad de procesamiento y evitar el tiempo de inactividad. Además, la determinación de una clave de fragmentación adecuada depende de la selección de la columna correcta.
La siguiente lista destaca tres factores importantes que los desarrolladores pueden tener en cuenta a la hora de elegir la columna más adecuada para generar la clave de fragmento.
- Cardinalidad:** La cardinalidad especifica el número máximo de fragmentos que un desarrollador puede crear basándose en valores distintos de una columna. Por ejemplo, si se selecciona una columna que contenga tres valores distintos, se crearán tres fragmentos. La fragmentación basada en directorios es útil cuando la cardinalidad de una columna es baja.
- Frecuencia: La frecuencia se refiere al porcentaje de datos que pertenecen a una determinada clave de fragmentación. Por ejemplo, en la fragmentación por rangos basada en precios, determinados rangos de precios pueden contener alrededor del 80% del total de registros, lo que da lugar a un punto caliente de datos.
- Fragmentos dinámicos:** El volumen de datos de los fragmentos dinámicos cambia a medida que cambia la demanda de una aplicación. Por ejemplo, a medida que la aplicación se hace popular, la demografía de los usuarios puede cambiar y pueden aumentar las inscripciones de clientes de entre 20 y 25 años. La fragmentación basada en rangos de edad puede dar lugar a un punto caliente de datos, ya que habrá más datos en el fragmento correspondiente al rango de edad de 20-25 años.
Para garantizar una fragmentación eficaz de la base de datos, los desarrolladores deben tener en cuenta la cardinalidad y la frecuencia de una clave de fragmentación y determinar si dará lugar a fragmentaciones dinámicas.
Comparación con alternativas
La fragmentación de bases de datos es uno de los métodos para escalar bases de datos. Otros métodos son el escalado vertical, la replicación y la partición. Comprender en qué se diferencian de la fragmentación ayudará a los desarrolladores a utilizar el método de escalado correcto para escenarios específicos.
Escalado vertical
El escalado vertical implica mejorar la capacidad de un servidor existente. Los desarrolladores pueden instalar CPUs adicionales, discos duros y otro software para mejorar el rendimiento.
Este método es útil en los casos en los que una sola máquina es suficiente para gestionar las peticiones de los usuarios y sólo se necesitan mejoras incrementales para aumentar el rendimiento.
Aunque es menos costoso que la fragmentación, sólo aumenta la capacidad del servidor de forma limitada, ya que sólo hay una máquina disponible para procesar las peticiones de los usuarios.
Replicación
La replicación se produce cuando los desarrolladores hacen copias de la misma base de datos y las almacenan en varios ordenadores. Al igual que la fragmentación, este método garantiza una alta disponibilidad, ya que si un ordenador falla, los demás permanecen activos.
La fragmentación y la replicación son similares, ya que distribuyen el procesamiento entre varios equipos. Sin embargo, la fragmentación divide los datos en varios trozos, mientras que la replicación copia los datos completos sin dividirlos.
La fragmentación es más apropiada para grandes bases de datos, ya que la replicación requiere servidores con gran capacidad de almacenamiento. Mantener y actualizar cada réplica en máquinas diferentes es costoso y requiere mucho tiempo.
Particionamiento
El particionado divide una base de datos en varios grupos y los almacena en una única máquina. Este método es adecuado cuando se desea mejorar el rendimiento de las consultas y el tamaño de la base de datos no es lo suficientemente grande como para justificar el almacenamiento de las particiones en diferentes máquinas.
Puede ayudar a optimizar el archivado de datos al permitir a los desarrolladores particionar los datos en función de la fecha y la hora. Pueden mover registros específicos con marcas de tiempo anteriores a un determinado umbral a una tabla de archivo y utilizar otra tabla para almacenar los registros más recientes.
Ventajas de la fragmentación de bases de datos
La fragmentación de bases de datos es una valiosa estrategia para la gestión eficiente de datos. Las empresas que dependen de una gran cantidad de datos para operar sus sitios web, aplicaciones y otro software basado en datos deben adoptar la fragmentación para maximizar el beneficio de su tecnología de base de datos.
La siguiente lista menciona con más detalle algunos de los beneficios que la fragmentación ofrece a las organizaciones.
Escalabilidad:** Al dividir los datos en varias máquinas, la fragmentación permite a las empresas escalar sus sistemas de bases de datos de manera más eficiente para soportar cargas de trabajo cada vez mayores.
Tiempo de inactividad mínimo:** La fragmentación garantiza una alta disponibilidad al funcionar en una arquitectura compartida. La estrategia permite una mejor experiencia de usuario, ya que el fallo de una máquina no afectará al rendimiento de las demás.
Fácil de actualizar:** La implementación de actualizaciones de rendimiento es más eficiente, ya que los desarrolladores pueden actualizar por separado las máquinas individuales sin apagar todo el sistema.
Desafíos de la fragmentación de bases de datos
Aunque la fragmentación ofrece beneficios significativos, los desarrolladores pueden enfrentarse a algunos retos que aumentan la complejidad de la implementación. La siguiente lista destaca estos problemas con posibles estrategias de mitigación.
Distribución desigual:** La incertidumbre sobre el volumen y la variedad de los datos puede provocar la aparición de puntos calientes. A pesar de contar con una clave de fragmentación eficaz, la naturaleza de los datos puede cambiar, obligando a los desarrolladores a seleccionar o crear una nueva clave. Los desarrolladores deben evaluar cuidadosamente la idoneidad de la fragmentación de bases de datos en escenarios específicos. Es posible que la replicación o el escalado vertical sean más prácticos que la fragmentación en diferentes situaciones.
Gestión compleja:** La gestión de múltiples máquinas es compleja, ya que los desarrolladores deben supervisar constantemente el estado de cada nodo para identificar y resolver los problemas rápidamente. Los sistemas de monitorización robustos con mecanismos de alerta en tiempo real pueden ayudar a mitigar estos problemas notificando a los equipos pertinentes en caso de fallos del servidor.
Costes de mantenimiento:** El mantenimiento de varios servidores locales es costoso y requiere personal adicional con la experiencia necesaria para resolver los problemas durante el mantenimiento. Las organizaciones pueden migrar a infraestructura en la nube para alojar varios fragmentos y hacer que el proveedor de la nube realice comprobaciones de mantenimiento periódicas entre bastidores.
Casos prácticos de fragmentación de bases de datos
Aunque las secciones anteriores destacan brevemente los casos de uso en los que la fragmentación es beneficiosa, la siguiente lista categoriza y explica estos escenarios con más detalle.
Aplicaciones web a gran escala:** Los sitios de comercio electrónico con una amplia base de usuarios, las plataformas de redes sociales, las aplicaciones de alquiler de coches y los sitios web de juegos son candidatos ideales para la fragmentación de bases de datos. La fragmentación puede ayudar a los administradores de estos sitios a equilibrar la carga de forma más eficaz y evitar el tiempo de inactividad durante las horas punta.
Para los usuarios que analizan grandes volúmenes de datos, la fragmentación puede ayudar a mejorar la velocidad de procesamiento distribuyendo la carga entre varios servidores.
Redes de distribución de contenidos (CDN):** Una CDN es un grupo de servidores distribuidos en distintas ubicaciones para gestionar las solicitudes de usuarios de ubicaciones geográficas cercanas. Los desarrolladores pueden fragmentar las bases de datos en función de la ubicación de los usuarios y distribuir los datos entre estos servidores para obtener tiempos de respuesta más rápidos.
Preguntas frecuentes sobre la fragmentación de bases de datos
- **¿Cuál es la diferencia entre fragmentación y partición?
Mientras que el sharding y el particionamiento dividen los datos en trozos más pequeños, el sharding distribuye cada trozo entre diferentes máquinas o nodos. Por el contrario, el particionamiento almacena cada trozo en una única máquina.
- **¿Cuál es la diferencia entre fragmentación y replicación?
La replicación copia toda la base de datos y la almacena en diferentes máquinas. En comparación con la fragmentación, que divide la base de datos en filas y almacena cada trozo en varios servidores, la replicación ofrece una mayor disponibilidad, pero requiere más recursos informáticos y capacidad de almacenamiento.
- ¿Cómo elegir la clave de fragmentación correcta?
Elegir una clave de fragmento adecuada requiere que los desarrolladores determinen la columna apropiada para dividir los datos. Una clave de fragmento debe tener baja cardinalidad e igual frecuencia.
La cardinalidad se refiere al número máximo de fragmentos posibles según los valores de las columnas. Por ejemplo, si se selecciona una columna que contenga cuatro valores distintos, se obtendrán cuatro fragmentos. La frecuencia se refiere a la proporción de datos que contiene cada fragmento.
Además, seleccione o cree shards que permanezcan estáticos durante todo el ciclo de vida de la aplicación. Los fragmentos cuyo volumen de datos es susceptible de cambiar pueden dar lugar a puntos calientes, en los que algunos fragmentos reciben más volumen que otros.
- **¿Cuáles son los principales retos de la fragmentación de bases de datos?
La fragmentación de bases de datos aumenta la sobrecarga de las consultas, ya que los desarrolladores deben escribir consultas para acceder a los datos desde varias máquinas para realizar el análisis.
También aumenta los costes de infraestructura, ya que las organizaciones deben mantener varios servidores y supervisar su estado para evitar interrupciones.
Además, la actualización y el reequilibrio de los fragmentos son complejos si aumentan el volumen y la variedad de los datos. Una técnica de fragmentación adecuada en una situación puede dejar de ser práctica en otras.
- **¿Es la fragmentación de bases de datos adecuada para aplicaciones pequeñas?
Aunque la fragmentación de bases de datos es una técnica valiosa para mejorar la velocidad de procesamiento y el rendimiento, no es adecuada para aplicaciones pequeñas. Sólo resulta práctico aplicarla cuando el volumen de datos alcanza un punto en el que resulta insostenible mantener una única base de datos en un único servidor.
Recursos relacionados
Aunque los desarrolladores suelen aplicar la fragmentación a conjuntos de datos estructurados, los siguientes recursos le ayudarán a comprender el concepto en el contexto de datos no estructurados y bases de datos vectoriales:
Sharding, Partitioning, and Segments - Getting the Most From Your Database](https://zilliz.com/blog/sharding-partitioning-segments-get-most-from-your-database)
¿Qué es un esquema dinámico?](https://zilliz.com/blog/what-is-dynamic-schema)
Despliegue de bases de datos vectoriales en entornos multi-nube](https://zilliz.com/learn/Deploying-Vector-Databases-in-Multi-Cloud-Environments)
Anatomía de un sistema de gestión de bases de datos vectoriales nativas de la nube](https://zilliz.com/blog/anatomy-of-a-cloud-native-vector-database-management-system)
Qué son las bases de datos vectoriales y cómo funcionan](https://zilliz.com/learn/what-is-vector-database)
Generative AI Resource Hub | Zilliz](https://zilliz.com/learn/generative-ai)
¿Qué es la GAR? ](https://zilliz.com/learn/Retrieval-Augmented-Generation)
Modelos de IA de alto rendimiento para tus aplicaciones de GenAI](https://zilliz.com/ai-models)
- ¿Qué es la fragmentación de bases de datos?
- ¿Cómo funciona la fragmentación de bases de datos?
- Métodos de fragmentación
- Selección de una clave de fragmento
- Comparación con alternativas
- Ventajas de la fragmentación de bases de datos
- Desafíos de la fragmentación de bases de datos
- Casos prácticos de fragmentación de bases de datos
- Preguntas frecuentes sobre la fragmentación de bases de datos
- Recursos relacionados
Contenido
Comienza Gratis, Escala Fácilmente
Prueba la base de datos vectorial completamente gestionada construida para tus aplicaciones GenAI.
Prueba Zilliz Cloud Gratis