Академический Документы
Профессиональный Документы
Культура Документы
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
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
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.
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).
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
12
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.
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
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
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.
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.
17
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
Chaves
103
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
-
19
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
20
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
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
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
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
made
many
text
words
ndice Invertido
27
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