Distribuição de Dados

Uma das partes mais interessantes de estudar sharding é perceber que distribuir os dados não resolve sozinho o problema de crescer. A regra que você usa para distribuir também precisa aguentar esse crescimento.

Sharding na entrevista de System Design: você sabe explicar o que acontece quando entra mais um servidor?

Distribuição por Faixa

Distribuir por faixa facilita algumas consultas, mas pode concentrar as escritas numa única partição. Se a divisão acompanha uma data crescente, por exemplo, os registros novos acabam indo para o mesmo lugar.

Hash Consistente

Usar hash ajuda a espalhar as chaves, mas não garante uma distribuição equilibrada de carga. Um único usuário muito acessado pode continuar sobrecarregando uma partição.

Partição Lógica

Uma ideia que ajuda a organizar isso é separar as partições lógicas das máquinas físicas. Você distribui os dados em vários grupos e depois associa esses grupos aos servidores. Assim, consegue mover alguns grupos sem precisar redefinir o destino de todas as chaves.

Escolha da Chave de Particionamento

A escolha da chave de particionamento é crucial. Ela define quais operações serão simples e quais ficarão caras. Distribuir por usuário pode facilitar a busca dos dados daquele usuário, mas tornar mais trabalhosa uma consulta que atravessa vários deles.

Balanceamento de Carga

Sharding é crucial para escalabilidade, mas requer cuidado na escolha da chave de particionamento e no balanceamento de carga.

Vídeo

Preparo um vídeo sobre esse caminho, de particionamento por faixa até hash consistente e partições lógicas, usando exemplos de supermercado, baralho e caixas de mudança. É o quarto episódio de uma série que estou produzindo sobre fundamentos de programação na era da IA.

Quem já trabalhou com isso em produção

Para quem já trabalhou com sharding em produção, o que deu mais trabalho foi escolher a chave de particionamento, mover os dados ou lidar com as consultas depois?

Fonte: https://www.youtube.com/watch?v=Nh1q7rcT_Xw

EntrevistaMaisShardingSystemVoce