> For the complete documentation index, see [llms.txt](https://sorodriguezz.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sorodriguezz.gitbook.io/docs/system-design/fundamentos-de-bases-de-datos/database-sharding.md).

# Database Sharding

Imagínese un sitio de redes sociales como Instagram, que tiene más de  **mil millones**  de usuarios activos.

Piense en lo que sucedería si intentara mantener todos los  datos **del perfil de usuario**  en un solo servidor.

Debido a la escalabilidad limitada de una sola máquina, esta se quedaría rápidamente sin espacio de almacenamiento y se ralentizaría, lo que generaría problemas de rendimiento.

¿Pero qué sucedería si dividiéramos la base de usuarios en grupos más pequeños en función de una clave como  **userId**  y almacenáramos cada grupo en servidores separados?

<figure><img src="https://68723454-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4uI4DAiXiJQvvTbHUU3Z%2Fuploads%2Ff9JsV9XHRwV9drUegEgv%2FCaptura%20de%20pantalla%202025-12-29%20a%20la(s)%2009.09.41.png?alt=media&amp;token=d0690a58-74dc-4061-8a26-17de6dcbdbff" alt="" width="375"><figcaption></figcaption></figure>

**Ejemplo:**

* Grupo 1: Usuarios con ID 0-999
* Grupo 2: Usuarios con ID 1000-1999
* Grupo 3: Usuarios con ID 2000-2999

Ahora, un único servidor sólo maneja un subconjunto de datos.

Distribuir datos de esta manera facilita la escalabilidad y la gestión de más usuarios.

Esta es la idea detrás de  **la fragmentación de base de datos** .

En este artículo, exploraremos qué es la fragmentación de bases de datos, sus beneficios, cómo funciona, los desafíos que conlleva y las mejores prácticas para implementarla.

## 1. ¿Qué es la fragmentación de bases de datos? <a href="#id-1-what-is-database-sharding" id="id-1-what-is-database-sharding"></a>

**La fragmentación de bases de datos**  es una técnica de escalamiento horizontal que se utiliza para dividir una base de datos grande en partes más pequeñas e independientes llamadas  **fragmentos** .

Estos fragmentos luego se distribuyen entre múltiples servidores o nodos, cada uno de los cuales es responsable de gestionar un subconjunto específico de los datos.

<figure><img src="https://68723454-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4uI4DAiXiJQvvTbHUU3Z%2Fuploads%2FiQLCFwiUnilayLAETshg%2FCaptura%20de%20pantalla%202025-12-29%20a%20la(s)%2009.10.28.png?alt=media&amp;token=f586552e-54f2-4456-b256-4a279fe9c95a" alt=""><figcaption></figcaption></figure>

La fragmentación es ampliamente utilizada por aplicaciones y servicios a gran escala que manejan cantidades masivas de datos, como:

* **Redes sociales:**  Instagram utiliza fragmentación para gestionar miles de millones de perfiles e interacciones de usuarios.
* **Plataformas de comercio electrónico:**  Amazon utiliza fragmentación para gestionar catálogos masivos de productos y datos de clientes.
* **Motores de búsqueda:**  Google depende de la fragmentación para indexar y recuperar miles de millones de páginas web.
* **Juegos** : las plataformas de juegos en línea utilizan fragmentación para gestionar millones de jugadores y grandes cantidades de datos de juegos.

## 2. Beneficios de la fragmentación <a href="#id-2-benefits-of-sharding" id="id-2-benefits-of-sharding"></a>

1. **Rendimiento mejorado** : al distribuir los datos entre múltiples nodos, la fragmentación puede reducir significativamente la carga en cualquier servidor individual, lo que da como resultado una ejecución de consultas más rápida y un mejor rendimiento general del sistema.
2. **Escalabilidad** : La fragmentación permite que las bases de datos crezcan horizontalmente. A medida que aumenta el volumen de datos, se pueden añadir nuevas fragmentaciones para distribuir la carga uniformemente en el clúster.
3. **Alta disponibilidad** : Con los datos distribuidos en varios fragmentos, el fallo de uno solo no afecta a todo el sistema. Otros fragmentos pueden seguir atendiendo solicitudes, lo que garantiza una alta disponibilidad.
4. **Distribución geográfica:**  la fragmentación le permite colocar fragmentos estratégicamente más cerca de sus usuarios, lo que reduce la latencia y mejora la experiencia del usuario.
5. **Costo reducido** : en lugar de escalar verticalmente invirtiendo en hardware más potente y costoso, la fragmentación permite un escalamiento rentable mediante el uso de hardware básico.

## 3. ¿Cómo funciona la fragmentación? <a href="#id-3-how-does-sharding-work" id="id-3-how-does-sharding-work"></a>

El proceso de fragmentación implica varios componentes clave, entre ellos:

1. **Clave de fragmentación** : La clave de fragmentación es un identificador único que se utiliza para determinar a qué fragmento pertenece un dato específico. Puede ser una sola columna o una combinación de columnas.
2. **Particionamiento de datos** : El particionamiento implica dividir los datos en fragmentos según su clave. Cada fragmento representa una parte del conjunto total de datos. Las estrategias comunes para particionar bases de datos son  **la fragmentación basada en rangos, hash y directorios.**
3. **Mapeo de fragmentos** : creación de un mapeo de claves de fragmentos a ubicaciones de fragmentos.
4. **Gestión de fragmentos:**  el administrador de fragmentos supervisa la distribución de datos entre fragmentos, lo que garantiza la coherencia e integridad de los datos.
5. **Enrutamiento de consultas** : el enrutador de consultas intercepta las consultas entrantes y las dirige a los fragmentos adecuados en función de la clave del fragmento.

## 4. Estrategias de fragmentación <a href="#id-4-sharding-strategies" id="id-4-sharding-strategies"></a>

**Fragmentación basada en hash**

Los datos se distribuyen mediante una función hash, que asigna los datos a un fragmento específico.

<figure><img src="https://68723454-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4uI4DAiXiJQvvTbHUU3Z%2Fuploads%2FUlGuv9KjNuBvbpl0rVUV%2FCaptura%20de%20pantalla%202025-12-29%20a%20la(s)%2009.11.28.png?alt=media&amp;token=a044007c-3514-4bc3-a923-44e6d396b629" alt="" width="375"><figcaption></figcaption></figure>

* **Ejemplo:** `Hash(user_id) % 2`  determina el número de fragmento para un usuario y distribuye a los usuarios de manera uniforme en 2 fragmentos.

**Fragmentación basada en rangos**

Los datos se distribuyen en función de un rango de valores, como fechas o números.

<figure><img src="https://68723454-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4uI4DAiXiJQvvTbHUU3Z%2Fuploads%2FTf8Pc47ufwtMFUzekTKF%2FCaptura%20de%20pantalla%202025-12-29%20a%20la(s)%2009.12.01.png?alt=media&amp;token=39c78a11-ea06-457f-b510-71546a3382aa" alt="" width="375"><figcaption></figcaption></figure>

* **Ejemplo:**  el fragmento 1 contiene registros con ID de 1 a 10000, el fragmento 2 contiene registros con ID de 10001 a 20000, y así sucesivamente.

**Fragmentación basada en la geografía**

Los datos se distribuyen según la ubicación geográfica.

* **Ejemplo:**  Shard 1 atiende a usuarios en América del Norte, Shard 2 atiende a usuarios en Europa, Shard 3 atiende a usuarios en Asia.

**Fragmentación basada en directorios**

Mantiene una tabla de búsqueda que asigna directamente claves específicas a fragmentos específicos.

<figure><img src="https://68723454-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4uI4DAiXiJQvvTbHUU3Z%2Fuploads%2FTMFEzimFCwyQW6tViSvi%2FCaptura%20de%20pantalla%202025-12-29%20a%20la(s)%2009.12.27.png?alt=media&amp;token=c817ff02-0dd5-42e0-8e90-aa3834a21ed4" alt="" width="563"><figcaption></figcaption></figure>

## 5. Desafíos de la fragmentación <a href="#id-5-challenges-with-sharding" id="id-5-challenges-with-sharding"></a>

1. **Complejidad** : la fragmentación introduce una complejidad adicional, que requiere una planificación y una gestión cuidadosas.
2. **Coherencia de los datos** : mantener la coherencia de los datos entre fragmentos puede ser un desafío, especialmente cuando es necesario unir o agregar datos desde múltiples fragmentos.
3. **Uniones entre fragmentos:**  realizar uniones entre múltiples fragmentos puede ser complejo y costoso en términos computacionales.
4. **Reequilibrio de datos:**  a medida que crecen los volúmenes de datos, los fragmentos pueden distribuirse de manera desigual, lo que requiere un reequilibrio para mantener un rendimiento óptimo.

## 6. Mejores prácticas para la fragmentación <a href="#id-6-best-practices-for-sharding" id="id-6-best-practices-for-sharding"></a>

* **Elija la clave de fragmentación adecuada** : seleccione una clave de fragmentación que garantice una distribución uniforme de los datos entre los fragmentos y se alinee con los patrones de acceso de la aplicación.
* **Utilice hash consistente** : implemente un algoritmo hash consistente para minimizar el movimiento de datos al agregar o eliminar fragmentos.
* **Monitoreo y reequilibrio de fragmentos** : Monitoree periódicamente el rendimiento de los fragmentos y la distribución de datos. Reequilibre los fragmentos según sea necesario para garantizar un rendimiento y una distribución de datos óptimos.
* **Maneje consultas entre fragmentos de manera eficiente** : optimice las consultas que requieren datos de múltiples fragmentos mediante técnicas como la federación de consultas o la desnormalización de datos.
* **Plan de escalabilidad** : Diseñe su estrategia de fragmentación teniendo en cuenta el crecimiento futuro. Considere cómo escalará el sistema a medida que aumente el volumen de datos y el tráfico.

## 7. Conclusión <a href="#id-7-conclusion" id="id-7-conclusion"></a>

En resumen, la fragmentación de bases de datos es una técnica poderosa para escalar bases de datos horizontalmente y manejar grandes cantidades de datos, pero implica una complejidad adicional y requiere una planificación cuidadosa y una comprensión de los patrones de acceso a los datos de la aplicación.

Antes de implementar la fragmentación, piense si los beneficios superan los costos o si existe una solución más simple.
