• Nenhum resultado encontrado

Sele¸c˜oes aos k-Vizinhos Mais Pr´oximos com Condi¸c˜oes

4.5 Experimentos

5.1.7 Sele¸c˜oes aos k-Vizinhos Mais Pr´oximos com Condi¸c˜oes

As consultas aos k-vizinhos mais pr´oximos estendidas com condi¸c˜oes (ck-NNq), propos-

tas no Cap´ıtulo 4 desta tese, tamb´em s˜ao suportadas pelo FMI-SiRO. Para representar

as ck-NNq, foi inclu´ıdo um novo operador ao FMI-SiRO para cada fun¸c˜ao de distˆancia

dispon´ıvel, com a forma:

<distance_name>_ckNN(signature1 BLOB, signature2 BLOB, cond VARCHAR) onde o primeiro parˆametro ´e o nome do atributo da rela¸c˜ao de entrada que armazena o vetor de caracter´ısticas a ser usado na opera¸c˜ao, o segundo parˆametro ´e o vetor de caracter´ısticas de consulta e o terceiro parˆametro ´e uma string que define a condi¸c˜ao que restringe a ck-NNq. Os formatos aceitos para o parˆametro cond s˜ao os mesmos

das condi¸c˜oes do operador ck-NN, apresentadas no Cap´ıtulo 4. Uma string vazia no

parˆametro cond corresponde a uma condi¸c˜ao nula, fazendo com que a opera¸c˜ao executada pelo operador <distance_name>_ckNN seja uma consulta aos k-vizinhos mais pr´oximos comum.

Os operadores <distance_name>_ckNN mapeiam para fun¸c˜oes C++ da biblioteca dinˆamica compartilhada que implementa o FMI-SiRO. Estas fun¸c˜oes utilizam os algorit-

mos desenvolvidos sobre o MAM Slim-tree, descritos na Se¸c˜ao 4.4. Como estes algoritmos utilizam atributos adicionais para representar as condi¸c˜oes aplicadas `a busca, foi inclu´ıda no FMI-SiRO uma segunda categoria de novos tipos de ´ındice: os ´ındices de cobertura

para consultas por similaridade. A implementa¸c˜ao destes tipos de ´ındice utiliza a Slim-tree modificada para implementar os algoritmos para execu¸c˜ao de consultas ck-NN

das varia¸c˜oes Table-Slim e Covering-Slim, apresentados na Se¸c˜ao 4.4.4. Os novos tipos de ´ındice de cobertura tˆem a forma cov_slim_<distance_name> e recebem como parˆametro, al´em o tamanho da p´agina de disco, a lista de atributos adicionais que formam o ´ındice de cobertura.

Estes novos tipos de ´ındices podem ser usados para a cria¸c˜ao de ´ındices para responder a consultas k-NN estendidas com condi¸c˜oes. Por exemplo, considere que ´e acrescentado `a rela¸c˜ao image_table um novo atributo, denominado date_taken, populado com a data em que a imagem foi obtida. A instru¸c˜ao a seguir cria um ´ındice de cobertura para o atributo image_sign desta tabela, considerando a distˆancia Manhattan e incluindo o atributo date_taken:

CREATE INDEX image_sign_cov_Slim_Manhattan ON image_table(image_sign) INDEXTYPE IS cov_Slim_Manhattan PARAMETERS (’8192 date_taken’);

onde 8192 ´e o tamanho da p´agina de disco do ´ındice. A lista de atributos adicionais cont´em os nomes dos atributos separados por espa¸cos. Apenas atributos da mesma tabela do atributo complexo indexado s˜ao aceitos na lista de atributos adicionais e estes atributos tˆem que ser de tipos de dados simples (n´umeros, strings e datas1).

Embora os ´ındices de cobertura sejam projetados para responder a consultas ck-NN,

uma vez criados eles tamb´em podem ser usados para responder a consultas por abrangˆencia. Por isso, o FMI-SiRO tamb´em implementa operadores de busca por

abrangˆencia com condi¸c˜oes, com a forma:

<distance_name>_cdist(signature1 BLOB, signature2 BLOB, cond VARCHAR) onde, neste caso, o parˆametro condition s´o aceita uma condi¸c˜ao baseada em tupla, ou uma condi¸c˜ao vazia/nula, que corresponde a uma consulta por abrangˆencia convencional. Umack-NNq com uma condi¸c˜ao baseada em tupla pode ser representada com os

operadores <distance_name>_ckNN. Por exemplo, a consulta “retorne as 10 imagens mais similares `a imagem de consulta, representada pelo vetor de caracter´ısticas center_sign, que tenham sido tiradas a partir de 11 de janeiro de 2011” ´e uma ck-NNq com uma

condi¸c˜ao baseada em tupla. Esta consulta pode ser representada algebricamente como: ¨

σimage signckNN[L1,10,date taken≥′01/01/2011′] center sign(image table)

1

onde a fun¸c˜ao de distˆancia utilizada ´e a Manhattan (L1). No FMI-SiRO, esta consulta

pode ser representada conforme segue: SELECT image

FROM image_table

WHERE Manhattan_ckNN(image_sign, center_sign, ’date_taken >= ’’01/01/2011’’’) <= 10;

onde Manhattan_ckNN ´e o operador de consulta aos k-vizinhos mais pr´oximos estendido com condi¸c˜oes para a fun¸c˜ao de distˆancia Manhattan, a condi¸c˜ao baseada em tupla im- posta ´e date_taken >= ’01/01/2011’ (os caracteres ‘’’ adicionais s˜ao usados para es- cape), o operador de compara¸c˜ao ‘<=’ indica que a busca ´e aos vizinhos mais pr´oximos e 10 ´e o n´umero de vizinhos.

Relembrando, a Regra 4.2, apresentada na Se¸c˜ao 4.3.1, indica que uma condi¸c˜ao ba- seada em tupla restingindo uma ck-NNq pode ser utilizada em uma sele¸c˜ao convencional

antecipada `a sele¸c˜ao por similaridade. Portanto, as ck-NNq com condi¸c˜oes baseadas em

