• Nenhum resultado encontrado

2. FUNDAMENTAÇÃO TEÓRICA

4.3 Processamento de Consultas Usando SB-index

As consultas SOLAP que incidem sobre o DWG possuem predicados convencionais e espaciais. O SB-index avalia o predicado espacial e indica as chaves primárias dos objetos espaciais que satisfazem este predicado. De posse destas chaves, cria-se um novo predicado convencional que é combinado àqueles já existentes na consulta. Então, um Índice Bitmap de Junção pode ser empregado para avaliar todos eles e prover a resposta completa para a consulta SOLAP. Assim, como ilustra a Figura 35, o processamento de consultas usando o SB-index é dividido em duas etapas. A primeira exige um percurso seqüencial sobre o SB-index e a adição de candidatos (possíveis respostas) a uma coleção (passos 1 a 3 da Figura 35). A segunda etapa requer checar quais candidatos são realmente respostas da consulta submetida ao DWG, criando um predicado convencional para as respostas encontradas (passos 3 a 5 da Figura 35).

Figura 35 – O processamento de consultas usando o SB-index.

Durante a busca feita sobre o arquivo do SB-index (passo 1), cada página de disco deve ser lida e copiada para um buffer na memória primária. Depois da cópia, percorre- se o buffer seqüencialmente, verificando para cada entrada se o seu MBR satisfaz o predicado espacial (passo 2). Em caso positivo, o valor da chave correspondente deve ser adicionado a

uma coleção de dados (passo 3). Após a busca seqüencial sobre o SB-index, todos os candidatos que satisfizerem o predicado espacial terão sido colecionados. Basicamente, esta etapa filtra as possíveis respostas.

Uma segunda etapa verifica quais candidatos são, de fato, respostas para o predicado espacial. Esta etapa é o refinamento, que acessa a tabela de dimensão espacial usando as chaves primárias dos candidatos (passo 4). Ele obtém os objetos espaciais originais e os avalia em relação ao predicado espacial da consulta. Esta avaliação é realizada usando as funções disponibilizadas pelo SGBD. Se um determinado objeto satisfaz o predicado espacial, então a sua chave primária é usada para compor um novo predicado convencional (passo 5). É exatamente neste ponto que o SB-index transforma o predicado espacial em um predicado convencional, da maneira que segue.

As chaves primárias de todos os objetos espaciais que satisfazem o predicado espacial são concatenadas a uma cadeia de caracteres (string). A Figura 35 exemplifica esta concatenação: primeiro concatena-se “PK=1”, depois, “OR PK=9”, resultando em “PK=1 OR PK=9”. A string resultante representa fielmente o predicado convencional que é gerado a partir do predicado espacial. Considerando que a consulta SOLAP foi escrita sem o predicado espacial e que também consiste em outra string, então basta concatenar a string do predicado convencional à string da consulta SOLAP, para que a transformação do predicado espacial em predicado convencional esteja completa. Por fim, esta nova consulta é repassada ao software FastBit, o qual manipula um Índice Bitmap de Junção para respondê-la.

O algoritmo do processamento de consultas usando o SB-index é apresentado na Figura 36.

Sejam:

idx: o arquivo do SB-index;

L: a capacidade de objetos do tipo sbitvector que uma página de disco armazena; R: um relacionamento espacial (intersecta, contém ou está contido);

jc: a janela de consulta espacial;

candidatos: uma porção da memória primária para acomodar as chaves primárias dos objetos

espaciais considerados candidatos à resposta do predicado espacial;

predicado_conv: uma string que conterá o predicado convencional resultante do

processamento de consultas do SB-index;

T: uma tabela de dimensão espacial;

pk: o atributo que compõe a chave primária da tabela T; ae: o atributo espacial da tabela T (i.e. geometria do objeto); consulta: a string da consulta SOLAP sem o predicado espacial; resposta: o conjunto solução da consulta;

Busca_Seqüencial(idx, L, R, jc, candidatos, predicado_conv, T, pk, ae, consulta, resposta)

Saída: resposta da consulta SOLAP Declarações: página, buffer

01 abra (idx)

02 n ← 0

03 enquanto não (eof (idx))

04 leia (idx, página)

05 copie (página, buffer)

06 para i ← 0 até L faça

07 se R(buffer[i], jc)

08 então candidatos[n] ← buffer[i].pk

09 n ← n + 1

10 fim-para

11 fim-enquanto

12 feche (idx)

13 para i ← 0 até n faça

14 se (execute_sgbd(select R(jc, ae) from T where pk=candidatos[i]))

15 então concatene (candidatos[i], predicado_conv)

16 fim-para

17 concatene (predicado_conv, consulta)

18 resposta ← execute_fastbit (consulta)

Figura 36 – Algoritmo do processamento de consultas usando o SB-index.

O algoritmo da Figura 36 inicia abrindo o arquivo do SB-index e zerando a variável contadora de candidatos (linhas 01 e 02). As linhas 03 até 11 mostram um processo iterativo que coleciona todas as possíveis respostas do predicado convencional, percorrendo todas as entradas do SB-index. Neste processo, lê-se uma página de disco do índice para depois copiá-la num buffer (linhas 04 e 05). Um novo processo de repetição é responsável por percorrer todas as entradas do buffer, testando se o MBR de cada entrada satisfaz o relacionamento espacial (linha 07). Caso o relacionamento se verifique, então copia-se a chave primária da entrada para a coleção de candidatos (linha 08), e incrementa-se o contador de candidatos (linha 09).

Após a leitura integral do índice, fecha-se o arquivo correspondente (linha 12). Neste momento, é necessário refinar cada uma das entradas da coleção de candidatos. O refinamento também é um processo iterativo, como mostram as linhas 13 até 16. Cada entrada da coleção tem a sua chave primária fornecida para uma consulta no banco de dados. Esta consulta testa se o objeto espacial representado pela chave satisfaz o relacionamento espacial (linha 14). Em caso positivo, esta chave deve ser concatenada à string do predicado convencional. Por simplicidade, foi omitida no algoritmo a concatenação do operador lógico

OR, o qual é mostrado na Figura 35.

Após a composição da string do predicado convencional, ela é concatenada à

sem o predicado espacial. Por fim, obtém-se o conjunto resposta da consulta por meio da execução da string correspondente, usando o software FastBit.

Evidentemente, o SB-index depende do Índice Bitmap de Junção, e por isso também é suscetível aos efeitos negativos causados pela alta cardinalidade de um atributo. Por outro lado, é possível atenuar esses efeitos empregando as técnicas de binning, compressão e codificação. Nesta dissertação, o SB-index usou a técnica de compressão WAH para atenuar os prejuízos causados pela alta cardinalidade.

Documentos relacionados