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
?>