Trabalho FInal - Inf

Propaganda
1
UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL
INSTITUTO DE INFORMÁTICA - CIÊNCIA DA COMPUTAÇÃO
DEPARTAMENTO
DE
INFORMÁTICA
APLICADA
CLASSIFICAÇÃO E PESQUISA DE DADOS – INF01124
EDUARDO DA SILVA SARDÃO – 0981/00-4
IGOR RODRIGO MACHADO DE MENEZES – 1422/98-1
TRABALHO FINAL
ÁRVORES B+
Documentação do trabalho de implementação de uma árvore B+ que simula um
pequeno banco de dados.
Prof. Dr. Maurício Lima Pilla
Turma U
Porto Alegre, dezembro de 2004
2
SUMÁRIO
LISTA DE ABREVIATURAS E SIGLAS ….........................................................
3
LISTA DE FIGURAS ..........................................................................................
4
LISTA DE TABELAS ..........................................................................................
4
RESUMO ............................................................................................................
5
ABSTRACT ........................................................................................................
6
1
INTRODUÇÃO ............................................................................................
7
2
ÁRVORES B ..............................................................................................
2.1 Árvores B+ ..............................................................................................
2.2 Outras variações ...................................................................................
8
8
9
3 DEFINIÇÃO DE ÁRVORE B+ ....................................................................
3.1 Altura da árvore B+ ................................................................................
3.2 Ordem e capacidade de uma árvore B+ ...............................................
10
10
10
4 OPERAÇÕES ..............................................................................................
4.1 Criação ......................................................................................................
4.2 Busca .......................................................................................................
4.3 Inserção ....................................................................................................
4.3.1 Divisão ..................................................................................................
4.3.2
Inserção Propriamente dita ................................................................
4.4 Remoção ...................................................................................................
4.4.1 Fusão ....................................................................................................
4.4.2 Remoção Propriamente dita ...............................................................
12
12
12
12
13
13
14
14
14
5
CONCLUSÃO .............................................................................................. 16
REFERÊNCIAS .................................................................................................. 17
3
LISTA DE ABREVIATURAS E SIGLAS
AVL
LRU
ms
ns
Adelson-Velskii e Landism
Less Recently Used – Menos Recentemente Usado.
milisegundos
nanosegundos
4
LISTA DE FIGURAS
Figura 2.1: Árvore B de ordem m=4 ............................................................................ 9
Figura 2.2: Exemplo de uma árvore B+ de ordem m=5 e capacidade b=4 .................... 9
Figura 3.1: Comparação de um caso mínimo de árvore B+ com altura h, ordem m e
capacidade b ............................................................................................. 11
Figura 4.1: Inserção da chave 40 em nodo com espaço (1) e inserção da chave 10 em
nodo cheio (2). Note que a raiz também estava cheia, necessitando de uma
divisão recursiva. Demais nodos formam omitidos para facilitar
entendimento. ........................................................................................... 13
Figura 4.2: Remoção de chaves em uma árvore B+ de ordem m= ............................. 15
LISTA DE TABELAS
Tabela 2.1: Comparação entre memória principal e secundária .................................... 9
Tabela 3.1: Exemplos de altura máxima de árvores B+ de ordem m, capacidade b=4,
com n elementos ....................................................................................... 11
5
RESUMO
Este documento é uma explicação teórica sobre árvores B+ e fornece a base para
entende como criar um banco de dados usando uma estrutura de árvore B+, suas
vantagens sobre outros algoritmos baseados em árvores e a melhor aplicação para ela.
Palavras-chave: Árvore B+.
6
B+-TREE
ABSTRACT
This document is a theoretic explanation about B+-trees and gives the bases to
understand how create a data banc using B+-tree structure, its advantages over other tree
based algorithms and the best application for it.
Keywords:. B+-tree, Bplus-tree.
7
1 INTRODUÇÃO
Esta documentação visa dar o embasamento teórico sobre árvores B+, descrevendo
de forma objetiva os passos necessários à implementação de um banco de dados
hipotético estruturado na forma de uma árvore B+, suas vantagens e noções básicas do
custo das operações envolvidas, tanto em relação ao uso de processador quanto a
acessos a disco.
8
2 ÁRVORES B
Árvores B são uma variação específica de árvores destinadas a armazenar
quantidades elevadas de dados, muito maiores do que a memória principal disponível,
caso no qual uma árvore binária não se ajusta adequadamente.
A principal preocupação de uma árvore B é armazenar os dados em memória
secundária, o disco rígido, por esse motivo sua estrutura é voltada a usar blocos do
tamanho dos setores do disco rígido utilizado. Além da estrutura em blocos, um objetivo
de uma árvore B é reduzir o número de acessos a disco, entre 10.000 e 100.000 vezes
mais lento que a memória principal, sendo o número de acessos proporcional a altura da
árvore, uma arvore B com um grau de ramificação (ordem) maior que dois, para um
dado número de chaves, tem altura bem inferior a uma árvore AVL1 (árvore binária com
balanceamento dinâmico), o que reduz significativamente o custo de uma pesquisa.
Normalmente a ordem de uma árvore B é definida pelas características físicas da
memória secundária empregada, o tamanho típico de um setor de disco é de 512 bytes,
desta forma um bloco desta árvore B+ seria de 512 bytes.
Tabela 2.1: Comparação entre memória principal e secundária
Tempo de
Velocidade de
Transferência em
acesso
transmissão
10 ns
Memória Principal 10-9 s (10 ns)
1000 Mbyte/seg
10 Mbytes
Memória
10-3 s (10 ms)
50 Mbyte/seg
0,5 Mbytes
Secundária (disco)
2.1
Árvores B+
Dentre as variações das árvores B, está a árvore B+, cujo emprego está associado à
necessidade de realizar buscas seriais no banco de dados. Devido à dificuldade e alto
custo devido ao número excessivo de acessos a disco em uma busca serial quando os
dados estão distribuídos em páginas (blocos) diferentes da memória, uma das
modificações na árvore B original foi a de introduzir um duplo encadeamento entre as
diferentes páginas da área de dados, de modo a permitir a leitura seqüencial dos dados
das folhas, outra modificação é a de replicar os índices nas folhas, assim garantindo que
todos os dados podem ser acessados de forma seqüencial.
1
AVL: em homenagem aos matemáticos russos Adelson-Velskii e Landism – 1962, árvore binária que
admire uma diferença de altura de no máximo 1 entre as suas sub-árvores esquerda ou direita.
9
2.2
Outras variações
As árvores B admitem outras variações, além da árvore B+:
Uma delas é a Árvore B Virtual, onde é incluído um gerenciamento de memória de
modo a cachear a maior parte possível dos dados na memória principal, melhorando
significativamente o desempenho, o acesso a disco só é fito quando uma página não está
disponível, substituindo outra que esteja em desuso, ou conforme a necessidade.
Outra possibilidade é a Árvore B*, proposta por Knuth em 1973, onde cada nó possui
no mínimo dois terços das chaves.
Figura 2.1: Árvore B de ordem m=4
Figura 2.2: Exemplo de uma árvore B+ de ordem m=5 e capacidade b=4
10
3 DEFINIÇÃO DE ÁRVORE B+
Uma árvore B+ é formada por nodos dimensionados conforme os setores do disco
rígido empregado. Todas as folhas estão no mesmo nível, ou seja altura da árvore B+. O
grau mínimo t é maior que um, e cada nodo interno possui no mínimo (t-1) chaves e no
máximo (2t-1) chaves, uma árvore não vazia possui pelo menos uma chave na raiz.
Por definição do trabalho será utilizado um setor de disco do tamanho de 256 bytes.
3.1Altura da árvore B+
A altura da arvore B+ é um fator importante, pois define o número de acessos a
disco. Desta forma uma árvore com n elementos tem sua altura h definida em relação do
grau mínimo t e o número de chaves:
n 1
h  log
 1.
