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.