Tesi Michele Freschi e Donato Ferrante
Tesi Michele Freschi e Donato Ferrante
Tesi Michele Freschi e Donato Ferrante
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Università diPisa<br />
Facoltà di Scienze Matematiche Fisiche e Naturali<br />
Corso di Laurea in Informatica<br />
Relazione di tirocinio<br />
Completamento Compilazione<br />
ed Esecuzione Query in XPeer<br />
<strong>Donato</strong> <strong>Ferrante</strong> e <strong>Michele</strong> <strong>Freschi</strong><br />
Tutore accademico<br />
Prof. Giorgio Ghelli<br />
Anno Accademico 2005/2006
1<br />
...a Zio Olly e Zia Ida
Indice<br />
1 Introduzione 1<br />
1.1 I Sistemi Peer To Peer . . . . . . . . . . . . . . . . . . . . . . 1<br />
1.2 Il Sistema XPeer . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />
1.2.1 Descrizione . . . . . . . . . . . . . . . . . . . . . . . . 2<br />
1.2.2 Interrogazioni . . . . . . . . . . . . . . . . . . . . . . . 4<br />
1.3 Organizzazione della Relazione . . . . . . . . . . . . . . . . . . 4<br />
2 Architettura del Sistema 6<br />
2.1 Cenni Generali . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
2.2 L’ACL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />
2.3 Invio Messaggi . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />
2.4 Ricezione Messaggi . . . . . . . . . . . . . . . . . . . . . . . . 7<br />
2.5 ACL in Dettaglio . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
2.5.1 Communication Layer . . . . . . . . . . . . . . . . . . 8<br />
2.5.2 Identifier Layer . . . . . . . . . . . . . . . . . . . . . . 9<br />
2.5.3 Queue Layer . . . . . . . . . . . . . . . . . . . . . . . . 9<br />
2.5.4 Message Layer . . . . . . . . . . . . . . . . . . . . . . . 10<br />
2.6 Protocolli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
2.6.1 MetaSearch . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
2.6.2 MetaUpdate . . . . . . . . . . . . . . . . . . . . . . . . 11<br />
2.6.3 SchemaUpdate . . . . . . . . . . . . . . . . . . . . . . 12<br />
2.7 Cloning e Splitting . . . . . . . . . . . . . . . . . . . . . . . . 13<br />
2.7.1 Cloning . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />
2.7.2 Splitting . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
3 Modello dei Dati 16<br />
3.1 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />
3.1.1 Documenti XML . . . . . . . . . . . . . . . . . . . . . 16<br />
3.1.2 Elementi . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
3.1.3 Altri Costrutti . . . . . . . . . . . . . . . . . . . . . . 19<br />
3.2 XML Schema 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />
i
INDICE ii<br />
3.2.1 Struttura . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
3.2.2 Tipi di Dato . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
3.2.3 Namespace . . . . . . . . . . . . . . . . . . . . . . . . 24<br />
3.3 XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />
3.3.1 XPath Datamodel . . . . . . . . . . . . . . . . . . . . . 25<br />
3.3.2 Valutazione . . . . . . . . . . . . . . . . . . . . . . . . 26<br />
3.3.3 Espressioni . . . . . . . . . . . . . . . . . . . . . . . . 27<br />
3.4 XQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />
3.4.1 Le espressioni FLWOR . . . . . . . . . . . . . . . . . . 29<br />
4 Compilazione 33<br />
4.1 Algebra di Interrogazione . . . . . . . . . . . . . . . . . . . . . 33<br />
4.1.1 Modello dati . . . . . . . . . . . . . . . . . . . . . . . . 33<br />
4.1.2 Operatori . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />
4.2 Protocollo di Compilazione . . . . . . . . . . . . . . . . . . . . 36<br />
4.3 Tree-Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />
4.3.1 Filtri di Bloom . . . . . . . . . . . . . . . . . . . . . . 40<br />
4.3.2 Liste di Valori . . . . . . . . . . . . . . . . . . . . . . . 42<br />
4.3.3 Unione Tree-guide . . . . . . . . . . . . . . . . . . . . 42<br />
4.4 Albero Logico . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />
4.5 Algoritmo di Schema Matching . . . . . . . . . . . . . . . . . 45<br />
5 Esecuzione 47<br />
5.1 Protocollo di Esecuzione . . . . . . . . . . . . . . . . . . . . . 47<br />
5.1.1 Riscrittura dell’ Albero Logico . . . . . . . . . . . . . . 48<br />
5.1.2 Decomposizione dell’ Albero Logico . . . . . . . . . . . 49<br />
6 Risultati Sperimentali 52<br />
6.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />
6.2 Ambiente di Sperimentazione . . . . . . . . . . . . . . . . . . 52<br />
6.3 Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />
6.4 Verifica dei Risultati . . . . . . . . . . . . . . . . . . . . . . . 54<br />
6.5 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55<br />
6.6 Strumenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />
7 Conclusioni 57<br />
A Frammenti XML 58<br />
B Insieme Query 59
INDICE iii<br />
C Algebra di Interrogazione 60<br />
C.1 Modello dei Dati . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />
C.2 Funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />
C.3 Env . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />
C.4 Operatori di Supporto . . . . . . . . . . . . . . . . . . . . . . 61<br />
C.5 Operatori di Base . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />
C.6 Operatori sulle Locazioni . . . . . . . . . . . . . . . . . . . . . 61<br />
C.7 Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62<br />
C.7.1 Grammatica degli Input Filter . . . . . . . . . . . . . . 62<br />
C.7.2 Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62<br />
C.8 Return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63<br />
C.8.1 Grammatica degli Output Filter . . . . . . . . . . . . . 63<br />
C.8.2 Return . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Capitolo 1<br />
Introduzione<br />
1.1 I Sistemi Peer To Peer<br />
Il paradigma Peer-to-Peer (P2P) ha ridisegnato la concezione di sistema distribuito,<br />
concezione che sin dalle origini era legata prevalentemente ad un<br />
modello client-server.<br />
Il nucleo di un sistema Peer-to-Peer è costituito da un insieme di nodi<br />
(detti peer ) interconnessi mediante una struttura: l’ overlay network,chepermette<br />
loro di condividere risorse e comunicare mediante scambio di messaggi.<br />
Si possono distinguere principalmente due famiglie di network Peer-to-<br />
Peer in base a quanto si distaccano dal modello client-server in cui le comunicazioni<br />
sono intermediate da un server centrale, ovvero:<br />
- Peer-to-Peer puro, in cui si perde la nozione di client e server come<br />
entità separate, ovvero tutti i nodi del network svolgono un doppio ruolo<br />
comportandosi al contempo come client e server per gli altri peer.<br />
- Peer-to-Peer ibrido, in cui vengono utilizzati aspetti del modello<br />
client-server affiancati da aspetti ricavati dall’ approccio Peer-to-<br />
Peer puro. Ad esempio nel ricorrere all’utilizzo di server esterni che<br />
1
CAPITOLO 1. INTRODUZIONE 2<br />
permettono ai peer di ricavare informazioni sulle risorse attualmente<br />
disponibili nella rete.<br />
Alcuni dei vantaggi offerti dell’approccio Peer-to-Peer sono:<br />
- Elevata scalabilità: i colli di bottiglia presenti nei modelli clientserver,<br />
ovvero i server, non sono più presenti come parte fondamentale<br />
del sistema;<br />
- Autonomia: ogni peer è un’entità autonoma;<br />
- Bassi costi di amministrazione: l’amministrazione è delegata ai<br />
client stessi.<br />
Su questa infrastruttura si colloca il progetto XPeer del Dipartimento di<br />
Informatica dell’Università di Pisa. Progetto che cerca di sfruttare i benefici<br />
derivati dall’utilizzo di un architettura Peer-to-Peer allo scopo di creare un<br />
database distribuito affidabile e robusto.<br />
1.2 Il Sistema XPeer<br />
1.2.1 Descrizione<br />
XPeer è un Database Distribuito XML Peer-to-Peer, che presenta le seguenti<br />
caratteristiche:<br />
- gestisce dati in formato XML;<br />
- i dati sono interrogabili mediante l’utilizzo di FLWR un sottoinsieme<br />
di XQuery;<br />
-è in grado di funzionare in ambienti fortemente dinamici.<br />
Ogni peer del sistema XPeer condivide un proprio database XML locale<br />
ed in aggiunta fornisce risorse computazionali al sistema stesso.<br />
L’ overlay network è una struttura gerarchica ad albero ad n livelli:
CAPITOLO 1. INTRODUZIONE 3<br />
- livello 0, occupato dai peer ;<br />
- livello i dove i in (0, n), occupato dai superpeer, che possono avere<br />
solo figli di livello i-1.<br />
- livello n, occupato dalla root.<br />
Figura 1.1: Architettura di XPeer<br />
In questa struttura ad albero le foglie sono i processi gestori dei database<br />
locali mentre i nodi interni, compresa la radice, sono processi che si fanno<br />
carico della corretta evoluzione e gestione della rete.<br />
Una particolarità che distingue XPeer rispetto agli altri sistemi P2P consiste<br />
nel sapersi auto-amministrare senza interventi esterni, adattandosi automaticamente<br />
a cambiamenti nella topologia e nel carico di lavoro.<br />
Per garantire la robustezza, la scalabilità e il bilanciamento del carico sono<br />
stati introdotti due meccanismi di gestione del sistema: cloning e splitting.
CAPITOLO 1. INTRODUZIONE 4<br />
Il cloning permette di limitare il carico di elaborazione dei nodi della rete<br />
mediante un processo che porta i nodi sovraccarichi a clonarsi ed a formare<br />
insiemi di cloni (cloneset), mentre lo splitting permette di ridurre il carico<br />
dovuto alla sincronizzazione interna ai cloneset, questi due meccanismi sono<br />
descritti in dettaglio nel capitolo 2.<br />
1.2.2 Interrogazioni<br />
Un’altra caratteristica di XPeer consiste nella gestione delle interrogazioni<br />
in due fasi distinte: compilazione ed esecuzione. Mediante la compilazione<br />
la rete dei superpeer identifica i peer con dati rilevanti per l’interrogazione<br />
sottomessa.<br />
Nella seconda il peer che ha inoltrato l’interrogazione,coordina l’esecuzione<br />
sui peer remoti. Questa scelta si discosta dai sistemi P2P tradizionali in<br />
cui l’interrogazione viene eseguita contemporaneamente alla sua propagazione.<br />
La scelta adottata migliora la selettività dell’interrogazione poichè ladisseminazione<br />
delle query è decisa a livello di sistema e non localmente dal<br />
peer, e permette al peer che la ha inoltrata, di applicare ottimizzazioni sul<br />
piano di accesso.<br />
1.3 Organizzazione della Relazione<br />
La presente relazione è stata strutturata come segue:<br />
- Capitolo 2: si descrive l’architettura del sistema XPeer.<br />
- Capitolo 3: si descrive il modello dati del sistema XPeer.<br />
- Capitolo 4: si descrive la fase di compilazione delle query nel sistema<br />
XPeer.
CAPITOLO 1. INTRODUZIONE 5<br />
- Capitolo 5: si descrive la fase di esecuzione delle query nel sistema<br />
XPeer.<br />
- Capitolo 6: si descrivono i risultati sperimentali ottenuti e si descrivono<br />
alcuni degli strumenti utilizzati.<br />
- Capitolo 7: si riportano le nostre conclusioni.
Capitolo 2<br />
Architettura del Sistema<br />
2.1 Cenni Generali<br />
I nodi che fanno parte della rete ad albero, del sistema XPeer sono di due<br />
tipi: peer e superpeer virtuale. I primi mettono a disposizione i dati e permettono<br />
all’utente di effettuare interrogazioni al sistema, i secondi sono invece<br />
delegati alla gestione della rete.<br />
Un superpeer virtuale è un cloneset di cardinalità maggiore o uguale ad<br />
uno.<br />
Ad ogni nodo della rete sia esso un peer o un superpeer virtuale è associato<br />
un id virtuale, il quale permette di identificare univocamente un nodo<br />
peer o superpeer virtuale. Inoltre èpresenteunid fisico per permette di<br />
effettuare un ulteriore identificazione dei nodi peer e superpeer.<br />
Per permettere l’interazione tra i moduli peer e superpeer che compongono<br />
il sistema si è definito un livello sottostante, l’ACL, ovvero un modulo<br />
di basso livello delegato ad instradare le comunicazioni tra i moduli di livello<br />
superiore.<br />
6
CAPITOLO 2. ARCHITETTURA DEL SISTEMA 7<br />
2.2 L’ACL<br />
L’ACL costituisce l’infrastruttura di comunicazione basata sullo scambio di<br />
messaggi utilizzata dai moduli di livello superiore per interagire tra loro,<br />
fornendo le primitive di invio e ricezione dei messaggi. Inoltre l’ACL provvede<br />
ricorrendo all’utilizzo di code al corretto instradamento dei messaggi da/verso<br />
entità del sistema.<br />
2.3 Invio Messaggi<br />
Un modulo che vuole inviare un messaggio invoca il metodo di invio fornito<br />
dall’ interfaccia dell’ ACL specificando il messaggio, il destinatario ed inoltre<br />
la coda a cui il messaggio è destinato.<br />
Non appena l’ACL riceve una richiesta di invio, in modo del tutto trasparente<br />
al modulo mittente, provvede a recapitare il messaggio inviato al<br />
modulo di comunicazione del destinatario.<br />
2.4 Ricezione Messaggi<br />
Quando un messaggio viene depositato (via ACL) nella coda di un modulo<br />
di comunicazione, il modulo di livello superiore, sia questo peer o superpeer,<br />
provvederà a richiederlo al livello sottostante.<br />
Potrebbe succedere che due moduli richiedano in contemporanea un messaggio<br />
sulla stessa coda al livello di comunicazione ma l’ACL ricorrendo al<br />
campo destinatario del messaggio riesce sempre a discriminare quale sia il<br />
vero destinatario tra i richiedenti.
CAPITOLO 2. ARCHITETTURA DEL SISTEMA 8<br />
2.5 ACL in Dettaglio<br />
La struttura dell’ACL è la seguente:<br />
i. Communication Layer, rappresenta l’interfaccia di comunicazione<br />
per i moduli superiori.<br />
ii. Identifier Layer, gestisce le relazioni indirizzo logico / indirizzo ip<br />
porta, dei nodi.<br />
iii. Queue Layer, livello delegato alla gestione delle code.<br />
iv. Message Layer, livello incaricato delle comunicazioni TCP/IP.<br />
Di seguito sono descritte le caratteristiche principali dei livelli riportati<br />
sopra.<br />
2.5.1 Communication Layer<br />
Fornisce l’interfaccia di invio/ricezione dei messaggi ai moduli di livello superiore.<br />
Alcuni dei metodi di invio offerti dall’interfaccia sono:<br />
- SendToAny, che permette di inviare un messaggio ad un indirizzo<br />
virtuale. Nel caso in cui quel nodo sia un superpeer virtuale per cui è<br />
definito un cloneset il nodo destinatario viene scelto in maniera casuale<br />
tra quelli appartenenti al cloneset;<br />
- SendToAll, che permette di inviare un messaggio ad un indirizzo virtuale.<br />
Nel caso un cui il nodo destinatario sia un superpeer virtuale per<br />
cui è definito un cloneset, viene effettuato un broadcast del messaggio<br />
a tutti i nodi del cloneset. Se il nodo mittente appartiene al cloneset<br />
del destinatario il nodo mittente è escluso dal broadcast.<br />
- SendAnswer, che permette di inviare un messaggio ad un indirizzo<br />
fisico.
CAPITOLO 2. ARCHITETTURA DEL SISTEMA 9<br />
Per effettuare le conversioni da identificatore virtuale ad identificatore fisico<br />
si ricorre ad una funzione VirtualToPhysycalMap che provvede, dato un<br />
id virtuale, a restituire un insieme di id fisici ad esso relativi.<br />
I metodi invece relativi alla ricezione esposti dall’interfaccia sono:<br />
- Receive, che permette di recuperare un messaggio da una coda specifica.<br />
- RepeatReceive, che permette di ricevere un numero arbitrario di<br />
messaggi in contemporanea.<br />
2.5.2 Identifier Layer<br />
La funzione principale dell’Identifier Layer consiste nel trasformare un identificatore<br />
fisico in una coppia: indirizzo ip, porta.<br />
2.5.3 Queue Layer<br />
A questo livello vengono gestite le code dell’ACL e vengono implementati i<br />
criteri relativi alla manipolazione dei messaggi sulle code.<br />
Ad ogni modulo peer o superpeer sono associate un certo numero di code<br />
che sono distinte sulla base del tipo di messaggi che possono contenere.<br />
Su ogni coda è attivo un processo che si occupa di eliminare tutti i messaggi<br />
presenti da troppo tempo, ovvero il cui tempo trascorso in coda supera<br />
la soglia ammissibile (TTSIQ).<br />
TTSIQ<br />
Il Time To Spend In Queue, in breve TTSIQ, è un valore che indica quanto<br />
tempo un messaggio può trascorrere in una coda prima di essere scartato.
CAPITOLO 2. ARCHITETTURA DEL SISTEMA 10<br />
Questo meccanismo è stato introdotto per evitare che messaggi vecchi<br />
restino in coda per troppo tempo e per fissare un limite superiore al numero<br />
di “hops” che un messaggio può effettuare nella rete.<br />
2.5.4 Message Layer<br />
È il livello più basso dell’ACL e provvede ad instradare i messaggi basandosi<br />
sul protocollo TCP/IP. La trasmissione è effettuata serializzando l’oggetto<br />
messaggio e quindi procedendo al suo invio, mentre la ricezione provvede a<br />
deserializzare il messaggio ricevuto.<br />
2.6 Protocolli<br />
Nel sistema XPeer sono definiti un certo numero di protocolli, alcuni di questi<br />
richiedono che il nodo ricevente invii una risposta al termine dell’elaborazione<br />
del messaggio, altri invece richiedono la semplice elaborazione senza alcun<br />
riscontro.<br />
Tra i protocolli teniamo a mettere in evidenza i seguenti:<br />
- MetaSearch;<br />
- MetaUpdate;<br />
- SchemaUpdate.<br />
Di seguito vengono descritti in dettaglio.<br />
2.6.1 MetaSearch<br />
Appartiene alla famiglia dei meta protocolli ed è delegato alla ricerca di risorse<br />
nella rete. Ad esempio, ricercare nodi che hanno dati rilevanti ai fini di<br />
un interrogazione.
CAPITOLO 2. ARCHITETTURA DEL SISTEMA 11<br />
Questo protocollo di ricerca può potenzialmente visitare l’intera rete per<br />
portare a termine il suo compito. Il nodo che avvia il protocollo prende il<br />
nome di invoker.<br />
Il protocollo è descritto dalle seguenti fasi:<br />
i. Elaborazione Locale, in cui vengono determinati i nodi a cui inoltrare<br />
il messaggio.<br />
ii. Valutazione Tempo Trascorso In Coda (TTSIQ), incuiviene<br />
aggiornato il valore TTSIQ del messaggio da propagare.<br />
iii. Definizione Destinatari, in cui viene verificata la tabella di routing<br />
del messaggio definita in fase di elaborazione locale nel caso in cui questa<br />
risulti vuota viene inizializzata a valori di default: vengono aggiunti alla<br />
tabella gli eventuali figli del nodo ed il suo padre omettendo il nodo<br />
mittente.<br />
iv. Risposta, se durante la fase di elaborazione locale sono stati riscontrati<br />
valori utili allora si provvede a comunicarli all’invoker.<br />
v. Propagazione, seilTTSIQ del messaggio è valido (cioè maggiore di<br />
0) si provvede ad inoltrare il messaggio ai nodi riportati nella tabella<br />
di routing definita nella fase elaborazione locale.<br />
2.6.2 MetaUpdate<br />
Questo protocollo è utilizzato principalmente per gestire la corretta sincronizzazione<br />
dello stato del sistema. A differenza del protocollo MetaSearch<br />
questo effettua un numero limitato di comunicazioni, dal momento che queste<br />
sono effettuate risalendo l’albero di padre in padre, fino alla root.
CAPITOLO 2. ARCHITETTURA DEL SISTEMA 12<br />
Ad esempio se la comunicazione originaria era al fine di ricercare un superpeer<br />
che adottasse un nuovo peer, una volta che il superpeer decide di<br />
adottare il peer che sta propagando il messaggio, inoltra il messaggio ricevuto<br />
al padre con lo scopo di comunicare un aggiornamento del suo schema<br />
(procedura di SchemaUpdate descritta in seguito).<br />
Il protocollo è il seguente:<br />
i. Elaborazione Locale, il messaggio viene elaborato localmente, in<br />
base al tipo di informazione contenuta.<br />
ii. Invio Ack, teminata la fase i viene inviato un ack al nodo che ha<br />
inviatolarichiesta.<br />
iii. Inoltro a Padre, il messaggio eventualmente modificato viene inviato<br />
al padre.<br />
iv. Attesa Ack da Padre, il nodo resta in attesa di ricevere un ack dal<br />
nodo padre che comunica l’avvenuta elaborazione del messaggio che gli<br />
è stato inoltrato.<br />
2.6.3 SchemaUpdate<br />
Il protocollo di SchemaUpdate si basa sul protocollo di MetaUpdate il suo<br />
scopo è quello di comunicare modifiche allo schema locale associato ad un<br />
nodo del sistema.<br />
A livello di peer il protocollo si innesca a seguito di una modifica alla<br />
base di dati locale, questo provvede a comunicare al proprio nodo padre il<br />
suo nuovo schema mediante un messaggio di SchemaUpdate.<br />
A livello di superpeer virtuale è innescato a seguito di una modifica dell’unione<br />
degli schemi dei figli relativi ad un superpeer virtuale, modifica indotta
CAPITOLO 2. ARCHITETTURA DEL SISTEMA 13<br />
a causa dell’aggiunta/rimozione di un peer dall’insieme dei figli del SPV padre<br />
oppure a seguito di una notifica di modifica allo schema associato ad un<br />
nodo figlio.<br />
Questo protocollo basato, come accennato, sul protocollo di MetaUpdate<br />
segue anch’esso la propagazione in risalita verso la root.<br />
2.7 Cloning e Splitting<br />
In questa sezione sono descritti due meccanismi molto importanti al fine di<br />
mantere il sistema sempre e costantemente in condizioni di carico ottimali.<br />
2.7.1 Cloning<br />
Il meccanismo di cloning si attiva non appena si verifica un degrado delle<br />
prestazioni del sistema, il quale provvede a riportarsi in condizioni di normalità<br />
attraverso un processo che porta i superpeer virtuali sovraccarichi a<br />
clonarsi.<br />
Figura 2.1: Nella figura è mostrato un SPV prima (a) e dopo (b) della<br />
clonazione<br />
Nel processo di cloning viene aggiunto un nuovo superpeer al cloneset del<br />
superpeer virtuale sovraccarico, in altre parole il cloning provvede ad aumen-
CAPITOLO 2. ARCHITETTURA DEL SISTEMA 14<br />
tare la cardinalità diuncloneset.<br />
Le entità all’interno del cloneset hanno il compito di comunicare a tutte<br />
le altre eventi di interesse comune, ovvero eventi relativi a modifiche topologiche<br />
della rete. Ad esempio, in seguito alla registrazione/deregistrazione di<br />
un peer o all’aggiornamento dello schema dello stesso.<br />
Il meccanismo di cloning può essere descritto dai seguenti passi:<br />
i. ricerca un nuovo superpeer mediante un apposito protocollo;<br />
ii. il nuovo superpeer viene aggiunto al cloneset;<br />
iii. vengono aggiornati gli ACL relativi al padre ed ai figli del nuovo clone.<br />
2.7.2 Splitting<br />
Il meccanismo di splitting provvede a ridurre i costi di sincronizzazione tra<br />
i superpeer di un cloneset dividendo il cloneset in due. Questo processo<br />
viene attivato non appena i costi di sincronizzazione all’interno del cloneset<br />
superano una certa soglia.<br />
Figura 2.2: Nella figura è mostrato un SPV prima (a) e dopo (b) dello<br />
splitting, mettendo in evidenza la ridistribuzione dei peer<br />
Inoltre durante la ripartizione dei peer del cloneset originale si cerca di<br />
assegnare peer con schemi simili allo stesso insieme in modo da ottenere suc-
CAPITOLO 2. ARCHITETTURA DEL SISTEMA 15<br />
cessivamente in fase di compilazione delle interrogazioni, un miglioramento<br />
in temini di comunicazioni.<br />
Il processo di splitting è riassunto nelle seguenti fasi:<br />
i. Si ricerca all’interno del superpeer virtuale (SPV) un clone a cui delegare<br />
la procedura di splitting. La selezione è effettuata a livello di<br />
ACL.<br />
ii. Se il clone selezionato ha troppi figli si cerca di far adottare i figli in<br />
eccesso ad altri superpeer virtuali. La scelta dei figli da far adottare è<br />
effettuata di modo da rispettare caratteristiche di omogeneità tra i figli<br />
restanti.<br />
iii. Se la fase di adozione risolve il sovraccarico si termina qui. Al contrario<br />
si procede con lo splitting vero e proprio (fase iv).<br />
iv. Vi sono due possibili scenari:<br />
i. Il SPV è un nodo intermedio: si creano due nuovi cloneset a<br />
partire dal SPV di partenza e viene loro assegnato come padre lo<br />
stesso del SPV che sta effettuando lo splitting.<br />
ii. Il SPV èlaroot: si crea una nuova radice e a questo punto si<br />
effettua la divisione del cloneset e si procede come riportato nella<br />
fase iv-i.
Capitolo 3<br />
Modello dei Dati<br />
3.1 XML<br />
L’Extensible Markup Language (XML) sviluppato dal W3C a partire dal<br />
1996, è un metalinguaggio di annotazione (markup) derivatodaSGML (ISO<br />
8879). Attualmente il formato XML è usato per molteplici scopi, di cui uno<br />
dei principali è sicuramente lo scambio di dati fra sistemi informativi diversi,<br />
interconnessi via Internet. Molti linguaggi di successo sono basati su XML<br />
come SVG, XHTML, GML e RSS.<br />
XML si è imposto come standard de facto per lo scambio di informazioni<br />
semi-strutturate.<br />
3.1.1 Documenti XML<br />
Un documento XML è costituito da due parti: il prologo eilcorpo, entrambe<br />
opzionali. Il prologo è a sua volta composto dalla dichiarazione XML ela<br />
dichiarazione del tipo di documento.<br />
La dichiarazione XML indica a quale versione della specifica XML il documento<br />
è conforme, può inoltre specificare la codifica di carattere utilizzata:<br />
<br />
16
CAPITOLO 3. MODELLO DEI DATI 17<br />
La dichiarazione del tipo di documento (Document Type Declaration,<br />
DTD) definisce la struttura che il documento XML deve rispettare. In<br />
particolare:<br />
- definisce i soli elementi leciti all’interno del documento;<br />
- definisce la struttura di ogni elemento: cosa può contenere, l’ordine,<br />
la quantità di elementi che possono comparire e se sono opzionali o<br />
obbligatori;<br />
- dichiara una serie di attributi ammissibili per ogni elemento e quali<br />
valori possono o devono assumere.<br />
Durante il processo di validazione il documento XML viene confrontato<br />
con il DTD e se tutte le regole all’interno del DTD sono state rispettate il<br />
documento si dice valido. La dichiarazione di tipo del documento può essere<br />
inclusa direttamente nel file XML (inline) o può contenere un riferimento ad<br />
un documento esterno.<br />
<br />
Il corpo di un documento XML è costituito da un insieme di tag di diversi<br />
tipi:<br />
- Tag di apertura, che ha la seguente sintassi:<br />
<br />
Sono specificati un nome ed un insieme di coppie nomeAttributo-valore.<br />
- Tag di chiusura:<br />
CAPITOLO 3. MODELLO DEI DATI 18<br />
- Tag vuoto:<br />
<br />
I nomi dei tag non sono imposti dalla specifica XML, possono essere scelti<br />
liberamente per consentire la massima flessibilità nell’uso del linguaggio.<br />
3.1.2 Elementi<br />
Un elemento è tutto ciò cheècompreso fra un tag di apertura e il corrispondente<br />
tag di chiusura. Il contenuto è tutto ciò che si trova fra i due tag.<br />
Gli elementi possono essere classificati in base al loro contenuto:<br />
- complesso: se il contenuto è un insieme di altri elementi;<br />
- semplice: se il contenuto è semplice testo;<br />
- misto: se il contenuto è una combinazione di elementi e testo;<br />
- vuoto: quando non ha elementi figli nè testo.<br />
Se l’elemento è vuoto può essere espresso da un tag vuoto invece che da<br />
un tag di apertura seguito da uno di chiusura.<br />
La specifica XML impone una serie di restrizioni sugli elementi:<br />
- il tag di chiusura di un elemento deve avere lo stesso nome del tag di<br />
apertura dello stesso;<br />
- ad ogni tag di apertura deve corrispondere un tag di chiusura all’interno<br />
del documento;<br />
- gli elementi devono essere correttamente annidati, ovvero il tag di<br />
chiusura di un elemento deve essere dichiarato all’interno dello stesso<br />
elemento che contiene il corrispettivo tag di apertura;
CAPITOLO 3. MODELLO DEI DATI 19<br />
- all’interno di un tag di apertura o di un tag vuoto può comparire una<br />
sola coppia nomeAttributo-Valore con il medesimo nomeAttributo.<br />
Un’ulteriore restrizione consiste nel fatto che ogni documento XML debba<br />
dichiarare un elemento radice (document element) che contiene tutti gli altri.<br />
3.1.3 Altri Costrutti<br />
Oltre agli elementi il documento XML può contenere altri costrutti come i<br />
commenti, leistruzioni di elaborazione elesezioni CDATA.<br />
I commenti permettono di inserire informazioni all’interno del documento<br />
che l’elaboratore XML ignorerà completamente ed hanno la seguente<br />
sintassi:<br />
<br />
Le istruzioni di elaborazione permettono al documento di contenere<br />
istruzioni per i programmi:<br />
<br />
Il parametro Target permette di identificare l’applicazione a cui le istruzioni<br />
sono indirizzate.<br />
Una sezione CDATA permette di delimitare una parte del contenuto di<br />
un elemento affinchè venga processata dal parser XML come testo normale,<br />
ovvero senza interpretare in alcun modo la parte selezionata. Una sezione<br />
CDATA è espressa con la seguente sintassi:<br />
<br />
Le sezioni CDATA sono ad esempio utili per includere nel documento XML<br />
frammentidicodicecometesto.
CAPITOLO 3. MODELLO DEI DATI 20<br />
3.2 XML Schema 1.1<br />
L’XML Schema è un linguaggio di descrizione di documenti XML che permette<br />
di esprimere un insieme di vincoli e regole, che prende appunto il nome<br />
di schema, applicabili ad un documento XML.<br />
I vincoli possono riguardare quali elementi sono permessi, quali tipi di<br />
dati sono ad essi associati e quale relazione gerarchica hanno fra loro gli elementi<br />
contenuti in un documento XML. La creazione di questo schema di<br />
fatto comporta la definizione di un modello che il documento XML di riferimento<br />
deve rispettare.<br />
La validazione è il processo mediante il quale si verifica se un determinato<br />
documento XML rispetta o meno le regole del modello ad esso associato, nel<br />
qual caso si dice che il documento XML è valido.<br />
Una istanza di schema XML èunXML Schema Definition (XSD) ed è<br />
di solito contenuto in un file con l’estensione “.xsd”.<br />
Per associare ad un documento XML uno schema si utilizzano degli attributi<br />
associati al namespace XSI (XML Schema Instance) sull’elemento<br />
radice, ad esempio:<br />
<br />
<br />
Basi di Dati Laboratorio<br />
6<br />
AA023<br />
Giorgio Ghelli<br />
Carlo Sartiani
CAPITOLO 3. MODELLO DEI DATI 21<br />
<br />
Il corrispondente file XSD potrebbe essere il seguente:<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
3.2.1 Struttura<br />
La struttura di un documento XML viene esplicitata in XML Schema mediante<br />
la definizione di tipi complessi a contenuto complesso e misto.<br />
I tipi complessi a contenuto complesso, costituiti da altri elementi<br />
ma senza nodi testo, sono definiti mediante l’utilizzo dell’elemento xs:complexType<br />
specificando all’interno quali elementi devono comparire e con quale ordine.<br />
Esistono diverse modalità di composizione degli elementi:<br />
- sequenza (xs:sequence), definisce una lista ordinata di elementi che<br />
devono comparire all’interno dell’elemento complesso;
CAPITOLO 3. MODELLO DEI DATI 22<br />
- scelta (xs:choice), definisce una lista di elementi di cui uno deve comparire<br />
all’interno dell’elemento complesso;<br />
- tutti (xs:all), definisce una lista non ordinata di elementi che devono<br />
tutti comparire all’interno dell’elemento complesso.<br />
Le modalità sequenza e scelta permettono anche di specificare le cardinalità<br />
minime e massime dei vari elementi attraverso l’uso degli attributi<br />
minOccurs e maxOccurs, che possono assumere un qualsiasi valore numerico<br />
intero maggiore o uguale di zero oppure il valore speciale unbounded per<br />
indicare un numero illimitato:<br />
<br />
La modalità tutti permette di specificare solo l’attributo minOccurs con<br />
valore zero, considerato che tutti gli elementi al suo interno possono comparire<br />
al massimo una volta.<br />
I tipi complessi a contenuto misto sono in grado di contenere sia nodi<br />
testuali che altri elementi e la loro definizione è uguale a quella di elemento<br />
a contenuto complesso tranne che per l’utilizzo dell’attributo mixed settato<br />
a true.<br />
Gli attributi, analogamente agli elementi, sono fortemente tipati ed è<br />
possibile specificare l’obbligatorietà oppure il valore predefinito:<br />
<br />
<br />
<br />
<br />
...
CAPITOLO 3. MODELLO DEI DATI 23<br />
<br />
<br />
<br />
<br />
3.2.2 Tipi di Dato<br />
XML Schema mette a disposizione un’ampia gamma di tipi di dati primitivi,<br />
per citare solo i più usati:string, integer, long, double, date, time efornisce<br />
gli strumenti per la creazione di nuovi tipi a partire dai tipi predefiniti; tale<br />
operazione prende il nome di derivazione.<br />
La creazione di un nuovo tipo semplice,utilizzato per rappresentare il<br />
contenuto di un attributo o di un nodo testuale (per differenziarlo dai tipi<br />
complessi), può avvenire in tre modi differenti:<br />
- per restrizione quando vengono applicati dei vincoli ai tipi predefiniti;<br />
- per lista quando il tipo derivato è definito come una lista di un tipo<br />
pre-esistente;<br />
- per unione quando il tipo derivato è definito dall’unione di due tipi<br />
pre-esistenti.<br />
La definizione di un tipo semplice avviene utilizzando l’elemento xs:simpleType.<br />
La derivazione per restrizione èforselaformapiùcomune e semplice<br />
di creazione di un nuovo tipo. Le restrizioni agiscono su tre livelli differenti:<br />
- a livello della gestione degli spazi bianchi;<br />
- a livello lessicale;
CAPITOLO 3. MODELLO DEI DATI 24<br />
- a livello dei valori che il tipo può assumere.<br />
<br />
<br />
<br />
<br />
<br />
<br />
La derivazione per lista crea un tipo derivato costituito da più istanze<br />
di un tipo pre-esistente separate da spazi bianchi; la sintassi è la seguente:<br />
<br />
<br />
<br />
La derivazione per unione invece permette di definire nuovi tipi unendo<br />
gli spazi dei valori di alcuni tipi già esistenti ed utilizza l’elemento xs:union<br />
il cui attributo memberTypes permette di definire i tipi, separati da uno<br />
spazio, che entreranno a far parte dell’unione:<br />
<br />
<br />
<br />
3.2.3 Namespace<br />
I namespace rappresentano un insieme di elementi e attributi che appartengono<br />
ad un medesimo contesto.<br />
Un elemento potrebbe infatti assumere un significato differente, e di conseguenza<br />
anche una struttura differente, a seconda del contesto di appartenenza.
CAPITOLO 3. MODELLO DEI DATI 25<br />
Per risolvere eventuali conflitti sono stati introdotti i namespace. I namespace<br />
vengono definiti all’interno di un documento XML mediante l’attributo<br />
xmlns (XML namespace) la cui sintassi è:<br />
xmlns:prefisso="URI"<br />
dove l’uri identifica univocamente il namespace ed il prefisso serve a<br />
riconoscere il namespace di appartenenza dei vari elementi all’interno del<br />
documento XML.<br />
3.3 XPath<br />
XML Path Language (XPath) 2.0 è un linguaggio di espressioni che permette<br />
di selezionare porzioni di un documento XML. Illinguaggio XPath è basato<br />
su una rappresentazione logica ad albero (XPath and XQuery Datamodel)<br />
del documento XML e fornisce gli strumenti per navigare l’albero e selezionare<br />
i singoli nodi secondo una varietà di criteri.<br />
3.3.1 XPath Datamodel<br />
XPath opera su un modello astratto, rappresentato da un albero di nodi,<br />
ognuno dei quali è la rappresentazione di un costrutto XML dichiarato nel<br />
documento XML.<br />
Ad ogni nodo dell’albero sono associate un insieme di informazioni (alcune<br />
comuni, altre proprie di un certo tipo di nodo) dette proprietà.<br />
Ad esempio, i nodi di tipo radice ed elemento hanno la proprietà children,<br />
una lista ordinata di nodi figli. Tutti i nodi, eccetto la radice, hanno la<br />
proprietà parent che indica il nodo padre, che deve essere un nodo elemento<br />
o radice. Un nodo radice o elemento è il padre di tutti i nodi contenuti nella
CAPITOLO 3. MODELLO DEI DATI 26<br />
sua lista dei figli. I discendenti di un nodo sono i figli del nodo e i loro (dei<br />
figli) discendenti, ovvero tutto il sottoalbero radicato nel nodo che stiamo<br />
considerando.<br />
Fra i nodi è definito un ordinamento, corrispondente all’ordine in cui<br />
le rappresentazioni dei rispettivi nodi sono state dichiarate nel documento<br />
XML. Quindi il nodo radice sarà il primo nodo; un nodo elemento precederà<br />
i suoi figli e i suoi discendenti. Il nodo namespace segue l’elemento a cui è<br />
associato, i nodi attributo seguono l’eventuale nodo namespace.<br />
I nodi dell’albero possono essere di tipi differenti:<br />
- radice, è la radice dell’albero e corrisponde logicamente all’elemento<br />
radice;<br />
- elemento, incapsula un elemento XML;<br />
- testo, incapsula un contenuto di tipo testuale;<br />
- attributo, è la rappresentazione di un attributo del nodo a cui è<br />
associato;<br />
- namespace, indica il namespace del nodo a cui è associato.<br />
3.3.2 Valutazione<br />
La valutazione di una espressione XPath produce un oggetto che può essere<br />
di quattro tipi diversi:<br />
- un insieme di nodi (una collezione non ordinata di nodi senza duplicati);<br />
- un valore booleano;<br />
-unnumero;
CAPITOLO 3. MODELLO DEI DATI 27<br />
- una stringa.<br />
La valutazione di un’espressione XPath dipende dal contesto in cui agisce l’<br />
espressione. Il contesto è costituito dai seguenti elementi:<br />
-unnodo(il nodo di contesto);<br />
- la posizione del nodo di contesto nell’ordine del documento (context<br />
position);<br />
- un insieme di legami di variabile (variable bindings);<br />
- una libreria di funzioni.<br />
I legami di variabile consistono in una funzione di mapping da nomi di variabile<br />
ai relativi valori.<br />
La libreria di funzioni consiste in una funzione di mapping da nomi di<br />
funzioni a funzioni. Ogni funzione prende zero o più elementi e restituisce<br />
un singolo risultato.<br />
3.3.3 Espressioni<br />
Esistono diversi tipi di espressioni, le più importanti sono quelle primarie e<br />
quelle di cammino.<br />
Primarie<br />
Sono le espressioni di base, a partire da cui vengono poi costruite espressioni<br />
più complesse, comprendono i letterali, i riferimenti a variabile, le chiamate<br />
di funzione e le parentesi per controllare l’ordine di valutazione.<br />
Cammino(Location path)<br />
Un location path è un’espressione XPath che consente di selezionare un insieme<br />
di nodi relativi al nodo di contesto. La valutazione di un’espressione
CAPITOLO 3. MODELLO DEI DATI 28<br />
di un location path produce un insieme di nodi contenenti i nodi specificati<br />
dal location path stesso.<br />
Un location path può contenere, in modo ricorsivo, espressioni che consentono<br />
di filtrare l’insieme di nodi. La sintassi di un location path ècomposta<br />
da uno o più location step separati l’uno dall’altro da una barra (“/”):<br />
step1/step2/step3<br />
Ogni location step, inoltre, consente di selezionare un set di nodi relativo<br />
al nodo di contesto, ovvero al nodo selezionato dal location step precedente.<br />
Un location path espresso in questo modo è un location path relativo. Un<br />
location path assoluto inizia con l’elemento principale che può essere “/”,<br />
nelqualcasoilcontestoinizialeèrappresentato dal nodo radice, o “//” che<br />
inizializza il contesto a tutti i nodi dell’albero.<br />
I location step di un location path vengono valutati da sinistra a destra.<br />
Il primo location step a sinistra consente di selezionare un set di nodi relativi<br />
al nodo di contesto. Tali nodi, quindi, diventano il contesto utilizzato per<br />
poter elaborare il location step successivo. L’elaborazione dei singoli location<br />
step e l’aggiornamento dei nodi di contesto vengono ripetuti fino a quando<br />
non saranno elaborati tutti i location step.<br />
Un location step è composto da tre parti:<br />
-unasse (axis), che specifica la relazione di parentela all’interno dell’albero<br />
tra il nodo di contesto ed i nodi che si vogliono selezionare;<br />
-unnode-test, che specifica il tipo di nodo che vogliamo selezionare;<br />
- zero o più predicati per filtrare ulteriormente l’insieme di nodi selezionati.
CAPITOLO 3. MODELLO DEI DATI 29<br />
La sintassi per un location step è la seguente:<br />
axis-name::node-test[pred-expression]<br />
L’insieme di nodi selezionato dal location step è l’insieme di nodi generati<br />
dall’axis edalnode-test filtrati da tutte le espressioni di filtro che seguono.<br />
Axes<br />
XPath mette a disposizione una grande varietà di metodi per selezionare i<br />
nodi all’interno di un albero; riportiamo solo i principali:<br />
- figlio (child), seleziona i figli del nodo di contesto;<br />
- discendenti (descendant), seleziona i discendenti del nodo di contesto,<br />
da notare che sono esclusi i nodi di tipo attributo e namespace;<br />
- padre (parent) seleziona il padre del nodo di contesto, se esiste;<br />
- antenato (ancestor) seleziona gli antenati del nodo di contesto;<br />
- se stesso (self ), seleziona il solo nodo di contesto.<br />
3.4 XQuery<br />
La grande diffusione dello standard XMLharesonecessariolacreazionedi<br />
strumenti e tecniche per interrogare i dati XML. XQuery nasce da queste<br />
esigenze ed è il linguaggio standard di interrogazione per XML. XQuery condivide<br />
con XPath sia il modello dei dati che l’intero insieme delle espressioni;<br />
inoltre mette a disposizione altre espressioni, di cui le più importanti sono le<br />
espressioni FLWOR.<br />
3.4.1 Le espressioni FLWOR<br />
Le espressioni FLWOR derivano il proprio nome dalle cinque clausole che le<br />
compongono: For, Let, Where, Order by e Return. Una espressione FLWOR
CAPITOLO 3. MODELLO DEI DATI 30<br />
deve specificare almeno una clausola let o for e necessariamente una clausola<br />
return.<br />
for $var1 in expr1 , $var2 in expr2<br />
let $var2 := expr2 ,$var3 := expr3<br />
where condizione<br />
order by ordinamento<br />
return expr3<br />
Le clausole for e let generano un flusso di tuple, dove ogni tupla mantiene dei<br />
legami tra un nome di variabile e una sequenza di item. La clausola where<br />
filtra le tuple che vengono poi ordinate dalla clausola order by. Infine la clausola<br />
return viene eseguita per ogni tupla prodotta e i risultati concatenati<br />
per ottenere il risultato dell’espressione FLWOR.<br />
In dettaglio la clausola for contiene una o più variabili, ognuna con una<br />
espressione associata (il cui valore è chiamato binding sequence). La clausola<br />
for itera su ogni variabile nella binding sequence, il flusso di tuple risultante<br />
contiene una tupla per ogni combinazione di valori nelle rispettive binding<br />
sequence. Ad esempio:<br />
for $i in (1, 2), $j in (3, 4)<br />
Il flusso generato dalla clausola for soprastante sarebbe la seguente:<br />
($i = 1, $j = 3)<br />
($i = 1, $j = 4)<br />
($i = 2, $j = 3)<br />
($i = 2, $j = 4)<br />
Una clausola let può contenereunaopiùvariabili, ognuna associata ad una<br />
espressione. Diversamente da una clausola for, la clausola let lega ogni variabile<br />
all’intera binding sequence, ovvero non è presente iterazione. I legami
CAPITOLO 3. MODELLO DEI DATI 31<br />
di variabile così generati sono aggiunti ad ogni tupla generata dalla clausola<br />
for. Nel caso non siano presenti clausole for, viene generata una sola tupla<br />
contenente i legami di variabile della clausola let.<br />
Sebbene entrambe le clausole for e let generino dei legami di variabile, il<br />
modo con cui sono legate è molto differente; per chiarirlo ricorriamo ad un<br />
esempio, supponiamo di avere la seguente espressione:<br />
let $s := (, , )<br />
return {$s}<br />
il risultato è il seguente:<br />
<br />
<br />
<br />
<br />
<br />
Consideriamo la stessa espressione utilizzando al posto di una clausola let<br />
una clausola for:<br />
for $s in (, , )<br />
return {$s}<br />
Il risultato, molto differente dal precedente, è il seguente:<br />
<br />
<br />
<br />
<br />
<br />
<br />
CAPITOLO 3. MODELLO DEI DATI 32<br />
<br />
<br />
L’espressione nella clausola where viene valutata per ognuna delle tuple nel<br />
flusso. Se il valore dell’espressione è false la tupla viene scartata.
Capitolo 4<br />
Compilazione<br />
Il capitolo introduce l’algebra di interrogazione per poi spiegare in dettaglio<br />
le fasi di compilazione ed interrogazione.<br />
4.1 Algebra di Interrogazione<br />
L’algebra di interrogazione è una evoluzione dell’algebra per dati XML centralizzati<br />
descritta in (Sar03). Il modello dei dati è stato esteso per poter<br />
modellare il concetto di dati distribuiti tra più peer, e di conseguenza è stata<br />
introdotta una nuova classe di operatori per la sua gestione.<br />
4.1.1 Modello dati<br />
Un documento XML ben-formato può essere rappresentato come un albero<br />
di nodi etichettati, detto istanza del modello dei dati.<br />
I nodi interni sono etichettati col loro nome, mentre le foglie col loro contenuto.<br />
Ad ogni nodo è inoltre associato un identificatore unico (oid), locale<br />
ad ogni singolo peer, ed un identificatore del peer (location, abbreviato loc).<br />
Da ora in poi utilizzeremo la stessa scrittura loci perindicaresialalocation<br />
che identifica un peer, sia le istanze del modello dei dati da esso pubblicato.<br />
33
CAPITOLO 4. COMPILAZIONE 34<br />
Le istanze del modello dei dati sono rappresentate come termini, generate<br />
dalla grammatica riportata in [Appendice C.1]. Consideriamo un peer identificato<br />
dalla location loc1 e supponiamo che pubblichi il seguente documento<br />
XML:<br />
<br />
<br />
IDA Pro<br />
Halvar<br />
2005<br />
<br />
<br />
Disassembling<br />
Kaspersky<br />
2007<br />
<br />
<br />
La corrispettiva istanza di modello sarebbe la seguente:<br />
Figura 4.1: Istanza del modello.<br />
Ad ogni nodo sono quindi associate tre funzioni:
CAPITOLO 4. COMPILAZIONE 35<br />
- label(n): restituisce l’etichetta associata al nodo n<br />
- oid(n): restituisce l’oid associataalnodon<br />
- loc(n): restituisce la location associata al nodo n<br />
4.1.2 Operatori<br />
Gli operatori algebrici manipolano strutture intermedie (Env) di tipo relazionale<br />
che servono a collezionare i binding di variabile generati durante la<br />
valutazione dell’interrogazione.<br />
Una struttura Env rappresenta un insieme di tuple, dove ogni tupla mantiene<br />
un insieme di associazioni tra nomi di variabile e una sequenza di nodi,<br />
identificati tramite la coppia: oid, loc.<br />
Gli operatori possono essere suddivisi in tre classi: di bordo, tradizionali<br />
e quelli sulle locazioni.<br />
OperatoridiBordo<br />
Path L’operatore pathf(t) data una istanza del modello dei dati t ed un<br />
input filter f produce una nuova struttura Env le cui tuple e binding<br />
di variabili sono creati come specificato nell’input filter. L’input filter<br />
indica quali nodi devono essere estratti dall’istanza dei dati e a quali variabili<br />
devono essere legati. Un input filter è descritto dalla grammatica<br />
riportata in [Appendice C.7.1];<br />
Return L’operatore Return returnof(e) svolge l’operazione complementare<br />
all’operatore Path, ovvero riceve in ingresso una struttura Env e<br />
produce un frammento XML. La struttura del frammento è specificata<br />
da un output filter. La grammatica dell’ output filter è riportata in<br />
[Appendice C.8.1].
CAPITOLO 4. COMPILAZIONE 36<br />
Operatori Tradizionali<br />
Sigma (Selezione) L’operatore di selezione σpred(e) prende in ingresso una<br />
struttura Env e, e ne produce una nuova contenente le sole tuple che<br />
soddisfano il predicato P eliminando le altre.;<br />
Union L’operatore Union prende in ingresso due strutture Env e1 ee2, con<br />
la medesima struttura delle tuple, e produce una nuova struttura Env<br />
contenente l’unione delle tuple in e1 ed e2.<br />
Operatori su Location<br />
L’operatore LocUnion, specificato come loc1 • loc2, produce l’unione delle due<br />
sequenze di termini ottenute dalla valutazione di loc1 eloc2. Questo operatore<br />
permette di specificare interrogazioni i cui dati provengono da molteplici peer,<br />
è quindi fondamentale nell’ambiente distribuito di XPeer.<br />
4.2 Protocollo di Compilazione<br />
L’immisione di una interrogazione da parte di un utente innesca il protocollo<br />
di compilazione. Lo scopo del protocollo di compilazione è trovare in modo<br />
selettivo, tra i peer della rete, quelli che possiedono i dati interessanti per la<br />
query sottomessa, escludendo quelli che sicuramente non hanno dati interessanti.<br />
Questo approccio permette di limitare significativamente il numero di<br />
peer contattati per l’esecuzione della query, ma non esclude totalmente che<br />
si possano contattare peer che non producono alcun dato per l’interrogazione<br />
corrente.<br />
Per raggiungere questo scopo ad ogni peer viene associato uno schema,<br />
o tree-guide. Questa struttura dati descrive in modo compatto il documento<br />
XML pubblicato. Analogamente, ad ogni superpeer è associato un superschema<br />
ottenuto per unione dei tree-guide dei suoi figli, siano essi peer o
CAPITOLO 4. COMPILAZIONE 37<br />
superpeer. Ogni superpeer inoltre memorizza anche i singoli schemi dei figli.<br />
Il protocollo di compilazione è una istanza del protocollo di MetaSearch.<br />
Il protocollo è innescato da un peer, il quale invia un messaggio contenente<br />
l’intero albero logico rappresentante l’interrogazione.<br />
Ogni superpeer che riceve un messaggio di compilazione identifica quali figli<br />
possiedono uno schema compatibile con l’interrogazione e li notifica al peer<br />
di origine; se i figli sono superpeer il messaggio viene inoltrato ai soli con<br />
schema compatibile.<br />
Figura 4.2: Esempio Compilazione<br />
Quando lo schema di un superpeer figlio non è compatibile significa che<br />
nessun peer discendente contiene dati interessanti. L’effetto finale è che vengono<br />
“potati” interi sottoalberi che non verrano mai raggiunti dalla richiesta<br />
di compilazione, limitando quindi il carico sul sistema.<br />
Il peer che ha inoltrato l’interrogazione attende di ricevere le risposte dai<br />
superpeer per un certo intervallo di tempo, ovvero attende fino allo scattare<br />
di un timeout, momento in cui il protocollo di compilazione termina e l’elen-
CAPITOLO 4. COMPILAZIONE 38<br />
co dei peer con schema compatibile viene utilizzato per completare l’albero<br />
logico relativo all’interrogazione.<br />
Una caratteristica del sistema è che ogni messaggio di richiesta di compilazione<br />
raggiunge sempre il superpeer radice dell’overlay network. La radice<br />
inoltre è a conoscenza del super-schema relativo all’intero database distribuito<br />
del sistema. Lo svantaggio implicito dell’ approccio utilizzato èchequesto<br />
comporta un enorme carico sulla radice, la quale quindi, per evitare problemi<br />
relativi a sovraccarico, deve essere opportunamente clonata in modo da<br />
ridistribuire il carico nel suo cloneset.<br />
4.3 Tree-Guide<br />
Il tree-guide è una foresta di alberi di nodi etichettati, dove ogni albero descrive<br />
tutte le navigazioni possibili su un singolo documento XML di origine,<br />
ovvero che danno risultato non vuoto.<br />
Per ogni cammino di un albero del tree-guide, dalla radice a ogni altro nodo,<br />
esiste almeno un cammino nel documento XML dalla radice a un nodo<br />
interno (non foglia) con la stessa sequenza di etichette del cammino.<br />
Il tree-guide è inferito automaticamente dal documento XML con un algoritmo<br />
che visita l’intera istanza del modello dei dati, raggruppando in un<br />
unico nodo del tree-guide tutti gli elementi figli, di uno stesso elemento, che<br />
hanno etichetta uguale.<br />
Ad esempio dato il seguente frammento XML<br />
<br />
<br />
Basi di Dati Laboratorio
CAPITOLO 4. COMPILAZIONE 39<br />
Giorgio Ghelli<br />
BDL<br />
<br />
<br />
Architetture Parallele e Distribuite<br />
Marco Vanneschi<br />
ASE<br />
<br />
<br />
il tree-guide associato è riportato in figura [4.3].<br />
Figura 4.3: Tree-Guide<br />
Ad ogni foglia è associato un nodo di tipo filtro, che non viene considerato<br />
ai fini della navigazione ma che contiene informazioni aggiuntive sui valori<br />
posseduti dalla foglia nel documento XML. Le informazioni sono memorizzate<br />
in modo compatto facendo ricorso a due strutture dati differenti: i filtri di<br />
Bloom eleliste di valori. Entrambe le strutture vengono create ed associate<br />
al nodo foglia al momento del caricamento dei dati, contestualmente alla<br />
creazione del tree-guide.<br />
In aggiunta alla descrizione dei valori, il nodo filtro specifica anche il
CAPITOLO 4. COMPILAZIONE 40<br />
tipo dei valori posseduti dal nodo foglia a cui è associato. Attualmente sono<br />
supportati solo i tipi integer e string. L’informazione sul tipo viene ricavata<br />
durante il processo di validazione, se al documento XML è stato associato<br />
uno schema, altrimenti vengono inferiti durante il caricamento dei dati.<br />
4.3.1 Filtri di Bloom<br />
Un filtro di Bloom è una struttura dati di tipo probabilistico usata per testare<br />
l’appartenenza di un elemento ad un insieme. Le caratteristiche principali<br />
sono:<br />
- consumo di memoria limitato;<br />
- operazioni di inserzione ed interrogazione in tempo costante;<br />
- assenza di falsi negativi.<br />
Un filtro di Bloom è composto da un vettore di m bit, inizialmente settati<br />
tutti a 0, e da k diverse funzioni di hash indipendenti h1(x),...,hk(x) che producono<br />
un valore (si suppone distribuito uniformemente) nel range [1,...,m].<br />
La probabilità di falsi positivi cresce all’aumentare degli elementi aggiunti<br />
all’insieme, in dettaglio dopo l’inserzione di n elementi la probabilità P di un<br />
falso positivo è data dalla seguente formula:<br />
i. P = 1 − e kn/m k<br />
La formula [i] raggiunge il suo minimo per valori di: k = ln2 ∗ m/n, nel<br />
qual caso diventa:<br />
ii. (1/2) k =(0.6185) m/n .
CAPITOLO 4. COMPILAZIONE 41<br />
La scelta dei valori di k e m risulta quindi cruciale per il corretto ed<br />
efficente funzionamento dei filtri di Bloom. Nella nostra implementazione<br />
abbiamo scelto di usare 5 funzioni di hash e utilizzare un rapporto m/n di<br />
valore 8 (facendo delle previsioni sul numero n di valori che ci aspettiamo<br />
vengano inseriti), che ci garantisce una probabilità di falsi positivi di 0.0217.<br />
Per inserire un elemento a si applicano in sequenza le k funzioni di hash<br />
p1=h1(a),...,pk=hk(a) e si pongono ad 1 gli elementi pi all’interno del vettore<br />
di bit. Un bit può essere posto ad 1 più volte, impedendo quindi la rimozione<br />
di un elemento dall’insieme a meno di non sostituire il vettore di bit con un<br />
vettore di contatori.<br />
elemento a<br />
h<br />
h<br />
h<br />
h<br />
a) = p<br />
1( 1<br />
a) = p<br />
2( 2<br />
a) = p<br />
3( 3<br />
a) = p<br />
4( 4<br />
Vettore di bit<br />
Figura 4.4: La figura mostra un esempio di inserimento.<br />
Per verificare che un generico elemento b appartenga all’insieme, le k<br />
funzioni di hash p1=h1(b),...,pk=hk(b) vengono applicate a b. L’elemento b<br />
appartiene all’insieme con una certa probabilità 1-P(sivedai)setuttiibit<br />
nelle posizioni pi sono tutti posti ad 1, altrimenti l’elemento non appartiene<br />
all’insieme.<br />
1<br />
1<br />
1<br />
1
CAPITOLO 4. COMPILAZIONE 42<br />
4.3.2 Liste di Valori<br />
Le liste di valori sono delle liste di valori posseduti dalla foglia nel documento<br />
XML. Poichè il nodo filtro deve essere di dimensione limitata, non possono<br />
essere inclusi tutti i valori presenti nel documento XML ma solo un estratto.<br />
Inoltre è stata presa la decisione di memorizzare nelle liste solo valori di tipo<br />
numerico.<br />
4.3.3 Unione Tree-guide<br />
L’operazione di unione di due tree-guide viene calcolata da un superpeer su<br />
tutti i tree-guide dei suoi figli. L’unione di due tree-guide avviene con un<br />
algoritmo che visita entrambi gli alberi e raggruppa in un unico nodo tutti<br />
gli elementi dello stesso livello con etichetta uguale.<br />
Figura 4.5: La figura mostra il tree-guide risultante (c) dall’unione di due<br />
tree-guide (a) e (b)<br />
L’unione di due o più nodi filtro comporta l’unione delle strutture dati in<br />
essi contenute. L’unione di due filtri di Bloom è una semplice operazione di<br />
or sui due vettori di bit (che devono avere necessariamente la stessa dimensione).<br />
L’unione di due liste di valori comporta la creazione di una nuova<br />
lista contenente gli elementi di entrambe senza ripetizioni.
CAPITOLO 4. COMPILAZIONE 43<br />
In seguito all’unione di due filtri di Bloom viene verificato che la cardinalità<br />
dei bit settati ad 1 non superi una certa soglia oltre la quale la probabilità<br />
di un falso positivo risulta troppo elevata.<br />
Analogamente per liste di valori viene verificato che la cardinalità della lista<br />
risultante dalla unione non superi una certa soglia, oltre la quale la struttura<br />
richiede un consumo di memoria troppo elevato.<br />
In entrambi i casi in cui viene superata la soglia, la corrispettiva struttura<br />
dati viene marcata come wildcard, ovveroècome se contenesse tutti i valori<br />
possibili.<br />
4.4 Albero Logico<br />
Il primo passo della fase di compilazione consiste nel trasformare l’interrogazione<br />
nell’albero logico corrispondente. Ad esempio la seguente query,<br />
verrebbe tradotta nell’albero logico riportato in figura[4.6].<br />
for $c in $db//course,<br />
$t in $c/title<br />
where $t="ASE"<br />
return $c<br />
L’albero logico come accade anche nei database tradizionali, è una struttura<br />
dati intermedia che descrive la query in modo strutturato e permette di<br />
manipolarla con facilità, ad esempio per applicare ottimizzazioni prima che<br />
venga tradotto nell’albero fisico.<br />
La radice di un albero logico è sempre un operatore Return, mentre le<br />
foglie sono sempre operatori Path. L’operatore Path rappresenta le navigazioni<br />
da fare sull’intero database distribuito. Poichè il database distribuito è<br />
composto dall’insieme di tutti i documenti pubblicati dai peer, sarebbe sufficiente<br />
assegnare ad ogni Path una funzione location ottenuta come unione di
CAPITOLO 4. COMPILAZIONE 44<br />
Figura 4.6: Esempio di Albero Logico<br />
tutte le funzioni location dei peer presenti nel sistema. Questa soluzione ha<br />
l’ovvio svantaggio (non trascurabile) che nella fase successiva di esecuzione<br />
verrebbero contattati anche peer che non hanno dati interessanti.<br />
Lo scopo della fase di compilazione è appunto di determinare l’insieme<br />
dei soli peer rilevanti ovvero tutti quelli che al momento dell’esecuzione produranno<br />
qualche risultato.<br />
La fase di compilazione termina quindi con il completamento dell’albero<br />
logico, specificando per ogni nodo Path foglia, la funzione location da utilizzare,<br />
costruita come l’unione (tramite l’operatore LocUnion) delle location<br />
(operatore Location) corrispondenti ai peer compatibili.<br />
Poichè per determinare esattamente quali peer sono interessanti sarebbe<br />
necessario eseguire l’esecuzione su tutti i peer presenti nel sistema, di fatto<br />
rendendo inutile la fase di compilazione distribuita, si preferisce determinare<br />
l’insieme di peer che potrebbero produrre risultati.
CAPITOLO 4. COMPILAZIONE 45<br />
Figura 4.7: Esempio di Albero Logico<br />
4.5 Algoritmo di Schema Matching<br />
L’algoritmo eseguito da ogni superpeer per verificare la compatibilità diun<br />
interrogazione con gli schemi dei figli è chiamato schema matching. L’algoritmo<br />
di schema matching consiste nell’esecuzione simulata dell’interrogazione<br />
sullo schema.<br />
L’esecuzione simulata inizia dall’operatore Path, che effettua una navigazione<br />
all’interno del tree-guide producendo tuple, ad ognuna delle quali è<br />
associato l’identificatore del nodo Path che l’ha generata.<br />
Se viene prodotta almeno una tupla, significa che la corrispondente navigazione<br />
effettuata sul documento XML di origine, posseduto da un peer,<br />
produrrebbe almeno una tupla. Questo accade per via della proprietà pos-
CAPITOLO 4. COMPILAZIONE 46<br />
seduta dal tree-guide enunciata precedentemente.<br />
L’operatore Sigma ha il compito di filtrare le tuple in base ad un predicato<br />
composto da più condizioni semplici, della forma var operatore-confronto<br />
costante, collegate da operatori logici and e or.<br />
La valutazione del predicato avviene valutando le condizioni nel seguente<br />
modo:<br />
i. dal nome di variabile contenuta nella condizione si risale, attraverso<br />
i legami di variabile contenuti nella tupla, al nodo del tree-guide<br />
associato;<br />
ii. dal nodo precedentemente identificato si risale al nodo filtro associato<br />
e si usano le informazioni contenuto in esso per valutare la consizione;<br />
iii. in particolare i filtri di Bloom sono usati per i confronti con operatore<br />
di uguaglianza, sia su tipi numerici che stringa. Le liste di valori invece<br />
sono usate per disuguaglianza su tipi esclusivamente numerici. I casi<br />
intermedi sono trattati utilizzando una combinazione delle precedenti.<br />
Nel caso una delle strutture dati sia marcata come wildcard il confronto<br />
da sempre esito positivo.<br />
L’operatore Return si limita a restituire tutte le tuple che riceve. L’algoritmo<br />
termina restituendo l’insieme degli identificatori dei nodi Path, estratto<br />
dalle tuple ottenute con l’esecuzione simulata. Quindi, se qualche nodo viene<br />
restituito c’è corrispondenza fra l’interrogazione e lo schema nel qual caso<br />
il peer a cui è associato lo schema viene considerato interessante. Nel caso<br />
l’albero sia composto da più operatori Path foglia composti tramite operatori<br />
Union, quest’ultimo si limita a restituire al padre tutte le tuple che riceve<br />
dagli operatori figli.
Capitolo 5<br />
Esecuzione<br />
5.1 Protocollo di Esecuzione<br />
La fase immediatamente successiva a quella di compilazione è l’esecuzione.<br />
In questa fase l’albero logico prodotto dalla compilazione è stato completato<br />
aggiungendo le informazioni su come localizzare i peer (location) ainodi<br />
Path. All’albero così ottenuto vengono applicate una serie di riscritture per<br />
permetterne successivamente l’ottimizzazione eladecomposizione.<br />
L’ ottimizzazione avviene applicando all’albero logico una serie di riscritture<br />
volte a minimizzare il costo dell’interrogazione e permetterne la successiva<br />
decomposizione.<br />
La decomposizione consiste nell’individuare porzioni dell’albero logico (a<br />
cui è dato il nome di pipe) la cui esecuzione può esseredelegataadunpeer<br />
remoto. Il risultato della decomposizione è un albero di pipe, ognuna delle<br />
quali associata al peer su cui deve essere eseguita. La fase finale consiste nel<br />
tradurre ulteriormente l’albero di pipe in un piano di accesso in cui le pipe<br />
destinate a peer remoti vengono sostituite da opportuni operatori il cui compito<br />
è inviare la pipe al peer di appartenenza e ricevere in seguito i risultati.<br />
47
CAPITOLO 5. ESECUZIONE 48<br />
5.1.1 Riscrittura dell’ Albero Logico<br />
Le riscritture attualmente implementate in XPeer sono la distribuzione delle<br />
unioni el’anticipazione delle selezioni.<br />
La distribuzione delle unioni traduce le unioni di locazioni sotto un<br />
operatore Path in unioni di Path ognuno con una singola funzione location.<br />
La proprietà utilizzata è la seguente:<br />
∀l1,l2 ∈ loc : pathf((l1 • l2)(x)) = pathf(l1(x)) ∪ pathf(l2(x))<br />
Figura 5.1: Distribuzione delle Unioni<br />
L’anticipazione delle selezioni consiste nel portare le selezioni in fondo<br />
all’albero facendo in modo che queste vengano eseguite dai peer remoti,<br />
riducendo così laquantitàdidati inviati e di conseguenza alleggerendo le<br />
computazioni che il peer locale deve eseguire. La proprietè usataèl’antici-
CAPITOLO 5. ESECUZIONE 49<br />
pazione delle selezioni rispetto alle unioni:<br />
∀e1,e2 : σP (e1 ∪ e2) =σP (e1) ∪ σP (e2)<br />
Figura 5.2: Anticipazione delle Selezioni<br />
5.1.2 Decomposizione dell’ Albero Logico<br />
La decomposizione crea un albero binario di pipe. Ognuna di queste contiene<br />
un frammento di albero logico e l’identificatore del peer su cui deve essere<br />
eseguita. La radice dell’albero di pipe contiene al suo interno sempre un<br />
operatore di tipo Return che viene eseguito sul peer da cui è partita la<br />
richiesta di esecuzione(peer corrente). Tipicamente la pipe inviata ad un<br />
peer remoto è costituita da un operatore di selezione, Sigma, seguito da un<br />
operatore Path, la cui funzione location identifica proprio il peer remoto.<br />
L’albero di pipe così formato viene poi trasformato nel piano di accesso<br />
distribuito. In particolare a partire dalla radice viene visitato l’intero albero,
CAPITOLO 5. ESECUZIONE 50<br />
Figura 5.3: La figura mostra un albero di pipe, evidenziando i frammenti di<br />
albero logico.<br />
ogni frammento di piano logico contenuto in una pipe assegnato al peer corrente<br />
viene tradotto in un pezzo del piano d’accesso parziale. I vari frammenti<br />
così creati vengono poi collegati tra loro rispettando la struttura dell’albero<br />
di pipe.<br />
Quando viene processata una pipe non assegnata al peer corrente viene<br />
generato un operatore fisico (XMLExternalQueryOp) che si occupa all’inizio<br />
dell’esecuzione di inviare il frammento contenuto nella pipe al peer<br />
remoto e in seguito di richiedere e riceve i risultati dal suddetto peer. Il peer<br />
remoto che riceve il frammento deve a sua volta tradurre il frammento in<br />
un piano d’accesso la cui radice è un operatore di tipo XMLExternalResultOp,<br />
che svolge le funzioni complementari a XMLExternalQueryOp,<br />
ovvero riceve le richieste dei dati e si preoccupa di inviare i dati al peer che<br />
ha richiesto l’esecuzione.
CAPITOLO 5. ESECUZIONE 51<br />
Le comunicazioni fra questi due operatori sono vincolate da timeout per<br />
evitare attese infinite da parte del peer corrente nell’eventualità incuisi<br />
verifichino problemi di connessione o il peer remoto non sia più raggiungibile.<br />
In questi casi l’esecuzione procede normalmente senza però ricevere le tuple<br />
dai peer remoti interessati.
Capitolo 6<br />
Risultati Sperimentali<br />
6.1 Introduzione<br />
Parte del nostro tirocinio è stata dedicata alla conduzione di esperimenti<br />
mirati alla verifica della correttezza del protocollo di compilazione e alla<br />
misurazione del grado di precisione raggiunto.<br />
6.2 Ambiente di Sperimentazione<br />
Gli esperimenti sono stati condotti su una rete composta da 5 nodi con<br />
sistema operativo Linux con la seguente configurazione software:<br />
- JDK versione 1.5.09;<br />
- Ant 1.7.0<br />
Prima di ogni esperimento sono stati sincronizzati (via NTP) tutti gli<br />
orologi delle macchine sull’ora italiana per assicurarci che la rilevazione dei<br />
tempi fosse quanto più accurata possibile.<br />
52
CAPITOLO 6. RISULTATI SPERIMENTALI 53<br />
6.3 Testing<br />
Per simulare un ambiente di utilizzo quanto più reale possibile abbiamo ricreato<br />
in laboratorio un tipico scenario medio-piccolo (imposto dalle risorse<br />
a nostra disposizione) di utilizzo del sistema XPeer. Abbiamo quindi creato<br />
manualmente (ovvero imponendo la struttura alla rete, senza lasciare che i<br />
peers si connettessero liberamente) una rete a due livelli con 25 peers.<br />
La costruzione della rete è stata guidata tramite uno strumento orchestratore<br />
(xOrch) con cui è possibile creare e poi successivamente comandare<br />
e monitorare, in modo distribuito, peer e superpeer.<br />
Ad ogni peer è stato assegnato un frammento XML(si veda Appendice<br />
A) estratto in modo casuale dal dataset University Courses XML. La scelta è<br />
stata ancora una volta dettata dalla necessità di condurre gli esperimenti su<br />
un ambiente quanto più reale possibile in cui tutti i nodi pubblicano qualche<br />
informazione ma con un limitato grado di disomogeneità.<br />
Contestualmente alla scelta del dataset di documenti XML sono state<br />
create le interrogazioni da sottomettere al sistema (si veda Appendice B).<br />
La creazione delle query è stata guidata in parte dalla necessità di verificare<br />
la correttezza delle singole funzionalità come gli operatori di confronto stringhe/interi,<br />
l’operatore unione; dall’altra di misurare la precisione del sistema.<br />
L’intera lista di interrogazioni così formataèstata sottomessa da ogni<br />
peer ( per confrontare i risultati della compilazione relativi a peer diversi) e<br />
con varie modalità:<br />
- una di seguito all’altra, un peer per volta;<br />
- tutte contemporaneamente, un peer per volta;
CAPITOLO 6. RISULTATI SPERIMENTALI 54<br />
- una di seguito all’altra da tutti i peer contemporaneamente;<br />
- tutte contemporaneamente da tutti i peer contemporaneamente.<br />
L’esperimento finora descritto è stato condotto più volte variando le dimensioni<br />
dei filtridibloomedelle liste di valori per valutare il variare del<br />
livello di precisione in relazione a quei due parametri.<br />
6.4 Verifica dei Risultati<br />
La correttezza dei risultati della compilazione è stata condotta in modo automatizzato<br />
comparando i risultati ricavati dal sistema con quelli ottenuti<br />
da un ben noto strumento per l’interrogazione e la validazione di documenti<br />
XML: Galax.<br />
Ogni interrogazione sottomessa al sistema è stata valutata con Galax su<br />
ogni singolo documento XML presente nel sistema ed il risultato memorizzato.<br />
La presenza di un risultato non vuoto indica che il documento XML<br />
conteneva informazioni rilevanti per l’interrogazione.<br />
Poichè siamo in grado di risalire dal documento XML al peer in suo possesso,<br />
abbiamo ricavato, per ogni interrogazione, la lista esatta dei peer con<br />
informazioni rilevanti. L’insieme di liste così ottenuta è stata utilizzata per<br />
effettuare i confronti con le rispettive liste prodotte a partire dai risultati<br />
delle compilazioni effettuate sul sistema.<br />
I confronti ci hanno aiutato in un primo periodo nella correzione degli<br />
errori e successivamente nella misurazione della precisione.
CAPITOLO 6. RISULTATI SPERIMENTALI 55<br />
6.5 Risultati<br />
Si è voluto valutare il riscontro delle query positive e l’errore assoluto di<br />
compilazione per le query negative, dove l’errore di compilazione èricavato<br />
valutando la differenza tra peer rilevati in fase di compilazione come possessori<br />
di dati interessanti e quelli che effettivamente sono in possesso di dati<br />
rilevanti.<br />
Figura 6.1: La figura mostra la precisione delle query con e senza l’uso dei<br />
filtri di Bloom (con diverse configurazioni).<br />
Il risultato dei test ha mostrato come il sistema raggiunga un alto grado<br />
di precisione ed inoltre dall’analisi dell’errore assoluto di compilazione non<br />
sono stati riscontrati falsi positivi.
CAPITOLO 6. RISULTATI SPERIMENTALI 56<br />
6.6 Strumenti<br />
Per automatizzare il più possibile l’esecuzione degli esperimenti abbiamo sviluppato<br />
un insieme di programmi che ci hanno aiutato, assieme all’orchestratore,<br />
nella fase di setup delle varie macchine e poi nella verifica dei risultati.<br />
Il primo strumento, realizzato in Python, ci ha aiutato a configurare tutte<br />
le macchina a nostra disposizione nello stesso modo, evitanto di ripetere<br />
manualmente la stessa procedura ogni volta che era necessario rieseguire l’esperimento.<br />
Il programma è concettualmente semplicemente in quanto esegue, in parallelo<br />
su tutte le macchine a nostra disposizione, una lista di comandi che<br />
gli viene passata come parametro.<br />
In dettaglio viene stabilita una connessione tramite il protocollo SSH e<br />
su questo canale vengono inviati i comandi e restituiti i risultati.<br />
La verifica dei risultati, come precedentemente descritta, è stata condotta<br />
con l’aiuto di un insieme di script Python:<br />
- generate-galax.py: genera per ogni interrogazione l’elenco esatto di peer<br />
con informazioni interessanti e memorizza su file il risultato dell’interrogazione<br />
stessa;<br />
- generate-xpeer.py: analizza i dati prodotti dal sistema e genera per ogni<br />
coppia peer-interrogazione la lista dei peer riportata dal protocollo di<br />
compilazione;<br />
- verify.py: confronta le liste dei singoli peer con quella esatta prodotta<br />
da Galax e segnala eventuali differenze.
Capitolo 7<br />
Conclusioni<br />
In questa relazione sono stati presentati i principali aspetti progettuali e implementativi<br />
che hanno riguardato il lavoro da noi svolto durante il tirocinio.<br />
Tirocinio svolto nell’ambito del progetto di ricerca XPeer del gruppo di Basi<br />
di Dati del Dipartimento di Informatica dell’Università diPisa.<br />
Durante il tirocinio ci siamo occupati principalmente del completamento e<br />
della verifica della fase di compilazione e di esecuzione delle query all’interno<br />
del sistema.<br />
Esperienze Acquisite<br />
L’aspetto di maggiore complessità del lavoro svolto è stato il fatto di dover<br />
intervenire su sistemi software preesistenti. L’esperienza formativa acquisita<br />
è relativa alla progettazione e realizzazione di un sistema distribuito.<br />
57
Appendice A<br />
Frammenti XML<br />
<br />
<br />
24224<br />
E E<br />
311<br />
<br />
01<br />
ELECTRONICS<br />
3<br />
M,W,F<br />
<br />
9:10<br />
<br />
<br />
<br />
SLOA<br />
9<br />
<br />
RINGO<br />
0064<br />
0033<br />
<br />
58
Appendice B<br />
Insieme Query<br />
1. for $c in $db//course, $l in $c/level where $l = "U" return $c/title<br />
2. for $c in $db//course, $en in $c/enrolled where $en >= 5 return $c/title<br />
3. for $c in $db//course, $cr in union($c/credits, $c/credit) where<br />
$cr > 6 return $c<br />
4. for $r in $db/root, $inst in $r/institution, $c in $r//course,<br />
$cr in $c/credits where $c/credits > 4 and $inst = "wsu" return $c<br />
5. for $c in $db//course, $p in union($c/prefix, $c/subj) where $p =<br />
"CHEM" return $c<br />
6. for $c in $db//course where $c/instructor = "Parker" return $c<br />
7. for $c in $db//course, $l in $c/lab, $li in $c/limit where $li<br />
= 25 return $c<br />
9. for $r in $db/root, $inst in $r/institution, $c in $r/course<br />
where $inst = "Stanford" return $c<br />
10. for $c in $db//course, $l in $c/level, $en in $c/enrolled where<br />
$l = "U" and $en >= 25 return $c<br />
59
Appendice C<br />
Algebra di Interrogazione<br />
In questa appendice è presentata la formalizzazione completa dell’algebra di interrogazione<br />
di XPeer.<br />
C.1 Modello dei Dati<br />
C.2 Funzioni<br />
1. label(n) =label;<br />
2. oid(n) =oid;<br />
3. loc(n) =loc;<br />
t ::= t1,...,tm | n[t] | n alberi<br />
n ::= (oid, loc)label nodi<br />
dove label ∈ String.<br />
4. contentp(db) = t1,...,tn tali che ti sono le istanze del modello dei dati<br />
pubblicate dal peer p sotto il database db.<br />
C.3 Env<br />
Quattro operazioni di base sono definite sulle strutture Env e sulle tuple:<br />
1. t.A = tj dove A = labelj (dove t è una tupla) (estrazione di campo);<br />
2. t. →<br />
A= {ti1,...,tip} dove →<br />
A= {labeli1 ,...,labelip) (ripetuta estrazione di<br />
campo);<br />
60
APPENDICE C. ALGEBRA DI INTERROGAZIONE 61<br />
3. t ↓ →<br />
A= [labeli1 : ti1,...,labelip : tip] dove →<br />
A= {labeli1 ,...,labelip);<br />
4. ◦, un operatore di concatenazione tra tuple.<br />
C.4 Operatori di Supporto<br />
1. e[x] ={[x : t] | t ∈ e}<br />
<br />
{}<br />
2. child(t) =<br />
{t1,...,tn}<br />
se t = n<br />
se t = n[t1,...,tn]<br />
3. descendant(t) = child(t) ∪ <br />
ti∈child(t) descendant(ti)<br />
4. self(t) ={t1,...,tn | t = t1,...,tn}<br />
5. selfdescendant(t) =self(t) ∪ descendant(t)<br />
6.<br />
⎧<br />
nav(op)(label)(t1,...,tn) =<br />
⎨ {ti | label(ti) =label} se op =<br />
{t<br />
⎩<br />
′ j ∈ n i=1 child(ti) | label(t ′ j )=label} se op = /<br />
)=label} se op = /<br />
{t ′ j ∈ n<br />
i=1 selfdescendant(ti) | label(t ′ j<br />
C.5 Operatori di Base<br />
Map χe f = {f(t) | t ∈ e}<br />
Join e1 ⊲⊳ f<br />
pred e2 = {f(t1,t2) | t1 ∈ e1 & t2 ∈ e2 & pred(t1,t2)}<br />
TupJoin e1 TupJoin prede2 = {t1 ◦ t2 | t1 ∈ e1 & t2 ∈ e2 & pred(t1,t2)}<br />
DJoin e1 = {y ◦ x | y ∈ e1 & x ∈ e2(y)}<br />
Selection σpred(e) ={t ∈ e | pred(t)}<br />
Projection π→(e)<br />
={t ↓→A<br />
| t ∈ e}<br />
A<br />
C.6 Operatori sulle Locazioni<br />
LocUnion (loc1 • loc2)(x) =loc1(x),loc2(x) doveloc1 e loc2 sono funzioni location.
APPENDICE C. ALGEBRA DI INTERROGAZIONE 62<br />
C.7 Path<br />
C.7.1 Grammatica degli Input Filter<br />
C.7.2 Path<br />
F ::= F1,...,Fn di giunzione<br />
| F1 ∨ ...∨ Fn di disgiunzione<br />
| (op,var,binder)label[F ] semplice<br />
| ∅ vuoto<br />
dove op ∈{/, //, }<br />
var, label ∈ String ∪{ }<br />
binder ∈{ , in, =}<br />
1. Se f = f1,...,fm allora<br />
path f(t) =path f1 (t) TupJoin true...TupJoin true path fm (t);<br />
2. se f = f1 ∨ ...∨ fm allora<br />
path f(t) =path f1 (t)OuterUnion...OuterUnion path fm (t);<br />
3. se f =( , , binder)label[∅] allora<br />
path f(t) ={};<br />
4. se f =( , , binder)label[F ] allora<br />
path f(t) =path F (nav( )(label)(t));<br />
5. se f =(op, v, in)label[∅] allora<br />
path f(t) =nav(op)(label)(t)[v];<br />
6. se f =(op, v, =)label[∅] allora<br />
path f(t) ={[v :nav(op)(label)(t)]};<br />
7. se f =(op, v, in)label[F ]et = t1,...,tn allora<br />
pathf(t) = <br />
ti∈nav(op)(label)(t) {[v : ti]} TupJoin true pathF (ti);<br />
8. se f =(op, v, =)label[F ]et = t1,...,tn allora<br />
pathf(t) ={[v :nav(op)(label)(t)]} TupJoin true pathF (nav(op)(label)(t));<br />
9. se f =(op, , )label[∅] et = t1,...,tn allora<br />
path f(t) ={};<br />
10. se f =(op, , )label[F ]et = t1,...,tn allora<br />
path f(t) =path F (nav(op)(label)(t));<br />
11. se f = ∅ e t = t1,...,tn allora<br />
path f(t) ={}.
APPENDICE C. ALGEBRA DI INTERROGAZIONE 63<br />
C.8 Return<br />
C.8.1 Grammatica degli Output Filter<br />
C.8.2 Return<br />
dove<br />
1. Se of = vB allora<br />
returnof (e) = n<br />
i=1 vB<br />
dove e = {t1,...,tn};<br />
OF ::= OF1,...,OFn<br />
| label[OF] elementi<br />
| @label[val] attributi<br />
| val<br />
val ::= vB | var | νvar valore o variabile<br />
2. se of = var allora<br />
returnof (e) ={t.var | t ∈ e};<br />
3. se of = νvar allora<br />
returnof (e) ={refreshoid(t.var) | t ∈ e};<br />
4. se of =@label[val] allora<br />
returnof (e) = n<br />
i=1 @label[returnval({ti})]<br />
dove e = {t1,...,tn};<br />
5. se of = label[of ′ ] allora<br />
returnof (e) = n i=1 label[returnof ′({ti})]<br />
dove e = {t1,...,tn};<br />
6. se of = of1,...,ofn allora<br />
returnof (e) = n returnof1 ({ti}),...,returnofn i=1 ({ti})<br />
dove e = {t1,...,tn};<br />
1. refreshoid(t1,...,tn) =refreshoid(t1),...,refreshoid(tn);<br />
2. refreshoid((oid, loc)label[t]) = (nu(oid),loc)label[refreshoid(t)];<br />
3. refreshoid((oid, loc)@label[vB]) = (nu(oid),loc)label[vB];<br />
4. refreshoid((oid, loc)label) =(nu(oid),loc)label.
Bibliografia<br />
[SMGC04] Carlo Sartiani and Paolo Manghi and Giorgio Ghelli and Giovanni<br />
Conforti. XPeer: A Self-organizing XML P2P Database<br />
System, 2004.<br />
[SMGC07] Carlo Sartiani and Paolo Manghi and Giorgio Ghelli and<br />
Giovanni Conforti, 2007. Scalable Query Dissemination in<br />
XPeer.<br />
[Sar03] Carlo Sartiani. Efficient Management of Semistructured XML<br />
Data, 2003.<br />
[Gio05] Nicola Gioia. Un sistema Peer-to-Peer per l’interrogazione<br />
distribuita di dati XML, 2005. <strong>Tesi</strong> di laurea.<br />
[Bat05] Giovanni Battaglia. XPeer: robustezza rispetto ai fallimenti,<br />
2005. Relazione di tirocinio.<br />
[PT06] Pardini Giovanni, Paolo Tomei . XPeer: Modulo per la gestione<br />
delle interrogazioni del sistema XPeer, 2006. Relazione di<br />
tirocinio.<br />
[Def07] Federico De Faveri. XPeer: ACL di XPeer, 2007. Relazione di<br />
tirocinio.<br />
[Par07] Pardini Luca. XPeer: un orchestratore per XPeer, 2007.<br />
Relazione di tirocinio.<br />
[BDB] Berkeley DB, Sleepycat Software. http://www.sleepycat.com.<br />
[XML] World Wide Web Consortium. Extensible Markup<br />
Language (XML) 1.0 (Third Edition).<br />
http://www.w3.org/TR/2004/REC-xml-20040204.<br />
[XPath] World Wide Web Consortium. XML Path Language (XPath)<br />
Version 2.0. http://www.w3.org/TR/2005/CR-xpath20-<br />
20051103.<br />
64
BIBLIOGRAFIA 65<br />
[Xml-Schema] World Wide Web Consortium. XML Schema Datatypes Version<br />
1.1. http://www.w3.org/TR/2006/WD-xmlschema11-2-<br />
20060217/.<br />
[Xml-Schema] World Wide Web Consortium. XML Schema Structure Version<br />
1.1. http://www.w3.org/TR/2006/WD-xmlschema11-1-<br />
20060831/.<br />
[XQuery] World Wide Web Consortium. XQuery 1.0: An XML Query<br />
Language. http://www.w3.org/TR/2005/CR-xquery-20051103.<br />
[Xdm] World Wide Web Consortium. XQuery 1.0 and XPath 2.0<br />
Data Model (XDM). http://www.w3.org/TR/2005/CR-xpathdatamodel-20051103.<br />
[mqp] Vassilis Papadimos and David Maier and Kristin Tufte. Distributed<br />
Query Processing and Catalogs for Peer-to-Peer<br />
Systems.<br />
[Galax] Galax Team. http://www.galaxquery.org/.<br />
[Python] Guido van Rossum. http://www.python.org/.<br />
[Dataset] http://www.cs.washington.edu/research/xmldatasets/.