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