Sobes.tech
Middle+

¿Qué es el sharding horizontal?

sobes.tech AI

Respuesta de la IA

El sharding horizontal es una técnica de escalabilidad de bases de datos que consiste en dividir los datos en partes, llamadas shards, y distribuir estos shards en varios servidores independientes. Cada shard contiene un subconjunto de todas las filas de la tabla, pero mantiene todas las columnas.

Ventajas del sharding horizontal:

  • Escalabilidad: Permite manejar un volumen creciente de datos y tráfico añadiendo nuevos servidores para almacenar shards.
  • Rendimiento: Reduce la cantidad de datos con los que trabaja cada servidor, acelerando la ejecución de consultas.
  • Disponibilidad: Si un shard se vuelve inaccesible, los otros shards continúan funcionando.
  • Reducción de carga: Distribuye la carga de entrada/salida entre varios servidores.

Desventajas del sharding horizontal:

  • Complejidad: La implementación y gestión del sharding requiere esfuerzos ingenieriles significativos.
  • Transacciones distribuidas: Las transacciones que abarcan varios shards son complejas de implementar y pueden reducir el rendimiento.
  • Rebalanceo: La redistribución de datos entre shards al cambiar la carga o añadir nuevos servidores puede ser un proceso complejo y que consume recursos.
  • Consultas entre shards: Las consultas que requieren combinar datos de diferentes shards (consultas con JOIN) pueden ser ineficientes.

Métodos de sharding:

  • Sharding por rango: Los datos se distribuyen en función de un rango de valores en la clave de sharding.
  • Sharding por hash: Los datos se distribuyen en función del valor hash de la clave de sharding.
  • Sharding directorio: Una tabla de mapeo indica en qué shard se encuentran ciertos datos o rangos de datos.

Ejemplo simplificado de concepto de sharding:

Se tiene una tabla de usuarios con un gran volumen de datos. En lugar de almacenar todos los usuarios en un solo servidor, se pueden dividir en shards por la primera letra del apellido:

  • Shard 1: Usuarios con apellidos desde A hasta E
  • Shard 2: Usuarios con apellidos desde J hasta L
  • Shard 3: Usuarios con apellidos desde M hasta S
  • Shard 4: Usuarios con apellidos desde T hasta Y

Cada shard se almacena en un servidor separado.

<?php

// Función de ejemplo que determina el shard en función del apellido
function determineShardByLastName(string $lastName): int
{
    $firstLetter = mb_strtoupper(mb_substr($lastName, 0, 1));

    if ($firstLetter >= 'А' && $firstLetter <= 'Е') {
        return 1;
    } elseif ($firstLetter >= 'Ж' && $firstLetter <= 'Л') {
        return 2;
    } elseif ($firstLetter >= 'М' && $firstLetter <= 'С') {
        return 3;
    } elseif ($firstLetter >= 'Т' && $firstLetter <= 'Я') {
        return 4;
    }

    return 0; // Devuelve 0 para casos indefinidos
}

// Uso
$lastName = "Иванов";
$shardId = determineShardByLastName($lastName);
// En un sistema real, se conectaría a la base de datos correspondiente al shard

?>