Você está na página 1de 8

RVORE-B

Bayer and McGreight, em 1972, publicaram o artigo: "Organization and Maintenance of Large Ordered Indexes". Em 1979, o uso de rvores-B j era praticamente o padro adotado em sistemas de arquivos de propsito geral para a manuteno de ndices para bases de dados. O problema fundamental associado manuteno de um ndice em disco que o acesso muito lento, o que coloca problemas para uma manuteno eficiente. O melhor acesso a um ndice ordenado, at agora, foi dado pela Pesquisa Binria, porm: ? ? Pesquisa binria requer muitos acessos. 15 itens podem requerer 4 acessos, 1000 itens podem requerer at 11 acessos. Esses nmeros so muito altos. Pode ficar muito caro manter um ndice ordenado de forma a permitir busca binria. necessrio um mtodo no qual a insero e a eliminao de registros tenha apenas efeitos locais, isto , no exija a reorganizao total do ndice.

Soluo atravs de rvores binrias de pesquisa (ABP)


Os registros so mantidos num arquivo, e ponteiros (esq e dir) indicam onde esto os registros filhos. Esta estrutura pode ser mantida em memria secundria: os ponteiros para os filhos dariam o nmero dos registros correspondentes aos filhos, i.e., a sua localizao no arquivo.

? ?

Vantagem: a ordem lgica dos registros no est associada ordem fsica no arquivo. O arquivo fsico do ndice no precisa mais ser mantido ordenado, uma vez que a seqncia fsica dos registros no arquivo irrelevante: o que interessa poder recuperar a estrutura lgica da rvore, o que feito atravs dos campos esq e dir.

Se acrescentarmos uma nova chave ao arquivo, por exemplo, LV, necessrio apenas saber aonde inserir esta chave na rvore, de modo a mant-la como ABP. A busca pelo registro necessria, mas a reorganizao do arquivo no .

Soluo por rvores AVL


A eficincia do uso de rvores binrias de pesquisa exige que estas sejam mantidas balanceadas. Isso implica no uso de rvores AVL, e dos algoritmos associados para insero e eliminao de registros. Para uma rvore binria completamente balanceada, o nmero mximo de comparaes para localizar uma chave em uma rvore com N chaves igual altura da rvore, dada por log2 (N+1). Para uma rvore AVL, esse nmero 1.44*log2 (N+2). Portanto, dadas 1.000.000 de chaves, em uma rvore completamente balanceada uma busca iria percorrer at 20 nveis da rvore. Para uma rvore AVL, a busca poderia percorrer at 28 nveis. Entretanto, se as chaves esto em memria secundria, qualquer procedimento que exija mais do que 5 ou 6 acessos para localizar uma chave altamente indesejvel: 20 ou 28 seeks so igualmente inaceitveis. Assim, rvores balanceadas so uma boa alternativa se considerarmos o problema da ordenao, pois no requerem a ordenao do ndice e sua reorganizao sempre que houver nova insero. Por outro lado, as solues vistas at agora no resolvem o problema no nmero excessivo de acessos a disco.

Soluo por rvores Binrias Paginadas (Paged Binary Trees)


Ou seja, o velho problema est de volta: a busca por uma posio especfica do disco muito lenta. Por outro lado, uma vez encontrada a posio, pode-se ler uma grande quantidade registros seqencialmente a um custo relativamente pequeno. Esta combinao de busca ( seek ) lenta e transferncia rpida sugere a noo de pgina: em um sistema "paginado", voc no incorre no custo de fazer um "seek" para recuperar apenas alguns bytes: ao invs disso, uma vez realizado um seek, que consome um tempo considervel, toda os registros em uma mesma "pgina" do arquivo so lidos. Esta pgina pode conter um nmero bastante grande de registros, e se por acaso o prximo registro a ser recuperado estiver na mesma pgina, voc economizou um acesso a disco.

