Alberi.sql.Database

10
1 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

description

Alberi.sql.Database

Transcript of Alberi.sql.Database

Page 1: Alberi.sql.Database

1

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

Page 2: Alberi.sql.Database

2

Motivazioni

• Un ISAM fornisce una struttura statica

• => sottoutilizzo (molte cancellazioni)

• => sovrautili zzo (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)

Esempioindici

data entries

FILE

27 …

…………… ……………

18

………………x*≤≤18 18<x*≤≤27

… _ _45 56 81 105 505

… …78 500

518 _

No overlflow list!

Page 3: Alberi.sql.Database

3

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 8678 _

2518 77 8079 84 9390 _

d=2

Definizione (2)• Se le foglie di un B-albero vengono organizzate in

una lista doppiamente collegata allora la strutturaprende il nome di B+-albero• Foglie (Sequence list)

• Generalmente, le foglie non contengono i dati(cioè, data entries ≠ data records) ma indiciaggregati (densi o sparsi)

• La radice risiede sistematicamente in memoriacentrale

_78 _

25*18* 78*

d=2

89*79* 96* …….

Page 4: Alberi.sql.Database

4

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)

50 7128

12* 18* _ 32* 47* _ 55* 56* 67* 84* 96* 97*

k=47 ⇒⇒ 28≤≤k<50k=47 ⇒⇒ k>28

⇒⇒ i=1 ××n→→p[1]

Page 5: Alberi.sql.Database

5

Proprieta’• Altezza di un B+-Albero

• Se l’ordine di un albero n e’ d nel caso di minimaoccupazione dell’albero abbiamo

• li v=1 ⇒ 2 nodi• li v=2 ⇒ 2d nodi• li v=3 ⇒ 2d2 nodi• …• li v=i ⇒ 2d(i-1) nodi

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

• cioe’

1d2

1d

1d)1d(1d2)1d(1N

h

h

1i

h1i

−=

=

−−−+=−+≥ ∑

=

2

1Nlogh d

+≤

B+-alberi: Vantaggi

• I nodi intermedi (solo chiavi, k[i], e pt, P[i])richiedono una pagina (1 operazione I/O) anchecon d grande

• Costo delle operazioni di ricerca proporzionale adh, 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” (anch’esse logaritmiche)

• I costi delle operazioni diinserimento/cancellazione sono logaritmici (segue)

Page 6: Alberi.sql.Database

6

Inserimento: ESEMPIO

50 7128

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

insert( newk,n )

newk=8

8* 12* _ 18* 21* _

12

(a) split foglia: copia (b) split generico: muovi_su

_ _50

28 _12 _ _71

18* 21* _8* 12* _

h = h + 1

Cancellazione: ESEMPIO

_ _50

28 _12 _ _71

18* 21* _8* 12* _ 55* 56* 67* 84* 96* 97*

cancel( newk,n )

newk=56newk=18

_ _50

28 _12 _ _71

21* _ _8* 12* _ 55* 57* _ 84* 96* 97*

Page 7: Alberi.sql.Database

7

Cancellazione: ESEMPIO (2)

cancel( newk,n )

newk=21

_ _50

28 _12 _ _71

21* _ _8* 12* _ 55* 57* _ 84* 96* 97*

_ _50

28 _8 _ _71

12* _ _8* _ _ 55* 57* _ 84* 96* 97*

Ridistribuzione:

max

32* 47* _

Cancellazione: ESEMPIO (3)

cancel( newk,n )

newk=12

_ _50

28 _8 _ _71

12* _ _8* _ _ 55* 57* _ 84* 96* 97*

_ _50

_ _28 _ _71

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

Fusione (leaf merge):

32* 47* _

32* 47* _

Page 8: Alberi.sql.Database

8

Cancellazione: ESEMPIO (3)

71 _50Fusione (non-leaf merge):

_ _50

_ _28 _ _71×A B C D+

A B+ C D

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

Page 9: Alberi.sql.Database

9

Sommario

• B+-alberi ottimizzano le operazioni di search erange-search

• Sono indici dinamici che si adattano allevariazioni di taglia dei dati

• L’ordine d di un albero vincola superiormente edinferiormente il fattore di ramificazione

• L’altezza dell ’albero cresce logaritmicamente conil numero delle chiavi

• La ricerca di elementi ha un costo (disk I/O) pariad h

Sommario• Durante gli inserimenti le catene di overflow sono

evitate tramite operazioni di split dei nodi pieni

• Tali split possono far crescere l’altezza h

• Durante le cancellazioni le operazioni di merge tranodi possono far decrescere l’altezza dell ’albero

• L’ordine dipende• organizzazione dei record

• organizzazione degli indici (data entries)

• compressione delle chiavi

• Svantaggi per l’uso concorrente dei dati: dinamicadell ’accesso ai nodi intermedi

Page 10: Alberi.sql.Database

10

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