esempio di soluzione File - e-Learning

Transcript

esempio di soluzione File - e-Learning
Sistema gestione interventi in
caso di neve
Simone Fontana
712638
Sebastiano Bassani 718583
Il Problema
Si richiede la progettazione di un sistema per la gestione degli
interventi in caso di emergenza neve.
● La struttura operativa comprende:
1. Un Centro di Coordinamento (CC).
2. Un Centro di Quartiere (CQ) per ogni quartiere della città.
3. Squadre di Quartiere (SQ) di spalatori, ciascuna con un Responsabile
di Squadra (RS). Le SQ sono permanentemente assegnate ai quartieri
e controllate dal CQ competente.
4. Mezzi Antineve (MA). I MA sono controllati da CC.
5. Un sistema esterno preesistente per la gestione dei mezzi pubblici
(GP), che è in grado di rilevare la regolarità dei transiti dei mezzi e di
segnalare eventuali situazioni di emergenza (blocco del mezzo)
indicando la via in cui un’anomalia si verifichi. GP si appoggia su una
mappa cartografica della città.
6. Vi è inoltre un sistema esterno preesistente per le previsioni meteo
(PM), che è accessibile attraverso un servizio web.
Il Problema
● Un centro di coordinamento CC che ha il compito di:
1. Allertare entro le ore 24 di ogni giorno, in base alle previsioni meteo,
CQ e MA, pianificando le attività dei MA.
2. Rivedere in tempo reale le attività dei MA, a fronte di segnalazioni di
emergenza provenienti da GP o da CQ.
3. Comunicare a Enti esterni (servizio sanitario, forze dell’ordine,
protezione civile) l’insorgere di eventuali situazioni di emergenza
grave.
● Ogni Centro di Quartiere CQ ha il compito di:
1. Pianificare dinamicamente le attività delle SQ in base alla situazione di
specifiche vie rilevata dai RS, alla pianificazione dei MA e all’insorgere
di situazioni di emergenza.
2. Interagire con i RS per comunicare la pianificazione e per acquisire
informazioni sullo stato della viabilità e sulla presenza di eventuali
situazioni di emergenza.
Assunzioni
● L'emergenza neve inizia con l'arrivo di un bollettino meteo
che annunci neve e con la pianificazione delle attività. A
partire dal quel momento la pianificazione viene aggiornata
ad intervalli temporali prefissati e al sorgere di situazioni
particolarmente gravi.
● L'algoritmo di pianificazione degli MA utilizza le seguenti
informazioni:
○ Il bollettino meteo
○ Posizione degli MA
○ Tipologia degli MA
○ Segnalazioni Aperte
○ Il lavoro che attualmente stanno svolgendo e il tempo
stimato di completamento
● Nel caso particolare della prima pianificazione, vengono
utilizzati solamente:
○ Tipologia degli MA (si presuppone che siano tutti in
deposito)
Assunzioni
● L'algoritmo di pianificazione delle SQ utilizza le stesse
informazioni ad eccezione della tipologia degli MA. Inoltre
necessita anche della composizione delle varie squadre
● Dato che gli algoritmi di pianificazione sono generalmente
piuttosto lenti e che le emergenze vanno risolte nel minor
tempo possibile, è stata introdotta una "pianificazione
urgente". Questa, tenendo conto della pianificazione
corrente, assegna risorse per la risoluzione dell'emergenza.
● Si presuppone che, dovendo ripianificare una sola attività e
avendo già a disposizione una pianificazione, sia molto più
veloce di quella ordinaria.
● I MA si possono guastare, in tal caso lo segnalano al CC
Assunzioni
● I centri di quartiere iniziano la pianificazione non appena ne
ricevono una nuova dal CC. Anche loro possono effettuare
una "pianificazione urgente".
● In caso di emergenza, solamente i CQ interessati effettuano
la ripianificazione.
Assunzioni
● Le segnalazioni possono riguardare situazioni di differente
gravità.
● I livelli di gravità massimi sono definiti "Emergenza" e
"Emergenza Grave"
● Per "Emergenza" si intende una situazione che deve essere
risolta in breve tempo
● Per "Emergenza Grave" si intende una situazione che deve
essere risolta in breve tempo e che necessita dell'intervento
anche di enti esterni
● Entrambe, data la loro urgenza, necessitano sempre
dell'intervento di Mezzi Antineve
● Il GP è in grado di segnalare al nostro sistema
un'emergenza
● Ciascun centro di quartiere può avere più squadre di
quartiere
Architettura Software
Who & Where
Who & Where
What
How, Why, When - Controllo Meteo e
Pianificazione
How, Why, When - Pianificazione MA
How, Why, When - Pianificazione SQ
How, Why, When - Segnalazione RS
How, Why, When - Segnalazione a CC
How, Why, When - Comunicazioni MA
How, Why, When - Comunicazioni RS
Architettura Logica
Architettura Logica
Architettura Logica
Architettura Logica
Architettura Concreta
Architettura Concreta
Architettura Concreta
Architettura Concreta
Architettura Concreta
Architettura Concreta
Architettura Concreta
Architettura di Deployment - Soluzione 1
Architettura di Deployment - Soluzione 2
Infrastruttura Hardware
Collegamento tra RS e CQ
Il collegamento potrebbe avvenire tramite due diverse
tecnologie:
● Sfruttando la rete UMTS
● Costruendo una rete WiFi Mesh
Vediamo i vantaggi e gli svantaggi di queste soluzioni
Rete UMTS
Bitrate: 2 Mb/s (in pratica è generalmente più basso)
Vantaggi:
● Nessuna infrastruttura da costruire
Svantaggi:
● E' una rete pubblica e potrebbe intasarsi
● Se, a causa di fortissime nevicate, dovessero esserci dei
guasti all'infrastruttura, il sistema sarebbe pesantemente
compromesso
● Bisogna pagare un operatore
● Non tutte le città italiane sono ben coperte
Rete WiFi Mesh
Si tratta di coprire tutta la città tramite una rete Wifi (802.11.n)
costituita da tanti hotspot (ad esempio posizionati sui semafori)
che comunicano tra di loro. La soluzione è già stata adottata da
altre città per esigenze analoghe. In alcuni casi, per estendere
la copertura, sono stati installati degli hotspot anche su dei
veicoli.
Vantaggi:
● Molto veloce (54 Mb/s)
● In caso di guasto ad un hotspot la rete non viene
interamente compromessa
Svantaggi:
● Infrastruttura costosa
Si è optato per la seconda soluzione per via della sua estrema
robustezza e affidabilità (caratteristiche molto importanti per un
sistema di gestione di emergenze).
Si noti che la stessa rete potrebbe venir condivisa con altri enti
(polizia, 118, protezione civile), in modo da suddividere il costo
di installazione.
Se nella città fosse già presente una rete wifi municipale si
potrebbe usare (al limite espandendone la copertura) quella.
Tropos 1410
Wireless Mesh
Router & Bridge
Ad Oklahoma City l'infrastruttura è costata 5 milioni
di dollari per una superficie di 1437 Km^2. Si noti
che Milano ha una superficie di 181 Km^2, mentre
Roma di 1285 Km^2.
Collegamento tra MA e CC
Avviene tramite la stessa rete utilizzata dagli RS
Device
Sia RS che MA avranno uno smartphone, dotato di Wifi e GPS,
sul quale verrà installata l'applicazione mediante la quale
possono essere fatte segnalazioni, si può comunicare l'inizio o
la conclusione di un task e sul quale riceveranno la
pianificazione.
L'applicazione non è particolarmente esigente in termini di
risorse, quindi si può optare anche per modelli economici.
Una caratteristica da tenere in considerazione, invece, è la
durata della batteria.
Samsung GT-5570 con Android 2.2.1
99 euro
Samsung GT-B5510 con Android 2.3.5
129 euro
Collegamento tra CQ e CC
● Si può sfruttare la stessa rete Wifi
● Alcune alternative possono essere:
○ Ponti radio
○ Una VPN
I Server
Nel CC e in ogni CQ sarà presente un server (o un cluster di
servers) su cui risiederanno il gestore della comunicazione e
della pianificazione, oltre ai vari datastore. Questi componenti
saranno installati ciascuno su una diversa macchina virtuale.
Per la virtualizzazione si è scelto di usare l'Hypervisor Xen,
dato che permette di ottenere prestazioni molto vicine a quelle
che si otterrebbero in assenza di virtualizzazione ma, allo
stesso tempo, permette di effettuare il load balancing e di
tenere separate le varie componenti applicative.
Alcune considerazioni...
● E' necessario che la pianificazione venga effettuata nel
minor tempo possibile (soprattutto quella di emergenza)
● Gli algoritmi di pianificazione sono generalmente
abbastanza lenti e "affamati" di risorse
● Scegliere dei server adeguati è quindi di fondamentale
importanza per il sistema
● Purtroppo è impossibile farlo senza conoscere l'algoritmo di
pianificazione
● Vengono comunque fornite delle soluzioni a scopo di
esempio
Base:
PowerEdge M710 Blade Server
Processore:
Intel Xeon X5690, 6C, 3.46GHz, 12M Cache, 6.40GT/s, 130W TDP, Turbo, HT,
DDR3-1333MHz
Processore aggiuntivo:
Intel Xeon X5690, 6C, 3.46GHz, 12M Cache, 6.40GT/s, 130W TDP, Turbo, HT,
DDR3-1333MHz
Memoria:
64GB Memory for 2 CPUs, DDR3, 800MHz (16x4GB Single Ranked LV RDIMMs),
Using 1333MHz DIMMs
Configurazione dei dischi rigidi:
C6 - RAID 5 using CERC 6, 3-4 SAS HDDs
Primo disco rigido:
300GB, SAS 6Gbps, 2.5-in, 10K RPM Hard Drive (Hot Plug) x 5
Tipo di NIC incorporata (fabric A):
Embedded Four Port Ethernet Gigabit Controller with 4P TOE and iSCSI Offload
for Fabric A
Costo:
6753 €
Base:
PowerEdge M710 Blade Server
Processore:
Intel Xeon X5690, 6C, 3.46GHz, 12M Cache, 6.40GT/s, 130W TDP, Turbo, HT,
DDR3-1333MHz
Memoria:
24GB Memory for 1 CPU, DDR3, 1333MHz (6x4GB Single Ranked LV RDIMMs)
Configurazione dei dischi rigidi:
C6 - RAID 5 using CERC 6, 3-4 SAS HDDs
Primo disco rigido:
146GB, SAS 6Gbps, 2.5-in, 10K RPM Hard Drive (Hot Plug) x 5
Tipo di NIC incorporata (fabric A):
Embedded Four Port Ethernet Gigabit Controller with 4P TOE and iSCSI Offload
for Fabric A
Costo:
4238 €
Scegliendo una CPU meno performante e rinunciando al RAID il
costo scende a 1829 €
Intel Xeon E5620, 4C, 2.40GHz, 12M Cache, 5.86GT/s, 80W TDP, Turbo,
HT, DDR3-1066MHz
Interazione con gli utenti e relativi levelli
di servizio
Gli utenti del sistema quali operatori sul campo RS e operatori sul mezzo MA
utilizzeranno un'applicazione sul dispositivo smartphone. (Es. applicazione
Android)
La robustezza del sistema viene garantita dall'utilizzo di dischi rigidi configurati
in RAID, dalla presenza di ridondanza per alcuni dati del db e dalla rete WiFi
Mesh.
I tempi di risposta, per quanto riguarda le segnalazioni, sono pesantemente
dipendenti dalla congestione della rete. Per questo motivo si è optato per una
rete dedicata che dovrebbe garantire, anche nella peggiore delle situazioni, dei
tempi molto brevi (secondi).
Per quanto riguarda il calcolo della pianificazione, i tempi di risposta dipendono
molto dall'hardware e dalla quantità di segnalazioni.
Per venire incontro alla necessità di interventi rapidi è stata introdotta la
"pianificazione urgente"
Architettura Database
Lo smartphone, per trasmettere i dati sulle segnalazioni al CQ
o al CC, usa il formato XML
<?xml version="1.0" encoding="UTF-8" ?>
<segnalazione>
<tipo>Forte accumulo di neve</tipo>
<gravità>6</gravità>
<posizione>
<via>Via San Marco</via>
<civico>16</civico>
</posizione>
<timestamp>04:01:1012:13:43</timestamp>
</segnalazione>
Inoltre ricevono la pianificazione a loro relativa in formato XML
<?xml version="1.0" encoding="UTF-8" ?>
<pianificazione timestamp="03:02:2012:14:56">
<task>
<descrizione>Descrizione del task 1</descrizione>
<posizione>
<via>Viale Sarca</via>
<civico>43</civico>
</posizione>
<durata>01:20</durata>
</task>
<task>
<descrizione>Descrizione del task 2</descrizione>
<posizione>
<via>Piazza della Scienza</via>
<civico>2</civico>
</posizione>
<durata>00:30</durata>
</task>
</pianificazione>
Assunzioni e Premesse
● Il sistema per la gestione degli interventi in caso di neve
(SN) contiene tutte le vie della città
● Il sistema GP contiene informazioni relative alla città in cui
installeremo il sistema
● I due sistemi SN e GP sono integrati tramite VDI (Virtual
Data Integration)
● Il mapping tra lo schema globale e gli schemi locali sarà un
GAV (Global As View)
Schema concettuale SN
Schema logico relazionale SN
Campi chiave: sottolineati.
Campi chiavi esterne: colore blu.
Task ( Id, Descrizione, Stato, Durata, OraInizio, Ordine,
IdPianificazione, IdSQ, IdMA, IdSegnalazione )
Segnalazione ( Id, Tipo, Stato, Gravità, Timestamp)
SegnalazioneChiusa ( idSegnalazione) // Chiave primaria ed
esterna
PosizioneSegnalazione ( IdSegnalzione, IdStrada, Civico)
PosizioneTask ( IdTask, IdStrada, Civico )
Schema logico relazionale SN
Quartiere ( Id, nome )
Strada ( Nome, Tipologia, IdQuartiere )
SQ ( Id, NomeRS, CognomeRS, IdQuartiere)
MA ( Id, Tipo, Stato )
Pianificazione ( Id, Timestamp, IdQuartiere) //Se idQuartiere è
null allora la Pianificazione è di MA
Dettaglio schema logico relazionale SN
TASK
POSIZIONESEGNALAZIONE
Id: numerico
Descrizione: string
Stato: boolean - aperto/chiuso
Durata: esperessa in ore e minuti
OraInizio: time
Ordine: numerico
IdPianificazione: numerico//chiave esterna Pianificazione
IdSQ: numerico//chiave esterna SQ
IdMA: string//chiave esterna MA
IdSegnalazione: numerico//chiave esterna Segnalazione
IdSegnalazione: numerico //chiave esterna segnalazione
IdStrada: string //chiave esterna strada
Civico: numerico
POSIZIONETASK
IdTask: numerico
IdStrada: string //chiave esterna strada
Civico: numerico
QUARTIERE
SEGNALAZIONE
Id: numerico
Tipo: string. Es: forti accumuli di neve, leggeri accumuli di neve,
strada ghiacciata, necessario sale, veicolo bloccato, ecc...
Stato: boolean - aperto/chiuso
Gravità: numerico (1-5 segnalazione non emergenza, 6 emergenza,
7 emergenza grave)
Timestamp: time ( gg:mm:yyyy:hh:mm )
SEGNALAZIONECHIUSA
IdSegnalazione: numerico //chiave esterna segnalazione
Id: numerico
nome: string
STRADA
Nome: string
Tipologia: string ( es. vicolo, piazza, una corsia, due corsie )
IdQuartiere: numerico //chiave esterna quartiere
Dettaglio schema logico relazionale SN
SQ
Id: numerico
NomeRS: string
CognomeRS: string
IdQuartiere: numerico//chiave esterna quartiere
MA
Id: string ( è la targa del mezzo antineve )
Tipo: string ( spargisale, spazzaneve...)
Stato: numerico (1- attivo, 2- guasto, 3- in
magazzino )
PIANIFICAZIONE
Id: numerico
Timestamp: time ( gg:mm:yyyy:hh:mm )
IdQuartiere: numerico //Se idQuartiere è null la
Pianificazione è di MA se invece è presente l'Id
del quartiere è del quartiere associato
Schema concettuale GP
Schema logico relazionale GP
Campi chiave: sottolineati.
Campi chiavi esterne: colore blu.
Veicolo (Targa, Tipologia)
Autista (Id, Cognome, Nome)
Ticket (Id, Descrizione, Aperto, Tipologia, Emergenza, Timestamp)
VeicoloBloccato (IdTicket, TargaVeicolo) //Chiavi esterne e chiave
CoordinateGps (Id, Long, Lat)
PosizioneTicket (IdTicket, IdCoordinate)//Chiavi esterne e chiave
Schema logico relazionale GP
Fermata ( Id, Nome )
FermataSiTrova (IdFermata, IdCoordinate)//Chiavi esterne e
chiave
Guida (TargaVeicolo, IdAutista)
CorsaFaFermata (IdCorsa, IdFermata, OraDiPassaggio)
Lista (IdPercorso, IdFermata, Ordine, Inizio, Fine)
Linea (Id, Descrizione)
Percorso (Id, Nome, IdLinea)
Corsa (Id, OraDiPartenza, OraDiArrivo, data, IdPercorso,
TargaVeicolo)
Dettaglio schema logico relazionale GP
VEICOLO
Targa: string
Tipologia: string (tram, autobus, snodato, filobus)
AUTISTA
Id: numerico
Cognome :string
Nome: string
TICKET
IdTicket: numerico
Descrizione: string
Aperto: boolean - true/false
Tipologia: string ( “guasto motore”, “foratura”, “guasto
elettronico” etc )
Emergenza: boolean - true/false
Timestamp: time ( gg:mm:yyyy:hh:mm )
VEICOLOBLOCCATO
IdTicket: numerico// Chiave esterna Ticket
TargaVeicolo: string// Chiave esterna Veicolo
COORDINATEGPS
Id: numerico
Long: gradi, minuti, secondi, char
Lat: gradi, minuti, secondi, char
POSIZIONETICKET
Id: numerico// Chiave esterna Ticket
IdCoordinate: numerico// Chiave esterna CoordinateGps
FERMATA
Id: numerico
Nome: string
FERMATASITROVA
IdFermata: numerico // Chiave esterna Fermata
IdCoordinate: numerico// Chiave esterna CoordinateGps
GUIDA
TargaVeicolo: string// Chiave esterna Veicolo
IdAutista: numerico// Chiave esterna Autista
CORSAFAFERMATA
IdCorsa: numerico// Chiave esterna Corsa
IdFermata: numerico// Chiave esterna Fermata
OraDiPassaggio: time ( gg:mm:yyyy:hh:mm )
LISTA
IdPercorso: numerico// Chiave esterna Percorso
IdFermata: numerico// Chiave esterna Fermata
Ordine: numerico
Inizio: boolean - true/false
Fine: boolean – true/false
Dettaglio schema logico relazionale GP
LINEA
Id: numerico
Descrizione: string
PERCORSO
Id: numerico
Nome: string
IdLinea: numerico// Chiave esterna Linea
CORSA
Id: numerico
OraDiPartenza: time ( gg:mm:yyyy:hh:mm )
OraDiArrivo: time ( gg:mm:yyyy:hh:mm )
data: date (gg:mm:yyyy)
IdPercorso: numerico// Chiave esterna Percorso
TargaVeicolo: string // Chiave esterna Veicolo
Entità integrate: Ma con Veicolo
Tabelle coinvolte:
SN: MA (Id, Tipo, Stato)
MA
Id: string (è la targa del mezzo antineve)
Tipo: string (spargisale, spazzaneve...)
Stato: numerico (1- attivo, 2- guasto, 3- in magazzino)
GP: Veicolo (Targa, Tipologia)
GP: VeicoloBloccato (IdTicket, TargaVeicolo)
VEICOLO
Targa: string
Tipologia: string ( bus di linea urbana, extraurbana, tram, snodato etc)
VEICOLOBLOCCATO
IdTicket: numerico// Chiave esterna Ticket
TargaVeicolo: string// Chiave esterna Veicolo
Mapping GAV tra schema integrato e schemi
locali
( SELECT V.Targa AS Id, V.Tipologia
AS Tipologia, 1
VISTA GLOBALE:
MezzoG (Id, Tipologia, Stato)
CREATE VIEW MezzoG AS
( SELECT V.Targa AS Id, V.Tipologia AS
Tipologia, 2
FROM Veicolo V
JOIN VeicoloBloccato VB ON V.targa =
VB.targa
UNION
FROM Veicolo V
EXCEPT
SELECT V.Targa AS Id, V.Tipologia
AS Tipologia, 1
FROM Veicolo V JOIN VeicoloBloccato
VB ON V.targa = VB.targa ))
UNION
SELECT M.Id AS Id, M.Tipo AS
Tipologia, M.stato AS Stato
FROM MA M
Mapping GAV tra schema integrato e
schemi locali-Strada e CoordinateGPS
VISTA GLOBALE:
StradaG ( Nome, Tipologia, IdQuartiere )
CREATE VIEW StradaG As
SELECT Nome, Tipologia, IdQuartiere
FROM Strada
Assumiamo che il db del SN abbia tutte le vie e i quartieri della
città memorizzati quindi si tratta solamente di un vista sulla
tabella Strada
Entità integrate: PosizioneSegnalazione in
SN e PosizioneTicket in GP
Tabelle coinvolte:
GP: PosizioneTicket (Id, IdCoordinate)
POSIZIONETICKET
Id: numerico //Chiave esterna Ticket
IdCoordinate: numerico //Chiave esterna
CoordinateGps
SN: PosizioneSegnalazione (Idsegnalazione, IdStrada,
Civico)
POSIZIONESEGNALAZIONE
IdSegnalazione: numerico //chiave esterna
segnalazione
IdStrada: string //chiave esterna strada
Civico: numerico
GP: CoordinateGps (Id, Long, Lat)
COORDINATEGPS
Id: numerico
Long: gradi, minuti, secondi, char
Lat: gradi, minuti, secondi, char
Mapping GAV tra schema integrato e schemi
locali
VISTA GLOBALE:
Posizione (Id, IdStrada, Civico)
CREATE VIEW Posizione As
SELECT PS.IdSegnalazione As Id, PS.IdStrada As IdStrada, PS.Civico As Civico
FROM PosizioneSegnalazione PS
UNION
SELECT PT. IdTicket As Id, getStreet ( C.Long, C.Lat ) As IdStrada, getCivico( C.Long, C.Lat
) As Civico
FROM PosizioneTicket PT JOIN CoordinateGps C ON PT.IdCoordinate=C.Id
DOVE:
getStreet e getCivico sono funzioni basate per esempio su servizi XML
quali google place xml oppure google geocoding xml.
Entità integrata: FermataSiTrova da GP
Tabelle coinvolte:
GP: FermataSiTrova (IdFermata, IdCoordinate)
FERMATASITROVA
IdFermata: numerico //Chiave esterna Fermata
IdCoordinate: numerico //Chiave esterna CoordinateGps
GP: CoordinateGps (Id, Long, Lat)
COORDINATEGPS
Id: numerico
Long: gradi, minuti, secondi, char
Lat: gradi, minuti, secondi, char
Mapping GAV tra schema integrato e schemi
locali
VISTA GLOBALE:
Trova (IdFermata, IdStrada)
CREATE VIEW Trova As
SELECT F.IdFermata, getStreet ( C.Long, C.Lat ) As IdStrada,
FROM FermataSiTrova F JOIN CoordinateGps C ON F.
IdCoordinate=C.Id
DOVE:
getStreet, è una funzione basata per esempio su servizi XML
quali google place xml oppure google geocoding xml.
Entità integrate Segnalazione con Ticket
Tabelle coinvolte:
GP: Ticket (Id, Descrizione, Aperto, Tipologia, Emergenza, Timestamp)
SN: Segnalazione (Id, Tipo, Stato, Gravità, Timestamp)
TICKET
IdTicket: numerico
Descrizione: string
Aperto: boolean - true/false
Tipologia: string (“guasto motore”, “foratura”, “guasto elettronico” etc)
Emergenza: boolean - true/false
Timestamp: time (gg:mm:yyyy:hh:mm)
SEGNALAZIONE
Id: numerico
Tipo: string - forti accumuli di neve, leggeri accumuli di neve,strada ghiacciata, necessario
sale, veicolo bloccato, etc...
Stato: boolean - aperto/chiuso
Gravità: numerico (1-5 segnalazione non emergenza, 6 emergenza, 7 emergenza grave)
Timestamp: time (gg:mm:yyyy:hh:mm)
Mapping GAV tra schema integrato e schemi
locali
Vista di supporto:
TicketS ( Id, Descrizione, Aperto, Tipologia, Gravità, Timestamp )
CREATE VIEW TicketS As
SELECT T.Id As Id, T.Descrizione As Descrizione, T.Aperto As Aperto, T.Tipologia As
Tipologia, 6, T.Timestamp As Timestamp
FROM Ticket T
WHERE T.Emergenza=true
UNION
SELECT T.Id As Id, T.Descrizione As Descrizione, T.Aperto As Aperto, T.Tipologia As
Tipologia, 3, T.Timestamp As Timestamp
FROM Ticket T
WHERE T.Emergenza=false
Mapping GAV tra schema integrato e schemi
locali
VISTA GLOBALE:
SegnalazioneG ( Id, Tipo, Stato, Descrizione, Gravità, Timestamp )
Entità/viste coinvolte:
Segnalazione ( Id, Tipo, Stato, Gravità, Timestamp )
TicketS ( Id, Descrizione, Aperto, Tipologia, Gravità, Timestamp )
CRATE VIEW SegnalazioneG As
SELECT S.Id As Id, S.Tipo As Tipo, S.Stato As Stato, Null As Descrizione, S.Gravità As Gravità, S.
Timestamp As timestamp
FROM Segnalazione S
UNION
SELECT T.Id As Id,T.Tipologia As Tipo, T.Aperto As Stato, T.Descrizione As Descrizione,T.Gravità As
Gravità, T.Timestamp As Timestamp
FROM TicketS T
Eterogeneità
Oggetto 1
Oggetto 2
Tipo eterogeneità
Soluzione
MA.Id
Veicolo.Targa
Schema->
Nome->Sinonima
Ridenominazione in
Id
MA.Tipo
Ma.Tipologia
Schema->
Nome->Sinonima
Ridenominazione in
Tipo
Ma.Stato
VeicoloBloccato
Schema->Tipo->Struttura
Scelgo l'attributo
(IdTicket,TargaVeicolo)
Stato e trasformo la
Veicolo.Targa
relazione in attributo
PosizioneSegnalazione.
IdSegnalazione
PosizioneTicket.Id
Schema->
Nome->Sinonima
Ridenominazione in
Id
PosizioneSegnalazione.IdStrada
CoordinateGps (Id,
Long, Lat )
PosizioneTicket.Id
Schema->Tipo:Long e Lat Funzione getStreet
identificano una strada. (Long, Lat) basata su
Schema->
google geocoding e
Nome->Sinonimia
ridenominazione in
Schema->Tipo->struttura
IdStrada
PosizioneSegnalazione.Civico
CoordinateGps (Id,
Long, Lat )
Schema->Tipo:Long e Lat Funzione getCivico
identificano un Civico.
(Long, Lat) basata su
Schema->
google geocoding e
Nome->Sinonimia
ridenominazione in
Civico
Eterogeneità
Oggetto 1
Trova.IdStrada
Oggetto 2
Tipo eterogeneità
Soluzione
CoordinateGps (Id, Schema->Tipo:Long e Lat Funzione getStreet
Long, Lat )
identificano una strada.
(Long, Lat) basata su
FermataSiTrova.
Schema->
google geocoding e
IdCoordinate
Nome->Sinonimia
ridenominazione in
Schema->Tipo->struttura
IdStrada
Ticket.Aperto
Segnalazione.stato
Schema->
Nome->Sinonima
Ridenominazione in
Stato
Ticket.Tipologia
Segnalazione.Tipo
Schema->
Nome->Sinonima
Ridenominazione in
Tipo
Ticket.Emergenza
Segnalazione.
Gravità
Schema->Tipo->dominio
Schema->
Nome->Sinonima
Se c'è emergenza
diventa gravità = 6
altrimenti se non c'è
emergenza diventa
gravità = 3 e
ridenominazione in
Gravità
Schema concettuale integrato
Schema logico relazionale integrato
SegnalazioneG ( Id, Tipo, Stato, Descrizione, Gravità,
Timestamp )
Trova (IdFermata, IdStrada)
Posizione (Id, IdStrada, Civico)
StradaG (Nome, Tipologia, IdQuartiere)
MezzoG (Id, Tipologia, Stato)
Dettaglio schema logico relazionale
integrato
SEGNALAZIONEG
TROVA
Id: numerico
Tipo: string ( “guasto motore”, “foratura”, “guasto elettronico”, "forti accumuli di neve",
"leggeri accumuli di neve" etc )
Stato: boolean - aperto/chiuso
Descrizione: string
Gravità: numerico (1-5 emergenza non grave, 6 emergenza, 7 emergenza grave)
Timestamp: time ( gg:mm:yyyy:hh:mm )
IdFermata :numerico
IdStrada : string
STRADAG
Nome: string
Tipologia: string ( es. vicolo, piazza, viale, una carreggiata, due corsie )
IdQuartiere: numerico
MEZZOG
Id: string
Tipologia: string ( spargisale, spazzaneve, tram, autobus, snodato, filobus etc )
Stato: numerico (1- attivo, 2- guasto, 3- in magazzino )
POSIZIONE
Id: numerico
IdStrada: string
Civico: numerico
Tabella delle frequenze
Operazione
Tabelle coinvolte
Frequenza
Pianificazione CC - CQ
Pianificazione,Task,
SegnalazioneG,
PosizioneTask,
PosizioneSegnalazione,
MezzoG
32/g
Pianificazione urgente
CC - CQ
Pianificazione,Task
PosizioneTask,
MezzoG
9/g
Segnalazione RS
SegnalazioneG,
PosizioneSegnalazione
540/g
Aggiornamento Task
iniziato - finito RS
Task,SegnalazioneG,
SegnalazioneChiusa
2880/g
Aggiornamento Task
iniziato - finito MA
Task,SegnalazioneG,
SegnalazioneChiusa
3200/g
Ipotizzando 9 quartieri con 20 squadre in media per quartiere
dislocati su una superfiecie di circa 180 Km^2 (Es. Milano)
Vantaggi - Svantaggi distribuzione base
di dati
La distribuzione della base dati nei centri di quartiere piuttosto che nel centro di coordinamento dipende
sia dall'architettura di deployment sia dalle frequenze con il quale un utente accede ad una o ad un
gruppo di tabelle, sia dai livelli di servizio che vogliamo garantire o sono richiesti, sia dall'infrastruttura di
telecomunicazione di supporto e dal budget a disposizione.
I fattori che nel nostro caso hanno più peso sono relativi all'architettura di deployment, i livelli di servizio
intesi come continuità di operatività in caso di guasto temporaneo della linea di telecomunicazione e di
conseguenza la relativa infrastruttura.
Una possibile distribuzione che qualitativamente è un buon compromesso tra i fattori sopra citati è la
seguente:
Tabella Segnalazione:
Il CC contiene la tabella con tutte le segnalazioni in quanto gli servono per la pianificazione,
mentre nei CQ troviamo la stessa tabella con le sole segnalazioni relative in quanto servono per la
pianificazione del quartiere che non verrebbe ritardata in caso di caduta temporanea della linea di
trasporto dati con il CC.
Le tabelle Segnalazione chiusa e PosizioneSegnalazione vengono trattate nello stesso modo della
tabella Segnalazione per le medesime motivazioni.
Vantaggi - Svantaggi distribuzione base
di dati
Tabella Quartiere:
Verrà posizionata nel CC
Tabella Pianificazione:
Si opererà una frammentazione orizzontale in modo da avere la pianificazione degli MA nel CC, mentre
quelle delle SQ nei CQ
Tabella MA:
Rimarrà nel CC
Tabella SQ:
Verrà frammentata orizzontalmente in maniera da avere i dati di una SQ nel CQ relativo
Tabella Task e posizione Task:
Anche in questo caso verrà effettuato un partizionamento orizzontale in modo da avere i Task e le
posizioni dei Task relativi agli MA nel CC, mentre quelli relativi alle SQ si troveranno nei rispettivi CQ
Vantaggi - Svantaggi distribuzione base
di dati
Tabella strada:
E' preferibile una tabella generale contenenti tutte le vie in CC e una tabella Strada per
ogni quartiere con le sole vie relative al quartiere in quanto i dati relativi al quartiere sono
direttamente accessibili alle attività del quartiere e i dati nel CC direttamente accessibili
dalle relative attività garantendo un maggior livello di robustezza con poco sforzo (infatti,
trattandosi di una tabella "statica" non si pone il problema di sincronizzare i vari dati).
Query 1
Si vuole sapere il numero di segnalazioni aperte per via.
SELECT ST.Nome, Count ( * )
FROM ( SegnalazioneG S JOIN Posizione P ON S.Id=P.Id ) SP
JOIN StradaG ST ON ST.Nome=SP.IdStrada
WHERE SP.Stato = true
GROUP BY ST.Nome
SegnalazioneG ( Id, Tipo, Stato, Descrizione, Gravità, Timestamp)
Posizione ( Id, IdStrada, Civico )
StradaG ( Nome, Tipologia, IdQuartiere )
TicketS ( Id, Descrizione, Aperto, Tipologia, Gravità, Timestamp )
Unfolding della query 1
SELECT ST.Nome, Count ( * )
FROM ( ( SELECT SE.Id As Id, SE.Tipo As Tipo, SE.Stato As Stato, Null As Descrizione, SE.Gravità As Gravità, SE.
Timestamp As timestamp
FROM Segnalazione SE
UNION
SELECT TI.Id As Id, TI.Tipologia as Tipo, TI.Aperto As Stato, TI.Descrizione As Descrizione,TI.Gravità As Gravità, TI.
Timestamp As Timestamp
FROM (
SELECT T.Id As Id, T.Descrizione As Descrizione, T.Aperto As Aperto, T.Tipologia As Tipologia, 6, T.Timestamp As
Timestamp
FROM Ticket T
WHERE T.Emergenza = true
UNION
SELECT T.Id As Id, T.Descrizione As Descrizione, T.Aperto As Aperto, T.Tipologia As Tipologia, 3, T.Timestamp As
Timestamp
FROM Ticket T
WHERE T.Emergenza = false ) TI ) S
Unfolding della query 1
JOIN
( SELECT PS.IdSegnalazione As Id, PS.IdStrada As IdStrada, PS.Civico As Civico
FROM PosizioneSegnalazione PS
UNION
SELECT PT. IdTicket As Id, getStreet ( C.Long, C.Lat ) As IdStrada, getCivico( C.Long, C.Lat ) As Civico
FROM PosizioneTicket PT JOIN CoordinateGps C ON PT.IdCoordinate = C.Id ) P
ON S.Id = P.Id ) SP
JOIN
( SELECT Nome, Tipologia, IdQuartiere
FROM Strada ) ST
ON ST.Nome = SP.IdStrada
WHERE SP.Stato = true
GROUP BY ST.Nome
Query 2
Si vuole identificare i mezzi che si sono guastati che hanno un task ancora
aperto e la relativa via
SELECT M.Id, M.Tipologia, S.Nome As Strada
FROM (( MezzoG M JOIN Task T ON T.IdMa=M.Id ) MT JOIN
PosizioneTask P ON MT.Id=P.IdTask ) MTP JOIN StradaG S
ON MTP.IdStrada = S.Nome
WHERE M.Stato=2 AND T.Stato=true
VISTE-TABELLE COINVOLTE:
MezzoG (Id, Tipologia, Stato)
Task ( Id, Descrizione, Stato, Durata, OraInizio, Ordine, IdPianificazione, IdSQ, IdMA, IdSegnalazione )
PosizioneTask ( IdTask, IdStrada, Civico )
StradaG ( Nome, Tipologia, IdQuartiere )
Unfolding della query 2
SELECT MZ.Id, MZ.Tipologia, S.Nome As Strada
FROM (((( SELECT V.Targa AS Id, V.Tipologia AS Tipologia, 2
FROM Veicolo V JOIN VeicoloBloccato VB ON V.targa = VB.targa
UNION
( SELECT V.Targa AS Id, V.Tipologia AS Tipologia, 1
FROM Veicolo V
EXCEPT
SELECT V.Targa AS Id, V.Tipologia AS Tipologia, 1
FROM Veicolo V JOIN VeicoloBloccato VB ON V.targa = VB.targa ))
UNION
Unfolding della query 2
SELECT M.Id AS Id, M.Tipo AS Tipologia, M.stato AS Stato
FROM MA M ) MZ
JOIN Task T ON T.IdMa = MZ.Id ) MT
JOIN PosizioneTask P ON MT.Id=P.IdTask ) MTP
JOIN
( SELECT Nome, Tipologia, IdQuartiere
FROM Strada) S ON MTP.IdStrada = S.Nome
WHERE MZ.Stato = 2 AND T.Stato = true
Query 3
Si vuole elencare tutte le segnalazioni aperte per un determinato quartiere (
IdQuartiere = 1 )
SELECT *
FROM ( SegnalazioneG S JOIN Posizione P ON S.Id = P.Id )
SP JOIN StradaG ST ON ST.Nome = SP.IdStrada
WHERE SP.Stato = true AND ST.IdQuartiere=1
SegnalazioneG ( Id, Tipo, Stato, Descrizione, Gravità, Timestamp)
Posizione ( Id, IdStrada, Civico )
StradaG ( Nome, Tipologia, IdQuartiere )
TicketS ( Id, Descrizione, Aperto, Tipologia, Gravità, Timestamp )
Unfolding della query 3
SELECT *
FROM ( ( SELECT SE.Id As Id, SE.Tipo As Tipo, SE.Stato As Stato, Null As Descrizione, SE.Gravità As Gravità, SE.Timestamp
As timestamp
FROM Segnalazione SE
UNION
SELECT TI.Id As Id, TI.Tipologia as Tipo, TI.Aperto As Stato, TI.Descrizione As Descrizione,TI.Gravità As Gravità, TI.
Timestamp As Timestamp
FROM (
SELECT T.Id As Id, T.Descrizione As Descrizione, T.Aperto As Aperto, T.Tipologia As Tipologia, 6, T.Timestamp As Timestamp
FROM Ticket T
WHERE T.Emergenza = true
UNION
SELECT T.Id As Id, T.Descrizione As Descrizione, T.Aperto As Aperto, T.Tipologia As Tipologia, 3, T.Timestamp As Timestamp
FROM Ticket T
WHERE T.Emergenza = false ) TI ) S
Unfolding della query 3
JOIN
( SELECT PS.IdSegnalazione As Id, PS.IdStrada As IdStrada, PS.Civico As Civico
FROM PosizioneSegnalazione PS
UNION
SELECT PT. IdTicket As Id, getStreet ( C.Long, C.Lat ) As IdStrada, getCivico( C.Long, C.Lat ) As Civico
FROM PosizioneTicket PT JOIN CoordinateGps C ON PT.IdCoordinate = C.Id ) P
ON S.Id = P.Id ) SP
JOIN
( SELECT Nome, Tipologia, IdQuartiere
FROM Strada ) ST
ON ST.Nome = SP.IdStrada
WHERE SP.Stato = true AND ST.IdQuartiere = 1