Progettazione di basi di dati distribuite Marco Mangiacavalli Matricola: I miei commenti in rosso CB
Schema della metodologia MS proposta nel corso Operazione Nodo Frammento elementare 0. presso il 1. Visitato presso il 1. Contri- buisce a 2. alloc. non rid. 3. alloc. rid. 4. Schemi locali Schema locale
3 Caso di studio: sistema di prenotazione aerea Una compagnia aerea deve gestire le prenotazioni dei suoi aerei. La base dati è distribuita su tre siti degli Stati Uniti, ad es. – Denver con codice 1, localizzato nell’area ovest – New York, codice 2, localizzato nell’area nord – Atlanta, codice 3, localizzato nell’ area sud La base dati rappresenta gli aeroporti dove opera, gli orari dei voli, le disponibilità, e le prenotazioni. Ogni volo, per semplicità, è tra un aeroporto di partenza e un aeroporto di arrivo.
Struttura generale Rete 3. Sud = Atlanta 1. Ovest = Denver 2. Nord = New York
Passi da eseguire 1) Tradurre lo schema globale di pag. 19 della dispensa ME in uno schema globale relazionale, producendo anche per ogni relazione nel modello relazionale il numero di istanze. 2) Esprimere il carico applicativo nella modalità semplificata della metodologia MS. 3) Condurre la progettazione adottando la metodologia MS. 3.1) Progetto della frammentazione 3.2) Allocazione non ridondante 3.3) Allocazione ridondante 3.4) Ricostruzione degli schemi locali 4) Tradurre gli schemi locali Entità Relazione esito del passo 3 nel modello relazionale. 5) Nella ipotesi che le due metodologie arrivino a schemi relazionali diversi, cercare di ragionare sul perchè
1) Traduzione schema globale ER in Relazionale
7 Schema globale ER Volo Numero Data Gate Ritardo Mappa posti Posti disponibili Aeroporto Identificatore (Acronimo) Citta’ Area Da A Passeggero Nome Telefono Prenotaz. Check in Numero posto Cod. Bagaglio Classe Ora partenza Ora arrivo Pas Aer Volo
Schema globale relazionale Aer(idA, città, area) -> 40 istanze Volo(numV, dataV, gate, rit, mP, pDisp, idAP, oraP, idAA, oraA) -> istanze Pas(noP, tel, numV, dataV, classe, numPo, codB) -> istanze Nomi poco espressivi….. Si assume che un passeggero possa prenotare e fare check in per un solo volo
Schema globale relazionale: note Nello schema ho evidenziato in grassetto gli attributi che sono chiave primaria della relazione e in corsivo le chiavi esterne Nella traduzione ME->MS ho cercato di mantenere lo stesso numero di entità presenti nelle specifiche del caso ME, quindi ho ottenuto 3 relazioni; un’altra alternativa poteva essere quella di creare altre 2 relazioni “Prenotazione” e “Check-in” Ho assunto che ogni passeggero può fare il check-in solo se ha prenotato quel determinato volo I congiuntivi! Bello!!!
2) Carico applicativo semplificato
11 Qui avrei inserito la tavola delle frequenze per operazioni presso i siti Siti /Operazioni123 a b c
12 Operazioni visione per «operazioni» a. Prenota passeggero, effettua una prenotazione, transazione b. Check in passeggero, effettua il check in di un passeggero quando arriva all’aeroporto, transazione c. Partenze dei prossimi trenta voli, fornisce una report dei prossimi 30 voli che partono da un aeroporto, interrogazione
Operazione a: attributi utilizzati Input: Pas = noP, tel; Volo = dataV, idAP, oraP, idAA, oraA Letti: Volo = numV, dataV, pDisp Scritti: Volo = pDisp; Pas = classe, numV, dataV Dico nome e tel del passeggero che vuole prenotare il volo + data, ora di part/ar e aeroporto part/ar; verranno letti num e data del volo e, se ci sono abbastanza posti disponibili, allora aggiornerà il campo e assegnerà il volo al passeggero scrivendone anche la classe Nella visione “pre web” e’ l’operatore che invoca la transazione E quindi sa gia’ il codice dell’aeroporto, e non coinvolge la tabella aeroporto Risparmiando un join.
Operazione b : attributi utilizzati Input: Pas = noP, tel; Volo = numV, data Letti: Volo = mP; Pas = classe Scritti: Volo = mP; Pas = numPo, codB Dico nome e tel del passeggero che deve fare il check-in + num e data del volo da lui prenotato; verranno letti la classe del passeggero e la mappa dei posti e, in base a questi, gli verrà assegnato un posto e un codice del bagaglio
Operazione c: attributi utilizzati Input: Volo = dataV, idAP, oraP Letti: Volo = numV, dataV, gate, rit, oraP; Pas = noP, tel, numV, dataV, classe Dico data, ora e aeroporto di cui voglio il report; in output avrò numero, data, gate, ritardo e ora di partenza dei prossimi 30 voli + nome, tel e classe dei passeggieri che hanno prenotato quel volo + città e area dell’aeroporto di partenza
Carico applicativo NodoOperazioneFraquenza 1T1a. Pas prenota volo che parte da aer area T1b. Check-in pas in aer area Q1c. Report prossimi 30 voli che partono da aer area T2a. Pas prenota volo che parte da aer area T2b. Check-in pas in aer area Q2c. Report prossimi 30 voli che partono da aer area T3a. Pas prenota volo che parte da aer area T3b. Check-in pass in aer area Q3c. Report prossimi 30 voli che partono da aer area 3100 I punti. Per separare le migliaia…….
3) Progettazione
3.1) Progetto della frammentazione
Progetto della frammentazione Scopo del passo è quello di individuare i frammenti elemnetari da allocare in seguito nei diversi nodi della base di dati distribuita
Individuazione frammenti visitati da Q e T: T1a AerArea1 = aeroporti area 1 VoliDaAerArea1 = voli che partono da aeroporto area 1 Pas = tutti passeggeri possono prenotare un volo PasVoliDaAerArea1AerArea1 ? ?
Individuazione frammenti visitati da Q e T: T1a AerArea1 = POP + PV(idA, area) VoliDaAerArea1 = POS + PV(numV, dataV, pDisp, idAP, oraP, idAA, oraA) Pas = PV(noP, tel, numV, dataV, classe)
Individuazione frammenti visitati da Q e T: T1b AerArea1 = aeroporti area 1 VoliDaAerArea1 = voli che partono da aeroporto area 1 PasDaAerArea1 = passeggeri che partono da aeroporto area 1 PasDaAerArea1VoliDaAerArea1AerArea1
Individuazione frammenti visitati da Q e T: T1b AerArea1 = POP + PV(idA, area) VoliDaAerArea1 = POS + PV(numV, dataV, mP, idAP, oraP) PasDaAerArea1 = POS
Individuazione frammenti visitati da Q e T: Q1c AerArea1 = aeroporti area 1 VoliDaAerArea1 = voli che partono da aeroporto area 1 PasDaAerArea1 = passeggeri che partono da aeroporto area 1 PasDaAerArea1VoliDaAerArea1AerArea1 Nei requisiti si parlava solo dei voli, non dei passeggeri …
Individuazione frammenti visitati da Q e T: Q1c AerArea1 = POP VoliDaAerArea1 = POS + PV(numV, dataV, gate, rit, idAP, oraP) PasDaAerArea1 = POS + PV(noP, tel, numV, dataV, classe)
Individuazione frammenti visitati da Q e T: T2a AerArea2 = aeroporti area 2 VoliDaAerArea2 = voli che partono da aeroporto area 2 Pas = tutti passeggeri possono prenotare un volo PasVoliDaAerArea2AerArea2
Individuazione frammenti visitati da Q e T: T2a AerArea2 = POP + PV(idA, area) VoliDaAerArea2 = POS + PV(numV, dataV, pDisp, idAP, oraP, idAA, oraA) Pas = PV(noP, tel, numV, dataV, classe)
Individuazione frammenti visitati da Q e T: T2b AerArea2 = aeroporti area 2 VoliDaAerArea1 = voli che partono da aeroporto area 2 PasDaAerArea2 = passeggeri che partono da aeroporto area 2 PasDaAerArea2VoliDaAerArea2AerArea2
Individuazione frammenti visitati da Q e T: T2b AerArea2 = POP + PV(idA, area) VoliDaAerArea2 = POS + PV(numV, dataV, mP, idAP, oraP) PasDaAerArea2 = POS
Individuazione frammenti visitati da Q e T: Q2c AerArea2 = aeroporti area 2 VoliDaAerArea2 = voli che partono da aeroporto area 2 PasDaAerArea2 = passeggeri che partono da aeroporto area 2 PasDaAerArea2VoliDaAerArea2AerArea2 Perche’ anche passeggeri? Si chiedeva solo dei voli…
Individuazione frammenti visitati da Q e T: Q2c AerArea2 = POP VoliDaAerArea2 = POS + PV(numV, dataV, gate, rit, idAP, oraP) PasDaAerArea2 = POS + PV(noP, tel, numV, dataV, classe)
Individuazione frammenti visitati da Q e T: T3a AerArea3 = aeroporti area 3 VoliDaAerArea3 = voli che partono da aeroporto area 3 Pas = tutti passeggeri possono prenotare un volo PasVoliDaAerArea3AerArea3 ? ?
Individuazione frammenti visitati da Q e T: T3a AerArea3 = POP + PV(idA, area) VoliDaAerArea3 = POS + PV(numV, dataV, pDisp, idAP, oraP, idAA, oraA) Pas = PV(noP, tel, numV, dataV, classe)
Individuazione frammenti visitati da Q e T: T3b AerArea3 = aeroporti area 3 VoliDaAerArea3 = voli che partono da aeroporto area 3 PasDaAerArea3 = passeggeri che partono da aeroporto area 3 PasDaAerArea3VoliDaAerArea3AerArea3
Individuazione frammenti visitati da Q e T: T3b AerArea3 = POP + PV(idA, area) VoliDaAerArea3 = POS + PV(numV, dataV, mP, idAP, oraP) PasDaAerArea3 = POS
Individuazione frammenti visitati da Q e T: Q3c AerArea3 = aeroporti area 3 VoliDaAerArea3 = voli che partono da aeroporto area 3 PasDaAerArea3 = passeggeri che partono da aeroporto area 3 PasDaAerArea1VoliDaAerArea1AerArea1
Individuazione frammenti visitati da Q e T: Q3c AerArea3 = POP VoliDaAerArea3 = POS + PV(numV, dataV, gate, rit, idAP, oraP) PasDaAerArea3 = POS + PV(noP, tel, numV, dataV, classe)
Tabella frammenti elementari visione per operazioni & frammenti NodoOp./FreqTipo framRel coinvolteFram coinvolti 1T1a/10000OP + OS + VAer, Volo, PasAerArea1, VoliDaAerArea1, Pas 1T1b/8000OP + OS + VAer, Volo, PasAerArea1, VoliDaAerArea1, PasDaAerArea1 1Q1c/100OP + OS + VAer, Volo, PasAerArea1, VoliDaAerArea1, PasDaAerArea1 2T2a/20000OP + OS + VAer, Volo, PasAerArea2, VoliDaAerArea2, Pas 2T2b/12000OP + OS + VAer, Volo, PasAerArea2, VoliDaAerArea2, PasDaAerArea2 2Q2c/120OP + OS + VAer, Volo, PasAerArea2, VoliDaAerArea2, PasDaAerArea2 3T3a/10000OP + OS + VAer, Volo, PasAerArea3, VoliDaAerArea3, Pas 3T3b/8000OP + OS + VAer, Volo, PasAerArea3, VoliDaAerArea3, PasDaAerArea3 3Q3c/100OP + OS + VAer, Volo, PasAerArea3, VoliDaAerArea3, PasDaAerArea3 Frammentazioni un po’ ridondanti!
Frammenti individuati 1.AerArea1 2.VoliDaAerArea1 3.PasDaAerArea1 4.AerArea1 5.VoliDaAerArea1 6.PasDaAerArea1 7.AerArea1 8.VoliDaAerArea1 9.PasDaAerArea1 Non c’e’ P “intera” corretto!
3.2) Allocazione non ridondante
Allocazione non ridondante Lo scopo di questa fase è associare ad ogni nodo i frammenti in modo non ridondante, basandomi sul carico applicativo I frammenti elementari individuati dovranno essere assegnati al nodo che lo utilizza più spesso In questo mono verranno minimizzati i trasferimenti tra nodi dovuti a interrogazioni o transazioni
Assegnazione frammenti ai nodi qui la «visione» e’ per frammenti FrOpNodiFN1FN2FN3As AerArea1T1a, T1b, Q1c VoliDaAerArea1T1a, T1b, Q1c PasDaAerArea1T1a, T1b, Q1c, T2a, T3a1, 2, AerArea2T2a, T2b, Q2c VoliDaAerArea2T2a, T2b, Q2c PasDaAerArea2T2a, T2b, Q2c, T1a, T3a1, 2, AerArea3T3a, T3b, Q3c VoliDaAerArea3T3a, T3b, Q3c PasDaAerArea3T3a, T3b, Q3c, T1a, T2a1, 2, Frequenze su passeggero dovute alla scelta precedente di permettere a tutti I passeggeri di fare prenotazioni da tutti e tre I nodi NB scelta molto web oriented
Assegnazione frammenti ai nodi Rete 3. Sud = Atlanta 1. Ovest = Denver 2. Nord = New York AerArea1 VoliDaAerArea1 AerArea2 AerArea3 VoliDaAerArea2 VoliDaAerArea3 PasDaAerArea1 PasDaAerArea2 PasDaAerArea3 PasDaAerArea2 PasDaAerArea1 Riportati anche I potenziali da Ridondare: bene!
3.3) Allocazione ridondante
Allocazione ridondante Lo scopo di questo passo è di duplicare i frammenti, attualmente presenti in un solo nodo, anche in altri nodi La duplicazione va eseguita solo quando i risparmi superano i maggiori costi Seleziono il nodo i per cui è massima la differenza: risparmi(i) - costi(i)
Costi - benefici Frammenti che potrebbero essere allocati in modo ridondante: PasDaAerArea1, PasDaAerArea2, PasDaAerArea3 sui nodi 1 e 3 Noto che le transazioni sono molte di più rispetto alle interrogazioni quindi si può dedurre che i costi di aggiornamento delle varie tabelle distribuite, se si decidesse di duplicare, sarebbero troppo elevati se si decidesse di duplicare i dati. Di conseguenza non conviene replicare i frammenti Preferirei non dedurre ma calcolare……anche perche’ trasferire (Interrogazioni) costa di piu’ che aggiornare
Schema finale Rete 3. Sud = Atlanta 1. Ovest = Denver 2. Nord = New York AerArea1 VoliDaAerArea1 AerArea2 AerArea3 VoliDaAerArea2 VoliDaAerArea3 PasDaAerArea1 PasDaAerArea2 PasDaAerArea3
3.4) Ricostruzione degli schemi locali
Ricostruzione degli schemi locali Come ultimo passo bisogna ricostruire gli schemi locali come unione di tutti i frammenti associati al corrispondente sito ottenuti nei passi precedenti
50 VoliDaAerArea1 AerArea1 Prenotaz. Check in VoliDaAerArea1 AerArea2 Prenotaz. Check in VoliDaAerArea3 AerArea3 Prenotaz. Check in Nodo1 Nodo 2 Nodo 3 PasDaAerArea1 PasDaAerArea2 PasDaAerArea3 Da A A A A A A3
Schema relazionale AerArea1(idA, città, area) AerArea2(idA, città, area) AerArea3(idA, città, area) VoliDaAerArea1(numV, dataV, gate, rit, mP, pDisp, idAP, oraP, idAA, oraA) VoliDaAerArea2(numV, dataV, gate, rit, mP, pDisp, idAP, oraP, idAA, oraA) VoliDaAerArea3(numV, dataV, gate, rit, mP, pDisp, idAP, oraP, idAA, oraA) Pas(noP, tel, numV, dataV, classe, numPo, codB)
Risultato Nello schema ottenuto abbiamo che: 1)Gli aeroporti sono allocati nei 3 nodi in base all’area in cui si trovano 2)I voli sono distribuiti in base all’area in cui si trova l’aeroporto di partenza 3)I passeggeri sono tutti allocati nel nodo di New York I primi 2 punti rispettano il principio di località, mentre il terzo no. Con questa soluzione le operazioni dei nodi 1 e 3 sui passeggeri risulteranno meno efficienti, ma se avessi scelto di duplicare la tabella Passeggeri anche negli altri 2 nodi avrei avuto notevoli problemi di allineamento dei dati
4) Traduzione schemi locali ER nel modello relazionale
54 Volo1 Aeroporto1 Prenotaz. Check in Volo2 Aeroporto2 Prenotaz. Check in Volo3 Aeroporto3 Prenotaz. Check in Sito 1 Sito 2 Sito 3 Passeggero 1u Passeggero 4u Passeggero 5u Passeggero 7 Passeggero 2u Passeggero 4u Passeggero 6u Passeggero 7 Da A A A Passeggero 3u Passeggero 5u Passeggero 6u Passeggero 7 A A A3
Schema relazionale Aeroporto1(idA, città, area) Aeroporto2(idA, città, area) Aeroporto3(idA, città, area) Volo1(numV, dataV, gate, rit, mP, pDisp, idAP, oraP, idAA, oraA) Volo2(numV, dataV, gate, rit, mP, pDisp, idAP, oraP, idAA, oraA) Volo3(numV, dataV, gate, rit, mP, pDisp, idAP, oraP, idAA, oraA) Passeggero1(noP, tel, numV, dataV, classe, numPo, codB) Passeggero2(noP, tel, numV, dataV, classe, numPo, codB) Passeggero3(noP, tel, numV, dataV, classe, numPo, codB) Passeggero4(noP, tel, numV, dataV, classe, numPo, codB) Passeggero5(noP, tel, numV, dataV, classe, numPo, codB) Passeggero6(noP, tel, numV, dataV, classe, numPo, codB) Passeggero7(noP, tel, numV, dataV, classe, numPo, codB)