¿Qué es el sharding de una base de datos y cómo funciona?

pablo.blanco
13/08/2024

El sharding (fragmentación) es una técnica para dividir una base de datos grande en partes más pequeñas llamadas shards (en español, fragmentos). Imagina que tu base de datos es una biblioteca gigante llena de libros. En vez de tener todo en un solo estante enorme, el sharding te permite crear varios estantes más pequeños, cada uno dedicado a un tipo específico de libros (por ejemplo, ciencia ficción, novelas, biografías).

Ventajas del sharding

El sharding, o fragmentar un gran conjunto de datos en varias bases de datos, aporta las siguientes ventajas en términos de eficiencia y almacenamiento:

Escalabilidad horizontal

Si fragmentamos un cúmulo de datos entre varias bases diferentes, la carga de procesamiento de datos entre múltiples servidores será menor. Es decir, podríamos impulsar la capacidad de procesamiento de la base de datos, con la que seríamos capaces de manejar un mayor volumen de transacciones, consultas y actualizaciones.

Además, al añadir nuevos servidores con shards, la base de datos se vuelve más escalable. Es decir, puede crecer a la par de las necesidades de la aplicación sin necesidad de una infraestructura más potente.

En materia económica, en lugar de invertir en un único servidor potente y caro, con el sharding podemos usar múltiples servidores más pequeños y económicos. Si hacemos cuentas, es posible que nos salga mucho más barato que si contratamos una base de datos gigante.

Mayor disponibilidad

Al distribuir los datos en diferentes servidores, se crea una mayor resistencia a fallos. Por tanto, si un servidor deja de funcionar, solo se pierde el acceso a los datos de ese shard. A su vez, si un shard queda inutilizable, podemos seguir accediendo a los demás sin que un fallo puntual suponga una interrupción total.

Mejora del rendimiento

Al hacer que los datos sean más accesibles para el usuario, las consultas se ejecutan más rápido, lo que reduce la latencia y mejora la experiencia del usuario. A su vez, cualquier consulta dará resultados más acertados, pues los usuarios se dirigirán al shard específico en el que se encuentran los datos relevantes.

Gestión de datos más eficiente

Con el sharding los datos quedan divididos en grupos más pequeños, independientes y manejables, por lo que se pueden analizar, administrar y recuperar con mucha más facilidad. Además, al ser independientes unos de otros, los cambios que se efectúen en un shard no efectúan a los demás.

Además, los shards no tienen por qué ser todos del mismo tamaño, sino que pueden configurarse en diferentes tamaños según las necesidades de cada conjunto de datos para optimizar recursos.

Desventajas del sharding

Aunque el sharding ofrece numerosas ventajas para gestionar grandes bases de datos, no está exento de desventajas.

La principal desventaja es su complejidad de implementación, que requiere una planificación cuidadosa para elegir la clave de sharding, definir el algoritmo de reparto y gestionar la coherencia de datos entre los diferentes shards. 

Además, las consultas que tienen que atravesar varios shards suelen ser más complejas y lentas. Por último, el sharding aumenta la complejidad del sistema, especialmente si hablamos de muchos shards, lo que exige un esfuerzo adicional en materia de gestión y mantenimiento de las bases de datos.

¿Cómo funciona el sharding?

Si bien cada empresa seguirá un proceso diferente para implementar el sharding en sus conjuntos y bases de datos, podemos explicarte a grandes rasgos un proceso inteligente para incorporar el sharding en una red informática:

1. Definir la clave de sharding:

Primero, debes elegir un campo en tus datos que te permita dividirlos de forma lógica. Esta es tu clave de sharding. Por ejemplo:

  • ID de usuario: Para una aplicación de redes sociales, podrías dividir los datos por ID de usuario, creando un shard para cada rango de ID.

  • Geolocalización: Para una aplicación de comercio electrónico, podrías dividir los datos por país o región geográfica.

  • Categoría de producto: Para un sitio web de e-commerce, puedes dividir los datos por categorías de producto (ropa, electrónica, etc.).

Escoger una clave para los shards es vital, ya que será el elemento que permita mantener una relación lógica entre estos.

2. Elegir un algoritmo de sharding:

