La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

B-alberi dizionari in memoria secondaria. ASD - B-tree2 dizionari su memoria secondaria la memorizzazione su memoria secondaria risponde a due esigenze.

Presentazioni simili


Presentazione sul tema: "B-alberi dizionari in memoria secondaria. ASD - B-tree2 dizionari su memoria secondaria la memorizzazione su memoria secondaria risponde a due esigenze."— Transcript della presentazione:

1 B-alberi dizionari in memoria secondaria

2 ASD - B-tree2 dizionari su memoria secondaria la memorizzazione su memoria secondaria risponde a due esigenze –permanenza dellinformazione la RAM è volatile –grande quantità di dati la RAM è limitata memoria secondaria: disco

3 ASD - B-tree3 modello di costo il costo in termini di tempo per accedere al disco (scrittura/lettura) domina in maniera sostanziale il costo di elaborazione in RAM –parti meccaniche in movimento con costanti di tempo dellordine delle decine di millisecondi –una CPU esegue unistruzione elementare in pochi colpi di clock –ad es., copia di un dato dalla RAM a un registro supp. 10 colpi di clock, CPU a 1GHz 10 ns per copia RAM->registro 20 ns per unassegnazione

4 ASD - B-tree4 modello di costo/2 Occorre considerare modelli di costo diversi dal modello RAM se il costo dominante della computazione è costituito dagli accessi in memoria secondaria. Ex: # di accessi a disco x seek time + tempo di trasferimento dei dati da disco a memoria principale

5 ASD - B-tree5 modello di costo/3 laccesso al disco avviene per blocchi (o pagine fisiche ) –tutti i blocchi hanno la stessa dimensione (da 512B ad alcuni KB) –ciascun blocco è definito da tre coordinate: cilindro (o traccia ), settore, faccia cilindro settoretraccia faccia

6 ASD - B-tree6 modello di costo/4 tempo di accesso al disco = somma di tre componenti –seek time per posizionare la testina sul cilindro corretto –latency time attesa necessaria affinché il settore desiderato transiti sotto la testina –tempo di trasferimento dati scambiati fra RAM e disco

7 ASD - B-tree7 esempio seek time –~15-20ms latency time –valore atteso: 50% del tempo di rotazione in un disco a 7200rpm, poco più di 4ms tempo di trasferimento –velocità: alcuni MB/s blocco di 4KB, seek 15 ms, 10000rpm, velocità di trasferimento 2MB/s tempo (ms) di accesso al blocco 15 + 3 + 2 ms/blocco = 20ms/blocco costo (ammortizzato) per byte 20ms/4096B 4.9µs/B

8 ASD - B-tree8 esempio/2 nel caso di accesso a più blocchi contigui vengono pagati un solo seek e un solo latency la convenienza aumenta allaumentare del numero di blocchi contigui –bulk access vs. random access blocco di 4KB, seek 15 ms, 10000rpm, velocità di trasferimento 2MB/s tempo (ms) di accesso a due blocchi contigui 15 + 3 + 2·2 ms/blocco = 22ms/blocco costo (ammortizzato) per byte 22ms/8192B 2.7µs/B

9 ASD - B-tree9 esempio/3

10 ASD - B-tree10 ammortizzazione la contiguità premia

11 ASD - B-tree11 modello di costo/5 costo (tempo): # di I/O su disco –blocco ha dimensione B –RAM ha dimensione M –disco ha dimensione tempo di CPU trascurabile –buona approssimazione in molti casi

12 ASD - B-tree12 1 dizionari in memoria secondaria 81319243540515862677478838898 417284660708091 11376486 2277 54 idea: paginare un albero di ricerca

13 ASD - B-tree13 BST paginato lalbero non è più binario si può definire un albero di ricerca m -ario?

14 ASD - B-tree14 B-tree di ordine m radice con 0 o p > 1 figli ogni nodo interno (non radice) con k – 1 chiavi e k figli, m /2 k m –non lo stesso k per ciascun nodo! foglie con k-1 chiavi, m /2 k m albero di ricerca –ad ogni chiave è associato un sottoalbero destro di chiavi inferiori ed uno sinistro di chiavi superiori m è il max numero di figli Nota: le foglie contengono puntatori a blocchi di elementi

15 ASD - B-tree15 B-tree di ordine 4 56 22416687 214263459617177909298 /465144 è anche un B-tree di ordine 3? Nota: si sono indicate solo le chiavi