A diviso de uma rvore binria em pginas ilustrada na figura acima. Nessa rvore de 9 pginas, quaisquer dos 63 registros podem ser acessados em, no mximo, 2 acessos. Se a rvore estendida com um nvel de paginao adicional, adicionamos 64 novas pginas, e poderemos encontrar qualquer um das 511 chaves armazenadas com apenas 3 seeks (quantos seeks seriam necessrios em uma busca binria?) Se cada pgina dessa rvore ocupar 8KB, permitindo a armazenagem de 511 pares chave-referncia; e cada pgina contiver uma rvore completa perfeitamente balanceada, ento a rvore toda pode armazenar um total de 134.217.727 chaves, sendo que qualquer delas pode ser acessada em, no mximo, 3 acessos ao disco. Pior caso para: rvore binria completa, perfeitamente balanceada: log2 (N+1) verso em pginas: logk +1 (N+1) em que N o nmero total de chaves, e k o nmero de chaves armazenadas em uma pgina. Note que, para rvores binrias, k = 2. Observe o efeito logartmico do tamanho da pgina para k = 2 e k = 511: ? ? ? ? rvore binria: log2 (134.217.727) = 27 acessos verso em pginas: log511+1 (134.217.727) = 3 acessos Preos a pagar: maior tempo na transmisso de grandes quantidades de dados, e, mais srio, a necessidade de manuteno da organizao da rvore.

Problema da construo Top-Down de rvores paginadas


Construir uma rvore paginada relativamente simples se temos todo o conjunto de chaves antes de iniciar a construo, pois sabemos que temos de comear com a chave do meio para garantir que o conjunto de chaves seja dividido de forma balanceada. Entretanto, a situao se complica se estamos recebendo as chaves em uma seqncia aleatria e construindo a rvore a medida em que as chaves chegam. Provavelmente a rvore ficar desbalanceada. E ento, o que fazer? No d para rotacionar pginas como rotacionamos chaves individuais!

Construo Bottom-Up: rvores-B


Bayer e McCreight, no artigo mencionado anteriormente, propuseram que as rvores fossem construdas de baixo para cima. Desta forma, as chaves raiz da rvore emergem naturalmente. Uma idia elegante e poderosa. Numa rvore-B: ? ? ? ? ? ? Cada pgina formada por uma seqncia ordenada de chaves e um conjunto de ponteiros. No existe uma rvore explcita dentro de uma pgina (ou n). O nmero de ponteiros em um n excede o nmero de chaves em 1. O nmero mximo de ponteiros que podem ser armazenados em um n a ordem da rvore. O nmero mximo de ponteiros igual ao nmero mximo de descendentes de um n. Exemplo: uma rvore-B de ordem 8 possui ns com, no mximo, 7 chaves e 8 filhos. Os ns folha no possuem filhos, e seus ponteiros so nulos.

Insero em rvore -B
Seja a seguinte pgina inicial de uma rvore-B de ordem 8, que armazena 7 chaves.

Observe que, em uma situao real, alm das chaves e ponteiros armazena-se outras informaes associadas s chaves, como uma referncia para a posio do registro associado chave em um arquivo de dados. Esta folha que, coincidentemente, tambm a raiz da rvore, est cheia. Como inserir uma nova chave, digamos J? Subdividimos (split) o n folha em dois ns folhas, distribuindo as chaves igualmente entre os ns.

Temos agora duas folhas: precisamos criar uma nova raiz. Fazemos isso "promovendo" ( romote), ou p "subindo" uma das chaves que esto nos limites de separao das folhas. Nesse caso, "promovemos" a chave E para a raiz:

4 Em resumo: Para inserirmos um novo elemento em uma rvore-B, basta localizar o n folha X onde o novo elemento deva ser inserido. Se o n X estiver cheio, precisamos realizar uma subdiviso de ns, que consiste em passar o elemento mediano de X para seu pai e subdividir X em dois novos ns com round (m/2) - 1 elementos e depois inserir a nova chave. Se o pai de X tambm estiver cheio, repetimos recursivamente a subdiviso acima para o pai de X. No pior caso, teremos que aumentar a altura da rvore-B para podermos inserir o novo elemento. Note que, diferentemente das rvores binrias, as rvores-B crescem para cima. Veja, a seguir, um exemplo de incluso de novos elementos em uma rvore-B de ordem 6:

. Definio e Propriedades da rvore -B


Segundo vimos, a ordem de uma rvore-B dada pelo nmero mximo de descendentes que uma pgina, ou n, pode possuir. A definio apresentada vincula a ordem de uma rvore-B ao nmero de descendentes de um n (isto , de ponteiros). Deste modo, numa rvore -B de ordem m, o nmero mximo de chaves em uma pgina m-1. Para uma rvore-B de ordem m: 1. 2. 3. 4. 5. cada pgina tem no mximo m descendentes e m-1 chaves. cada pgina, exceto a raiz e as folhas, tem um mnimo de round (m/2) filhos. cada pgina, exceto a raiz, tem um mnimo de round (m/2) - 1 chaves. todas as folhas aparecem num mesmo nvel (o nvel mais baixo). uma pgina que no folha e possui k filhos, e contm k-1 chaves.

