Basi di Dati e Sistemi
Informativi
Struttura di un DBMS:
Organizzazione della Memoria
Home page del corso:
http://www.cs.unibo.it/~difelice/dbsi/
Organizzazione della Memoria
Studio/analisi dei requisiti
Risultati
Fasi della progettazione
SCHEMA
CONCETTUALE
Progettazione concettuale
SCHEMA
LOGICO
Progettazione logica
SCHEMA
FISICO
Progettazione fisica
Organizzazione della Memoria
ANALISI REQUISITI
Cosa si rappresenta
PROGETTAZIONE CONCETTUALE
Come lo si rappresenta
Tabella1
Tabella2
TabellaN
PROGETTAZIONE LOGICA
 Dove memorizzare le tabelle?
 Quali strutture dati usare?
Organizzazione della Memoria
Memoria Primaria
 Volatile
 Accesso casuale
Memoria Secondaria
 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
(record) sono
inferiore alla
{
Le tuple di una relazione
generalmente di dimensione
dimensione di un blocco.
Tupla dimensione fissa pari a L
Fattore di blocco = B/L
Dimensione blocco B
(numero di record per blocco)
Organizzazione della Memoria
Per l’accesso e la memorizzazione su memoria
secondaria, i DMBS utilizzano le funzionalita’ offerte
dal sistema operativo (file-system).
API del FILE SYSTEM
FileDescriptor* open(String)
close(FileDescriptor*)
byte[] read(FileDescriptor*)
FILE SYSTEM UNIX
write(FileDescriptor*, byte[])
Organizzazione della Memoria
Per motivi di efficienza, ogni DBMS gestisce
l’organizzazione dei dati all’interno dei blocchi
di memoria secondaria allocati dal SO.
CATEGORIE DI ORGANIZZAZIONE DEI FILE
 Struttura seriale (disordinata).
 Struttura sequenziale.
 Struttura con accesso calcolato (hash).
Organizzazione della Memoria
Struttura seriale  le tuple si presentano nel
file nell’ordine con cui sono inserite nel DB.
INSERT INTO DB VALUES (“013”,”Sara”, “Verdi”)
Matricola
Nome
Cognome
012
Marco
Rossi
013
Simone
Bianchi
014
Sara
Verdi
DB FILE
01001101100000
01111000001110
11011110000001
Organizzazione della Memoria
Struttura seriale  le tuple si presentano nel
file nell’ordine con cui sono inserite nel DB.




Inserimento dati  O(1)
Ricerca dati  O(N)
Aggiornamento dati  O(N)
Cancellazione dati  O(N)
N=numero di tuple nel file
01001101100000
01111000001110
11011110000001
11011110000001
11011110000001
FRAMMENTAZIONE
INTERNA
Organizzazione della Memoria
Per motivi di efficienza, ogni DBMS gestisce
l’organizzazione dei dati all’interno dei blocchi
di memoria secondaria allocati dal SO.
CATEGORIE DI ORGANIZZAZIONE DEI FILE
 Struttura seriale (disordinata).
 Struttura sequenziale.
 Struttura con accesso calcolato (hash).
Organizzazione della Memoria
Struttura sequenziali  le tuple sono
memorizzate secondo l’ordine di uno o piu’
attributi dello schema relazionale.
INSERT INTO DB VALUES (“013”,”Sara”, “Verdi”)
DB FILE
Matricola
Matricola Nome
Nome
Cognome
Cognome
012
012
Marco
Marco
Rossi
Rossi
014
013
Sara
Simone Verdi
Bianchi
013
Simone
Bianchi
01001101100000
11011110000001
01001101100000
01111000001110
Organizzazione della Memoria
Le strutture sequenziali facilitano le operazioni
SQL di ordinamento/raggruppamento/ricerca
sugli attributi su cui e’ definito l’ordinamento.
 SELECT * FROM Studenti ORDER BY Nome
 SELECT * FROM Studenti WHERE
(Nome=“Sara”)
 SELECT Nome FROM Studenti GROUP BY Nome
Q. Complessita’ algoritmica della ricerca dicotomica?
Organizzazione della Memoria
Le strutture sequenziali sono piu’ complesse da
gestire in caso di operazioni di
aggiornamento/cancellazione/inserimento.
 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)
