Вы находитесь на странице: 1из 28

UNIVERSIDADE FEDERAL DE PERNAMBUCO

GRADUAO EM CINCIA DA COMPUTAO


CENTRO DE INFORMTICA

ESTRUTURAS DE DADOS PARA INDEXAO DE


GRANDES VOLUMES DE DADOS
TRABALHO DE GRADUAO

Aluno: Mariano Cravo Teixeira Neto (mctn@cin.ufpe.br)


Professora: Ana Carolina Salgado (acs@cin.ufpe.br)

Julho de 2001

Resumo
Devido ao desenvolvimento tecnolgico dos dispositivos de armazenamento
digital, as bibliotecas digitais tornaram-se capazes de disponibilizar grandes volumes de
dados. A World Wide Web, com seus bilhes de pginas, pode ser vista como uma
grande biblioteca onde seus documentos so pginas web. Nessa coleo, cuja
quantidade de documentos enorme, torna-se complexo procurar documentos pela
inviabilidade de varrer cada documento, uma vez que necessrio satisfazer a restries
de tempo.
Para atender a essas restries, diversas ferramentas de busca na Internet (como
o Google1, Radix2 e Altavista3) fazem uso de estruturas de dados especialmente
desenvolvidas para recuperao de documentos. Tais ferramentas de busca mantm um
ndice local que torna possvel procurar e recuperar documentos armazenados em
memria secundria. Esse ndice pode ser construdo atravs do uso de diferentes
estruturas, como arquivos de acesso direto, hashtables e rvores.
O objetivo deste trabalho estudar e aplicar estruturas de dados desenvolvidas
para indexar documentos armazenados em memria secundria que podem chegar
ordem de grandeza de 109 chaves em um ambiente de busca para Internet.
Para tal, sero implementadas e avaliadas estruturas de ndices dinmicos, como
B-Trees e variantes, e estruturas de hashing como Extensible Hashtables. Dessa maneira
ser possvel realizar experimentos com o intuito de avaliar o desempenho de cada uma
dessas estruturas de ndice.

http://www.google.com

http://www.radix.com

http://www.altavista.com

Agradecimentos
Agradeo, em primeiro lugar, professora Ana Carolina Salgado, pela
orientao e interesse no desenvolvimento do meu trabalho. Agradeo, tambm, ao
Bright, atual Grupo Radix, Pedro Falco, e ao professor Silvio Meira, por terem
acreditado na minha capacidade profissional. Ainda, agradeo a Luciano Barbosa,
Thiago Santos e Fernando Trinta pelas sugestes sobre a produo deste documento, e a
Marcelo Nery, Oscar Gomes e Saulo Medeiros pela ajuda durante a implementao
deste trabalho.

ndice
RESUMO......................................................................................................................................................2
AGRADECIMENTOS................................................................................................................................3
NDICE.........................................................................................................................................................4
1. INTRODUO........................................................................................................................................6
2. NDICES MULTINVEL........................................................................................................................8
2.1 NDICES DINMICOS MULTINVEL .......................................................................................................8
2.2 B-TREES..............................................................................................................................................8
2.2.1 B-Tree: Definies......................................................................................................................9
2.2.2 Caractersticas da B-Tree.........................................................................................................10
2.3 B+TREE.............................................................................................................................................11
2.3.1 B+Tree: Definies...................................................................................................................11
2.3.2 Caractersticas da B+Tree........................................................................................................12
3. NDICES DINMICOS BASEADOS EM HASHING.......................................................................13
3.1 DEFINIES.......................................................................................................................................13
3.1.1 Busca.........................................................................................................................................14
3.1.2 Insero e Splitting...................................................................................................................14
3.2 CARACTERSTICAS.............................................................................................................................14
4. IMPLEMENTAES DOS NDICES................................................................................................16
4.1 LINGUAGEM UTILIZADA....................................................................................................................16
4.2 CARACTERSTICAS.............................................................................................................................16
4.2.1 B-Tree........................................................................................................................................16
4.2.2 B+Tree......................................................................................................................................17
4.2.3 Extensible Hashtable................................................................................................................18
5. APLICAO DOS NDICES EM UM MECANISMO DE BUSCA................................................20
5.1 ARQUITETURA DE UM MECANISMO DE BUSCA.................................................................................20
5.2 BASE DE NDICES...............................................................................................................................21
5.2.1 Servidor de Cdigos..................................................................................................................21
5.2.2 Listas de Posies (Position Lists)...........................................................................................22
6. CONCLUSES E TRABALHOS FUTUROS....................................................................................23
REFERNCIAS.........................................................................................................................................24
APNDICE A: INVERTED FILES..........................................................................................................27

INVERTED FILE (ARQUIVO INVERTIDO)...................................................................................................27


APNDICE B: RED-BLACK TREES......................................................................................................28
B.1 DEFINIES.......................................................................................................................................28
B.2 PROPRIEDADES..................................................................................................................................28

