Tecnologia delle basi di dati: Strutture fisiche di accesso Esercitazioni del Corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it
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 DBMS Recovery Manager Buffer Manager Scan Mgr Hash Sort B+Tree … Gestore dei metodi d’accesso fix use unfix scan
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 Page header Bit di parità Page trailer Block trailer Parte utile della pagina Dizionario di pagina *t1 *t2 *t3 tupla tupla tupla t1 t2 t3 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) 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 …… Pi Ki-1 Ki Kq Pq Sotto-albero con chiavi K>Kq Sotto-albero con chiavi Ki-1≤K<Ki Sotto-albero con chiavi K<K1
Strutture ad albero (2) key-sequenced P1 K1 …… Pi Ki-1 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 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. K1 K6 K2 K4 K5
Strutture ad albero (4) Inserimento 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 . K1 K6 K2 K4 K5 Inserimento di K3 e split del livello foglia K1 K3 K2 K4 K5 K6
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 200 150 10 50 2 5 90 t2 t5 t10 t90 t100 t145 145 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 K6 K10 K2 K3 K4 K5 K7 K8 K9 tk2 tk3 tk4 tk5 tk1 tk6 tk10 tk7 tk8 tk9 Per arrivare a leggere il valore di una tupla, non è necessario arrivare fino in fondo all’albero.