Organizzazione della Memoria
Per motivi di efficienza, ogni DBMS gestisce
l’organizzazione dei dati all’interno dei blocchi
di memoria secondaria allocati dal SO.
CATEGORIE DI ORGANIZZAZIONE DEI FILE
 Struttura seriale (disordinata).
 Struttura sequenziale.
 Struttura con accesso calcolato (hash).
Organizzazione della Memoria
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).
 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
Esempio di STRUTTURE HASH
B: Numero di blocchi
<29, Marco, Rossi>
0
1
2
3
4
5
6
7
8
<68, Simone, Bianchi>
<71, Sara, Verdi>
f: I  [0,B[
Organizzazione della Memoria
Esempio di STRUTTURE HASH
B: Numero di blocchi
<29, Marco, Rossi>
0
1
2
3
4
5
6
7
8
<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 …
Organizzazione della Memoria
Esempio di STRUTTURE HASH
B: Numero di blocchi
<29, Marco, Rossi>
0
1
2
3
4
5
6
7
8
<68, Simone, Bianchi>
<14, Sara, Verdi>
f: I  [0,B[
COLLISIONE!
Organizzazione della Memoria
Poiche’ la dimensione della tupla (L) e’ in
genere inferiore alla dimensione del blocco (B),
in caso di collisione:
 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
Esempio di STRUTTURE HASH
B: Numero di blocchi
<29, Marco, Rossi>
0
1
2
3
4
5
6
7
8
<68, Simone, Bianchi>
<14, Sara, Verdi>
f: I  [0,B[
Organizzazione della Memoria
PROBLEMI STRUTTURE HASH
 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 di
riempimento dei blocchi molto basso.
 Gestione dinamicita’ del sistema?
Organizzazione della Memoria
PROBLEMI STRUTTURE HASH
 Struttura Hash NON efficiente per operazioni
di selezione su un range di valori:
SELECT *
FROM STUDENTI
WHERE (MATRICOLA>10) AND (MATRICOLA<100)
 Struttura Hash NON efficiente per operazioni
che coinvolgono attributi NON chiave.
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 un indice?
Indice
ACCESSO DIRETTO
Introduzione 1
Capitolo 1 20
Capitolo 2 40
Capitolo 3 60
Conclusioni 65
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>
FILE INDICE
Valore Chiave
14
29
68
FILE F
Posizione
29 Marco Rossi
14 Sara Verdi
68 Simone Bianchi
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 chiave
della 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 albero
multi-livello.
Organizzazione della Memoria
Struttura di un nodo NON-foglia
P0 K1 P1
Sottoalbero che contiene
le chiavi K<K1
…
Ki
Pi
Sottoalbero che contiene
le chiavi Ki<=K<Ki+1
…
KF PF
Sottoalbero che contiene
le 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:
P0 12 P1 16 P2
<14, Sara, Verdi>
<15, Michele, Bianchi>
…
50 PF
Index-Sequential Structure
Organizzazione della Memoria
Struttura di un nodo foglia
CASO2. Il nodo foglia contiene un puntatore al blocco:
P0 12 P1 16 P2
0
3
2
4
5
…
50 PF
<14, Sara, Verdi>
<15, Michele, Bianchi>
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
Pagine
NON terminali
Indexed Sequential Access Method (ISAM)
F=grado medio
N pagine terminali
Organizzazione della Memoria
Costo delle operazioni su Alberi ISAM:
 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).
Organizzazione della Memoria
Pagine
NON terminali
Inserimento su ISAM
(SENZA overflow)
F=grado medio
4
N pagine terminali
Organizzazione della Memoria
Pagine
NON terminali
Inserimento su ISAM
(CON overflow)
F=grado medio
4
5
N pagine terminali
Organizzazione della Memoria
Pagine
NON terminali
Cancellazione su ISAM
F=grado medio
4
5
N pagine terminali
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
 Ricerca  O(log(N))
1
0
 Inserimento  O(log(n))
8
3
5
9
 Cancellazione  O(log(n))
Organizzazione della Memoria
Un B+-tree e’ un B-tree nel quale i nodi
terminali sono linkati sequenzialmente.
Blocchi
Dati
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 dati
utilizzate 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
INDICI in MYSQL
 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)
Organizzazione della Memoria
INDICI in MYSQL
 Creazione di un indice (con tabella):
CREATE TABLE Studenti (
…
INDEX(Matricola));
 Rimozione di un indice
DROP INDEX Nome_Indice ON Nome_Tabella
DROP INDEX IndiceStudenti ON Studenti
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 chiamano
STORAGE 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 …