Informatica 3 LEZIONE 23: Indicizzazione Modulo 1: Indicizzazione lineare, ISAM e ad albero Modulo 2: 2-3 trees, B-trees e B + -trees
Informatica 3 Lezione 23 - Modulo 1 Indicizzazione lineare, ISAM e ad albero
Introduzione Grosse applicazioni basate su basi di dati: file di grandi dimensione chiavi di ricerca multiple supporto di interrogazioni: su un singolo valore di chiave su intervalli di valori ricerca di minimo e massimo supporto per operazioni di inserimento, modifica e cancellazione Indicizzazione
Indicizzazione Indicizzazione: a ogni record viene associata una chiave si crea un file indice i cui record consistono di coppie chiave/puntatore al record corrispondente chiave ptr record...... INDICE
Indicizzazione Nelle basi di dati: ogni record ha un unico identificatore: chiave primaria indice primario costruito su chiavi primarie altri valori di chiave con duplicati: chiavi secondarie indice secondario: associa il valore della chiave secondaria con il valore di una chiave primaria chiave ptr chiave ptr record............ INDICE SECONDARIO INDICE PRIMARIO
Indicizzazione lineare (1) File indice in cui le chiavi sono ordinate e i puntatori puntano alla posizione del record su disco oppure alla posizione della chiave primaria nell indice primario Accesso a record di lunghezza variabile Accesso random e ricerca efficienti (ricerca binaria) indice lineare record base di dati
Indicizzazione lineare (2) Se la dimensione del file indice è troppo grande per stare in memoria: indice lineare su disco indice di secondo livello in memoria: chiave di ogni blocco su disco Indice di secondo livello Indice lineare su disco
Indicizzazione lineare (3) Se la chiave secondaria ha numerosi duplicati si ha una duplicazione dei valori delle chiavi primarie associate Indice lineare bidimensionale per ogni riga: chiavi primarie associate a un particolare valore di chiave secondaria Jones AA10 AB12 AB39 FF37 Smith AX33 AX35 ZX45 Zukowski ZQ99 Bassi costi di inserimento/cancellazione di record Svantaggi: Array di dimensione fissa: limite superiore al numero delle chiavi primarie associate a un valore di chiave secondaria Spreco di spazio per valori di chiave secondaria poco presenti Soluzione: per ogni chiave secondaria lista concatenata delle chiavi primarie Funziona bene se la tabella è in memoria
Indicizzazione lineare (4) Lista invertita (o file invertito) Esempio: record di impiegati chiave primaria: matricola dell impiegato chiave secondaria: nome dell impiegato ogni nome nell indice secondario è associato alle matricole degli impiegati con quel nome Jones Smith Zukowski AA10 AB12 AB39 FF37 AX33 AC35 ZX45 ZQ99 Ricerca: dalla chiave secondaria a quella primaria
Indicizzazione lineare (5) Implementazione basata su array: Jones 0 Smith 1 Zukowski 3 0 AA10 4 1AX33 6 2ZX45 --- 3ZQ99 --- 4 AB12 5 5 AB39 7 6AX35 2 7 FF37 ---
ISAM Problema per grossi basi di dati: una singola struttura non è adatta perchè un aggiornamento può richiedere la modifica di tutte le chiavi nell indice ISAM (IBM): forma modificata di indice lineare in cui i record sono ordinati in base alla chiave primaria il file è memorizzato su diversi cilindri su disco In memoria una tabella elenca i valori inferiori memorizzati in ciascun cilindro del file ogni cilindro contiene una tabella con i valori inferiori memorizzati in ciascun blocco del cilindro + area di overflow Ricerca di un record: identificazione del cilindro identificazione del blocco identificazione del record nel blocco e nell area di overflow
ISAM (2) Tabella in memoria delle chiavi dei cilindri Indice cilindro Record Indice cilindro Record Overflow Overflow Overflow di sistema
Informatica 3 Lezione 23 - Modulo 2 2-3 trees
Indicizzazione ad albero Indicizzazione lineare: efficiente per basi di dati statiche ISAM: efficiente per aggiornamenti limitati BST per indici primari e secondari valori duplicati inserimenti e cancellazioni efficienti interrogazioni su intervalli Problema: bilanciamento dell albero se sono su disco la profondità dei nodi è determinante per le prestazioni ogni percorso dalla radice alle foglie deve richiedere pochi accessi ai blocchi
2-3 tree (1) Definizione: un 2-3 tree è un albero che soddisfa le seguenti proprietà: ogni nodo contiene una o due chiavi ogni nodo interno ha due figli (se contiene una chiave) oppure tre figli (se contiene due chiavi) tutte le foglie sono allo stesso livello Le proprietà di ricerca in un 2-3 tree sono analoghe a quelle di un BST i valori dei discendenti del sotto-albero di sinistra sono minori del valore della prima chiave se il nodo ha due chiavi, i valori del sotto-albero centrale sono minori della seconda chiave i valori del sotto-albero di destra sono maggiori o uguali alla seconda chiave
2-3 tree (2) Esempio: Vantaggio: il costo del bilanciamento è basso
Inserimento in un 2-3 tree (1) Operazione di inserimento: Inserisci 14: 14
promozion Inserimento in un 2-3 tree (2) Operazione di inserimento con sdoppiamento del nodo: Inserisci 55:
Inserimento in un 2-3 tree (3) Sdoppiamento della radice Inserisci 19:
Inserimento in un 2-3 tree (4) Sdoppiamento della radice
Cancellazione in un 2-3 tree Cancellazione di una chiave da un 2-3 tree: la chiave viene rimossa da un nodo foglia contenente due record cancellazione della chiave la chiave viene rimossa da un nodo foglia contenente un record la chiave viene rimossa da un nodo interno sostituzione della chiave cancellata con un altra chiave (BST) può richiedere il merge di nodi
Bilanciamento in altezza Osservazione: gli inserimenti e le cancellazioni non aggiungono nuovi nodi in fondo all albero suddividono o combinano nodi, eventualmente spostando la radice tutti i nodi foglia rimangono sempre allo stesso livello l albero è bilanciato in altezza Per un 2-3 tree la profondità massima dell albero è log n le operazioni di inserimento, ricerca e cancellazione richiedono un tempo Θ(log n)
Informatica 3 Lezione 23 - Modulo 3 B-trees e B + -trees
B-tree (1) Struttura dati utilizzata in tutte le applicazioni che richiedono inserimenti, cancellazioni, interrogazioni su intervalli di valori albero bilanciato in altezza aggiornamenti e ricerche su pochi blocchi del disco chiavi con valori simili nello stesso blocco (località) ogni nodo nell albero contiene una % minima di informazione (efficienza spaziale)
B-tree (2) Definizione: un B-tree di ordine m è un albero che soddisfa le seguenti proprietà: la radice è una foglia oppure ha almeno due figli ogni nodo interno, eccetto la radice, ha tra m/2 e m figli tutte le foglie sono allo stesso livello nell albero E una generalizzione del 2-3 tree (m=3)
Ricerca in un B-tree Esempio di B-tree di ordine 4: Ricerca: ricerca binaria sulle chiavi del nodo corrente se si trova la chiave restituisci il record se non si trova la chiave e il nodo è una foglia: insuccesso scelta del ramo appropriato ripeti Esempio: ricerca di 47
Inserimento in un B-tree Operazione di inserimento: generalizzazione dell inserimento in un 2-3 tree si trova il nodo foglia in cui inserire la nuova chiave se lo spazio è sufficiente si inserisce il nuovo valore se lo spazio non è sufficiente si suddivide il nodo in due nodi e si promuove la chiave intermedia al nodo padre (e così via) Oss.: tutti i nodi interni sono pieni almeno per metà
B + -tree B + -tree: variante del B-tree comunemente implementata che memorizza i record (o i puntatori ai record in caso di indice) solamente nei nodi foglia i nodi interni memorizzano solo valori di chiave e puntatori ai nodi figli in un B + -tree di ordine m un nodo foglia può contenere più o meno di m record requisito: pieni per metà nodi foglia collegati in una lista doppia interrogazioni su intervalli Esempio:
Ricerca in un B + -tree Ricerca in un B + -tree: come in un B-tree termina in un nodo foglia Esempio: ricerca di 33
Inserimento in un B + -tree Inserimento in un B + -tree: come in un B-tree se il nodo è pieno dividi e promuovi Esempio: Inserisci 50 Esempio: Inserisci 30
Cancellazione in un B + -tree (1) Cancellazione in un B + -tree: Cancella 18:
Cancellazione in un B + -tree (2) Cancellazione in un B + -tree: underflow se il nodo in cui si cancella la chiave contiene meno della metà dei record Cancella 12:
Cancellazione in un B + -tree (3) Cancellazione in un B + -tree: underflow se il nodo in cui si cancella la chiave contiene meno della metà dei record Cancella 33: a) merge dei due nodi foglia b) trasferisci la foglia del sotto-albero di sinistra e aggiusta i valori dei nod interni nodi pieni per 2
B*-tree B*-tree: variante del B + -tree con regole diverse per la suddivisione e la combinazione di nodi: in caso di overflow i record vengono passati ai fratelli vicini se i fratelli non hanno spazio allora i due nodi vengono suddivisi in tre nodi in caso di undeflow il record viene combinato con i suoi due fratelli I nodi sono sempre pieni per 2/3
Analisi dei B-tree (1) Costo di ricerca, inserimento e cancellazione: Θ(log n) con n = # record nell albero la base del log dipende dal fattore di ramificazione dell albero Basi di dati: 100 rami alberi poco profondi m = 100 1 livello: massimo 100 record 2 livelli: minimo 100 record, massimo 10.000 record 3 livelli: minimo 5.000 record, massimo 1 milione di record 4 livelli: minimo 250.000 record, massimo 100 milioni di record
Analisi dei B-tree (2) Per ridurre il numero di accessi al disco: 1) livelli più alti dell albero in memoria centrale livelli 0 e 1 richiedono poco spazio se l albero ha 4 livelli: 2 accessi al disco 2) pool di buffer con tecnica LRU per le sostituzioni di record