Sobes.tech
Middle+

O que é sharding horizontal?

sobes.tech IA

Resposta da IA

O sharding horizontal é uma técnica de escalabilidade de bases de dados que consiste em dividir os dados em partes, chamadas shards, e distribuir esses shards por vários servidores independentes. Cada shard contém um subconjunto de todas as linhas da tabela, mantendo todas as colunas.

Vantagens do sharding horizontal:

  • Escalabilidade: Permite lidar com um volume crescente de dados e tráfego adicionando novos servidores para armazenar shards.
  • Desempenho: Reduz a quantidade de dados com que cada servidor trabalha, acelerando a execução de consultas.
  • Disponibilidade: Se um shard ficar indisponível, os outros shards continuam a funcionar.
  • Redução de carga: Distribui a carga de entrada/saída por vários servidores.

Desvantagens do sharding horizontal:

  • Complexidade: A implementação e gestão do sharding requerem esforços de engenharia significativos.
  • Transações distribuídas: Transações que abrangem vários shards são complexas de implementar e podem diminuir o desempenho.
  • Rebalanceamento: A redistribuição de dados entre shards ao alterar a carga ou adicionar novos servidores pode ser um processo complexo e que consome recursos.
  • Consultas entre shards: Consultas que requerem combinar dados de diferentes shards (consultas com JOIN) podem ser ineficientes.

Métodos de sharding:

  • Sharding por intervalo: Os dados são distribuídos com base em um intervalo de valores na chave de sharding.
  • Sharding por hash: Os dados são distribuídos com base no valor hash da chave de sharding.
  • Sharding por diretório: Uma tabela de mapeamento indica em qual shard certos dados ou intervalos de dados estão localizados.

Exemplo simplificado de conceito de sharding:

Tem-se uma tabela de utilizadores com um grande volume de dados. Em vez de armazenar todos os utilizadores num único servidor, podem-se dividir em shards por letra inicial do sobrenome:

  • Shard 1: Utilizadores com sobrenomes de A a E
  • Shard 2: Utilizadores com sobrenomes de J a L
  • Shard 3: Utilizadores com sobrenomes de M a S
  • Shard 4: Utilizadores com sobrenomes de T a Y

Cada shard é armazenado num servidor separado.

<?php

// Exemplo de função que determina o shard com base no sobrenome
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; // Retorna 0 para casos indefinidos
}

// Uso
$lastName = "Иванов";
$shardId = determineShardByLastName($lastName);
// Em um sistema real, seria necessário conectar-se à base de dados do shard correspondente

?>