Otimização de consulta em sistemas distribuídos

Este capítulo discute a otimização de consulta em sistema de banco de dados distribuído.

Arquitetura de processamento de consulta distribuída

Em um sistema de banco de dados distribuído, o processamento de uma consulta compreende a otimização em nível global e local. A consulta entra no sistema de banco de dados no cliente ou site de controle. Aqui, o usuário é validado, a consulta é verificada, traduzida e otimizada em nível global.

A arquitetura pode ser representada como -

Mapeamento de consultas globais em consultas locais

O processo de mapeamento de consultas globais para consultas locais pode ser realizado da seguinte forma -

  • As tabelas exigidas em uma consulta global têm fragmentos distribuídos em vários sites. Os bancos de dados locais possuem informações apenas sobre dados locais. O site de controle usa o dicionário de dados global para reunir informações sobre a distribuição e reconstruir a visão global dos fragmentos.

  • Se não houver replicação, o otimizador global executa consultas locais nos sites onde os fragmentos estão armazenados. Se houver replicação, o otimizador global selecionará o site com base no custo de comunicação, carga de trabalho e velocidade do servidor.

  • O otimizador global gera um plano de execução distribuído para que a menor quantidade de transferência de dados ocorra nos sites. O plano indica a localização dos fragmentos, a ordem em que as etapas da consulta precisam ser executadas e os processos envolvidos na transferência de resultados intermediários.

  • As consultas locais são otimizadas pelos servidores de banco de dados locais. Por fim, os resultados da consulta local são mesclados por meio da operação de união no caso de fragmentos horizontais e da operação de união para fragmentos verticais.

Por exemplo, consideremos que o seguinte esquema de projeto é fragmentado horizontalmente de acordo com a cidade, sendo as cidades Nova Delhi, Calcutá e Hyderabad.

PROJETO

PId Cidade Departamento Status

Suponha que haja uma consulta para recuperar detalhes de todos os projetos cujo status é “Em andamento”.

A consulta global será & inus;

$$ \ sigma_ {status} = {\ pequeno "em andamento"} ^ {(PROJETO)} $$

A consulta no servidor de Nova Delhi será -

$$ \ sigma_ {status} = {\ pequeno "em andamento"} ^ {({NewD} _- {PROJECT})} $$

A consulta no servidor de Calcutá será -

$$ \ sigma_ {status} = {\ pequeno "em andamento"} ^ {({Kol} _- {PROJETO})} $$

A consulta no servidor de Hyderabad será -

$$ \ sigma_ {status} = {\ small "em andamento"} ^ {({Hyd} _- {PROJECT})} $$

Para obter o resultado geral, precisamos unir os resultados das três consultas da seguinte forma -

$ \ sigma_ {status} = {\ small "em andamento"} ^ {({NewD} _- {PROJECT})} \ cup \ sigma_ {status} = {\ small "em andamento"} ^ {({kol} _- {PROJETO})} \ cup \ sigma_ {status} = {\ pequeno "em andamento"} ^ {({Hyd} _- {PROJETO})} $

Otimização de Consulta Distribuída

A otimização de consulta distribuída requer a avaliação de um grande número de árvores de consulta, cada uma das quais produz os resultados necessários de uma consulta. Isso se deve principalmente à presença de grande quantidade de dados replicados e fragmentados. Portanto, o objetivo é encontrar uma solução ótima em vez da melhor solução.

Os principais problemas para otimização de consulta distribuída são -

  • Utilização ótima de recursos no sistema distribuído.
  • Negociação de consultas.
  • Redução do espaço de solução da consulta.

Utilização ótima de recursos no sistema distribuído

Um sistema distribuído possui vários servidores de banco de dados em vários sites para executar as operações pertencentes a uma consulta. A seguir estão as abordagens para a utilização ideal de recursos -

Operation Shipping- No envio da operação, a operação é executada no site onde os dados estão armazenados e não no site do cliente. Os resultados são então transferidos para o site do cliente. Isso é apropriado para operações onde os operandos estão disponíveis no mesmo site. Exemplo: operações de seleção e projeto.

Data Shipping- No envio de dados, os fragmentos de dados são transferidos para o servidor de banco de dados, onde são executadas as operações. Isso é usado em operações onde os operandos são distribuídos em sites diferentes. Isso também é apropriado em sistemas onde os custos de comunicação são baixos e os processadores locais são muito mais lentos do que o servidor cliente.

Hybrid Shipping- Esta é uma combinação de envio de dados e operação. Aqui, os fragmentos de dados são transferidos para os processadores de alta velocidade, onde a operação é executada. Os resultados são então enviados para o site do cliente.

Query Trading

No algoritmo de negociação de consulta para sistemas de banco de dados distribuídos, o site de controle / cliente para uma consulta distribuída é chamado de comprador e os sites onde as consultas locais são executadas são chamados de vendedores. O comprador formula uma série de alternativas para escolher vendedores e reconstruir os resultados globais. O objetivo do comprador é atingir o custo ideal.

O algoritmo começa com o comprador atribuindo subconsultas aos sites dos vendedores. O plano ideal é criado a partir de planos de consulta otimizados locais propostos pelos vendedores, combinados com o custo de comunicação para reconstruir o resultado final. Uma vez que o plano global ótimo é formulado, a consulta é executada.

Redução do Espaço de Solução da Consulta

A solução ideal geralmente envolve a redução do espaço da solução, de modo que o custo da consulta e da transferência de dados seja reduzido. Isso pode ser alcançado por meio de um conjunto de regras heurísticas, assim como as heurísticas em sistemas centralizados.

A seguir estão algumas das regras -

  • Execute as operações de seleção e projeção o mais cedo possível. Isso reduz o fluxo de dados na rede de comunicação.

  • Simplifique as operações em fragmentos horizontais, eliminando as condições de seleção que não são relevantes para um determinado local.

  • No caso de operações de junção e união compostas por fragmentos localizados em vários sites, transfira os dados fragmentados para o site onde a maioria dos dados está presente e execute a operação nele.

  • Use a operação semi-join para qualificar tuplas que devem ser unidas. Isso reduz a quantidade de transferência de dados que, por sua vez, reduz os custos de comunicação.

  • Mescle as folhas e subárvores comuns em uma árvore de consulta distribuída.