BASI DI DATI DISTRIBUITE Esercizio n. 1 Esercizio n. 2 Esercizio n. 3

Esercizi proposti a lezione cap. 6 – rev. nov. 2007 da Atzeni ed altri - Basi di dati vol. 2/2ed 2007
BASI DI DATI DISTRIBUITE
Esercizio n. 1
Si consideri la base dati:
PRODUZIONE (NumeroSerie, TipoParte, Modello, Qta, Macchina)
PRELIEVO (NumeroSerie, Lotto, Cliente, Venditore, Ammontare)
CLIENTE (Nome, Città Indirizzo)
VENDITORE (Nome, Città Indirizzo)
Progettare la frammentazione orizzontale delle tabelle PRODUZIONE e PRELIEVO in base al
tipo di parte (che assume quattro valori: “Tastiera”, “Schermo”, “CPU” e “Cablaggio”),
prevedendo quattro stabilimenti di produzione disposti a Milano, Torino, Roma e Napoli, e
delle tabelle CLIENTE e VENDITORE in base a tre bacini di vendita, centrati su Torino,
Milano e Roma; si supponga che le vendite siano distribuite per bacini geografici (quindi,
clienti di Milano sono serviti solo da venditori di Milano; si assuma che il bacino di vendita di
Roma comprenda anche Napoli) e che ciascuna area geografica abbia una propria base di
dati (cioè che sia disponibile una base di dati a Milano, Torino, Roma e Napoli). Esprimere a
livello di trasparenza di frammentazione, di allocazione e di linguaggio le interrogazioni:
1. Determinare la quantità disponibile del prodotto 77Y6878
2. Determinare i clienti che hanno comprato qualche lotto dal rivenditore Bianchi, che ha
ufficio a Roma.
3. Determinare le macchine utilizzate per la produzione dei pezzi di tipo “Tastiera” venduti
al cliente Rossi.
4. Modificare l’indirizzo del cliente Rossi, che si trasferisce da “Via Po 45” di Milano a
“Viale Trastevere 150” di Roma
5. Calcolare la somma degli importi degli ordini ricevuti a Milano, Torino e Roma (si noti
che anche le funzioni aggregate sono disponibili)
Scrivere poi, ipotizzando di usare il DBMS di “Milano”, una richiesta remota, una transazione
remota, una transazione distribuita e una richiesta distribuita.
Esercizio n. 2
Descrivere come l'organizzazione di una riunione (di un insieme di persone che debbono
essere tutte presenti) possa essere basata su un protocollo con le stesse caratteristiche del
commit a due fasi.
Esercizio n. 3
Si consideri il protocollo di commit a due fasi (2PC).
1. Spiegare perché:
(a) un guasto del coordinatore (TM) può avere conseguenze molto pesanti anche sulle
prestazioni dei partecipanti (RM);
(b) un guasto di un partecipante non ha conseguenze particolari sulle prestazioni degli
altri partecipanti
1
Esercizi proposti a lezione cap. 6 – rev. nov. 2007 da Atzeni ed altri - Basi di dati vol. 2/2ed 2007
(a parte l’eventuale abort di transazioni).
Per ovviare alle conseguenze negative di un guasto del coordinatore, alcune implementazioni
del 2PC prevedono la possibilità di comunicazione fra i partecipanti (mentre la versione base
prevede solo comunicazione fra il coordinatore e ciascuno dei partecipanti). In particolare, un
partecipante che abbia una transazione in stato di “ready” può chiedere agli altri partecipanti
informazioni sullo stato di tale transazione (che può essere “prima-del-ready”, “ready”,
“commit” o “abort”) presso di loro.
2. In tale contesto indicare
(a) come (e in quali casi) il partecipante può trarre profitto dalle risposte ottenute;
(b) quali insiemi di risposte il partecipante può ricevere e quali invece no.
Esercizio n. 4
Descrivere come si modifica il protocollo di ripresa a caldo tendo presente che alcune sottotransazioni distribuite possono essere in stato di ready.
Esercizio n. 5
Applicare il protocollo di ripresa a caldo dopo la caduta di un nodo assumendo un algoritmo di
commit a due fasi, a fronte del seguente input (ove r(ti) indica la presenza del record di
ready):
B(T1), B(T2), B(T3), I(T1,O1,A1), D(T2,O2,B2), B(T4), R(T1), U(T4,O3,B3,A3), C(T1), CK(T2,T3,T4),
B(T5), B(T6), U(T5,O5,B5,A5), R(T5), B(T7), U(T7,O6,B6,A6), B(T8), U(T6,O1,B7,A7), A(T7), R(T6),
guasto
Esercizio n. 6
Descrivere un esempio di comportamento di una base di dati replicata che produce
disallineamento tra i dati.
Esercizio n. 7
Descrivere un esempio di replicazione simmetrica che produce inconsistenza dei dati.
2
Esercizi proposti a lezione cap. 6 – rev. nov. 2007 da Atzeni ed altri - Basi di dati vol. 2/2ed 2007
SOLUZIONE Esercizio 1
Ia PARTE
Frammentazione orizzontale della tabella PRODUZIONE (4 tabelle)
PRODUZIONE _1 = σTipoParte= ‘Tastiera’ (PRODUZIONE)
PRODUZIONE _2= σTipoParte=’Schermo’ (PRODUZIONE)
PRODUZIONE _3= σTipoParte=’CPU’ (PRODUZIONE)
PRODUZIONE _4= σTipoParte=’Cablaggio’ (PRODUZIONE)
Frammentazione orizzontale (derivata) della tabella PRELIEVO (4 tabelle)
PRELIEVO_1= Π NumeroSerie, Lotto, Cliente, Venditore, Ammontare (σTipoParte=’Tastiera’ (PRELIEVO
NumeroSerie = SN SN← NumeroSerie (PRODUZIONE)))
PRELIEVO_2= Π NumeroSerie, Lotto, Cliente, Venditore, Ammontare (σTipoParte=’Schermo’ (PRELIEVO
NumeroSerie = SN SN← NumeroSerie (PRODUZIONE)))
PRELIEVO_3= Π NumeroSerie, Lotto, Cliente, Venditore, Ammontare (σTipoParte=’CPU’ (PRELIEVO
NumeroSerie = SN SN← NumeroSerie (PRODUZIONE)))
PRELIEVO_4= Π NumeroSerie, Lotto, Cliente, Venditore, Ammontare (σTipoParte=’Cablaggio’ (PRELIEVO
NumeroSerie = SN SN←NumeroSerie (PRODUZIONE)))
Frammentazione orizzontale della tabella CLIENTE (3 tabelle)
CLIENTE_1= σCittà =‘Torino’ (CLIENTE)
CLIENTE_2= σCittà =‘Milano’ (CLIENTE)
CLIENTE_3= σCittà =‘Roma’ V Città =‘Napoli’ (CLIENTE)
Frammentazione orizzontale della tabella VENDITORE
VENDITORE_1= σCittà =‘Torino’ (VENDITORE)
VENDITORE _2= σCittà =‘Milano’ (VENDITORE)
VENDITORE _3= σCittà =‘Roma’ V Città =‘Napoli’ (VENDITORE)
Le tabelle PRODUZIONE_1, PRELIEVO_1, CLIENTE_1, VENDITORE_1 potranno essere
allocate a Torino (Torino.Azienda.it)
Le tabelle PRODUZIONE_2, PRELIEVO_2, CLIENTE_2, VENDITORE_2 potranno essere
allocate a Milano (Milano.Azienda.it)
Le tabelle PRODUZIONE_3, PRELIEVO_3, CLIENTE_3, VENDITORE_3 potranno essere
allocate a Roma (Roma.Azienda.it)
Le tabelle PRODUZIONE_4, PRELIEVO_4 potranno essere allocate a Napoli
3
Esercizi proposti a lezione cap. 6 – rev. nov. 2007 da Atzeni ed altri - Basi di dati vol. 2/2ed 2007
(Napoli.Azienda.it)
4
Esercizi proposti a lezione cap. 6 – rev. nov. 2007 da Atzeni ed altri - Basi di dati vol. 2/2ed 2007
Punto 1: Determinare la quantità disponibile del prodotto 77Y6878
Trasparenza di frammentazione:
Procedure QueryDispo1 ( :Quan)
select Qta into :Quan
from PRODUZIONE
where NumeroSerie = “77Y6878”
end Procedure
Trasparenza di allocazione:
Procedure QueryDispo2 ( :Quan)
select Qta into :Quan
from PRODUZIONE_1
where NumeroSerie = “77Y6878”
if :empty then
select Qta into :Quan
from PRODUZIONE_2
where NumeroSerie = “77Y6878”
if :empty then
select Qta into :Quan
from PRODUZIONE_3
where NumeroSerie = “77Y6878”
if :empty then
select Qta into :Quan
from PRODUZIONE_4
where NumeroSerie = “77Y6878”
end Procedure
Trasparenza di linguaggio:
Procedure QueryDispo3 ( :Quan)
select Qta into :Quan
from [email protected]
where NumeroSerie = “77Y6878”
if :empty then
select Qta into :Quan
from [email protected]
where NumeroSerie = “77Y6878”
if :empty then
select Qta into :Quan
from [email protected]
where NumeroSerie = “77Y6878”
if :empty then
select Qta into :Quan
from [email protected]
where NumeroSerie = “77Y6878”
end Procedure
5
Esercizi proposti a lezione cap. 6 – rev. nov. 2007 da Atzeni ed altri - Basi di dati vol. 2/2ed 2007
Punto 2: Determinare i clienti che hanno comprato qualche lotto dal rivenditore Bianchi, che
ha ufficio a Roma.
Trasparenza di frammentazione:
Procedure QueryLotto1 ( :Cl)
select Cliente into :Cl
from PRELIEVO
where Venditore =”Bianchi”
end Procedure
Trasparenza di allocazione:
Procedure QueryLotto2 ( :Cl)
select Cliente into :Cl
from PRELIEVO_1
where Venditore =”Bianchi”
if :empty then
select Cliente into :Cl
from PRELIEVO_2
where Venditore =”Bianchi”
if :empty then
select Cliente into :Cl
from PRELIEVO_3
where Venditore =”Bianchi”
if :empty then
select Cliente into :Cl
from PRELIEVO_4
where Venditore =”Bianchi”
end Procedure
Trasparenza di linguaggio:
Procedure QueryLotto3 ( :Cl)
select Cliente into :Cl
from [email protected]
where Venditore =”Bianchi”
if :empty then
select Cliente into :Cl
from [email protected]
where Venditore =”Bianchi”
if :empty then
select Cliente into :Cl
from [email protected]
where Venditore =”Bianchi”
if :empty then
select Cliente into :Cl
from [email protected]
where Venditore =”Bianchi”
6
Esercizi proposti a lezione cap. 6 – rev. nov. 2007 da Atzeni ed altri - Basi di dati vol. 2/2ed 2007
end Procedure
Punto 3: Determinare le macchine utilizzate per la produzione dei pezzi di tipo “Tastiera”
venduti al cliente Rossi.
Trasparenza di frammentazione:
Procedure QueryMacchinePerTastiere1 ( :mac)
select Macchine into :mac
from PRODUZIONE join PRELIEVO On
PRODUZIONE.NumeroSerie = PRELIEVO.NumeroSerie
where Cliente = ”Rossi” and TipoParte = ”Tastiera”
end Procedure
Trasparenza di allocazione:
Procedure QueryMacchinePerTastiere2 ( :mac)
select Macchine into :mac
from PRODUZIONE_1 join PRELIEVO_1 On
PRODUZIONE_1.NumeroSerie =
PRELIEVO_1.NumeroSerie
where Cliente = ”Rossi”
end Procedure
Trasparenza di linguaggio:
Procedure QueryMacchinePerTastiere3 ( :mac)
select Macchine into :mac
from [email protected]
join [email protected] On
PRODUZIONE_1.NumeroSerie =PRELIEVO_1.NumeroSerie
where Cliente = ”Rossi”
end Procedure
Punto 4: Modificare l’indirizzo del cliente Rossi, che si trasferisce da “Via Po 45” di Milano a
“Viale Trastevere 150” di Roma
Trasparenza di frammentazione:
Procedure ModificaIndirizzo1
update CLIENTE
set Indirizzo=”Via Po 45”, Città=”Milano”
where Nome = ”Rossi”
end Procedure
Trasparenza di allocazione:
Procedure ModificaIndirizzo2
7
Esercizi proposti a lezione cap. 6 – rev. nov. 2007 da Atzeni ed altri - Basi di dati vol. 2/2ed 2007
delete from CLIENTE_3
where Nome = “Rossi”;
insert into CLIENTE_2 (Nome, Indirizzo, Città) values
(“Rossi”, ”Via Po 45”, ”Milano”)
end Procedure
Trasparenza di linguaggio:
Procedure ModificaIndirizzo2
delete from [email protected]
where Nome = “Rossi”;
insert into [email protected]
(Nome, Indirizzo, Città) values
(“Rossi”, ”Via Po 45”, ”Milano”)
end Procedure
Punto 5: Calcolare la somma degli importi degli ordini ricevuti a Milano, Torino e Roma (si noti
che anche le funzioni aggregate sono disponibili)
Trasparenza di frammentazione:
Procedure Ordini1
select Citta, sum(Ammontare)
from PRELIEVO join VENDITORE on Venditore = Nome
group by Città
end Procedure
Trasparenza di allocazione:
Procedure Ordini2
create view PRELIEVO as
PRELIEVO_1 union PRELIEVO_2 union
select Citta, sum(Ammontare)
from PRELIEVO join VENDITORE_1 on
group by Città
union
select Citta, sum(Ammontare)
from PRELIEVO join VENDITORE_2 on
group by Città
union
select Citta, sum(Ammontare)
from PRELIEVO join VENDITORE_3 on
group by Città
end Procedure
PRELIEVO_3 union PRELIEVO_4
Venditore = Nome
Venditore = Nome
Venditore = Nome
Trasparenza di linguaggio:
Procedure Ordini2
create view PRELIEVO as
[email protected] union
[email protected] union
8
Esercizi proposti a lezione cap. 6 – rev. nov. 2007 da Atzeni ed altri - Basi di dati vol. 2/2ed 2007
[email protected] union
[email protected]
select Citta, sum(Ammontare)
from PRELIEVO join [email protected]
on Venditore = Nome
group by Città
union
select Citta, sum(Ammontare)
from PRELIEVO join VENDITORE_2@ Milano.Azienda.it
on Venditore = Nome
group by Città
union
select Citta, sum(Ammontare)
from PRELIEVO join [email protected]
on Venditore = Nome
group by Città
end Procedure
IIa PARTE
Richiesta Remota
select *
from PRODUZIONE_2
where Qta > 100
Transazione Remota
update CLIENTE_2
set Indirizzo = “Via Fogazzaro 11”
where Nome = “Verdi”
Transazione Distribuita
delete from CLIENTE_2
where Nome = “Bianchi”
insert into CLIENTE_1 (Nome, Indirizzo, Città) values
(“Bianchi”, ”Via Ponente 45”, ”Milano”)
Richiesta Distribuita
select Nome
from PRELIEVO_1 join CLIENTE_3 on Cliente = Nome
where NumeroSerie = “458X411”
9
Esercizi proposti a lezione cap. 6 – rev. nov. 2007 da Atzeni ed altri - Basi di dati vol. 2/2ed 2007
Soluzione Esercizio n.2
Un coordinatore contatta tutti i partecipanti che rispondono comunicando la propria
disponibilità (in modo irrevocabile). Se le risposte sono ricevute tutte entro un tempo limite
prefissato e sono tutte positive, allora il coordinatore fissa la riunione (altrimenti la disdice)
comunicando la decisione a tutti i partecipanti.
Soluzione Esercizio n.3
1(a) un guasto del coordinatore (TM) può avere conseguenze molto pesanti anche sulle
prestazioni dei partecipanti (RM) perché questi ultimi potrebbero avere transazioni in stato di
“ready" (cioè nella “finestra di incertezza"), con i lock acquisiti sulle risorse coinvolte, in attesa
di risposta da parte del TM;
1(b) un guasto di un partecipante non ha conseguenze particolari sulle prestazioni degli altri
partecipanti (a parte l'eventuale abort di transazioni), perché:
- se il guasto avviene prima del ready, allora il partecipante stesso non risponde al prepare
e quindi, scattato il time-out della prima fase, il coordinatore decide per l'abort;
- se il guasto avviene dopo il ready, l'unica complicazione è la necessità di ripetere la
seconda fase
2(a) se riceve almeno una risposta che contenga una decisione, può basarsi su di essa: se
riceve almeno una risposta “commit," può assumere che la transazione sia andata a buon
fine, se riceve almeno una risposta “abort," può assumere che essa sia fallita;
2(b) non è possibile che riceva “abort" da un partecipante e “commit" da un altro; né che
riceva prima-del-ready" da uno e “commit" da un altro.
Soluzione Esercizio n.4
Protocollo di ripresa a caldo in sistemi distribuiti:
1) Si accede all’ultimo blocco del log e si ripercorre il log all’indietro fino al record di
checkpoint.
Si costruiscono 3 insiemi, detti di UNDO, di REDO e di READY. Gli insiemi REDO e READY
sono vuoti, mentre quello di UNDO contiene le transazioni indicare nel record di checkpoint.
2) Si ripercorre il log in avanti, aggiungendo all’insieme di UNDO tutte le transazioni di cui è
presente il record di begin.
Se viene rilevato un record ready, la corrispondente transazione viene spostata in READY.
Se viene trovato un record di commit si sposta la transazione corrispondente nell’insieme di
REDO (viene rimossa da READY o da UNDO).
Se si trova un record abort e la transazione corrispondente si trova in READY, essa viene
tolta da
READY e messa in UNDO.
3) Se l’insieme READY non è vuoto, il sistema deve chiedere al TM (Transaction Manager) l’esito
delle transazioni di questo insieme, che si trovano in uno stato incerto. Il TM indica quali
transazioni hanno effettuato il commit e quali l’abort. Queste transazioni saranno quindi trasferite
negli insiemi di REDO o di UNDO e i rispettivi record scritti nel log.
10
Esercizi proposti a lezione cap. 6 – rev. nov. 2007 da Atzeni ed altri - Basi di dati vol. 2/2ed 2007
4) Il protocollo continua come in un sistema non distribuito.
Soluzione Esercizio n.5
1) Il log viene ripercorso all’indietro sino al record di checkpoint CK(T2,T3,T4) e si creano i tre
insiemi di UNDO, REDO e READY.
UNDO = { T2,T3,T4} REDO = {} READY = {}
2) Il record viene percorso in avanti, aggiornandogli insiemi.
B(T5)
B(T6)
R(T5)
B(T7)
UNDO = { T2,T3,T4,T5}
UNDO = { T2,T3,T4,T5,T6}
UNDO = { T2,T3,T4,T6}
UNDO = { T2,T3,T4,T6,T7}
REDO = {}
REDO = {}
REDO = {}
REDO = {}
B(T8)
A(T7)
R(T6)
UNDO = { T2,T3,T4,T6,T7,T8}
UNDO = { T2,T3,T4,T6,T7,T8}
UNDO = { T2,T3,T4 T7,T8}
REDO = {} READY = {T5}
REDO = {} READY = {T5}
REDO = {} READY = {T5,T6}
READY = {}
READY = {}
READY = {T5}
READY = {T5}
3) A questo punto dovremmo chiedere al Transaction Manager l’esito delle transazioni in
stato di READY. Supponendo che il TM indichi un global commit per T5 e T6 otteniamo:
UNDO = { T2,T3,T4, T7,T8} REDO = {T5,T6}
I record C(T5) e C(T6) sono scritti nel log.
4) Il record viene ripercorso all’indietro sino a D(T2,O2,B2), eseguendo le operazioni di
UNDO.
O6 = B6
O3 = B3
Insert O2 = B2
5) Infine il log viene percorso in avanti e vengono eseguite le operazioni di REDO.
O5 = A5
O1 = A7
Soluzione esercizio n.6
Con riferimento allo schema data base descritto nell' Esercizio 1., supponiamo che ciascun
frammento della tabella PRODUZIONE sia allocata a tutti i DBMS. Ciascun DBMS usa solo
11
Esercizi proposti a lezione cap. 6 – rev. nov. 2007 da Atzeni ed altri - Basi di dati vol. 2/2ed 2007
un frammento e trasmette tutte le variazioni di questo frammento agli altri DBMS In questa
maniera tutti i DBMS posseggono un intera copia del database.
Nel caso di guasto di uno dei DBMS il Database è ancora completamente accessibile dagli
altri sistemi:se tutte le query sono correttamente re-dirette, il guasto è trasparente al Cliente
del Database.
Tuttavia se si verifica un guasto della rete, questo può generare una partizione della rete, per
esempio con due sottoreti indipendenti.In questa situazione è possibile un'inconsistenza dei
dati : supponiamo che la tabella PRODUZIONE contiene una ennupla:
NumeroSerie
TipoParte
Modello
Qta
Macchina
12345
CPU
Pentium II
1000
A
se due transazioni volessero entrambe sottrarre 800 dalla quantità di questa parte, una delle
transazioni (la seconda in ordine temporale) fallirebbe, ma se le due transazioni sono presenti
i due differenti DBMS che non sono connessi, essi non falliranno ma produrranno
un'inconsistenza nel data base completo.
Soluzione esercizio n.7
Se nel contesto di una replicazione simmetrica, ciascun DBMS ha una copia dell'intero
DATABASE e può accedere ad essa completamente, allora le copie sono riconciliate.
Questa situazione può produrre lo stesso effetto di un singolo database senza il controllo di
concorrenza. Le due transazioni descritte nell' esercizio 4 possono produrre una
inconsistenza anche senza un guasto di rete se le variazioni non sono comunicate
immediatamente alle altre copie.
12