CAPÍTULO 3. INTRODUÇÃO AO PROCESSAMENTO DE CONSULTAS
3.1 ETAPAS DO PROCESSAMENTO DE COMANDOS DA LMD
O propósito deste capítulo é posicionar o leitor quanto ao problema de se processar consultas e atualizações em bancos de dados centralizados ou distribuídos. Inicialmente, uma visão geral do problema é apresentada, indicando em linhas gerais todo o processo. Em seguida, a LMD tomada como exemplo neste texto, SQL, é definida. Por fim, o subsistema responsável pelo armazenamento interno do banco de dados é descrito. Assim, o problema em questão fica fixado em como traduzir comandos de SQL para operações do subsistema de armazenamento.
Em toda discussão será suposto que o SGBDD é homogêneo.
3.1 ETAPAS DO PROCESSAMENTO DE COMANDOS DA LMD
Processamento de consultas e atualizações em um banco de dados distribuído corresponde à tradução de pedidos, formulados em uma linguagem de alto nível, para seqüências de ações elementares sobre os dados armazenados nos vários bancos de dados locais. Mesmo abstraindo os problemas de falhas no sistema e acessos concorrentes aos dados, este é um problema difícil e a LMD é de alto nível e não-procedimental.
O propósito desta seção é indicar em linhas gerais como este problema pode ser subdividido em problemas mais simples. O resultado será uma arquitetura para o processador de comandos da LMD. Todos os problemas referentes a falhas e acesso concorrente aos dados são supostos resolvidos por camadas inferiores do SGBDD. Ou seja, para o processador de comandos tudo se passa como se o sistema fosse perfeitamente confiável e monoprogramado.
A estrutura do processador de comandos da LMD é induzida pela organização imposta à descrição de bancos de dados distribuídos. Lembremos que a descrição é dividida em quatro níveis: externo, conceitual global, conceitual local e interno local. A nível externo, os diversos grupos de usuários vêem os dados que lhes interessam através de esquemas externos EE1 , ... , EEm . Cada esquema externo EEj é mapeado no esquema conceitual global, ECG, que define a totalidade do banco a nível conceitual global. A distribuição do banco é definida em duas etapas. Inicialmente, a distribuição é definida a nível lógico mapeando-se o esquema conceitual global em uma coleção ECL1 , ... , ECLn de esquemas conceituais locais, um para cada nó onde o banco será armazenado, onde o esquema ECLi descreve o banco de dados local do nó i a nível lógico. Como último passo do processo, a estrutura interna de cada banco de dados local é definida por um esquema interno EIi (o esquema conceitual local ECLi, naturalmente, deverá ser mapeado no esquema interno local EIi).
Assim, um comando sobre um esquema externo sofrerá as seguintes transformações (ver Figura 3.1):
1. tradução para o esquema conceitual global;
2. tradução para os esquemas conceituais locais;
3. processamento local e transferência de dados; e 4. pós-processamento global.
Figura 3.1 -Processamento de Comandos Distribuídos
Consideremos inicialmente o caso mais simples de um sistema homogêneo. A etapa inicial, tradução para o esquema conceitual global, transforma o comando submetido pelo usuário, como formulado em termos do esquema externo a que ele tem acesso, em um comando equivalente, mas formulado em termos do esquema conceitual global. A etapa seguinte, tradução para os esquemas conceituais locais, consiste da tradução do comando, formulado agora em termos do esquema conceitual global, para uma seqüência de comandos locais e transferências de dados. Esta etapa é inteiramente diferente do processamento de comandos em um banco de dados centralizado e deverá resolver os problemas inerentes à distribuição do banco. A fase de otimização nesta etapa é a parte crucial do processo. A terceira etapa, processamento local e transferência de dados, consiste em resolver comandos locais através do SGBD local. A resolução de um comando local poderá, no entanto, envolver transferência prévia de dados.
O processamento de comandos locais é idêntico ao caso centralizado. Novamente, em termos dos esquemas que compõem a descrição do banco de dados local, podemos distinguir duas etapas neste caso (ver Figura 3.2):
1. Tradução para o Esquema Interno.
2. Tradução para Acessos Físicos.
Figura 3.2 - Fases do Processamento de Comandos Locais
A etapa de tradução para acessos físicos será estudada formulando-se uma máquina abstrata, ou subsistema do SGBD, responsável pelo armazenamento físico do banco de dados. Chamaremos esta máquina de subsistema de armazenamento (SAR). Este subsistema está dividido em dois níveis:
nível interno: define a interface oferecida por este subsistema ao processador de comandos. A complexidade e eficiência do SGBD dependem em grande parte da variedade e sofisticação das operações oferecidas pelo SAR a este nível.
nível físico: define as estruturas físicas finais e os respectivos acessos físicos a que estão sujeitas.
A etapa de tradução para o esquema interno mapeia um comando formulado em termos do esquema conceitual local para uma seqüência de operações do SAR. Esta é a etapa principal do processo e, como em uma compilação tradicional, possui quatro fases distintas: análise sintática, otimização, geração de código e execução.
Finalmente, a etapa de pós-processamento é necessária pois o resultado de um comando poderá ser deixado sob forma de uma relação distribuída pelas etapas anteriores. Logo, é necessário reunir os fragmentos do resultado em um único nó e entregá-lo ao usuário. Isto conclui a discussão sobre SGBDDs homogêneos. O caso heterogêneo é mais complicado na medida em que os esquemas externos e os esquemas conceituais locais não necessariamente estão no mesmo modelo de dados do esquema conceitual global. Isto torna a primeira e a última etapas mais complexas e está fora do escopo deste texto.
O resto deste capítulo define a LMD e o SAR a serem usados como exemplo no texto. Note que ambos definem, respectivamente, a linguagem-fonte e a linguagem-objeto do processador de comandos.
3.2 UMA LINGUAGEM DE DEFINIÇÃO E MANIPULAÇÃO DE DADOS