Particionamento e Replicação de Dados
O particionamento de dados divide um banco de dados em múltiplos nós para escalabilidade, enquanto a replicação mantém cópias dos dados em vários nós para disponibilidade e desempenho de leitura; juntos, eles determinam como um banco de dados distribuído escala e tolera falhas.
Definition
O particionamento (fragmentação ou sharding) divide as linhas ou colunas de uma relação entre múltiplos nós, de modo que cada um contenha uma porção dos dados; a replicação armazena cópias dos mesmos dados em múltiplos nós; as políticas de alocação e replicação governam conjuntamente a escalabilidade, disponibilidade e balanceamento de carga.
Scope
Este tópico aborda como os dados são alocados entre os nós: particionamento horizontal (sharding) por intervalo, hash ou lista e particionamento vertical por coluna; estratégias de particionamento, incluindo hashing consistente; e modelos de replicação — síncrona versus assíncrona, primário-backup versus multi-primário — juntamente com as compensações de consistência-disponibilidade que implicam. Ele trata de como o particionamento permite o paralelismo e como a replicação permite a tolerância a falhas. Exclui os protocolos de commit e consenso que mantêm as réplicas em acordo, que são um tópico adjacente.
Core questions
- Como o particionamento por intervalo, hash e lista distribui as linhas entre os nós?
- Quando o particionamento vertical é preferível ao particionamento horizontal?
- Como o hashing consistente limita o movimento de dados quando nós são adicionados ou removidos?
- Quais são as compensações entre a replicação síncrona e assíncrona?
- Como a replicação primário-backup e multi-primário diferem em consistência e disponibilidade?
Key concepts
- particionamento horizontal (sharding)
- particionamento vertical
- particionamento por intervalo, hash e lista
- hashing consistente
- replicação síncrona versus assíncrona
- replicação primário-backup
- replicação multi-primário
- chave de partição e balanceamento de carga
Key theories
- Particionamento horizontal e vertical
- O particionamento horizontal (sharding) distribui as linhas de uma tabela entre os nós por uma chave de partição para espalhar a carga e permitir o processamento paralelo, enquanto o particionamento vertical divide uma tabela por colunas; a função de particionamento afeta criticamente o balanceamento de carga e a localidade da consulta.
- Hashing consistente
- O hashing consistente mapeia chaves e nós para um anel de modo que adicionar ou remover um nó move apenas uma pequena e limitada fração de chaves, tornando-o uma técnica fundamental para particionamento em armazenamentos de dados distribuídos elásticos.
- Modelos e compensações de replicação
- A replicação síncrona mantém cópias idênticas ao custo de latência e disponibilidade sob partições, enquanto a replicação assíncrona é mais rápida, mas pode servir dados desatualizados; o primário-backup centraliza as escritas, enquanto o multi-primário permite escritas em qualquer lugar ao custo da resolução de conflitos.
Clinical relevance
O particionamento e a replicação são as alavancas que permitem que os sistemas de dados escalem e permaneçam disponíveis: o sharding permite que um único banco de dados lógico atenda a cargas de trabalho que nenhuma máquina individual conseguiria lidar, e a replicação mantém os serviços funcionando e rápidos em caso de falhas e entre regiões, tornando essas técnicas centrais para toda plataforma de dados em larga escala.
History
A fragmentação e a replicação foram estudadas em sistemas de banco de dados distribuídos iniciais do final dos anos 1970 e 1980. O hashing consistente, introduzido por Karger e colegas em 1997 para cache web, foi posteriormente adotado por armazenamentos de chave-valor escaláveis como um esquema de particionamento, e grandes serviços de internet popularizaram o sharding e a replicação agressivos para elasticidade e disponibilidade.
Key figures
- M. Tamer Özsu
- Patrick Valduriez
- David Karger
Related topics
Seminal works
- ozsu2011
- karger1997
Frequently asked questions
- Qual é a diferença entre particionamento e replicação?
- O particionamento divide os dados de modo que cada nó contenha um subconjunto diferente, o que distribui o armazenamento e a carga para escalabilidade. A replicação mantém cópias dos mesmos dados em múltiplos nós para disponibilidade e leituras mais rápidas. A maioria dos grandes sistemas faz ambos: os dados são fragmentados entre os nós, e cada fragmento é replicado várias vezes.
- Por que usar hashing consistente em vez de particionamento por hash simples?
- Com o particionamento por hash comum baseado em módulo, a alteração do número de nós remapeia quase todas as chaves, forçando um movimento massivo de dados. O hashing consistente organiza chaves e nós em um anel de modo que adicionar ou remover um nó apenas reatribui as chaves próximas a esse nó, mantendo o rebalanceamento barato à medida que o cluster cresce ou diminui.