16 ASD - B-tree16 scelte progettuali un nodo = un blocco chiave c bit riferimento a sottoalbero r bit in ogni nodo rm + c (m - 1) bit m = (B + c )/(r + c ) –se B = 4KB, c = r = 32 bit m 64 Ogni blocco di elementi è memorizzato in un blocco su disco (dim. B) –Se max. L bit per elemento al più B/L elem./blocco Obiettivo: avere alberi di altezza piccola (es. 4)

17 ASD - B-tree17 Altezza di un B-tree quali sono le altezze minime e massime di un B-tree di ordine m con n chiavi? –altezza max ottenuta quando ogni nodo interno ha il min numero di figli (albero spoglio) la radice ha 2 figli ed ogni altro nodo interno ha m /2 figli –altezza min quando ogni nodo interno ha il max numero (m ) di figli (albero frondoso)

18 ASD - B-tree18 altezza di un B-tree spoglio sia q = m /2 1 chiave nella radice q - 1 chiavi in ogni altro nodo livello 2: 2 nodi livello 3: 2q nodi livello 4: 2q 2 nodi livello i : 2q i –2 nodi

19 ASD - B-tree19 altezza di un B-tree spoglio/2 # chiavi in un B-tree spoglio di altezza h >= D.: qual è laltezza di un B-tree frondoso?

20 ASD - B-tree20 Scelte progettuali/2 un nodo = un blocco chiave c bit riferimento a sottoalbero r bit in ogni nodo rm + c (m - 1) bit m = (B + c )/(r + c ) –se B = 4KB, c = r = 32 bit m 64 –con n = 10ML chiavi h 6 E possibile avere alberi con altezza piccola in casi di interesse pratico –radice spesso mantenuta in RAM

21 ASD - B-tree21 rappresentazione nodi (RAM) class BTreeNode { int m; boolean leaf; /* true se nodo è foglia */ int keyTally; /* No. di chiavi presenti */ int keys = new int[m-1]; BTreeNode references[] = new BTreeNode[m]; BtreeNode(int key) {…} /* Costruttore */ } /* Nota: si assumono chiavi intere */ /* keys può essere un array di oggetti contenenti coppie */

22 ASD - B-tree22 Rappresentazione con riferimenti

23 ASD - B-tree23 cenno alla rappresentazione dei nodi su disco file a sé stanti, ciascuno di un blocco –più semplice da realizzare –i riferimenti ai sottoalberi sono nomi di file –overhead per il sistema operativo tutti in un unico file –soluzione compatta, ma più complessa –riferimenti ai sottoalberi offset relativi allinizio di un file (file frammentato, solo accessi random) indirizzi assoluti (cilindro+settore+faccia, file non portatili)