Existen varios algoritmos para determinar a qué shard pertenece cada dato. Algunos de los más comunes son:

  • Sharding por rango: Los datos se dividen en rangos basados en la clave de sharding. Por ejemplo, todos los usuarios con ID de 1 a 1000 irían a un shard, los usuarios con ID de 1001 a 2000 a otro, etc.

  • Sharding por hash: Se utiliza una función hash para convertir la clave de sharding en un valor numérico. Este valor se utiliza para determinar a qué shard pertenece el dato.

  • Sharding por consistencia: Los datos se distribuyen de forma que se mantenga la coherencia de los datos entre los diferentes shards, algo especialmente útil para aplicaciones que requieren la actualización simultánea de datos relacionados.

3. Configurar los shards:

Una vez que se ha elegido el algoritmo de sharding, se deben configurar los shards, lo que comprende:

  • Crear las bases de datos para cada shard: Se crea una base de datos para cada shard que contendrá los datos correspondientes.

  • Definir la lógica de direccionamiento: Se necesita un mecanismo para determinar a qué shard debe ir una consulta o una actualización.

4. Implementar la lógica de direccionamiento:

La lógica de direccionamiento determina a qué shard debe ir una consulta o una actualización. Esta lógica se implementa mediante un router o proxy que intercepta las solicitudes y redirige las consultas al shard correcto.

5. Monitorizar el rendimiento:

Es importante monitorizar el rendimiento de la base de datos después de la implementación del sharding, tanto en lo que refiere a velocidad de carga, eficiencia en el procesamiento de datos y experiencia de usuario en las consultas. De esta forma, es posible identificar cualquier cuello de botella o problema de rendimiento y realizar los ajustes necesarios.

Ejemplo de sharding

Te ponemos un ejemplo sencillo y acotado con tablas para ilustrar gráficamente cuál es el sentido del sharding y cómo se representaría. Supongamos que estas tablas que contienen 30.000 datos pertenecen a un e-commerce:

Tabla 1: Usuarios

ID Nombre Dirección
1 John Doe 123 Main St
100.001 Jane Smith 456 Oak Ave
200.001 Michael Jones 789 Pine Ln
... ... ...

Tabla 2: Productos

ID Nombre Descripción Precio Stock
1 iPhone 14 Pro Smartphone premium $1000 500
2 Laptop Dell Inspiron Portátil de alta gama $800 100
3 Zapatillas Nike Air Max Zapatillas deportivas $150 200
... ... ... ... ...

Tabla 3: Pedidos

ID Fecha Usuario ID Productos Estado
1 2023-10-27 1 1, 3 Completado
2 2023-10-28 100.001 2 En proceso
3 2023-10-29 200.001 1 Cancelado
... ... ... ... ...

Podríamos optar por dividir todos los datos

  • Shard 1: Incluye usuarios con ID del 1 al 100.000.

  • Shard 2: Incluye usuarios con ID del 100.001 al 200.000.

  • Shard 3: Incluye usuarios con ID del 200.001 al 300.000.

Imagina que un usuario con ID 150.000 quiere ver su historial de pedidos. La consulta se dirigiría al Shard 2, ya que su ID cae dentro del rango del Shard 2 (100.001 - 200.000).

Ahora imaginemos que un usuario con ID 250.000 compra el producto con ID 1 (iPhone 14 Pro). La información se actualizaría en el Shard 3, puesto que su ID cae dentro del rango del Shard 3 (200.001 - 300.000).

Artículos relacionados

La programación es un campo reciente, pero desde mitades del siglo XX ha evolucionado mucho. ¡Descubre los lenguajes de programación más antiguos!
pablo.blanco

¿Cuáles son los lenguajes de programación más antiguos? ¿Son útiles hoy día?

04/09/2024

La programación es un mundo relativamente reciente, pero desde sus inicios a mitades del siglo XX ha ido evolucionando a pasos agigantados.

Denominamos vectorización de imágenes a la transformación de imágenes rasterizadas en vectores. ¡Te enseñamos a vectorizar imágenes en este post!
pablo.blanco

¿Qué es la vectorización de imágenes y cómo se hace? Minitutorial

02/09/2024

Denominamos vectorización de imágenes a la transformación de imágenes rasterizadas (es decir, con píxeles) a imágenes con vectores (operaciones matemáticas representadas gráficamente).&nb

Si bien a todos nos suenan estos acrónimos, no mucha gente tiene claras las diferencias entre una red LAN y una WAN. Aquí te explicamos cuáles son.
pablo.blanco

¿Cuáles son las diferencias entre una red LAN y WAN?

28/08/2024

Si bien a todos nos suenan estos acrónimos, no mucha gente tiene claras las diferencias entre una red LAN y una WAN.