Tecnologias/02 - Bancos de Dados/03 - NewSQL2 min
Particionamento e Escala em NewSQL
Definição
Particionamento divide o conjunto de dados em partes menores. Na distribuição entre máquinas, cada parte pode ser colocada e movimentada separadamente. Replicação mantém cópias dessas partes: dividir e copiar resolvem problemas diferentes.
No CockroachDB, as faixas de chaves são chamadas de ranges. A camada de distribuição localiza e encaminha operações para os ranges envolvidos. Referência: Distribution Layer.
Exemplo
Dados lógicos: pedidos de todos os clientes
Parte A: clientes 000–099 → réplicas em nós 1, 2 e 3
Parte B: clientes 100–199 → réplicas em nós 2, 3 e 4
Parte C: clientes 200–299 → réplicas em nós 1, 3 e 4
A ilustração mostra intervalos fixos apenas para facilitar a visualização. Os limites reais e sua movimentação dependem da implementação.
Hotspot
Um hotspot é uma concentração de acessos em uma parte dos dados. Em uma distribuição por intervalos, inserir sempre no final de uma chave crescente pode concentrar escritas na última faixa. Acrescentar máquinas não distribui automaticamente uma única chave muito disputada.
Distribuir melhor a chave pode reduzir concentração, mas também espalhar leituras que antes acessavam dados próximos. O Spanner documenta esse custo na escolha de chaves. Referência: desenho de schema.
Escala horizontal
Escala horizontal aumenta recursos adicionando nós. O ganho depende de conseguir repartir o trabalho: uma consulta que busca poucos clientes pode localizar poucas partes; um relatório global pode acessar muitas. A segunda operação adiciona tráfego e combinação de resultados.
Aprofundamento aplicado
Chave aleatória e chave temporal atendem perguntas diferentes
Uma chave temporal crescente favorece intervalos, mas pode concentrar inserções na faixa mais recente. Distribuir por hash espalha novas chaves e pode transformar um relatório temporal em leitura de muitas partes. Avalie também os índices secundários: um índice por timestamp pode reintroduzir a concentração que a PK tentou evitar. Referência: desenho de chaves no Spanner.
A movimentação tem custo transitório
Redistribuir dados após adicionar nós consome rede, disco e trabalho de coordenação. O resultado final mais equilibrado não implica melhora imediata durante a mudança. Observe tanto distribuição de bytes quanto de requisições e conflitos.
Exercício: compare três cargas: IDs diferentes aleatórios, IDs crescentes e atualizações repetidas na mesma linha. Resultado esperado: a primeira é mais distribuível; a segunda depende da organização por faixas; a terceira continua disputando o mesmo dado.
Escolher a chave é escolher quais operações permanecem locais e quais passam a reunir partes. Escreva esse custo junto com a justificativa do schema.
Relacionado: Sharding · 5. Consultas, Índices e Localidade em NewSQL.
Parte de NewSQL