Tecnologia delle basi di dati:
Strutture fisiche di accesso
Esercitazioni del Corso di Sistemi
Informativi
Marina Mongiello
[email protected]
Organizzazione fisica e metodi
d’accesso
• Organizzazione dei file
– Indica l’organizzazione dei dati in un file di record in
blocchi e strutture d’accesso
– Specifica in che modo i record ed i blocchi sono
disposti sul dispositivo di memorizzazione e collegati
• Metodi d’accesso:
– Un insieme di programmi che specifica in che modo le
operazioni possono essere eseguite su un file
• Generalmente alcuni metodi d’accesso possono
essere applicati soltanto su file aventi una
particolare organizzazione fisica
Strutture fisiche di accesso
Descrivono l’organizzazione fisica dei dati di
una base dati nella memoria di massa
Obiettivi:
• Garantire operazioni di ricerca e di modifica
efficienti da parte dei programmi applicativi
Organizzazioni fisiche primarie
•
Strutture sequenziali: entry-sequenced, ad
array, sequenziale ordinato
•
Strutture con accesso calcolato: (uso di
funzioni hash)
•
Strutture ad albero: B-tree, B+-tree
Metodi di accesso
• Sono opportuni moduli software che
contengono primitive per l’accesso e la
manipolazione dei dati specifici di ciascuna
organizzazione fisica
• Conosce l’organizzazione fisica delle tuple
nelle pagine
Architettura del gestore degli accesi
Metodi di Accesso
Gestore dei metodi d’accesso
Scan
Mgr
B+Tree
Mgr
Sort
Mgr
scan
fix
use
unfix
Recovery Manager
Buffer Manager
Hash
Mgr
DBMS
…
Strutture sequenziali
• Disposizione sequenziale delle tuple in memoria
di massa
• E’ costituito da blocchi consecutivi di memoria.
• Le tuple possono essere inserite nei blocchi in
sequenza:
– Entry-sequenced: sequenza indotta dall’ordine di
immissione
– Ad array: la posizione delle tuple dipende dal valore
assunto da un campo indice
– Sequenziale ordinata:la sequenza dipende dal valore di
un campo detto chiave
Gestione delle tuple nelle pagine
(esempio per metodi di accesso sequenziali e calcolati)
Block header
Bit di parità
Page header
Block trailer
Page trailer
*t1 *t2 *t3
Dizionario di pagina
tupla
t1
tupla tupla
t2
t3
Parte utile della pagina
Informazione di controllo relativa al metodo d’accesso
Informazione di controllo utilizzata dal file system
Strutture sequenziali
entry-sequenced (1)
sequenza delle tuple indotta dal loro ordine di immissione
• Si rivela una strategia ottimale per operazioni di
lettura e scrittura sequenziali.
• Il modo tipico di accesso ai dati è tramite una
funzione di scansione sequenziale.
• Questa organizzazione utilizza tutti i blocchi
all’interno del file e tutti gli spazi all’interno dei
blocchi.
• L’accesso al file sia in inserimento che in lettura
avviene dalla fine.
Strutture sequenziali
entry-sequenced (2)
• La modifica di tuple di dimensione variabile
e la cancellazione risulta problematica.
• La cancellazione spesso si riduce ad una
invalidazione dell’informazione con spreco
di spazio
Strutture sequenziali
ad array (1)
la posizione delle tuple dipende dal valore assunto da un campo indice
• È possibile solo per tuple di dimensione
fissa
• Al file viene associato un numero n di
blocchi contigui e ciascun blocco viene
diviso in m slot utilizzabili per le tuple
(array n x m slot)
• Ciascuna tupla è dotata di un valore
numerico i che funge da indice dell’array
Strutture sequenziali
ad array (2)
• Le cancellazioni creano degli slot liberi
• Gli inserimenti devono essere fatti negli slot
liberi o al termine del file
• Le funzioni primitive garantite da una tale
struttura sono read-ind insert-at insert-near
insert-at-end update-ind delete-ind
Strutture sequenziali ordinate (1)
la sequenza dipende dal valore di un campo detto chiave
(non è più usata)
• L’ordinamento delle tuple riflette quello
lessicografico dei valori presenti nel campo
chiave.
• Sono avvantaggiate le transazioni che
richiedono un accesso ordinato alle tuple in
base alla chiave.
• Per trovare la tupla che contiene un valore
specifico si può ricorrere alla ricerca
dicotomica.
Strutture sequenziali ordinate (2)
•
•
1.
2.
Problema: inserire nuove tuple (riordino
delle tuple già presenti in memoria di
massa)
Possibili soluzioni :
prevedere a priori un certo numero di slot liberi
mantenendo la struttura sequenziale con “riordino
locale”
integrare il file sequenziale con un file di overflow
Strutture con accesso calcolato (1)
• Come per la struttura sequenziale ordinata, c’è un
accesso associativo ai dati:
- la locazione fisica dei dati dipende dal valore del campo chiave
• Per il file vengono allocati un numero B di blocchi
(generalmente) contigui.
• Il gestore di questo metodo di accesso dispone di
un algoritmo di hash che restituisce un valore
compreso tra 0 e B-1.
Strutture con accesso calcolato (2)
• Funziona bene se viene previsto un basso
coefficiente di riempimento (file
sovradimensionato)
• Bisogna gestire il problema delle collisioni
• L’hashing è efficiente per accedere ai dati in
base a predicati di uguaglianza
• Risulta inefficace per interrogazioni che
richiedono l’accesso ad intervalli di valori
Strutture ad Albero (1)
• Nei database relazionali le strutture più
frequentemente utilizzate sono il B-Tree ed il B+Tree
• Ogni nodo coincide con una pagina o blocco a
livello di file system.
• I legami tra i nodi vengono stabiliti da puntatori
che collegano fra loro le pagine
• Gli alberi dovrebbero essere sempre bilanciati
(Balanced-Tree) per avere tempi di accesso
pressoché costanti.
Strutture ad Albero (2)
• L’efficienze di un albero B o B+ è normalmente
elevata perché spesso le pagine che memorizzano i
primi livelli dell’albero risiedono nel buffer
• Una ottimizzazione dello spazio occupato avviene
tramite la compressione dei valori chiave
• Vengono mantenuti solo i prefissi nei livelli alti
dell’albero e solo i suffissi, a pari prefisso, nei
livelli bassi dell’albero, ove si svolge la parte
finale della ricerca.
Strutture ad albero: B-Tree (1)
P0 K1 …… Ki-1 Pi Ki …… Kq Pq
Sotto-albero
con chiavi
K<K1
Sotto-albero
con chiavi
Ki-1≤K<Ki
Sotto-albero
con chiavi
K>Kq
Strutture ad albero (2)
key-sequenced
P1 K1 …… Ki-1 Pi Ki …… Pq Kq
tK1
tKi-1
tKi
tKq
I nodi foglia contengono l’intera tupla. È generalmente utilizzata
per realizzare l’indice primario (unique in una tabella)
Strutture ad albero (3)
indiretta
K1
K1
K2
K6
K4
K5
I nodi foglia contengono
puntatori ai blocchi della
base di dati nei quali sono
presenti tuple con il valore
di chiave specificato. Il
posizionamento delle tuple
nel file può essere
qualsiasi. È possibile
utilizzare un qualsiasi dei
metodi visti in precedenza.
Strutture ad albero (4)
Inserimento
K1
K1
K2
L’inserimento di un nuovo valore
avviene tramite il semplice
aggiornamento del nodo foglia,
se è ancora presente dello spazio
nella pagina. Se lo spazio è
finito, si ricorre ad un’operazione
di split e successivo
aggiornamento sia del nodo
foglia che del nodo .
K6
K4
K5
K1
K3
K6
Inserimento di K3 e
split del livello foglia
K1
K2
K3
K4
K5
Strutture ad albero (5)
Inserimento, cancellazione e modifica
• Lo split può essere necessario anche ai livelli superiori e
propagarsi fino al nodo radice.
• L’operazione cancellazione avviene in maniera duale a
quella di inserimento tramite, se necessario, il merge di
due nodi foglia.
• La modifica viene vista come una cancellazione seguita
da un inserimento e si fa ricadere nei due casi precedenti.
B+-Tree
100
10
2
t2
50
5
t5
200
100
10
t10
150
90
t90
100
t100
145
t145
I nodi foglia sono legati da una catena che li connette in base all’ordine
imposto dalla chiave. Questa struttura dati consente anche una scansione
ordinata in base ai valori di chiave dell’intero file.
B-Tree (ottimizzazione)
K1
K2
K3
tk2
K10
K5
K4
tk3
K6
tk4
K7
tk5
tk1
tk6
tk10
K8
tk7
K9
tk8
tk9
Per arrivare a leggere il valore di una tupla, non è necessario arrivare
fino in fondo all’albero.