24 ASD - B-tree24 ricerca in un B-tree public BTreeNode BTReeSearch(int key) { return BTreeSearch(key, root) } protected BTreeNode BTreeSearch(int key, BTreeNode node) { if (node != null) { int i=1; while ((i<=node.keyTally)&&(node.keys[i-1]< key)) { i++; if ((i>node.keyTally) || (node.keys[i-1]>key)) return BTreeSearch(key, nodereferences[i-1]; else return node; } else return null; }

25 ASD - B-tree25 Ricerca chiave di valore 51 56 22416687 214263459617177909298 /465144

26 ASD - B-tree26 inserimento in B-tree come nei BST, si effettua una ricerca della chiave da inserire si tenta dapprima di inserire la chiave in una foglia (appropriata) –se la foglia non è piena il processo termina –se la foglia è piena (ha già m – 1 chiavi) abbiamo una situazione di overflow e possiamo scinderla in due la scissione può determinare altre scissioni

27 ASD - B-tree27 Inserimento in foglia non piena Un albero B prima (a) e dopo (b) linserimento della chiave 7 in una foglia avente celle disponibili

28 ASD - B-tree28 Inserimento in foglia piena Inserimento della chiave 6 in una foglia piena

29 ASD - B-tree29 gestione degli overflow gestione delloverflow tramite scissione (o divisione o split) –allocazione di un nuovo nodo (foglia) –le m chiavi vengono così ripartite: (m – 1) / 2 nella foglia in overflow, (m – 1) / 2 nella nuova e una (la mediana fra le m ) viene inserita nel genitore per separare le due foglie (nellesempio, m=5) se il genitore va in overflow si usa la stessa tecnica

30 ASD - B-tree30 gestione degli overflow/2 gli overflow si possono propagare verso lalto fino a coinvolgere la radice se la radice va in overflow questa deve venire scissa ed occorre creare una nuova radice, che conterrà la chiave mediana fra le m coinvolte nelloperazione –in questo caso lalbero aumenta la propria altezza Animazione a http://shell.uriel.net/~mozart/File/btree.h tml

31 ASD - B-tree31 Inserimento Algorithm BTreeInsert(k) { /* Sia essa node */ if (<nodo non pieno) { return; } else { ; } /* Continua prossima slide */

32 ASD - B-tree32 Inserimento /* Continua da slide precedente */ if ( ) { root.keyTally=1; return; } else }

33 ASD - B-tree33 costo inserimento discesa radice – foglia –O(log m/2 n ) I/O split –O(1) I/O (3 o 4) #split –O(log m/2 n ) costo totale: O(log m/2 n )

34 ASD - B-tree34 eliminazione da un B-tree si effettua una ricerca della chiave da inserire se la chiave è in una foglia, la si elimina dalla stessa e si verifica se il numero di chiavi rimanenti sia comunque non inferiore a m / 2 - 1 –se rimangono troppe poche chiavi si ha underflow, che richiede una gestione specifica se la chiave è in un nodo interno la si sostituisce con il predecessore (o il successore), che è in una foglia, e ci si riconduce al caso precedente –simile alla tecnica usata nei BST

35 ASD - B-tree35 Azioni eseguite dopo leliminazione del numero 6

36 ASD - B-tree36 gestione degli underflow un nodo in underflow ha m / 2 - 2 chiavi si tenta dapprima una ridistribuzione delle chiavi fra nodo e un fratello, coinvolgendo la chiave che li separa nel genitore –occorre un fratello con almeno m / 2 chiavi se non è disponibile un fratello per operare la ridistribuzione occorre effettuare la fusione (o merge) fra nodo in underflow e un fratello –richiede una gestione specifica

37 ASD - B-tree37 fusione di nodi due nodi fratelli possono essere fusi se uno di essi è in underflow e laltro ha il numero di chiavi minimo m / 2 - 1 la fusione consiste nellinserire in un solo nodo tutte le chiavi presenti nei due nodi, oltre a quella del genitore che separava i due nodi –la fusione permette di liberare risorse precedentemente allocate a un nodo –richiede leliminazione di una chiave dal genitore, che a sua volta, può andare in underflow, divenendo oggetto di attenzione da parte del gestore dellunderflow

38 ASD - B-tree38 fusione di nodi/2 se i nodi oggetto di fusione sono i due unici figli della radice, questa scompare e il risultato della fusione diviene la nuova radice –in tal caso vengono liberate risorse allocate a due nodi –lalbero diminuisce laltezza Animazione a http://shell.uriel.net/~mozart/File/btree.h tmlAnimazione a http://shell.uriel.net/~mozart/File/btree.h tml

39 ASD - B-tree39 algoritmo di eliminazione Algorithm BTreeDelete(k) { node = BTreeSearch(k) if(node != null) { if( ) { } else

40 ASD - B-tree40 algoritmo di eliminazione/2 while(true) { if( ) return; else if ( ) { return; } else if ( ) { if ( )

41 ASD - B-tree41 algoritmo di eliminazione/3 else return; } /* End else if */ else } } /* End while */ } /* End if */ } /* End algoritmo */

42 ASD - B-tree42 costo eliminazione discesa radice – foglia –O(log m/2 n ) I/O redistribuzione –O(1) I/O (3 o 4) fusione –O(1) I/O (3 o 4) #fusioni –O(log m/2 n ) costo totale: O(log m/2 n )

43 ASD - B-tree43 B + -tree chiavi solo nelle foglie nodi interni contengono solo informazioni di branching e costituiscono un vero e prorpio indice le foglie sono collegate orizzontalmente algoritmi di gestione simili a quelli per il B- tree –una differenza notevole è nello split di una foglia: la chiave separatrice viene copiata (e non spostata) nel genitore


Scaricare ppt "B-alberi dizionari in memoria secondaria. ASD - B-tree2 dizionari su memoria secondaria la memorizzazione su memoria secondaria risponde a due esigenze."

Presentazioni simili


Annunci Google