Sistema per il Turismo Gastronomico (Federico Valentini, 726584

Architettura Sw e Dati
Sistema per il Turismo Gastronomico (STG)
Federico Valentini 726584,
Appello 14 Luglio 2015
Testo del problema (1)
Si deve realizzare un Sistema per il Turismo Gastronomico (STG), che consente a utenti nomadici di acquisire
informazioni su ristoranti, inserire e leggere commenti, stabilire contatti con altri utenti. STG interagisce con
una Guida Ristoranti GR online preesistente e con un sistema di gestione mappe GM (ad esempio Google
Maps).
Il sistema STG deve essere accessibile sia da PC sia da terminale mobile (smartphone o tablet) e deve
consentire a un turista T di:
●
●
●
Specificare una zona di suo interesse Z T fornendo un indirizzo stradale e una distanza massima. Nel caso
di terminale mobile, deve essere possibile specificare solo la distanza rispetto alla locazione attuale dell’
utente. La validità della zona di interesse di un turista scade dopo 24 ore e, nel caso di utilizzo di un
terminale mobile, quando il turista esce dalla zona
Acquisire l’elenco dei ristoranti in Z T , con possibilità di ordinarli in base alle valutazioni di prezzo o di
qualità
Selezionare un ristorante e visualizzare le informazioni relative, sia fornite da GR, sia fornite da altri
turisti
Testo del problema (2)
●
●
●
Inserire valutazioni e commenti su un ristorante, archiviati in forma anonima. Le valutazioni riguardano il
prezzo (in euro) e la qualità (su scala da 1 a 5). I commenti sono in forma testuale.
Aprire un thread di conversazione accessibile ad altri turisti V con una zona di interesse Z V a intersezione
non vuota con Z T . Il thread viene automaticamente chiuso quando scade la validità di Z T
Ricevere una notifica a fronte dell’apertura di un thread da parte di un altro utente V con una zona di
interesse Z V a intersezione non vuota con Z T
Si richiede di definire, utilizzando i formalismi opportuni:
●
●
●
●
●
l’architettura del sistema STG in termini di informazioni e flussi informativi, comprendendo le
informazioni che STG deve poter scambiare con GR e GM;
l’architettura logica STG in termini di componenti di elaborazione;
l’architettura concreta STG in termini di modalità di interazione fra componenti;
l’architettura di deployment di STG;
le scelte tecnologiche (componenti hw, reti di comunicazione, piattaforme sw) relative a STG
argomentando in modo quantitativo le scelte fatte in base alla natura e alla quantità di dati da elaborare,
archiviare, trasferire tra i vari componenti del sistema e rendere disponibili ai suoi vari utenti.
Testo del problema (3)
Si supponga che GR gestisca le informazioni per nome del ristorante e per indirizzo, cioè in quale via di quale
località si trova un ristorante, ma non gestisca informazioni di georeferenziazione. Si richiede di definire:
●
●
●
●
●
le modalità e i problemi di integrazione fra STG, GR e GM. Si supponga di disporre dello schema
concettuale e dello schema logico relazionale delle due basi dati a. di supporto al sistema STG, b. GR, e
del solo schema logico relazionale della base dati GM. Si scelgano tali schemi in modo coerente con
quanto usualmente avviene nella realtà, e cioè caratterizzati da diverse tipologie di eterogeneità. Si
richiede di definire;
lo schema concettuale della base dati GM;
lo schema globale delle basi dati STG, GR e GM, ottenuto per mezzo della integrazione dei singoli schemi
concettuali;
assumendo di utilizzare una architettura di integrazione dati (virtual data integration), e assumendo di
scegliere i mapping secondo la modalita’ Global as View, i mapping tra schema logico globale relazionale
e schemi locali di STG, GR e GM;
una interrogazione sullo schema globale, con il suo unfolding sui tre schemi locali.
Terminologia
Utente: turista che utilizza il sistema
Zona di interesse (o zona): zona designata dall’utente, il quale desidera ottenere informazioni riguardo i
ristoranti presenti
Sottozona comune: area creata dall’intersezione di due o più zone di interesse
Validità (di una zona di interesse): una zona può essere considerata valida o no a seconda di quanto tempo è
trascorso dall’indicazione della stessa da parte dell’utente (24 ore se effettuata da PC, altrimenti fino a quando
l’utente risulta fisicamente in quella zona specificata)
Assunzioni - Coordinate e distanza
La zona di interesse viene trattata come un dato composto da:
●
●
locazione (coordinate gps)
distanza (metri)
Con questi due parametri risulta possibile calcolare se due o più utenti abbiano una intersezione
comune utilizzando la “Formula dell’Emisenoverso” (http://stackoverflow.com/questions/365826/calculate-distancebetween-2-gps-coordinates)
Inoltre ipotizzo di settare un limite di distanza massima in modo da rendere l’applicazione più efficiente
e meglio utilizzabile.
Assunzioni - Guida Ristoranti
Guida Ristoranti (GR) risulta essere un sistema web già esistente (quindi esterno al progetto) che
permette di essere interrogato per recuperare informazioni relative ad un singolo ristorante.
Quindi assumo l’esistenza di un’API (Application Programming Interface) già definita che permette di
essere invocata inserendo il ristorante. Una volta invocata, il sistema esterno GR ritornerà le
informazioni (sotto forma di testo) presenti nel proprio database interno.
Queste informazioni andranno quindi ad integrare le informazioni di un ristorante generate dal nostro
sistema (commenti e valutazioni degli utenti).
Inoltre assumo che per ogni ristorante presente nel sistema GR esista una e una sola descrizione
testuale che riassuma le caratteristiche salienti e non del ristorante in questione.
Assunzioni - Apertura di un Thread
Il sistema, quando un utente decide di aprire un thread di conversazione riguardo alla propria zona di interesse,
ne consente la creazione anche nel caso non ci siano utenti attivi in quella zona.
Il thread rimane disponibile finchè la zona di interesse del turista risulta valida.
Al momento dell’apertura di un thread tutti gli altri utenti attivi in una sottozona comune vengono notificati.
Assunzioni - Login e Registrazione
Nei diagrammi che seguiranno tutte le azioni che sono intraprese dall’utente del sistema, implicano il corretto
login al nostro sistema.
Quindi nel modello dei casi d’uso verrà omessa l’include dell’azione di login in tutte le azioni che l’utente può
intraprendere, per rendere il diagramma più leggibile.
Inoltre sarà ovviamente presente una funzione di Registrazione che permette a turisti non iscritti di creare il
proprio profilo e diventare effettivamente un utente del sistema.
Architettura
del problema
Casi d’uso
Diagramma dei dati
Diagramma delle attività - Registrati
Diagramma delle attività - Login
Diagramma delle attività - Acquisisci elenco
ristoranti
Diagramma delle attività - Specifica una zona di interesse
Diagramma delle attività - Visualizza informazioni relative ad
un ristorante
Diagramma delle attività - Inserisci valutazione o
commento
Diagramma delle attività - Apri thread di
conversazione
Diagramma delle attività - Ricevi notifica
messaggio
Architettura
logica
Architettura Logica - Componenti rilevate
Architettura
concreta
Diagramma di sequenza - Registrati
Diagramma di sequenza - Login
Diagramma di sequenza - Inserisci valutazione o commento
Diagramma di sequenza - Apri thread di conversazione
Diagramma di sequenza - Ricevi notifica messaggio
Diagramma di sequenza - Specifica una zona di interesse
Diagramma di sequenza - Acquisisci elenco ristoranti
Architettura
di Deployment
Soluzione scelta - Architettura centralizzata
PRO:
1.
2.
3.
Bassi costi di gestione e sviluppo
Gestione centralizzata del sistema
Moderata larghezza di banda necessaria
CONTRO:
1.
2.
Gestione dei ritardi in caso di alto numero di richiesta (Internet Bottleneck)
Bassa resistenza ai guasti (malfunzionamenti possono potenzialmente bloccare il servizio)
Architettura di Deployment
Architettura
dei Dati
GM - Schema ER e Schema Logico
Google_Maps(id, via, civico, lat, long, città, provincia, stato)
GR - Schema ER e Schema Logico
Ristorante(id, nome, via, civico, città, provincia, descrizione)
STG - Schema ER
STG - Schema Logico
Utente(id_utente, nome, cognome, email, data_nascita, attivo, username, password, url_attivazione)
Zona di Interesse(id_zona, id_utente, distanza_locazione, valida_ora, long, lat)
Thread(id_thread, titolo, stato_thread)
Messaggio(id_messaggio, id_utente, id_thread, timestamp, testo_messaggio)
Commento(id_commento, id_ristorante, timestamp, testo_commento)
Valutazione(id_valutazione, id_ristorante, qualità, prezzo)
Corrispondenze/Eterogeneità (1)
STG
GR
TIPO
Scelta
Valutazione.id_ristorante
id
Sinonimia
id
Commento.id_ristorante
id
Sinonimia
id
Corrispondenze/Eterogeneità (2)
STG
GM
TIPO
Scelta
Ristorante.latitudine
Civico.lat
Sinonimia
lat
Ristorante.longitudine
Civico.long
Sinonimia
long
Scelte Architetturali (1)
Si è scelto di unificare gli schemi logici utilizzando il processo
EII (Enterprise Information Integration)
che ci permette di fornire un unica interfaccia per la visualizzazione di tutti i dati presenti nei singoli database.
Questo può essere implementato in due modi:
1.
2.
Data Warehousing: viene creato un nuovo database fisico in cui vengono copiati tutti i dati dei singoli DB
secondo lo schema logico globale (durante questa operazione possono essere effettuate operazioni per il
miglioramento della qualità dei dati, e.g. Record Linkage). Tutte le interrogazioni vengono eseguite sul
nuovo database. Periodicamente è necessario effettuare un riallineamento dei dati del database globale
con quelli dei singoli database locali.
Virtual Data Integration: viene creato uno schema logico globale che fornisce un’interfaccia unificata di
visualizzazione dei dati. Tutte le interrogazioni che vengono effettuate su questa interfaccia vengono
riadattate, attraverso un mediatore, agli schemi logici dei singoli database.
Scelte Architetturali (2)
La soluzione proposta si basa su Virtual Data Integration:
L’architettura prevede che i dati rimangano nei database attuali e siano acceduti tramite un mediatore che
riadatta le interrogazioni sullo schema logico virtuale a interrogazioni locali sui singoli database.
I mapping utilizzati dal mediatore sono stati definiti con la modalità Global As View (GAV).
Modello ER Integrato
Schema Logico Integrato
Utente(id_utente, nome, cognome, email, data_nascita, attivo, username, password, url_attivazione)
Zona di Interesse(id_zona, id_utente, distanza_locazione, valida_ora, long, lat)
Thread(id_thread, id_utente, titolo, stato_thread)
Messaggio(id_messaggio, id_utente, id_thread, timestamp, testo_messaggio)
Ristorante(id, nome, descrizione,via, civico, città, provincia, lat, long)
Commento(id_commento, id_ristorante, timestamp, testo_commento)
Valutazione(id_valutazione, id_ristorante, qualità, prezzo)
Mapping
-
Utente(id_utente, nome, cognome, email, data_nascita, attivo, username, password, url_attivazione)
CREATE VIEW Utente AS
SELECT id_utente, nome, cognome, email, data_nascita, attivo, username, password, url_attivazione
FROM STG.Utente
-
Zona di Interesse(id_zona, id_utente, distanza_locazione, valida_ora, long, lat)
CREATE VIEW Zona di Interesse AS
SELECT id_zona, id_utente, distanza_locazione, valida_ora, long, lat
FROM STG.Zona_DI_Interesse
-
Thread(id_thread, id_utente, titolo, stato_thread)
CREATE VIEW Thread AS
SELECT id_thread, id_utente, titolo, stato_thread
FROM STG.Thread
Mapping
-
Messaggio(id_messaggio, id_utente, id_thread, timestamp, testo_messaggio)
CREATE VIEW Messaggio AS
SELECT id_messaggio, id_utente, id_thread,timestamp, testo_messaggio
FROM STG.Messaggio
-
Commento(id_commento, id_ristorante, timestamp, testo_commento)
CREATE VIEW Commento AS
SELECT id_commento, id_ristorante, timestamp, testo_commento
FROM STG.Commento
-
Valutazione(id_valutazione, id_ristorante, qualità, prezzo)
CREATE VIEW Valutazione AS
SELECT id_valutazione, id_ristorante, qualità, prezzo
FROM STG.Valutazione
Mapping
-
Ristorante(id, nome, descrizione, via, civico, città, provincia, lat, long)
CREATE VIEW Ristorante AS
SELECT “”, nome_ristorante AS nome, ”” ,via, civico città, “” , ””, “”
FROM STG.Valutazione
UNION
SELECT “”, nome_ristorante AS nome, ”” ,via, civico città, “” , ””, “”
FROM STG.Commento
UNION
SELECT id_ristorante, nome_ristorante AS nome, descrizione, via, civico, città, provincia,””, “”)
FROM GR.Ristorante
UNION
SELECT “”, “”, “”, via, civico, città, provincia,lat, long
FROM GM.Google_Maps
Query
-
Recuperare i commenti relativi al ristorante “The Fork” di Milano, con sede in via Ponte Nuovo.
SELECT timestamp, testo_commento
FROM Commento
WHERE id_ristorante = ( SELECT id
FROM Ristorante
WHERE nome = ‘The Fork’ AND città = ‘Milano’ AND via = ‘Ponte Nuovo’
)
Unfolding
SELECT timestamp, testo_commento
FROM Commento
WHERE id_ristorante = ( SELECT id
FROM (
SELECT “”, nome_ristorante AS nome, ”” ,via, civico città, “” , ””, “”
FROM STG.Valutazione
UNION
SELECT “”, nome_ristorante AS nome, ”” ,via, civico città, “” , ””, “”
FROM STG.Commento
UNION
SELECT id_ristorante, nome_ristorante, descrizione, via, civico, città, provincia,””, “”)
FROM GR.Ristorante
UNION
SELECT “”, “”, “”, via, civico, città, provincia,lat, long
FROM GM.Google_Maps
)
WHERE nome = ‘The Fork’ AND città = ‘Milano’ AND via = ‘Ponte Nuovo’
)