1. Introduo
A World Wide Web pode ser vista como uma biblioteca virtual, que contm uma
grande quantidade e variedade de informaes. Os mecanismos de busca fazem o papel
de um catlogo dessa grande biblioteca, eles copiam partes da Web e as indexam para
ajudar os usurios a encontrarem informaes de forma mais rpida do que
simplesmente navegando pela Web (Brewington et al, 2000).
Para recuperar informao contida na base de dados, gerada a partir da cpia
local de um subconjunto da WWW pelos mecanismos de busca, necessria a criao de
estruturas de acesso auxiliares, chamadas de ndices. Esses ndices tm como funo
aumentar a velocidade na qual a informao recuperada em resposta a consultas. Essas
estruturas fornecem um caminho secundrio de acesso, proporcionando uma maneira
alternativa de localizar registros sem afetar as posies fsicas do registro na base de
dados. Os ndices fornecem uma maneira eficiente de acessar os dados da base a partir
de uma chave candidata4, e nesta chave (campo) que a construo do ndice se baseia.
Para atender a uma consulta em que se procura um ou mais registros,
primeiramente o sistema acessa o ndice, e neste h um ponteiro indicando a localizao
do bloco ou blocos na base de dados onde o(s) registro(s) se encontra(m).
H vrias estruturas de dados que se propem a resolver esse problema. Os tipos
mais comuns de ndices so os baseados em arquivos ordenados (ndices de um nvel),
em rvores (ndices multinvel) e ndices baseados em hashing.
ndices baseados em arquivos ordenados usam a mesma idia dos ndices
remissivos encontrados em livros, onde fornecida uma lista de palavras importantes,
em ordem alfabtica, indicando uma lista de pginas onde h ocorrncias daqueles
termos. Sem o auxlio do ndice remissivo, ter-se-ia que olhar pgina por pgina do livro
a procura da palavra desejada.
As estruturas de dados que se baseiam nesta abordagem funcionam
analogamente: o ndice armazena cada valor do campo a ser indexado (chave candidata
ou campo indexado) assim como uma lista de ponteiros para os endereos de todos os
blocos do arquivo da base de dados onde aqueles atributos se localizam. O campo
indexado se encontra ordenado, podendo assim ser feita uma busca binria no ndice.
4

Chaves candidatas de um uma relao R o subconjunto de atributos K de R cujos valores so nicos e

irredutveis, ou seja, no h tuplas de K em R em que os valores de K se repitam.

Uma implementao de ndice baseadas em arquivos ordenados bastante


difundida entre mecanismos de busca o arquivo invertido (Frakes, W. B et al., 1992), o
qual consiste em registros de tamanho fixo contendo o ponteiro para o endereo do
bloco onde se encontra a lista de ocorrncias do atributo indexado. Ao invs de se
realizar uma busca binria no ndice, feito um acesso direto visto que possvel
localizar o ponteiro certo atravs de uma conta baseada no tamanho fixo do registro e no
atributo indexado. Embora essa abordagem tenha acessos a disco da ordem de O(2),
uma vez que s dois acessos a disco so necessrios para se recuperar a informao
desejada, ela se torna de complicada manuteno quando a base cresce muito, pois
sempre tem-se que reconstruir o ndice novamente.
Estruturas de ndices baseadas em rvore e hashing no precisam ser
reconstrudas todas as vezes que uma atualizao se faz necessria. Este trabalho deterse- a descrever e demonstrar a aplicao de estruturas de dados baseadas em rvores e
em hashing em um mecanismo de busca.
O restante deste documento est organizado da seguinte forma: no Captulo 2
so definidas estruturas de dados baseada em rvores (estruturas multinvel). No
Captulo 3, definida uma estrutura de dado baseada em hashing, a Extensible
Hashtable (Fagin et al., 1979). As implementaes das estruturas de dados encontram-se
no Captulo 4. No Captulo 5, discutida a aplicao, em um mecanismo de busca, das
implementaes das estruturas estudadas neste documento. As concluses sobre os
resultados obtidos, problemas encontrados durante o trabalho, e indicaes de trabalhos
futuros so apresentadas no captulo 6.

2. ndices Multinvel
possvel construir-se ndices multinvel a partir de ndices de apenas um nvel.
Por exemplo, um arquivo de ndice ordenado de chaves distintas pode ser chamado de
primeiro nvel, e este apontar para um outro arquivo de ndice ordenado. Como o ndice
do primeiro nvel um ndice primrio, suas chaves podem ser ponteiros para cada
bloco do ndice do segundo nvel. Esse processo pode ser aplicado indefinidamente.

2.1 ndices Dinmicos Multinvel


Enquanto ndices de um ou dois nveis auxiliam em acelerar o processo de
recuperao de informao, existem estruturas de dados mais genricas que so
comumente implementadas em SGBDs comerciais por serem mais flexveis e
escalveis. A estrutura de dados mais comum para esse propsito a B-Tree (Bayer, R e
McCreight, E., 1972). A B-Tree, em essncia:

Automaticamente mantm os nveis balanceados para a quantidade de


dados que est sendo indexada, e

Gerencia o espao usado por seus blocos para que ele sempre esteja
ocupado com pelo menos a metade de sua capacidade.

Uma variao desta estrutura que tambm ser apresentada neste trabalho ser a
B+Tree (Wedekind, H., 1974), que hoje bastante utilizada em SGBDs (Garcia-Molina,
H. et al, 2000) e em alguns sistemas de arquivos (XFS, 1994; JFS, 2000).