2
t
3.2Ordem e capacidade de uma árvore B+
Para melhor aproveitamento, a capacidade deve ser a maior possível, calculada
baseado no tamanho de uma página, ou setor físico do disco rígido, tendo em vista o
tamanho dos dados armazenados e os elementos básicos de um nodo como ponteiros,
etc.
Ordem m é o número máximo de filhos de cada nodo de uma árvore. Capacidade b é
o número máximo de dados armazenado em uma folha.
Dado um número total de elementos n, existe uma altura h tal que
h 2
h 1
n
m 
m 
b    n  b   e h  2  log m b .
2
2 
2 
11
h 2
h
1
folhas
1
2
2
1
3
m
2 
2
2
4
m
2 
 2
h 2
m
m
b
(h  2 )
folhas  2  
elementos  2    
2 
 2   2
Figura 3.1: Comparação de um caso mínimo de árvore B+ com altura h, ordem m e
capacidade b
Tabela 3.1: Exemplos de altura máxima de árvores B+ de ordem m, capacidade b=4,
com n elementos.
n 103 104 105 106 107 108
m
10
20
30
40
50
100
5
4
4
3
3
3
6
5
4
4
4
4
8
6
5
5
5
4
9
7
6
6
5
5
11
8
7
6
6
5
12
9
8
7
7
6
12
4 OPERAÇÕES
Para a implementação de um banco de dados baseado em uma árvore B+ são
necessárias operações básicas:
 Construção: uma árvore B+ vazia é criada;
 Destruição: uma árvore B+, não necessariamente vazia é destruída;
 Busca: dada uma determinada chave é feita sua busca na estrutura da árvore B+;
 Inserção: insere uma nova chave dentro da árvore B+, uma chave já existente