Remoo em rvore -B
O processo de sub-diviso (split) de pginas garante a manuteno das propriedades da rvore-B durante a insero. Essas propriedades precisam ser mantidas, tambm, durante a eliminao de chaves. Caso 1: eliminao de uma chave em uma pgina folha, sendo que o nmero mnimo de chaves na pgina respeitado. Soluo: a chave retirada e os registros internos pgina so reorganizados. Caso 2: eliminao de uma chave que no est numa folha. Soluo: sempre eliminamos de pginas folha. Se uma chave deve ser eliminada de uma pgina que no folha, trocamos a chave com sua sucessora imediata, que com certeza est numa folha, e ento eliminamos a chave da folha.

5 Caso 3: eliminao causa underflow na pgina. O nmero mnimo de chaves por pgina nessa rvore round(m/2)-1. Soluo: redistribuio. Procura-se uma pgina irm (mesmo pai) que contenha mais chaves que o mnimo: se existir redistribui-se as chaves entre essas pginas. A redistribuio pode provocar uma alterao na chave separadora que est no n pai. Caso 4: ocorre underflow e a redistribuio no pode ser aplicada. No existem chaves suficientes para dividir entre as duas pginas irms. Soluo: deve-se utilizar concatenao, que consiste na combinao do contedo das duas pginas e a chave da pgina pai para formar uma nica pgina. A concatenao o inverso do processo de subdiviso. Como conseqncia, pode ocorrer o underflow da pgina pai. Caso 5: underflow da pgina pai. Soluo: tenta-se redistribuio (caso 3) e, se no for possvel, concatenao (caso4). Pode levar diminuio da altura da rvore. Como exemplo, veja a figura a seguir.

Redistribuio durante Insero


Diferentemente da diviso e da concatenao, o efeito da redistribuio local. No existe propagao. Outra diferena que no existe uma regra fixa para o rearranjo das chaves. A eliminao de uma nica chave em uma rvore-B no pode provocar o underflow de mais de uma chave. Portanto, a redistribuio pode restabelecer as propriedades da rvore-B movendo apenas uma chave de uma pgina irm para a pgina com problema, ainda que a distribuio de chaves entre as pginas fique muito desigual. A estratgia usual redistribuir as chaves igualmente entre as pginas. Exemplo: dada uma rvore-B de ordem 101, os nmeros mnimo e mximo de chaves so, respectivamente, 50 e 100. Se ocorre underflow de uma pgina, e a pgina irm tem 100 chaves, qualquer nmero de chaves entre 1 e 50 pode ser transferido. Normalmente transfere-se 25, deixando as pginas equilibradas. A redistribuio no foi comentada quando explicamos o processo de insero. Entretanto, seria uma opo desejvel tambm na insero. Ao invs de dividir uma pgina cheia em duas pginas novas semivazias, pode-se optar por colocar a chave que sobra (ou mais que uma!) em outra pgina. Essa estratgia resulta em uma melhor utilizao do espao alocado para a rvore. Depois da diviso de uma pgina, cada pgina fica 50% vazia. Portanto, a utilizao do espao, no pior caso, em uma rvore-B que utiliza splitting, de cerca de 50%. Em mdia, para rvores grandes, foi provado que o ndice de 69%. Estudos empricos indicam que a utilizao de redistribuio pode elevar o ndice de 67% para 85%. Esses resultados sugerem que qualquer aplicao sria de rvore-B deve utilizar, de fato, redistribuio durante a insero.

RVORES-B+
Uma das maiores deficincias da rvore-B a dificuldade de percorrer as chaves seqencialmente. Uma variao da estrutura bsica da rvore-B a rvore-B+. Nesta estrutura, todas as chaves so mantidas em folhas, e algumas chaves so repetidas em ns no-folha para definir caminhos para localizar registros individuais. As folhas so ligadas atravs de uma lista duplamente encadeada, de modo a oferecer um caminho seqencial para percorrer as chaves na rvore. Esta lista chamada de Conjunto de Seqncia (Sequence Set).

30 56

18 21

49

60

13 18

21

30

45 49

52 56

60

71 73