2.2 B-Trees
B-Trees so rvores de busca desenvolvidas para trabalharem em discos
magnticos ou qualquer outro dispositivo de armazenamento de acesso direto em
memria secundria. Em uma aplicao comum de uma B-Tree, a quantidade de dados
to grande que provavelmente no caberia na memria principal. A B-Tree copia
blocos especficos para a memria principal quando necessrio e os grava no disco se os
blocos tiverem sido alterados.

As B-Trees so similares s red-black trees (Bayer, R., 1972), mas sua estrutura
minimiza operaes de I/O. A diferena mais significante entre a B-Tree e a red-black
tree est no fato de que cada n da B-Tree pode ter vrios filhos, ou seja, o branching
factor da B-Tree pode ser bastante grande. B-Trees so similares a red-black trees
quanto ao fato de que cada n de ambas as estruturas tm altura de O(log n), apesar de
que a altura da B-Tree pode ser consideravelmente menor que a de uma red-black tree.
Portanto, as B-Trees podem ser usadas para implementar operaes com tempo
computacional O(log n). Uma breve descrio das red-black trees pode ser encontrada
no apndice B deste documento.
2.2.1 B-Tree: Definies
A B-Tree uma rvore baseada nas seguintes propriedades:
1. Cada n x de uma B-Tree possui:
a. n[x] chaves, armazenadas em ordem crescente: chave1[x]
chave2[x] ... chaven[x].
b. d[x] dados associados5 s n[x] chaves.
c. Um campo booleano que define se o n folha ou se um n
interno.
2. Se x um n interno, ento x ter n + 1 ponteiros para seus filhos. As
folhas no tm filhos.
3. Duas chaves adjacentes chavea[x] chaveb[x] em um n x definem um
intervalo onde todas as chaves ki em que chavea[x] ki chaveb[x] se
encontraro na sub-rvore com raiz em x acessvel a partir do ponteiro
filhoa+1[x].
4. Toda folha possui a mesma profundidade, que a altura da rvore h.
5. Cada n da B-Tree, por definio, possui restries quanto quantidade
de chaves.
a. Cada n, exceto a raiz, precisa ter pelo menos t-1 chaves.

Tanto para a B-Tree quanto para a B+Tree ser assumido que o dado apenas um ponteiro para uma

outra estrutura de dados que armazena o dado propriamente dito como sugerido por (Garcia-Molina, H. et
al, 2000).

b. Cada n interno, exceto a raiz, precisa ter t ponteiros para seus


filhos.
c. Cada n possui no mximo 2t-1 chaves, para que assim cada n
interno tenha no mximo 2t filhos.
A B-Tree mais simples aquela que tem t = 2, isto , cada n tem pelo menos 1
e no mximo 3 chaves. Sendo assim, cada n interno teria 2, 3 ou 4 filhos. Portanto, a
B-Tree uma generalizao da rvore 2-3-4 (Sedgewick, R. et al., 1998), que foi criada
por J.E. Hopcroft em 1970 (embora no tenha sido publicado).
2.2.2 Caractersticas da B-Tree
A maioria das operaes em uma B-Tree proporcional ao nmero de acessos a
disco executados. Apesar de tanto a red-black tree como a B-Tree terem o crescimento
da altura na ordem de O(log n) (Cormen, T.D. et al., 1990), a base do logaritmo para a
B-Tree pode ser muito maior. Desta forma, a B-Tree economiza aproximadamente log t
em relao a red-black tree quanto ao crescimento da altura da rvore.
2.2.2.1 Busca
A busca na B-Tree similar a uma busca em uma rvore binria, exceto pelo
fato que ao invs de apenas fazer uma deciso binria para qual ramo da rvore
prosseguir a cada n, a deciso passa a ser em relao ao nmero de chaves que o n
possui. Ou seja, no pior caso, feito n[x] + 1 decises, sendo n[x] o nmero de chave
em um n.
O nmero de acessos a disco realizados pela busca da ordem da altura h da
rvore, portanto, O(h) = O(logt n) onde n nmero de chaves na B-Tree e t o mnimo
de chaves por n. Lembrando que cada n comporta no mximo 2t chaves, o tempo
computacional de busca da B-Tree dado por O(th) = O(tlogt n).
2.2.2.2 Insero & Splitting
Inserir uma chave na B-Tree no to simples quanto inserir uma chave em uma
rvore binria. Quando uma chave deve ser inserida em um n cheio (2t-1 chaves), o n
dividido pela chave mediana em dois ns de t-1 chaves. A chave mediana , ento,

10

promovida para seu pai (que deve ser um n no cheio, seno tambm dever ser
dividido), para assim identificar o ponto de diviso entre os dois novos ns.

