FILE E INDICI Architettura DBMS Giorgio Giacinto 2010 Database 2 Dati su dispositivi di memorizzazione esterni ! Dischi ! ! Nastri ! ! si possono leggere le pagine solo in sequenza Organizzazione del file ! ! si può leggere qualunque pagina a costo medio fisso metodo per registrare un file di record su un dispositivo di memorizzazione esterno Architettura ! ! il gestore di buffer carica le pagine dal dispositivo di memorizzazione esterno al buffer nella memoria principale. Lo strato di gestione dei file e quello degli indici eseguono le chiamate al gestore di buffer Giorgio Giacinto 2010 Database 3 Dischi, SAN, NAS NAS SAN Giorgio Giacinto 2010 Database 4 Terminologia ! file è una collezione di record ! ! Ciascun record è una collezione di campi ! ! identificato univocamente da rid (record id) Operazioni su file ! ! ! ! File memorizzato come sequenza di pagine (4kB) Creazione, Distruzione Inserimento e cancellazione di record Scansione: lettura dei record uno alla volta Una relazione è tipicamente memorizzata come file di record Giorgio Giacinto 2010 Database 5 Organizzazioni dei file e indici ! Diverse alternative per l’organizzazione dei file ciascuna con vantaggi e svantaggi ! ! ! file heap (ordine casuale): va bene quando l’accesso tipico è una scansione o la lettura di un record specifico file ordinato: ottimale quando i record devono essere letti in qualche ordine, o quando si ha bisogno solo di un “intervallo” di record Indici: strutture di dati per organizzare i record in alberi o tramite hashing ! ! come i file ordinati, essi velocizzano le ricerche di sottoinsiemi di record, basate su valori in certi campi (“chiavi di ricerca”) gli aggiornamenti sono molto più veloci che nei file ordinati Giorgio Giacinto 2010 Database 6 Indici ! Un indice velocizza le selezioni sui campi che compongono la chiave di ricerca per l’indice ! ! ! ! La chiave di ricerca può essere formata da qualunque sottoinsieme dei campi di una relazione La chiave di ricerca non coincide necessariamente con una chiave della relazione Con il termine data entry si indicano i record memorizzati in un file indice Un indice è una collezione di data entry, e supporta il reperimento efficiente di tutte le data entry k* con un dato valore k della chiave Giorgio Giacinto 2010 Database 7 Alternative per le data entry k* nell’indice In una data entry k* possiamo memorizzare ! 1. 2. 3. ! ! record di dati con valore di chiave K, <k, rid> dove rid è l’id di un record di dati con valore della chiave di ricerca k, <k, lista-rid> lista degli id dei record di dati con chiave di ricerca k L’alternativa (1) impone la scelta sull’organizzazione del file Le alternative (2) e (3) sono indipendenti dall’organizzazione del file Giorgio Giacinto 2010 Database 8 Alternative per le data entry (segue) ! Memorizzazione dei record di dati con valore di chiave K ! ! ! la struttura a indice è una organizzazione di file per i record di dati (piuttosto che un file heap o un file ordinato) al più un indice su una data collezione di record di dati può usare questa alternativa ! altrimenti, i record di dati sono duplicati, il che porta a memorizzazione ridondante e potenziale inconsistenza se i record di dati sono molto grandi, il numero di pagine contenente le data entry è alto. Giorgio Giacinto 2010 Database 9 Alternative per le data entry (segue) ! Memorizzazione di <k, rid> o <k, lista-rid> ! ! Le data entry sono di solito molto più piccole dei record di dati. Preferibile alla soluzione precedente se i record di dati sono grandi e le chiavi di ricerca sono piccole La memorizzazione di <k, lista-rid> è più compatta della memorizzazione di <k, rid>, ma genera data entry di dimensioni variabili Giorgio Giacinto 2010 Database 10 Indici e data entry ! La scelta dell’alternativa per le data entry è indipendente rispetto alla tecnica di indicizzazione usata per localizzare le data entry con un dato valore di chiave K ! esempi di tecnica di indicizzazione alberi B+, strutture basate su hash ! tipicamente, l’indice contiene informazioni aggiuntive che guidano le ricerche verso le data entry desiderate Giorgio Giacinto 2010 Database 11 Classificazione degli indici ! Primario o secondario ! ! ! ! Primario se la chiave di ricerca contiene la chiave primaria della relazione Secondario negli altri casi Indice univoco: la chiave di ricerca contiene una chiave candidata Clustered e non clustered ! se l’ordine dei record di dati è lo stesso, o “quasi”, delle data entry di un indice, allora è chiamato indice clustered Giorgio Giacinto 2010 Database 12 Indici clustered e non clustered ! L’Alternativa (1) implica un indice clustered ! ! ! Nella pratica, vale anche il viceversa: la scelta di un indice clustered implica l’Alternativa (1), poiché i file ordinati sono rari Un file può essere clustered su al più una chiave di ricerca Il costo della lettura dei record di dati usando l’indice varia fortemente in base al fatto che l’indice sia clustered oppure no! Giorgio Giacinto 2010 Database 13 Indici clustered e non clustered ! Supponiamo che venga usata l’Alternativa (2) per le data entry, e che i record di dati siano memorizzati in un file heap ! ! Per costruire un indice clustered, prima ordiniamo il file heap (con dello spazio libero su ciascuna pagina per gli inserimenti futuri) Potrebbero essere necessarie delle pagine aggiuntive per gli inserimenti (quindi, l’ordine dei record di dati è “quasi” uguale, ma non identico, a quello delle data entry) Cluster Entry dell’indice Ricerca diretta delle data entry Data entry Non cluster Data entry (File indice) (File dati) Record di dati Giorgio Giacinto 2010 Record di dati Database 14 Esempio di indice clustered Giorgio Giacinto 2010 Database STRUTTURE DATI PER GLI INDICI 15 Indici basati su hash ! Buoni per selezioni basate su uguaglianze ! ! La funzione hash applicata alla chiave di ricerca restituisce il bucket contenenti le relative data entry L’indice è una collezione di bucket ! ! ! Bucket: una pagina primaria più eventuali pagine addizionali I bucket contengono le data entry Funzione hash h: h(r) = bucket cui appartiene (la data entry per) il record r. h si applica ai campi della chiave di ricerca di r ! In questo schema non c’è bisogno di index entry Giorgio Giacinto 2010 Database 17 Database 18 Indice hash Giorgio Giacinto 2010 Indici ad albero B+ Giorgio Giacinto 2010 Database 19 Indici ad albero B+ Pagine Non-foglia Pagine foglia (ordinate sulla chiave di ricerca) • Le pagine foglia contengono data entry, e sono collegate (prec & succ) • Le pagine non-foglia contengono index entry, usate solo per guidare le ricerche Entry dell’indice P0 Giorgio Giacinto 2010 K 1 P 1 K 2 P 2 Database K m Pm 20 Esempio di albero B+ Radice Notate l’ordinamento delle data entry nel livello delle foglie 17 Entry <= 17 5 Entry > 17 27 13 30 33* 34* 38* 39* 2* 3* ! Trovare 28*? 29*? Tutte >15* e <30*? L’albero B+ è bilanciato (tutti i percorsi da radice a foglia sono della stessa lunghezza) Raramente l’altezza di un albero supera i 4 livelli Fan-out: Numero medio di figli di un nodo non-foglia (dell’ordine del centinaio) ! ! ! 5* Giorgio Giacinto 2010 7* 8* 14* 16* 22* 24* 27* 29* Database CONFRONTO FRA DIVERSE ORGANIZZAZIONI DI FILE 21 Modello di costo ! Tralasciamo per semplicità i costi della CPU ! ! ! ! ! ! B: il numero di pagine di dati R: il numero di record per pagina D: tempo (medio) per leggere o scrivere una pagina su disco H: tempo di calcolo della funzione hash F: fan-out per indici ad albero (numero medio di figli per un nodo non foglia) L’analisi del caso medio è basata su diverse ipotesi semplificatrici che consentono di confrontare le diverse scelte progettuali Giorgio Giacinto 2010 Database 23 Confronto tra le organizzazioni di file Caso di esempio ! ! File heap 1. ! ! 2. 3. 4. 5. file con record relativi ad impiegati chiave composita <età,sal> ordine casuale inserimento alla fine del file File ordinati su <età, sal> File clustered di alberi B+, alternativa (1), chiave di ricerca <età, sal> File heap con indice non clustered di alberi B+ su chiave di ricerca <età, sal> File heap con indice hash non clustered su chiave di ricerca <età, sal> Giorgio Giacinto 2010 Database 24 Operazioni da confrontare ! ! ! ! ! Scansione: lettura di tutti i record dal disco Ricerca con selezione di uguaglianza Ricerca con selezione di intervallo Inserimento di un record Cancellazione di un record Giorgio Giacinto 2010 Database 25 Costo delle operazioni (a) Scansione (1) Heap BD (2) Ordinato BD (3) Clustered 1.5BD (4) Heap con Indice albero BD(R+0.1 5 ) non clustered (5) Heap con BD(R+0.1 2 5 ) Indice hash non clustered Giorgio Giacinto 2010 (b) Uguaglianza 0.5BD (c) Intervallo BD D(log2B + Numero di D log2B pagine con record compatibili) D(logF1.5B + Numero di D logF1 . 5 B pagine con record compatibili) D(logF0.15B + Numero di D(1 + logF 0.15 B ) pagine con record compatibili) 2D BD Database (d) Inserimento (e) Cancellazione 2D Ricerca + D Ricerca + BD Ricerca + BD Ricerca + D Ricerca + D Ricerca + 2D Ricerca + 2D Ricerca + 2D Ricerca + 2D 26 Confronto ! File heap ! ! ! ha buona efficienza nella memorizzazione, scansioni veloci e inserimento di record Lento nella ricerca e nelle cancellazioni File ordinato ! ! ! Efficiente nella memorizzazione Lento nell’inserimento e cancellazione Ricerche veloci Giorgio Giacinto 2010 Database 27 Confronto (segue) ! File clustered ! ! ! Stessi vantaggi di un file ordinato Supporta efficientemente inserimenti e cancellazioni Indici non clustered (albero e hash) ! ! ! Rapidità nelle operazioni di ricerca, inserimento e cancellazione Lenti nelle scansioni e nelle ricerche per intervallo con molti record Hash: più veloce nelle ricerche per uguaglianza ma non supporta le ricerche per intervallo Giorgio Giacinto 2010 Database 28 Conclusione ! ! Nessuna organizzazione dei file è migliore in qualunque situazione La scelta degli indici ha un impatto significativo nelle prestazioni di una base di dati ! La scelta dipende dal carico di lavoro, cioè dalle operazioni più frequenti Giorgio Giacinto 2010 Database 29