não pode ser inserida novamente;
 Remoção: remove da árvore uma chave, não necessariamente a chave precisa
existir.
4.1
Criação
A operação de criação de uma árvore B+ vazia é feita pela alocação de uma posição
de memória para a raiz da árvore, e pela inicialização dos valores de folha, grau e sua
gravação em disco.
A complexidade da operação é de  (1) e 1 acesso à memória secundária.
4.2
Busca
O algoritmo de busca em uma árvore B+ é uma simples generalização do algoritmo
de busca em árvores binárias. De maneira recursiva uma chave C é comparada com a
primeira chave da raiz, caso seja menor é chamado recursivamente a mesma função para
o nodo filho mais à esquerda, caso contrário compara com as chaves seguintes, até
encontrar uma que seja maior ou caso não encontre buscará o filho mais à direita
recursivamente, até encontrar a chave em uma folha, ou encontrar uma chave maior ou
ser maior que as demais chaves folha.
A Busca em uma árvore B+ é de uma complexidade de O(t) passos por nível da
árvore, realizando um acesso à memória secundaria. Uma busca em uma árvore B+
realiza O(h) = O (logt n) acessos a memória secundária e O(ht) = O (t logt n) operações.
4.3
Inserção
A realização de uma inserção em uma árvore B+ não é tão simples quanto em
árvores binárias, pois devido à existência de mais de uma chave por nodo, pode ocorrer
o fato de o nodo no qual a chave deveria ser inserida estar cheio, e para isso será
necessário dividir o nodo em dois.
13
4.3.1 Divisão
Quando um nodo atinge 2t-1 chaves ele é considerado cheio, não podendo receber
mais nenhuma chave, mas no entanto pode ser necessária a alocação de uma nova chave
nesta posição, para isso é feita a operação de divisão de nodo cheio, inserindo a chave
central no nível superior e transformando o nodo cheio em dois novos nodos.
A operação de divisão realiza 3 acessos escrita na memória secundária e O (t)
operações.
4.3.2 Inserção propriamente dita
Para realizar a inserção primeiramente é necessária uma busca recursiva pela posição
onde deve ser inserida a chave.
Uma das possibilidades é inserção na raiz, estando ela cheia, neste caso a altura da
árvore será alterada conforme operação de divisão, supra citada, seguida da inserção da
nova chave.
A inserção pode ser feita em um nodo folha ou no corpo da árvore. No primeiro caso
é localizado o nodo folha e feita uma busca serial do final do vetor até encontrar a
posição onde deve ser inserida a chave, neste processo a chaves existentes são
deslocadas uma posição para criar o espaço para a nova chave. Após realizada a
inserção o nodo é gravado. Já se for um nodo interno, será realizada uma busca pela
sub-árvore onde deve ser inserida a chave, no caso de nodo cheio será realizada a
divisão (figura 4.1).
No pior caso de uma inserção ela se dará numa folha, necessitando O (h) chamadas
recursivas do procedimento de inserção, cada uma com O (1) acessos a memória
secundária e O (t) operações. A complexidade total é de O (logt n) acessos a memória
secundária e O (t logt n) operações.
Figura 4.1: Inserção da chave 40 em nodo com espaço (1) e inserção da chave 10 em
nodo cheio (2). Note que a raiz também estava cheia, necessitando de uma divisão
recursiva. Demais nodos formam omitidos para facilitar entendimento.
4.4
Remoção
14
O caso inverso da inserção, desta vez é necessário verificar o número mínimo de
chaves no nodo resultante (t-1), caso o nodo resultante não cumpra esta definição, devese realizar a fusão.
4.4.1 Fusão
Quando um nodo do qual deve-se remover uma chave possui (t-1) chaves, ele já está
com o tamanho mínimo admissível, a remoção de uma chave faz necessária a fusão
deste nodo com um nodo vizinho.
No caso de dois nodos adjacentes possuírem (t-1) chaves pode-se realizar a fusão
dos dois nodos onde a chave do nodo pai que divide os dois nodos adjacentes será
reposicionado no nodo resultante juntamente com as chaves dos adjacentes.
A operação de divisão realiza 3 acessos escrita na memória secundária e O (t)
operações.
4.3.2 Remoção propriamente dita
Um pouco mais delicada de a operação simétrica (inserção), para a remoção são
necessários alguns passos para garantir a estrutura de uma árvore B+.
A remoção de chaves irá incorrer em um dos casos conforme Figura 4.2:
(1) Remoção simples e direta, quando o nodo possui no mínimo t chaves;
(2) Remoção de chave quando o nodo possui t-1 chaves e o nodo adjacente pelo
menos t chaves;
a) Pode ser realizado “empréstimo” do vizinho da direita;
b) Pode ser realizado “empréstimo” do vizinho da esquerda;
(3) Na exclusão de uma chave pode ocorrer de dois nodos adjacentes possuírem
t-1 chaves, neste caso ocorrerá a fusão dos dois nodos adjacentes;
(4) Na exclusão de uma chave de um nodo intermediário, pode ocorrer de dois
nodos filhos possuírem t-1 chaves cada, neste caso ocorrerá a fusão dos dois
nodos filhos adjacentes.
O custo das operações é idêntico aos de inserção, no pior caso a remoção se dará numa
folha, necessitando O (h) chamadas recursivas do procedimento de remoção, cada uma
com O (1) acessos a memória secundária e O (t) operações. A complexidade total é de
O (logt n) acessos a memória secundária e O (t logt n) operações.
15
Figura 4.2: Remoção de chaves em uma árvore B+ de ordem m=6.
16
5 CONCLUSÃO
Após o estudo de diferentes tipos de árvores, e sua comparação com árvores B+,
notasse que além de ser uma estrutura que aproveita as características físicas dos
computadores para um melhor desempenho, as árvores em geral têm um ganho em
relação às demais por sua altura reduzida em relação a árvores binárias, mais uma vez
reduzindo o tempo de operação com um menor número de acessos a disco. O ganho
ainda pode ser maior se for estruturado como uma árvore B+ Virtual, colocando uma
boa parte da árvore na memória principal, e com um gerenciamento de memória virtual
do tipo menos recentemente utilizada (LRU) terá as páginas mais recentes disponíveis, o
que facilita a inserção e exclusão de chaves.
17
REFERÊNCIAS
CORMEN, Thomas H.; LEISERSON, Charles E.; RIVEST, Ronald L. Introduction to
Algorithms. McGraw Hill, 1990.
Projeto de Algoritmos. Disponível em <http://www.cs.ust.hk/faculty/dimitris/
COMP530/notes/l6.pdf> acesso em dezembro de 2004.
Today's Lecture. Disponível em <http://www.soe.ucsc.edu/classes/cmps180/Winter03/
Lectures/B+-Trees.pdf> acesso em dezembro de 2004.
ZIVIANI, N. Projeto de Algoritmos com Implementações em Pascal e C. São Paulo,
Livraria Pioneira Editora, 1993.
18
UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL
INSTITUTO DE INFORMÁTICA - CIÊNCIA DA COMPUTAÇÃO
DEPARTAMENTO
DE
INFORMÁTICA
APLICADA
CLASSIFICAÇÃO E PESQUISA DE DADOS – INF01124
EDUARDO DA SILVA SARDÃO – 0981/00-4
IGOR RODRIGO MACHADO DE MENEZES – 1422/98-1
TRABALHO FINAL
ÁRVORES B+
Porto Alegre, dezembro de 2004
Download