2.3 B+Tree
A maioria das implementaes de ndices multinveis dinmicos usa a variante
B+Tree da B-Tree. Na B-Tree, uma chave somente entrada uma vez em algum nvel
da rvore, em conjunto com o dado associado. J na B+Tree, todos os dados s so
armazenados nas folhas. Desta maneira, a estrutura conceitual das folhas difere da
estrutura dos ns internos. As folhas da B+Tree esto ligadas em seqncia, tornando
possvel o acesso ordenado a seus campos.
2.3.1 B+Tree: Definies
Cada n interno da B+Tree constitudo de:
1. n[x] chaves, armazenadas em ordem crescente: chave1[x] chave2[x] ...
chaven[x].
2. p[x] ponteiros para ns descendentes associados s n[x] chaves.
3. Cada n interno tem, no mximo, 2t ponteiros.
4. Cada n interno, exceto a raiz, tem pelo menos t ponteiros. A raiz tem
pelo menos 2 ponteiros, caso seja um n interno.
A estrutura de um n folha:
1. n[x] chaves, armazenadas em ordem crescente: chave1[x] chave2[x] ...
chaven[x].
2. d[x] dados (ou ponteiros para outra estrutura onde est o dado em si,
acrescentando mais um nvel de indireo) associados s n[x] chaves.
3. P, ponteiro para o prximo n folha.
4. Cada folha possui pelo menos t valores.
5. Todas as folhas se encontram no mesmo nvel de profundidade.

11

2.3.2 Caractersticas da B+Tree


B+Tree so mais usadas por SGBDs comerciais por oferecer consultas por
intervalos. Se em uma consulta deseja-se obter dados referentes s chaves no intervalo
[a,b], deve-se executar uma busca por a at a folha onde a deveria se encontrar (mesmo
que a no exista na rvore). Se esta folha tambm no contiver b, deve-se seguir para a
prxima folha atravs do ponteiro P, verificando todas as chaves at que:
1. Encontre-se b.
2. Alcance-se o fim do n e tenha-se que prosseguir para a prxima folha.
2.3.2.1 Busca
A busca na B+Tree procede da mesma maneira da insero na B-Tree comentada
na sesso 2.2.2.1, exceto pelo fato de que o dado na B+Tree sempre estar em uma
folha. Na B-Tree o pior caso descer at uma folha para encontrar um dado, uma vez
que o dado pode estar em um n interno. Por tanto, na B+Tree o nmero de acessos a
disco sempre igual altura h da rvore.
2.3.2.2 Insero & Splitting
O princpio bsico da insero na B+Tree o mesmo da B-Tree. Primeiro
procura-se o n, depois se insere a nova chave. Embora o princpio seja o mesmo, o
procedimento no exatamente o mesmo. Na B+Tree, deve-se encontrar a folha a qual
a nova chave pertence. Se houver espao na folha, a nova chave inserida. Seno, a
folha deve ser dividida (splitting) em duas e suas chaves distribudas entre elas. A
diviso de um n em um determinado nvel da rvore implica em uma nova entrada
(chave) no nvel superior quele n. Por praticidade, aplica-se esse procedimento
recursivamente caso a nova chave inserida no nvel superior (n pai da folha que foi
dividida) tambm no tenha espao (causando um novo split).

12

3. ndices Dinmicos Baseados em Hashing


Uma alternativa B-Tree, que foi desenvolvida por Fagin, Nievergelt, Pippenger
e Strong em 1978-9, que estende algoritmos de busca e os aplica em busca externa
chamada de Extensible Hashtable. Esta estrutura uma implementao de busca que
normalmente requer apenas um ou dois acessos a disco, inclusive para a insero (na
maioria dos casos).
A Extensible Hashtable combina caractersticas de hashing, multiway-tries
(Frakes, W. et al., 1992; Sedgewick et al., 1998) e mtodos de acesso seqencial. O
primeiro passo definir uma funo de hashing que transforme a chave em um inteiro.
Da mesma maneira como se comportam as multiway-tries, a Extensible Hashtable
comea usando apenas os primeiros bits do cdigo hash da chave para indexar atravs
de uma tabela cujo tamanho uma potncia de 2. Semelhante aos mtodos de acesso
seqencial, a Extensible Hashtable mantm um estrutura que mapeia os cdigos hash s
pginas onde esto armazenados os dados. E as pginas de dados, ou buckets, se
dividem em duas quando sua capacidade chega a um limite pr-determinado de maneira
similar s B-Trees.

3.1 Definies
definido, a priori, o tamanho mximo da cdigo hash. De acordo com o
aumento da quantidade de itens armazenados na hashtable, aumenta-se o nmero de
bits d utilizados da cdigo hash.
A estrutura da Extensible Hashtable bem mais simples que a estrutura da BTree e B+Tree. Ela consiste em:
1. Uma tabela dir com referncias para pginas (buckets ou nodes).
2.

Buckets, que so os repositrios dos dados cujo tamanho mximo 2M.

3. N, nmero de itens na tabela.


4. d, o nmero de bits utilizados do cdigo hash no momento.
5. D, a quantidade de buckets da estrutura no momento.
6. D = 2d.

13

