20.05.2013 Views

Tesi Michele Freschi e Donato Ferrante

Tesi Michele Freschi e Donato Ferrante

Tesi Michele Freschi e Donato Ferrante

SHOW MORE
SHOW LESS

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/.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!