tupla podem ser representadas utilizando fun¸c˜oes de janela, seguindo a sintaxe apresen- tada na Se¸c˜ao 5.1.2 para execu¸c˜ao sequencial de consultas aos k-vizinhos mais pr´oximos. Desta forma, a consulta anterior pode ser alternativamente escrita como:

SELECT image FROM (

SELECT image, ROW_NUMBER()

OVER (ORDER BY Manhattan_distance(image_sign, center_sign)) AS rn

FROM image_table

WHERE date_taken >= ’01/01/2011’ ) WHERE rn <= 10;

onde a condi¸c˜ao restringindo a busca encontra-se na cl´ausula WHERE da subconsulta in- terna, filtrando as tuplas cujas imagens foram obtidas a partir de 01/01/2011. Esta constru¸c˜ao sint´atica ´e interessante quando a seletividade da condi¸c˜ao da ck-NNq ´e alta,

especialmente se existe um ´ındice no atributo date_taken que pode ser usado para agilizar a execu¸c˜ao da consulta.

Por outro lado, as ck-NNq com condi¸c˜oes baseadas em agrega¸c˜ao s´o podem

ser expressas fazendo uso dos operadores ck-NN (<distance_name>_ckNN). Isto porque a

condi¸c˜ao baseada em agrega¸c˜ao afeta o funcionamento da busca, que n˜ao ´e represent´avel por meio de operadores de consulta existentes no SGBD. Portanto, antes de executar qualquer ck-NNq no FMI-SiRO com uma condi¸c˜ao baseada em agrega¸c˜ao, ´e necess´ario

criar um ´ındice de cobertura sobre o atributo complexo, baseado na mesma fun¸c˜ao de distˆancia usada na consulta.

Por exemplo, a consulta “Retorne as 10 imagens mais similares `a imagem de consulta, representada pelo vetor de caracter´ısticas center_sign, sendo que, ao menos, 5 delas tenham sido tiradas antes de 31 de dezembro de 2010” ´e umack-NNq com uma condi¸c˜ao

baseada em agrega¸c˜ao por contagem. Esta consulta ´e representada algebricamente como: ¨

σimage signckNN[L1,10,COUNT(∗,date taken<′31/12/2010′)≥5] center sign(image table)

considerando que a dissimilaridade ´e calculada pela distˆancia Manhattan. Supondo que existe um ´ındice de cobertura sobre o atributo image_sign organizado segundo a distˆancia Manhattan, esta consulta ´e representada no FMI-SiRO pela express˜ao SQL a seguir:

SELECT image FROM image_table

WHERE Manhattan_ckNN(image_sign, center_sign,

’COUNT(*, date_taken < ’’31/12/2010’’) >= 5’) <= 10;

A execu¸c˜ao da opera¸c˜ao disparada por um operador <distance_name>_ckNN inicial- mente verifica se o(s) atributo(s) utilizado(s) na condi¸c˜ao da ck-NN est´a(˜ao) presente(s)

no ´ındice de cobertura. Note que uma condi¸c˜ao de agrega¸c˜ao por contagem de distintos (COUNT(DISTINCT)) requer dois atributos para ser computada. Se todos os atributos necess´arios encontram-se no ´ındice, o algoritmo referente `a condi¸c˜ao imposta `a ck-NNq

da varia¸c˜ao Covering-Slim ´e chamado para executar a busca. Caso contr´ario, ´e invocado o algoritmo da varia¸c˜ao Table-Slim, acessando as tuplas da rela¸c˜ao de entrada a partir dos rowIds armazenados nas entradas do ´ındice.

A vers˜ao atual do FMI-SiRO aceita apenas condi¸c˜oes baseadas em tupla e condi¸c˜oes

baseadas em agrega¸c˜ao por contagem. Para acrescentar suporte `as condi¸c˜oes baseadas em agrega¸c˜ao por soma e por m´edia ´e preciso implementar algoritmos eficientes para respon- der a consultas com essas condi¸c˜oes. Com respeito `as condi¸c˜oes baseadas em agrega¸c˜ao por m´ınimo e por m´aximo, seria preciso alterar o parsing da condi¸c˜ao, dentro da fun¸c˜ao que implementa os operadores <distance_name>_ckNN, e invocar os algoritmos correspon- dentes, que, por sua vez, s˜ao baseados nos algoritmos deck-NNq com condi¸c˜oes baseadas

em tuplas e com condi¸c˜oes baseadas em agrega¸c˜ao por contagem. ´

E fundamental observar que, embora as consultas apresentadas na descri¸c˜ao do FMI-SiRO considerem opera¸c˜oes baseadas em similaridade, estas opera¸c˜oes podem ser

utilizadas em conjunto com as demais opera¸c˜oes de consulta fornecidas pelo SGBD. Desta forma, ´e poss´ıvel executar consultas complexas envolvendo opera¸c˜oes baseadas em simi- laridade e opera¸c˜oes relacionais tradicionais, utilizando a sintaxe SQL apresentada.