3.1.1 Busca
Atravs da funo de hashing utilizada pela implementao, a chave do item
transformada em um cdigo hash, que um inteiro. A partir dos d primeiros bits
localizado o bucket onde esto todos os itens com aquele mesmo cdigo hash, e
realizada uma busca seqencial para localizar o item desejado.
3.1.2 Insero e Splitting
Para se inserir um item em uma Extensible Hashtable, primeiro executa-se uma
busca, e ento a insero. O modelo similar ao seguido pela B-Tree, exceto pelo
algoritmo de busca e split utilizados. O mtodo que realiza o split cria um novo n vazio
e examina o k-zimo bit de d. Se este bit for 0, o item permanece no n antigo. Se for 1,
o item movido para o novo n. Ento, k + 1 atribudo varivel que armazena a
quantidade de bits utilizados para aquele determinado n (k). Se ainda assim este
procedimento no resultar em pelo menos um item em cada um dos ns envolvidos, o
split novamente executado. Ao final, o ponteiro para o novo n inserido na tabela
dir.
O ponto crucial da insero na Extensible Hashtable d-se no momento em que
o ponteiro para o novo n inserido na tabela dir. Se k for igual a d, apenas inserido o
novo ponteiro na tabela dir. Se k for maior que d, ento o tamanho de D deve ser
dobrado, ou seja, o nmero mximo de ns gerenciados pela tabela dir deve ser
dobrado. Neste momento, mais um bit do cdigo hash passa a ser utilizado para mapear
os ns (d = d + 1). Este procedimento realizado at que k volte a ser igual a d.

3.2 Caractersticas
De forma diferente da B-Tree, a Extensible Hashtable no possui acesso
ordenado aos dados armazenados uma vez que seus ns no tm ligaes entre si,
limitando assim seu campo de aplicao.
Extensible Hashtable introduz um nvel a mais de indireo ao mtodo de
hashing em memria primria. Contudo, o nmero de acessos a disco da ordem de
O(1) para a busca caso a tabela dir seja mantida em memria primria.

14

Por outro lado, a Extensible Hashtable possui alguns defeitos. Quando se faz
necessrio dobrar o tamanho da tabela, os ns ficam inacessveis durante o tempo gasto
durante o processo, alm de que a nova tabela pode no mais caber na memria
principal. Como conseqncia, o nmero de acessos a disco aumentaria, denegrindo o
desempenho da estrutura.

15

4. Implementaes dos ndices


Nos captulos anteriores foram apresentadas as definies e caractersticas de
trs estruturas de ndices: B-Tree, B+Tree e a Extensible Hashtable.
Este captulo destina-se a apresentar caractersticas das implementaes desta
estruturas, uma vez que as definies do liberdade para o desenvolvedor escolher sua
representao.

4.1 Linguagem Utilizada


A linguagem utilizada no desenvolvimento dos mdulos do mecanismo de busca
para o qual os ndices descritos neste documento foram usados foi Java (Sun
Microsystems, 1995) por algumas de suas caractersticas:

Implementa o modelo de programao orientado a objetos.

Possui uma grande diversidade de bibliotecas para a implementao de


sistemas distribudos e para a Web.

Para que os ndices desenvolvidos para este trabalho sejam facilmente utilizados
pelo mecanismo de busca, todos eles foram desenvolvidos em Java.

4.2 Caractersticas
4.2.1 B-Tree
Para economizar acessos a disco durante o processo de busca, foi usado uma
cache LRU6 (Tanenbaum, A. S., 1992) na implementao da B-Tree com o objetivo de
deixar em memria primria os ns mais acessados. Desta forma, no s a raiz
permanece em memria primria, evitando-se requisies de I/O.
A Tabela 4.1 mostra um experimento7 utilizando B-Trees para indexar chaves de
8 bytes avaliando-se o tempo de criao e o espao ocupado pela B-Tree. O experimento

Least Recently Used, algoritmo de gerenciamento de pginas em memria primria.

O experimento foi realizado em uma mquina Pentium III, 600 MHz com 1GB de RAM e disco UW-

SCSII-2 rodando Linux e Sun Java 2 Runtime Enviroment, Standard Edition 1.3.0 com HotSpot Client
(build 1.3.0).

16

foi repetido trs vezes, tomando-se a mediana como resultado significativo do tempo de
criao.

Tempo de Criao (ms)


Tamanho
#1
103
216
4
10
1872
5
10
23918
6
10 293104
107 3470198

Chaves

#2

#3
Mediana
(bytes)
219
223
219
29932
1874
1863
1872
309604
23821
23919
23918
3066076
304386
305406 304386 31304176
3448256 3453021 3453021 314641324
Tabela 4.1 Estatsticas da B-Tree

Profundidade
3
4
5
5
6

4.2.2 B+Tree
Na implementao da B+Tree foi utilizada uma cache LRU tanto para a busca
quanto para a insero. Para a cache de insero, acumulado em memria primria os
ns mais acessados assim como o offset8 calculado da posio do n que ele ocupar no
arquivo. Quando o offset do n encontra-se fora do arquivo, ento so escritos ns
vazios at que o arquivo contenha o offset calculado pela cache.
A Tabela 4.2 mostra um experimento utilizando B+Trees nas mesmas condies
do experimento para B-Trees.

Posio relativa de um byte em um arquivo.

17

Tempo de Criao (ms)


Tamanho
Chaves
3

10
104
105
106
107

#1
48
296
2528
29602
336698

#2

#3

Mediana
(bytes)
52
49
49
24188
304
304
304
248438
2625
2534
2534
2461688
29594
29720
29602 25139018
337405
336313 336698 252673598
Tabela 4.2 Estatsticas da B+Tree

Profundidade
3
4
5
5
6

Comparando-se o tempo de insero entre a B-Tree e a B+Tree, nota-se o


melhor desempenho da B+Tree devido ao uso da cache durante a insero. O natural
seria a B+Tree levar mais tempo para inserir do que a B-Tree, uma vez que na B-Tree
no necessrio ir sempre at uma folha (executanto-se, ento, O(logt n)acessos a
disco) para se inserir uma nova chave.

