Sei sulla pagina 1di 10

I B+ Alberi

R. Basili
(Basi di Dati, a.a. 2002-3)

Sommario
Indici organizzati secondo B+-alberi
Motivazioni ed Esempio Definizione

Ricerca in un B+-albero
Esempio

Vantaggi Inserimento/Cancellazione in un B+-albero Osservazioni


B+-alberi in pratica

Riassunto

Motivazioni
Un ISAM fornisce una struttura statica
=> sottoutilizzo (molte cancellazioni) => sovrautilizzo (pagine di overflow) Pagine per i dati in ordine sequenziale (Range Search)

Ipotesi:
Bilanciamento => riorganizzazione dinamica Indici nelle Foglie e stessa ricerca nei nodi intermedi Link sequenzile garantito per le foglie (Range Search)

Esempio
indici 78 500 FILE

45

56

81

105

505 518

18

27

x*18 data entries

18<x*27

No overlflow list!

Definizione
Un B-albero e un albero con radice e ordine
d (>1) tale che:
ogni nodo x contiene al piu 2d-1 chiavi, k[i] ogni nodo x contiene al piu 2d puntatori ai figli, p[i]
(indefiniti per le foglie) per ogni nodo x si ha:
(detta ki una generica chiave memorizzata in un figlio p[i] di x)
k0 k[1] k1 k[2] k2d-2 k[2d-1] k2d-1

tutte le foglie sono alla stessa profondita (h) ogni nodo (tranne le radice) deve avere almeno d-1
chiavi e d figli
78 86 _

d=2

18

25

77

79

80

84

90

93

Definizione (2)
Se le foglie di un B-albero vengono organizzate in
una lista doppiamente collegata allora la struttura prende il nome di B+-albero
Foglie (Sequence list)
d=2
78 _ _

18*

25*

78*

79*

89*

96*

Generalmente, le foglie non contengono i dati

(cio, data entries data records) ma indici aggregati (densi o sparsi) La radice risiede sistematicamente in memoria centrale

Ricerca in un B+-albero
Nodo *trova( Nodo *n, Key k, int d ) if foglia(n) then return( n ) else i=0; while (i<2*d-1) and (k>n->k[i+1]); i=i+1; return(trova(n->p[i], k, d))

Ricerca (Esempio)
k=47 28k<50 k=47 k>28

i=1

28
47* _

50

71

np[1] 12* 18* _ 32* 55* 56* 67* 84* 96* 97*

Proprieta
Altezza di un B+-Albero
Se lordine di un albero n e d nel caso di minima
occupazione dellalbero abbiamo

liv=1 liv=2 liv=3 liv=i 2 nodi 2d nodi 2d2 nodi 2d(i-1) nodi

Quindi per il numero totale N di chiavi in n vale:


h d h 1 N 1 + ( d 1 ) 2 d i 1 = 1 + ( d 1 ) d 1 = i =1 = 2d h 1

cioe

h log d

N +1 2

B+-alberi: Vantaggi
I nodi intermedi (solo chiavi, k[i], e pt, P[i])
richiedono una pagina (1 operazione I/O) anche con d grande Costo delle operazioni di ricerca proporzionale ad h, cioe logaritmico (base d) in N Il branching factor f dei nodi: d f 2d Occupazione media: 60% - no overflow chains Le foglie (collegate) supportano operazioni di ricerca per intervallo (anchesse logaritmiche) I costi delle operazioni di inserimento/cancellazione sono logaritmici (segue)

Inserimento: ESEMPIO
insert( newk,n )
28 50 71

newk=8
12* 18* 21* 32* 47* _ 55* 56* 67* 84* 96* 97*

(a) split foglia: copia


12

(b) split generico: muovi_su


50 _ _

8*

12*

18*

21*

h = h + 1
12 28 _ 71 _ _

8*

12*

18* 21*

Cancellazione: ESEMPIO
50

cancel( newk,n )

newk=56 newk=18
8* 12* _

12

28

71

18* 21*

55*

56* 67*

84*

96* 97*

50

12

28

71

8*

12*

21* _

55*

57* _

84*

96* 97*

Cancellazione: ESEMPIO (2)


50 _ _

cancel( newk,n )

newk=21
_

12

28

71

8*

12*

21* _

32*

47*

55*

57* _

84*

96* 97*

Ridistribuzione:

50

28

71

max
8* _ _ 12* _ _ 55* 57* _ 84* 96* 97*

Cancellazione: ESEMPIO (3)


50 _ _

cancel( newk,n )

newk=12
_

28

71

8*

12* _

32*

47*

55*

57* _

84*

96* 97*

Fusione (leaf merge):

50

28

71

8*

32*

47*

55*

57* _

84*

96* 97*

Cancellazione: ESEMPIO (3)


50 _ _

28

71

Fusione (non-leaf merge):

50

71

Osservazioni
Implementazioni
Compressione di chiavi Spazio libero nei nodi (~50%) => minore d Cancellazione vs. marcatura+garbage collection

Svantaggi:
elevata dinamicit dei nodi intermedi =>
svantaggiosa per la concorrenza chiavi multiple

Costruzione del B+-albero


Inserimenti ripetuti Smart loading: Sorting e bottom-up add/split

Sommario
B+-alberi ottimizzano le operazioni di search e
range-search

Sono indici dinamici che si adattano alle


variazioni di taglia dei dati

Lordine d di un albero vincola superiormente ed


inferiormente il fattore di ramificazione

Laltezza dellalbero cresce logaritmicamente con


il numero delle chiavi

La ricerca di elementi ha un costo (disk I/O) pari


ad h

Sommario
Durante gli inserimenti le catene di overflow sono
evitate tramite operazioni di split dei nodi pieni

Tali split possono far crescere laltezza h Durante le cancellazioni le operazioni di merge tra
nodi possono far decrescere laltezza dellalbero

Lordine dipende
organizzazione dei record organizzazione degli indici (data entries) compressione delle chiavi

Svantaggi per luso concorrente dei dati: dinamica


dellaccesso ai nodi intermedi

Cosa sapere
Def. ed Indicizzazione basata su B+-alberi Costi delle Operazioni di
Ricerca Ricerca per Intervallo Inserimento e Cancellazione

Confronto tra ISAM e B+-alberi

10