importante esta separao lgica da rvore-B+ em Conjunto de ndices (Index Set) e Conjunto de Seqncia, pois podemos fazer a maioria das incluses e excluses no conjunto de seqncia sem alterar o ndice (rvore-B). Quando houver necessidade de incluso ou excluso do referido ndice, usamos os algoritmos j conhecidos da rvoreB. A insero numa rvore-B+ ocorre praticamente da mesma forma que numa rvore-B, exceto pelo fato de que, quando um n dividido, a chave do meio retida no meio n esquerdo, alm de ser promovida a pai. Quando uma chave eliminada de uma folha, ela pode ser retida nas no-folhas porque ela ainda um separador vlido entre as chaves nos ns abaixo dela. A rvore-B+ mantm o baixo custo das operaes de pesquisa, incluso e excluso e adquire a vantagem de requerer no mximo um acesso para satisfazer a operao da prxima chave. Alm disso, para um processamento seqencial nenhum nodo precisar ser acessado mais de uma vez como acontece no caminhamento in-order que precisamos fazer numa rvore -B. Portanto, enquanto a eficincia de localizao do registro seguinte em um rvore-B O(log n), numa rvore-B+ aumentada para O(1). A rvore-B+ ideal para aplicaes que requerem tanto acesso seqencial quanto aleatrio. Por isso e pelas vantagens citadas anteriormente, a rvore -B+ tornou-se bastante popular nos SGBDs comerciais.

RVORES-B*
Existem vrias formas de aprimorar a utilizao do armazenamento de uma rvore-B. Um mtodo retardar a diviso de um n no caso de encher. Em substituio, as chaves no n e um de seus irmos adjacentes, bem como a chave no pai que separa entre os dois ns, so redistribudas uniformemente. Esse processo ilustrado na figura abaixo, numa rvore-B de ordem 7.

100

10 20 30 40 50 60
(a) rvore-B original de ordem 7.

110 120 130

50

10 20 30 35 40

60 100 110 120 130

(b) Aps a insero da chave 35 e redistribuio dos irmos.

50

10 15 20 30 35

40

60 80 100 110 120 130

(c) Aps a insero das chaves 15 e 80.

35

90

10 15 20 30

40 50

60 80

100 110 120 130

(d) Aps a insero da chave 90 e redistribuio de pai e irmos. Quando um n e seu irmo estiverem completos, os dois ns sero divididos em trs (two-to-three splitting). Isso assegurar uma utilizao mnima do armazenamento de quase 67%, contra 50% de uma rvore-B tradicional. Na prtica, a utilizao do armazenamento ser ainda mais alta. Esse tipo de rvore chamado de rvore-B*. Essa tcnica pode ser ainda mais ampliada redistribuindo as chaves entre todos os irmos e o pai de um n completo. Infelizmente, este mtodo impe um preo porque exige espaos adicionais dispendiosos durante as inseres, enquanto a utilizao do espao adicional alcanado pela considerao de cada irmo extra torna-se cada vez menor.

EXERCCIOS:
1. Por que B-Trees so consideradas geralmente superiores que as rvores binrias de busca para pesquisa externa, e rvores binrias so comumente usadas para pesquisa interna? Como uma folha de uma rvore-B difere de um n interno? Suponha que voc vai deletar uma chave em uma rvore B, a qual causa um underflow na pgina. Se pela pgina irm do lado direito necessria concatenao, e pela pgina esquerda possvel redistribuio, qual opo voc escolheria? Por qu? Mostre a rvore-B de ordem 3 resultante da insero do seguinte conjunto de chaves: N S U O A C G J X Dada uma rvore B de ordem 128, responda: a) Qual o nmero mximo de descendentes por pgina? b) Qual o nmero mnimo de descendentes por pgina (desconsiderando as folhas e a raiz)? c) Quantas chaves tm uma pgina no-folha com 100 descendentes? d) Quantos descendentes tm uma pgina folha com 100 chaves? 6. 7. 8. Diferencie a rvore B+ da rvore B padro, enfatizando vantagens e desvantagens. Diferencie a rvore B* da rvore B padro, enfatizando vantagens e desvantagens. Implemente em C um "Editor de rvore B". Este programa deve criar e manipular uma rvore B, de ordem 5, armazenada em disco. O tipo base das chaves ser o inteiro. Exiba o seguinte menu de opes:

2. 3.

4. 5.

EDITOR DE RVORE B 1 INSERIR 2 REMOVER 3 PESQUISAR 4 EXIBIR A RVORE 5 ESVAZIAR A RVORE DIGITE SUA OPO:

Obs: a organizao interna de cada pgina pode ser implementada como vetor ou ABP, a sua escolha.