4.2.3 Extensible Hashtable


A funo de hashing implementada na Extensible Hashtable foi a sugerida por
R. Jenkins (Jenkins, R. J. Jr, 1996) de 32 bits, que apresenta menos colises que as
funes de hash padro do JDK 1.3 (Sun Microsystems, 1995) e que a proposta em
(Knuth, D. E., 1998).
A Tabela 4.3 mostra um experimento utilizando a Extensible Hashtable com
chaves de at 255 caracteres (bytes) mapeadas para cdigos numricos de quatro bytes.
As chaves foram URLs extradas de parte da base de dados do engenho de busca Radix
e mapeadas para uma representao interna, em cdigos de 4 bytes.
No foi possvel realizar o experimento para 10 milhes de chaves pois o
tamanho do arquivo de buckets excedeu o tamanho limite para arquivos (2 GB) do
sistema de arquivos do Linux.

Chaves

103

Tempo de Criao (ms)


#1
#2
#3
Mediana
2624
2613
2588
2624

Tamanho em bytes
Tabela
Buckets
256
397824

18

104
22115
5
10 223511
106 2938085
107
-

22028
22255
22115
2048
224687
226628 226628
32768
2796832 2798861 2798861
524288
Tabela 4.3 Estatsticas da Extensible Hashtable

3986528
36525216
382706688
-

Pela natureza da estrutura de dados, a Extensible Hashtable no d margem para


comparao com os ndices baseados em rvore uma vez que ela lida diretamente com
os dados, no multinvel e no permite acesso ordenado aos dados.
Entretanto, pode-se perceber que a tabela hash, que corresponde ao arquivo de
ndice, bem menor que a B-Tree e B+Tree de mesma quantidade de chaves, uma vez
que l esto apenas ponteiros para buckets (apenas um nvel de indireo). J o arquivo
de buckets, que o arquivo de dados, bem maior que arquivos das rvores
correspondentes, pois tanto na B-Tree como na B+Tree, o dado propriamente dito
armazenado em uma estrutura de dados a parte (Garcia-Molina, H. et al., 2000).

19

5. Aplicao dos ndices em um Mecanismo de Busca


Um Sistema de Recuperao de Informao (SRI) tem por tarefa bsica
comparar consultas de usurio, que expressam suas necessidades de informao, com
um conjunto de documentos armazenados em uma coleo de dados, visando recuperar
aqueles que so relevantes para o pedido de busca. Estes sistemas devem ser capazes de
armazenar, manter e recuperar informao (Ramalho, 2000).

5.1 Arquitetura de um Mecanismo de Busca


Os Mecanismos de Busca, ou Engenhos de Busca, tm como principais tarefas
recuperar informaes da Web e disponibiliz-las de tal forma que os usurios possam
realizar consultas sobre elas. Para que eles possam realizar essas funes, existem dois
mdulos principais: o Mdulo de Indexao, que extrai as informaes da web, e o
Mdulo de Busca, que as disponibiliza informaes para consultas. Esses dois mdulos
realizam operaes sobre a Base de ndices (BI), que contm o conjunto de
documentos coletados pelo Mdulo de Indexao, para que sejam consultados atravs
do Mdulo de Busca. Esses mdulos esto ilustrados na Figura 5.1.
WEB

Usurio
Realizao de
Consultas

Recupera
Informaes
Mdulo
de
Busca

Mdulo
de
Indexao

Consulta a
Base de ndices

Modifica a
Base de ndices
Base
de
ndices

Figura 5.1 Macro-arquitetura de um Mecanismo de Busca (Barbosa, 2001).

20

O Mdulo de Indexao recupera documentos da Web, realiza uma


transformao na representao desses documentos e, ento, os armazena na Base de
ndices para serem utilizados pelo Mdulo de Busca.
O Mdulo de Busca realiza a consulta feita pelo usurio na Base de ndices, ou
seja, feito um casamento dos termos da consulta com os termos indexados na Base de
ndices e como resposta retornado links para documentos relacionados quela consulta
(Ramalho, 2000).

5.2 Base de ndices


A Base de ndices armazena todos os documentos recuperados pelo Mdulo de
Indexao atravs de uma outra forma de representao e disponibiliza seus dados para
consultas realizadas pelo Mdulo de Busca.
Inicialmente, deve existir uma estrutura que armazene chaves do tipo String
(cadeia de caracteres) e mapeie para cdigos numricos. E outra estrutura que tenha
como chave cdigos numricos, e associe os cdigos a seus atributos.
Atributos como Termos e URLs, que so Strings de tamanho varivel, precisam
ser armazenados e associados a cdigos nicos que os representem na Base de ndices
de um Mecanismo de Busca.
5.2.1 Servidor de Cdigos
No contexto de um Mecanismo de Busca, o ndice que relaciona Strings a
cdigos est associado a Servidores de Cdigos. Pela natureza da chave indexada,
Strings de tamanho varivel, impossibilitam a aplicao da B-Tree para esse fim, uma
vez que sua implementao utiliza chaves de tamanho fixo para facilitar a manipulao
de seus ns. Mesmo que a chave da B-Tree fosse fixada em um limite superior (255
caracteres, por exemplo), seu uso seria invivel devido ao tamanho do arquivo
resultante da indexao.
Por exemplo, uma B-Tree cuja chave possusse 255 bytes e 8 bytes para o cdigo
inteiro, e que cada n possusse 100 chaves, no atual tamanho da base de dados do
engenho de busca Radix (10 milhes de termos, aproximadamente), ocuparia 25.7 GB
em um dispositivo de memria secundria.

