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 1
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 0 FILE 45 56 81 105 5 518 18 27 x* 18 18<x* 27 data entries No overlflow list! 2
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 k i una generica chiave memorizzata in un figlio p[i] di x) k 0 k[1] k 1 k[2] k 2d-2 k[2d-1] k 2d-1 tutte le foglie sono alla stessa profondita (h) ogni nodo (tranne le radice) deve avere almeno d-1 chiavi e d figli 86 78 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) 78 d=2 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 3
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 28 k< k=47 k>28 i=1 28 n p[1] 71 12 * 18 * 32 * 47 * 55 * 56 * 67 * 84 * 96 * 97 * 4
Proprieta Altezza di un B + -Albero Se l ordine di un albero n e d nel caso di minima occupazione dell albero abbiamo liv=1 2 nodi liv=2 2d nodi liv=3 2d 2 nodi liv=i 2d (i-1) nodi Quindi per il numero totale N di chiavi in n vale: N 1+ ( d 1) h i= 1 2d i 1 h d 1 = 1+ ( d 1) = d 1 h = 2d 1 cioe N + 1 h logd 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 (anch esse logaritmiche) I costi delle operazioni di inserimento/cancellazione sono logaritmici (segue) 5
Inserimento: ESEMPIO insert( newk,n ) newk=8 28 71 12 * 18 * 21 * 32 * 47 * 55 * 56 * 67 * 84 * 96 * 97 * (a) split foglia: copia 12 8 * 12 * 18 * 21 * (b) split generico: muovisu h = h + 1 12 28 71 8 * 12 * 18 * 21 * Cancellazione: ESEMPIO cancel( newk,n ) newk=56 newk=18 12 28 71 8 * 12 * 18 * 21 * 55 * 56 * 67 * 84 * 96 * 97 * 12 28 71 8 * 12 * 21 * 55 * 57 * 84 * 96 * 97 * 6
Cancellazione: ESEMPIO (2) cancel( newk,n ) newk=21 12 28 71 8 * 12 * 21 * 32 * 47 * 55 * 57 * 84 * 96 * 97 * Ridistribuzione: max 8 28 71 8 * 12 * 55 * 57 * 84 * 96 * 97 * Cancellazione: ESEMPIO (3) cancel( newk,n ) newk=12 8 28 71 8 * 12 * 32 * 47 * 55 * 57 * 84 * 96 * 97 * Fusione (leaf merge): 28 71 8 * 32 * 47 * 55 * 57 * 84 * 96 * 97 * 7
Cancellazione: ESEMPIO (3) 28 71 A + B C D Fusione (non-leaf merge): 71 A + B C D Osservazioni Implementazioni Compressione di chiavi Spazio libero nei nodi (~%) => 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 8
Sommario B+-alberi ottimizzano le operazioni di search e range-search Sono indici dinamici che si adattano alle variazioni di taglia dei dati L ordine d di un albero vincola superiormente ed inferiormente il fattore di ramificazione L altezza dell albero 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 l altezza h Durante le cancellazioni le operazioni di merge tra nodi 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: dinamica dell accesso ai nodi intermedi 9
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