Tecnologias/02 - Bancos de Dados/03 - NewSQL2 min
Consultas, Índices e Localidade em NewSQL
Definição
Uma consulta distribuída executa operações em nós que possuem os dados necessários e combina resultados. O planejador escolhe acessos e formas de execução considerando índices, filtros e outras características do sistema.
Um índice secundário cria outro caminho de acesso. Ele também precisa ser atualizado quando os valores indexados mudam. Em um banco distribuído, essa manutenção pode envolver partes e nós diferentes. Referência: SQL Layer.
Exemplo
Considere uma tabela de pedidos com campos cliente_id, data e total:
SELECT SUM(total)
FROM pedidos
WHERE cliente_id = 42;
Se os pedidos desse cliente estão próximos e existe um acesso adequado, a consulta pode ler uma parte pequena do conjunto. Uma soma sem filtro pode exigir leitura e agregação distribuídas. O SQL é curto nos dois casos, mas o trabalho físico difere.
Localidade
Localidade é a proximidade entre dados acessados juntos e entre esses dados e o local de execução. Colocar dados relacionados próximos pode diminuir comunicação em algumas operações; a escolha também afeta a distribuição de carga.
Por exemplo, organizar primeiro por cliente favorece consultas de um cliente. Organizar primeiro por data pode favorecer intervalos globais, mas chaves temporais crescentes podem concentrar inserções, conforme o particionamento. Referência: schema e distribuição no Spanner.
Como interpretar o custo
Uma consulta lenta pode refletir muitos dados lidos, muitos nós consultados ou disputa por uma faixa de chaves. Uma réplica próxima também não implica que qualquer leitura possa usá-la com a mesma garantia de atualidade.
Aprofundamento aplicado
O índice pode economizar leitura e acrescentar coordenação
Um índice de pedidos por estado ajuda o painel operacional, mas cada mudança de estado pode atualizar entradas em outras faixas. Cobrir a consulta com colunas adicionais reduz buscas da linha base e amplia dados mantidos nas escritas.
Cenário: uma tela pede vinte pedidos e faz uma consulta adicional por cliente. Mesmo com cada consulta rápida, viagens de rede repetidas acumulam latência. Um join, lote de chaves ou projeção apropriada pode reduzir viagens; o plano deve mostrar se a combinação dos dados também espalhou muito trabalho no cluster.
Medir amplificação
Registre linhas retornadas, linhas lidas, nós participantes, bytes de rede e tempo em coordenação. Uma consulta que retorna dez linhas pode tocar milhares de entradas ou várias regiões. O tamanho da resposta não resume o custo da execução.
Exercício: compare um filtro com a chave de localidade e outro apenas por estado. Resultado esperado: explicar qual consulta pode ser direcionada e qual precisa reunir resultados de várias partes, conforme o schema escolhido.
Referência: camada SQL e execução.
Relacionado: 2. Particionamento e Escala em NewSQL · 5. Índices.
Parte de NewSQL