21

Para esse fim, uma estrutura baseada em hashing se aplica perfeitamente, uma
vez que sua estrutura formada apenas de dois nveis, sendo um a tabela e outro os
dados. A Extensible Hashtable aplicada como Servidora de Cdigos para termos e
URLs, cabendo a ela mapear todos os termos e URLs a seus devidos cdigos.
Usando o mesmo exemplo, indexar 10 milhes de chaves de tamanho mximo
de 255 caracteres, seriam necessrios 24 bits do cdigo hash, a tabela ocuparia 16 MB
da memria principal e o arquivo de dados ocuparia cerca de 2.5 GB.
5.2.2 Listas de Posies (Position Lists)
As listas de posies, ou PLs so arquivos que relacionam o termo s posies
do mesmo em um determinado documento (Witten, I. H. et al, 1999). Sendo a chave a
composio de dois cdigos inteiros (16 bytes) de tamanho fixo, e sendo a quantidade
de chave imensa, usado a B-Tree como estrutura de ndice para gerenciamento destes
dados.
Devido quantidade de chaves em questo, que para 10 milhes de pginas
indexadas pelo Radix, geram 1.7 bilhes de chaves para a B-Tree gerenciar, foi adotado
a poltica de descentralizao das B-Trees. No lugar de apenas uma B-Tree indexar todo
o universo de chaves, vrias rvores indexam subconjuntos de chaves por intervalo de
cdigos. Essa abordagem um paliativo, pois com o aumento da quantidade de pginas
recuperadas pelo Mdulo Indexador, o nmero de chaves da relao Termo x Pgina
crescer exponencialmente.
A aplicao da B+Tree surgiu da necessidade de manipular consultas com
intervalo, que so facilmente resolvidas pela B+Tree devido ao projeto de sua estrutura.
Embora a B+Tree seja uma evoluo da B-Tree, ela no apresenta ganho significativo
quanto ao nmero de acessos a disco durante a busca, uma vez que toda informao
encontra-se nas folhas. Esse fato implica que todas as buscas tero sempre nmero de
acessos a disco da ordem de O(tlogt n), enquanto na B-Tree esse nmero de acessos a
disco representa o seu mximo, j que o dado pode estar em ns internos.

22

6. Concluses e Trabalhos Futuros


Neste trabalho foram desenvolvidos trs ndices capazes de gerenciar o grande
volume de dados que compem a base de dados de um Mecanismo de Busca.
Em particular ao Mecanismo de Busca, a Extensible Hashtable pode ser aplicada
como um Servidor de Cdigos para os termos indexados, uma vez que os termos podem
facilmente ser processados por uma funo de hashing. Desta maneira pode-se mapear o
termo a um determinado cdigo que usado por todos os mdulos do Mecanismo de
Busca.
A B-Tree (e a B+Tree), em um Mecanismo de Busca, tem como funo indexar
a lista de posies das ocorrncias de cada termo em um determinado documento (i.e.,
pgina html), uma vez que esta associao (termo x pgina) produz um volume imenso
de dados, da ordem de bilhes de dados.
Com o crescimento exponencial da Web (Search Engine Watch), implicando no
aumento da base de dados indexada pelo Mdulo de Busca, o espao ocupado pelo
arquivo de ndices da B-Tree pode chegar a tamanhos crticos, degradando seu
desempenho uma vez que a diferena entre os offsets de seus ns podem ser muito
grandes, causando dificuldade para o Sistema de Arquivos do Sistema Operacional.
Como trabalho futuro, esto sendo pesquisadas modificaes estrutura da BTree para que esta seja capaz de gerenciar grandes volumes de dados sem ocupar espao
significativo em disco, melhorando seu desempenho.
Um outro trabalho fututo a alterao da implementao da Extensible
Hashtable para que o arquivo de buckets seja particionado em arquivos menores. Desta
forma ser possvel trabalhar com volumes de dados maiores que 2 GB no Linux.

23

Referncias
Baeza-Yates,R. e Ribero-Neto,B. "Modern Information Retrieval". Addison Wesley,
1999.
Bayer, R.,. Symmetric binary B-Trees: Data structure and maintenance algorithms.
Acta Informatica, 1:290-306, 1972.
Bayer, R., McCreight, E.. Organization and Maintenance of Large Ordered Indexes.
Acta Informatica, 1(3):173-189, Fevereiro, 1972.
Barbosa, L.A.. Uma Proposta de Atualizao de Contedo Dinmico em Engenhos de
Busca. Trabalho de Graduao, Janeiro 2001.
Brewington, B. E. e Cybenko, G. How Dynamic is the Web?. In Proceedings of the
9th World-Wide Web Conference (WWW9), 2000.
Cormen, T. D., Leiserson, C. E., Rivest, R. L.. Introduction to Algorithms. MIT Press,
Cambridge MA, 1990.
Date, C. J.. An Introduction to Database Systems. Sixth Edition. Addison-Wesley, 1995.
Eckel, B. Thinking In Java. Prentice Hall, 1998.
Elmasri, R., Navathe, S. B.. Fundamentals of Database Systems. Third Edition.
Addison-Wesley, 2000.
Fagin, R, Nievergelt, J., Pippenger, N., e Strong, H. Extensible Hashtable A Fast
Access Method for Dynamic Files, Transaction On Database Systems, 4:3, Setembro,
1979.
Frakes,W. B. e Baeza-Yates,R. "Information Retrieval: Data Structure & Algorithms".
Prentice Hall, 1992.

