Upload
arcangelo-di-stefano
View
217
Download
1
Embed Size (px)
Citation preview
Basi di Dati e Sistemi
Informativi
Struttura di un DBMS:Organizzazione della
MemoriaHome page del corso:
http://www.cs.unibo.it/~difelice/dbsi/
Studio/analisi dei requisiti
Progettazione concettuale
Progettazione logica
Progettazione fisica
SCHEMACONCETTUALE
SCHEMALOGICO
SCHEMAFISICO
Fasi della progettazioneRisultati
Organizzazione della Memoria
Organizzazione della Memoria
ANALISI REQUISITI
Tabella2
Tabella1
TabellaN
PROGETTAZIONE CONCETTUALE
PROGETTAZIONE LOGICA
Cosa si rappresenta
Come lo si rappresenta
?Dove memorizzare le tabelle?Quali strutture dati usare?
Organizzazione della Memoria
GERARCHIE DI MEMORIA
Memoria Primaria
Memoria Secondaria
Volatile Accesso casuale
Persistente Accesso diretto
Organizzazione della Memoria
Per garantire la persistenza dei dati, un DMBS deve memorizzare i dati su memoria secondaria. Suddivisa in blocchi
(unita’ minima di allocazione).
Latenza di accesso = Latenza di posizionamento + Latenza di rotazione + Latenza di trasferimento
Principio di localita’ dei dati per ridurre la latenza d’accesso.
Organizzazione della Memoria
Le tuple di una relazione (record) sono generalmente di dimensione inferiore alla dimensione di un blocco.
Tupla dimensione fissa pari a L{Dimensione blocco B
Fattore di blocco = B/L
(numero di record per blocco)
Per l’accesso e la memorizzazione su memoria secondaria, i DMBS utilizzano le funzionalita’ offertedal sistema operativo (file-system).
Organizzazione della Memoria
FileDescriptor* open(String)
close(FileDescriptor*)
byte[] read(FileDescriptor*)
write(FileDescriptor*, byte[])FILE SYSTEM UNIX
API del FILE SYSTEM
Per motivi di efficienza, ogni DBMS gestisce l’organizzazione dei dati all’interno dei blocchi di memoria secondaria allocati dal SO.
Organizzazione della Memoria
CATEGORIE DI ORGANIZZAZIONE DEI FILE
Struttura seriale (disordinata). Struttura sequenziale. Struttura con accesso calcolato (hash).
Struttura seriale le tuple si presentano nel file nell’ordine con cui sono inserite nel DB.
Organizzazione della Memoria
Matricola
Nome Cognome
012 Marco Rossi
013 Simone Bianchi
014 Sara Verdi
0100110110000001111000
0011101101111000
0001
DB FILEMatricola
Nome Cognome
012 Marco Rossi
013 Simone Bianchi
INSERT INTO DB VALUES (“013”,”Sara”, “Verdi”)
Struttura seriale le tuple si presentano nel file nell’ordine con cui sono inserite nel DB.
Organizzazione della Memoria
Inserimento dati O(1) Ricerca dati O(N) Aggiornamento dati
O(N) Cancellazione dati O(N)N=numero di tuple nel file
0100110110000001111000
0011101101111000
000111011110000
00111011110000
001
FRAMMENTAZIONEINTERNA
Per motivi di efficienza, ogni DBMS gestisce l’organizzazione dei dati all’interno dei blocchi di memoria secondaria allocati dal SO.
Organizzazione della Memoria
CATEGORIE DI ORGANIZZAZIONE DEI FILE
Struttura seriale (disordinata). Struttura sequenziale. Struttura con accesso calcolato (hash).
Struttura sequenziali le tuple sono memorizzate secondo l’ordine di uno o piu’ attributi dello schema relazionale.
Organizzazione della Memoria
Matricola
Nome Cognome
012 Marco Rossi
014 Sara Verdi
013 Simone Bianchi
0100110110000001111000
001110
DB FILE
Matricola
Nome Cognome
012 Marco Rossi
013 Simone Bianchi
INSERT INTO DB VALUES (“013”,”Sara”, “Verdi”)
0100110110000011011110
00000101111000001
110
Le strutture sequenziali facilitano le operazioni SQL di ordinamento/raggruppamento/ricerca sugli attributi su cui e’ definito l’ordinamento.
Organizzazione della Memoria
SELECT * FROM Studenti ORDER BY Nome
SELECT * FROM Studenti WHERE (Nome=“Sara”)
SELECT Nome FROM Studenti GROUP BY NomeQ. Complessita’ algoritmica della ricerca dicotomica?
Le strutture sequenziali sono piu’ complesse da gestire in caso di operazioni di aggiornamento/cancellazione/inserimento.
Organizzazione della Memoria
In questi casi, e’ necessario procedere a periodiche riorganizzazioni della struttura.
Per questo motivo, le strutture sequenziali sono spesso usate in associazione con indici ISAM (Index Sequential Access Method)
Per motivi di efficienza, ogni DBMS gestisce l’organizzazione dei dati all’interno dei blocchi di memoria secondaria allocati dal SO.
Organizzazione della Memoria
CATEGORIE DI ORGANIZZAZIONE DEI FILE
Struttura seriale (disordinata). Struttura sequenziale. Struttura con accesso calcolato (hash).
Struttura hash Si utilizza una funzione (hash) per determinare il blocco in cui e’ memorizzato una tupla, a partire dal valore di un suo attributo (in genere, la chiave).
Organizzazione della Memoria
K: valore della chiave della tupla. f(K): numero di blocco in cui e’ contenuta
la tupla con valore della chiave pari a K.
Com’e’ fatta f(K)? Funzione iniettiva (caso ideale)
Organizzazione della Memoria
0 1 2
3 4 5
6 7 8
Esempio di STRUTTURE HASH
<29, Marco, Rossi>
<68, Simone, Bianchi>
<71, Sara, Verdi>
f: I [0,B[
Es. f(Matricola)=Matricola % B
B: Numero di blocchi
f(29)=2
f(68)=5
f(71)=8
Organizzazione della Memoria
0 1 2
3 4 5
6 7 8
Esempio di STRUTTURE HASH
<29, Marco, Rossi>
<68, Simone, Bianchi>
<71, Sara, Verdi>
Vantaggio Strutture Hash buona parte delle operazioni sulle tuple che coinvolgono la chiave possono essere eseguite in tempo costante …
B: Numero di blocchi
f(29)=2
f(68)=5
f(71)=8
Organizzazione della Memoria
0 1 2
3 4 5
6 7 8
Esempio di STRUTTURE HASH
<29, Marco, Rossi>
<68, Simone, Bianchi>
<14, Sara, Verdi>
f: I [0,B[
Es. f(Matricola)=Matricola % B
B: Numero di blocchi
f(29)=2
f(68)=5
f(71)=5
COLLISIONE!
Poiche’ la dimensione della tupla (L) e’ in genere inferiore alla dimensione del blocco (B),in caso di collisione:
Organizzazione della Memoria
Si memorizza la tupla sequenzialmente nel blocco, fino ad esaurire lo spazio disponibile.
Max Collisioni= Fattore di blocco=B/L
In caso non vi sia piu’ spazio nel blocco, viene allocato un nuovo blocco e viene collegato a quello precedente (catena di overflow)
Organizzazione della Memoria
0 1 2
3 4 5
6 7 8
Esempio di STRUTTURE HASH
<29, Marco, Rossi>
<68, Simone, Bianchi>
<14, Sara, Verdi>
f: I [0,B[
Es. f(Matricola)=Matricola % B
B: Numero di blocchi
f(29)=2
f(68)=5
f(71)=5
PROBLEMI STRUTTURE HASH
Organizzazione della Memoria
Numero di blocchi costituisce un trade-off
Se troppo piccolo rispetto al DB frequenti collisioni (con catene di overflow, etc). Se troppo grande rispetto al DB fattore diriempimento dei blocchi molto basso.
Gestione dinamicita’ del sistema?
PROBLEMI STRUTTURE HASH
Organizzazione della Memoria
Struttura Hash NON efficiente per operazionidi selezione su un range di valori:
SELECT *FROM STUDENTIWHERE (MATRICOLA>10) AND (MATRICOLA<100)
Struttura Hash NON efficiente per operazioniche coinvolgono attributi NON chiave.
Indice struttura che contiene informazioni sulla posizione di memorizzazione delle tuple sulla base del valore del campo chiave.
Q. A che serve un indice? IndiceIntroduzione 1Capitolo 1 20Capitolo 2 40Capitolo 3 60Conclusioni 65
ACCESSO DIRETTO
Organizzazione della Memoria
Indice struttura che contiene informazioni sulla posizione di memorizzazione delle tuple sulla base del valore del campo chiave.
Q. A che serve l’indice in un DB?
A. Consentire accesso diretto (sulla chiave) efficiente, sia puntuale sia per intervalli, quindi ottimizzare l’esecuzioni di query SQL che si basano sulla chiave dell’indice.
Organizzazione della Memoria
Indice struttura che contiene informazioni sulla posizione di memorizzazione delle tuple sulla base del valore del campo chiave.
Chiave indice (spesso) == Chiave relazione.
Gli indici possono essere di due tipi: Indici secondari. Indici primari.
Organizzazione della Memoria
Le tuple della relazione sono contenute nel file F. Un indice secondario e’ un file (diverso da F) contenente un insieme di coppie:
<valore_chiave, offset_tupla_in_F>
29 Marco Rossi14 Sara Verdi
68 Simone Bianchi
FILE F
Valore Chiave
Posizione
14
29
68
FILE INDICE
Organizzazione della Memoria
Un indice secondario puo’essere utilizzato su strutture seriali (disordinate).
Un indice secondario deve contenere tutte i valori della chiave.(indice denso).
Organizzazione della Memoria
Indice struttura che contiene informazioni sulla posizione di memorizzazione delle tuple sulla base del valore del campo chiave.
La chiave dell’indice e’ (spesso) anche la chiavedella relazione. Due tipi di indice:
Indici secondari. Indici primari.
Organizzazione della Memoria
Un indice primario: (i) contiene al suo interno i dati oppure (ii) e’ realizzato su un file ordinato sullo stesso campo della chiave dell’indice.
Puo’ essere sparso: non tutte le chiavi della relazione devono comparire nell’indice per consentire le operazioni di ricerca.
Organizzazione della Memoria
La realizzazione di indici avviene tipicamente attraverso l’utilizzo di strutture ad alberomulti-livello.
Organizzazione della Memoria
Struttura di un nodo NON-foglia
P0 K1 P1 … Ki Pi … KF PF
Sottoalbero che contienele chiavi K<K1
Sottoalbero che contienele chiavi Ki<=K<Ki+1
Sottoalbero che contienele chiavi K>KF
Ciascun nodo NON-foglia contiene F valori di chiave ed F+1 puntatori (fan-out dell’albero)
Organizzazione della Memoria
Struttura di un nodo foglia
CASO1. Il nodo foglia dell’albero contiene le tuple:
<14, Sara, Verdi>
<15, Michele,
Bianchi>
P012
P116
P2 …50
PF
Index-Sequential Structure
Organizzazione della Memoria
Struttura di un nodo foglia
CASO2. Il nodo foglia contiene un puntatore al blocco:
<14, Sara, Verdi>
<15, Michele,
Bianchi>
P012
P116
P2 …50
PF
0 1 2
3 4 5
Organizzazione della Memoria
Due tipologie di indici ad albero:
Indici statici La struttura ad albero viene creata sulla base dei dati presenti nel DB, e non piu’ modificata (o modificata periodicamente).
Indici dinamici La struttura ad albero viene aggiornata ad ogni operazione sulla base di dati di inserimento/cancellazione.
Organizzazione della Memoria
Indexed Sequential Access Method (ISAM)
Pagin
e
NO
N
term
inali
N pagine terminali
F=grado medio
Organizzazione della Memoria
Ricerca: partire dalla radice, confrontare le chiavi per arrivare alle pagine terminali O(logFN).
Inserimento: trovare la pagina terminale della chiave ed inserire la tupla. Nel caso di pagina piena, allocare una pagina di overlow e linkarla alla precedente. O(logFN).
Cancellazione: trovare la pagina terminale e cancellare la tupla corrispondente. O(logFN).
Costo delle operazioni su Alberi ISAM:
Organizzazione della Memoria
Inserimento su ISAM
4
Pagin
e
NO
N
term
inali
N pagine terminali
F=grado medio
4 (SENZA overflow)
Organizzazione della Memoria
Inserimento su ISAM
4
Pagin
e
NO
N
term
inali
N pagine terminali
F=grado medio
5 (CON overflow)
5
Organizzazione della Memoria
Cancellazione su ISAM
4
Pagin
e
NO
N
term
inali
N pagine terminali
F=grado medio
5
5
Organizzazione della Memoria
ISAM: vantaggi Le operazioni di inserimento/cancellazione
NON modificano la struttura dell’albero.
ISAM: svantaggi In presenza di sistemi molto dinamici, le
prestazioni dell’indice peggiorano al crescere delle catene di overflow.
Necessario ri-creare l’indice con una certa periodicita’.
Organizzazione della Memoria
Due tipologie di indici ad albero:
Indici statici La struttura ad albero viene creata sulla base dei dati presenti nel DB, e non piu’ modificata (o modificata periodicamente)
Indici dinamici La struttura ad albero viene aggiornata ad ogni operazione sulla base di dati di inserimento/cancellazione.
Organizzazione della Memoria
Un B-tree e’ un albero binario etichettato in cui per ogni nodo x, il suo sottoalbero sinistro contiene solo etichette minori di x e il sottoalbero destro solo etichette maggiori.
4
1
9
8
530
Ricerca O(log(N)) Inserimento O(log(n)) Cancellazione O(log(n))
Organizzazione della Memoria
Un B+-tree e’ un B-tree nel quale i nodi terminali sono linkati sequenzialmente.
BlocchiDati
Organizzazione della Memoria
B-tree e B+ tree sono strutture dinamiche:
Consentite operazioni di inserimento/aggiornamento/cancellazione di nodi.
Rispetto al B-tree, il B+tree e’ piu’ efficiente per operazioni di selezione/ricerca su un range di valori.
SELECT * FROM STUDENTI WHERE ((MATRICOLA>3) AND (MATRICOLA<10))
Organizzazione della Memoria
I DBMS differiscono in base alle strutture datiutilizzate per memorizzare i dati.
Quasi tutti i sistemi prevedono strutture ad albero (B-tree/B+-tree) ed hash.
Generalmente, si usano strutture seriali (disordinate), ma con indici sulla chiave di una relazione.
Organizzazione della Memoria
Creazione di un indice (da schema):
CREATE [UNIQUE|FULLTEXT|SPATIAL]INDEX nome_indice ON nome_tabella(Lista_Attributi)
CREATE UNIQUE INDEX IndiceStudente ON Studenti(Matricola)
INDICI in MYSQL
Organizzazione della Memoria
Creazione di un indice (con tabella):CREATE TABLE Studenti (…INDEX(Matricola));
Rimozione di un indice
DROP INDEX Nome_Indice ON Nome_TabellaDROP INDEX IndiceStudenti ON Studenti
INDICI in MYSQL
Organizzazione della Memoria
Progettazione fisica Sebbene molti dettagli dell’organizzazione della memoria siano gia’ pre-impostati dal DBMS in uso (e non configurabili), il progettista del DB puo’:
Selezionare le strutture fisiche piu’ adatte per il DB da implementare.
In MySQL, i tipi di tabelle si chiamanoSTORAGE ENGINE: es. MyISAM, INNODB,…
Organizzazione della Memoria
Progettazione fisica Sebbene molti dettagli dell’organizzazione della memoria siano gia’ pre-impostati dal DBMS in uso (e non configurabili), il progettista del DB puo’:
Creare indici secondari per ottimizzare l’esecuzione di query SQL specifiche.
In questi casi, l’analisi dei costi (tavola operazioni/carico/etc) puo’ essere utile …
Organizzazione della Memoria