24

Garcia-Molina, H., Ullman, J. D.,Widow, J.. Database System Implementation. Prentice


Hall, 2000.
Graefe, G.. Query Evaluation Techniques for Large Databases. ACM Computing
Surveys, Vol. 25 No. 2, Junho 1993.
Jenkins, R. J. Jr. Algorithm Alley: Hash Functions for Hashtable Lookup. Dr.Dobbs
Journal. Setembro, 1997. URL: http://www.ddj.com
JFS, JFS, Journaled File System Layout Paper. IBM Inc, 2000. URL:
http://www-106.ibm.com/developerworks/library/jfslayout/index.html
Knuth, D. E.. The Art of Computer Programming vol. 3: Searching and Sorting.
Second Edition. Junho, 1998.
Ramalho, F. S. Avaliao Emprica da Expanso Automtica de Consultas Atravs de
Sinnimos e Hiprnimos em Engenhos de Busca, Dissertao de Mestrado, Outubro
2000.
Search Engine Watch. URL: http://www.searchenginewatch.com
Sedgewick, R., Wyk, J. van , Algorithms in C++, Part 1-4. p. 560-564; 646-662. Third
Edition. Addison-Wesley, 1998.
Sun Microsystems. URL: http://java.sun.com
Tanenbaum, A. S.. Modern Operating Systems. p. 111-114. Prentice Hall, 1992.
Wedekind, H.. On the selection access path in a database system. Database
Manegement, p. 385-397. North Holland Publishing Company, 1974.

25

Witten, I. H., Moffat, A. and Bell, T. C.. Managing Gigabytes: Compressing and
Indexing Documents and Images. Morgan Kaufmann Publishers, 1999.
XFS, High Performance Journaled File System. Silicon Graphics Inc, 1994-2001.
URL: http://oss.sgi.com/projects/xfs/

26

Apndice A: Inverted Files

Inverted File (Arquivo Invertido)


Um arquivo invertido (Frakes, W. B. e Baeza-Yates, R, 1992) um mecanismo
orientado palavra para indexar uma coleo de texto a fim de aumentar a velocidade
da tarefa de busca. A estrutura de arquivo invertido composta de dois elementos: o
vocabulrio (lexicon) e as ocorrncias. O vocabulrio o conjunto de todas os termos
diferentes do texto. Para cada termo h uma lista de todos os documentos onde os
termos aparecem associados quantidade de vezes que o termo ocorre. O conjunto de
todas as listas chamado de ocorrncias. Um exemplo de um arquivo invertido
mostrado na figura A.1.
1

9 11

17 19

24

28

33

40

46

50

55

60

This is a text. A text has many words. Words are made from letters.
Doc. 1
1

9 11

17 19

24

28

33

40

46

50

55

60

Words are made from letters and this is a text. Thus, text has many words.
Doc. 2
Vocabulrio

Ocorrncias

letters

Doc 1=1, Doc 2=1...

made

Doc 1=1, Doc 2=1...

many

Doc 1=1, Doc 2=1...

text

Doc 1=2, Doc 2=2...

words

Doc 1=2, Doc 2=2...

ndice Invertido

Figura A.1 Um exemplo de um texto e um arquivo invertido construdo sobre ele. As


palavras so convertidas para letras minsculas e algumas no so indexadas, por no
apresentarem um contedo semntico. As posies referenciam as posies dos
caracteres no texto (Baeza-Yates e Ribero-Neto, 1999).

27

Apndice B: Red-Black Trees

Uma rvore red-black uma rvore de busca binria que possui um bit a mais
por n, a sua cor, que tanto pode ser preta ou vermelha. A rvore red-black
aproximadamente balanceada, uma vez que a maneira pela qual os caminhos, a partir
da raiz seguindo at as folhas, so coloridos garante que no h nenhum caminho duas
vezes maior que nenhum outro.

B.1 Definies
Alm dos campos chave e cor, a estrutura dos ns de uma rvore red-black
consiste nos campos esquerda, direita e p, onde esquerda e direita so ponteiros para os
filhos do n, enquanto p um ponteiro para o pai do n. Se um filho ou um pai de um
determinado n no existir, ento o ponteiro correspondente aponta para null.

B.2 Propriedades
Uma rvore de busca binria uma rvore red-black se satisfizer as seguintes
propriedades:
1. Todo n ou preto, ou vermelho.
2. Toda folha preta.
3. Se um n preto, ento seus dois filhos so vermelhos.
4. Todo caminho a partir de um n qualquer para suas folhas contm o
mesmo nmero de ns pretos.

28

Вам также может понравиться