• Non ci sono risultati.

2.2 Hypertree Decomposition

2.2.7 Un modello di costo

Il costo reale del processamento di una decomposizione non si pu`o, in generale, misurare esattamente senza eseguire tutte le operazioni necessarie. L’utilizzo di modelli per effettuare delle stime `e dunque un passo obbligatorio per stabilire un confronto quantitativo tra i diversi piani di valutazione.

I modelli di costo nei DBMS commerciali considerano; indici, dimensioni dei blocchi, dimensioni della cache, tempo di CPU, tempo di spostamento della testina su disco, etc.

Prendere in considerazione tutti questi parametri `e fisici `e sicuramente al di fuori degli scopi di questo lavoro e complicherebbe soltanto la descrizione degli aspetti pi`u rilevanti del lavoro. Si `e deciso pertanto di utilizzare un modello di costo pi`u semplice, basato sul numero di tuple delle relazioni in input e delle relazioni intermedie generate durante il processamento. Sebbene non ideale, una tale stima per il costo `e ragionevole ed ampiamente utilizzata in letteratura. E’ stato inoltre osservato che, se la valutazione di un piano `e n secondo tale modello di costo, allora il costo del miglior metodo possibile sar`a limitato superiormente da O(n · log n) e non potr`a sicuramente essere meno di Ω(n).

Intuitivamente, l’uso dell’euristica che seleziona i piani che minimizzano la somma delle tuple delle relazioni coinvolte `e giustificato dalla dipendenza li- neare che sussiste tra la dimensione fisica e la cardinalit`a di una relazione. La riduzione della dimensione fisica si traduce in una diminuzione delle operazio- ni di I/O necessarie a leggere/scrivere le relazioni sul disco. E’ facile capire che la diminuzione degli accessi al disco implica un miglioramento naturale nel tempo d’esecuzione degli algoritmi che eseguono il piano di valutazione fisico determinato dall’ottimizzatore.

Infatti, se si riesce a ridurre significativamente il numero complessivo delle tuple coinvolte si pu`o dunque influenzare significativamente il costo effettivo del piano.

Alla stregua di tali considerazioni, `e possibile definire brevemente il costo associato ad una decomposizione HD = hT, χ, λi per un’interrogazione Q come la somma delle cardinalit`a delle relazioni di base, associate ai vertici di T, e delle relazioni intermedie generate per valutare Q.

Si noti che le operazioni algebriche utilizzate nei piani di valutazione a cui si `e interessati sono join multiple (associate ai vertici delle decomposizioni) e semijoin multiple (associate agli archi tra padre e figli). Si esprimer`a un parti- colare ordinamento nell’esecuzione di tali operazioni attraverso una espressione di join definita come segue.

Espressione di join e costo associato. Una espressione di join `e un’espres- sione dell’algebra relazionale in cui occorrono semplicemente: relazioni come operandi, operatori di join (on) come operatori binari, e parentesi. Una espres- sione di join indicata con E( on R) specifica un piano di valutazione parziale per la join multipla on R.

Il costo associato ad un’espressione di join E, denotato con con cost(E), `

e definito come la somma delle cardinalit`a delle relazioni intermedie prodotte dagli operatori binari di join. Si noti che non abbiamo considerato in cost(E) le relazioni di input (gli operandi) di E, che saranno comunque tenute in conto diversamente nelle definizioni che seguiranno.

Esempio 2.2.5. Si vuole valutare la join multipla di quattro relazioni i cui schemi sono:

R1(A, B), R2(B, C), R3(C, D), R4(D, A)

Una possible espressione di join che suggerisce come effettuare tale valuta- zione `e:

2.2. HYPERTREE DECOMPOSITION 37 E = (R1on R2) on (R3on R4)

Quest’espressione relazionale indica che devono essere valutate inizialmente ed indipendentemente:

(R1on R2)e(R3on R4)

Ed infine utilizzare il risultato intermedio delle due per valutare la join com- plessiva. Se si denota con |R| la cardinalit`a della relazione R, il costo di tale ordinamento `e espresso da:

cost(E) = |R1on R2| + |R3on R4| + |(R1on R2) on (R3on R4)|

cio`e `e costituito, secondo quanto detto, dalle cardinalit`a delle sole relazioni

generate. 

Il metodo prevalentemente usato per l’identificazione di un ordinamento ot- timale secondo un certo modello di costo `e basato sulla programmazione dina- mica. Questo `e in sintesi un algoritmo che enumera tutte le possibili espressioni (piani) di join in modo tale da poterne confrontare i rispettivi costi. Se si con- siderano join tra pi`u di 5 o 6 relazioni, l’uso di questo metodo, per`o, diventa proibitivo. Si ricorre dunque ad altre strategie che riducendo lo spazio di ricerca non garantiscono l’ottimalit`a della soluzione, ma con buona probabilit`a possono guidare ad un risultato vicino all’essere ottimale. Recenti algoritmi di enume- razione si basano anche su tecniche ibride dette di programmazione dinamica iterativa. L’idea `e quella di applicare diverse volte la programmazione dinamica per trattare separatamente diverse parti del processo di ottimizzazione. Criterio della selettivit`a della join. Per risolvere il compromesso tra com- plessit`a dell’algoritmo di ordinamento da utilizzare e qualit`a della soluzione da ottenere, `e stato stabilito di impiegare un’euristica molto ben conosciuta e sfruttata: il criterio della selettivit`a della join. Come in tutte le euristiche, lo svantaggio principale `e rappresentato da una riduzione dello spazio di ricerca che non preserva lo spazio delle soluzioni ottime. In particolare, per il criterio della selettivit`a, il sotto-spazio di ricerca consiste in tutte quelle espressioni di join che prevedono la generazione di una sola relazione intermedia per volta, quindi sono impiegabili efficacemente sia il pipelining che gli eventuali percor- si d’accesso definiti per le relazioni in input. Infatti lo spazio delle cosiddette espressioni left-deep `e particolare perch´e in ogni soluzione viene coinvolta una nuova relazione di input per ogni operazione intermedia.

Questo criterio, utilizzato nell’algoritmo cost-k-decomp, ha l’obiettivo con- siste nel minimizzare, per ogni relazione intermedia da generare, un’indice di selettivit`a della join.

L’indice di selettivit`a della join, per una relazione Ri rispetto ad una data

relazione Rj, `e definito come:

σi,|RioRnRj| j

σi`e effettivamente una stima dell’incremento di cardinalit`a dovuto alla join.

Per applicare l’euristica della selettivit`a della join `e, quindi, necessario sti- mare la cardinalit`a dell’output per ognuna delle operazioni di join intermedie.

Saranno necessarie anche le stime per la semijoin e la proiezione, per cui, a se- guire, diamo un elenco di tutte le formule sfruttate (ed implementate in apposite funzioni di cost-k-decomp) per stimare queste operazioni.

Se R `e una relazione, si indica con |R| la sua cardinalit`a e con V (A, R) la selettivit`a del suo attributo A. Nella figura 2.2.7 sono presentate le formule necessarie a stimare la cardinalit`a e la selettivit`a1 degli attributi delle opera-

zioni algebriche considerate a partire dalla conoscenza di tali informazioni sulle relazioni in input.

E’ importante premettere, comunque, che queste stime si fondano sulle se- guenti assunzioni di semplificazione:

Inclusione degli insiemi di valori. Se V (A, R) ≤ V (A, S) allora ogni possibile valore per l’attributo A in R `e anche un possibile valore per l’attributo A in S. Conservazione degli insiemi di valori. Se A ∈attr(S) non `e un attributo di join, cio`e , A /∈attr(R)∩attr(S), allora V (A, R on S) = V (A, S). In altre parole, gli attributi che non intervengono nella join non mutano la loro selettivit`a.

Figura 2.7: Stime utilizzate nel modello di costo per le operazioni Considerate due relazioni R ed S di cui si conosce cardinalit`a e selettivit`a degli attri-buti, seguono le espressioni impiegate nel modello di costo adottato per stimare tali informazioni per le relazioni:

R on S, R n S e πAi1,...,Aik(R)

Costo di una hypertree decomposition. E’ possibile, a questo punto, de- finire un modello di costo per le hypertree decomposition. Nonostante la sua

2.2. HYPERTREE DECOMPOSITION 39 semplicit`a, come precedentemente osservato nelle considerazioni iniziali, la som- ma delle cardinalit`a delle relazioni intermedie costituisce una buona misura del costo effettivo di un piano di valutazione.

In questa sezione vengono introdotte una serie di definizioni che consentono di stabilire inizialmente il costo associato ad un vertice, poi quello associato ad un sottoalbero ed infine quello di una hypertree decomposition complessiva, cio`e del piano di valutazione ad essa associato secondo il modello di costo proposto. Si nota che ogni definizione `e effettivamente data in una forma pi`u generale che prescinde dalla particolare tecnica utilizzata per calcolare l’ordinamento delle join multiple associate ai vertici. Queste rappresentano in generale l’aliquota pi`u onerosa del costo complessivo di una decomposizione. In aggiunta, ogni definizione `e poi specializzata al caso in cui si utilizza l’euristica per il piano di valutazione delle join.

Definizione 6. (Costo associato ad un vertice)

Sia HD = hT, χ, λi una hypertree decomposition per un’interrogazione con- giuntiva di una base di dati DB della quale si hanno informazioni quantitative sulla cardinalit`a e selettivit`a degli attributi delle relazioni.

Inoltre, dato p ∈vertices(T) si consideri la seguente relazione ad esso asso- ciata:

Jp,A ∈ λ(p)on πχ(p)(RA)

Il costo del vertice `e definito attraverso la somma di tre aliquote:

cost (p) , X A∈λ(p) |RA| + X A∈λ(p):var(A)−χ(p)=∅ πχ(p)(RA) + cost(E (Jp))

dove cost (E(Jp)) rappresenta il costo della espressione di join E(Jp) utilizzata

per valutare Jp. Le relazioni in input per E(Jp) appartengono a

πχ(p)(RA) : A ∈ λ(p) .

Questa definizione stabilisce che il costo associato ad un vertice `e dato innan- zitutto dalle relazioni2 associate agli atomi in λ(p), poi subisce un incremento

dovuto alle sole relazioni che non hanno gli attributi contenuti tutti in χ(p), quindi necessitano di essere proiettate, ed infine si aggiunge l’aliquota pi`u criti- ca che deriva dal particolare ordinamento scelto per effettuare le operazioni di join tra le relazioni di λ(p).

Definizione 7. (Costo associato ad un sottoalbero)

Sia HD = hT, χ, λi una hypertree decomposition per un’interrogazione con- giuntiva di una base di dati DB della quale si hanno informazioni quantitative sulla cardinalit`a e selettivit`a degli attributi delle relazioni.

Inoltre, dati p ∈vertices(T) e Tp sottoalbero di T radicato in p, si consideri

la seguente relazione associata a p:

Sp,    Jp ∀p ∈ leaves(Tp) Jp n c ∈ children(p) πχ(p)(Sc) altrimenti

Il costo di Tp`e definito attraverso la somma di quattro aliquote: cost (Tp) , cost (p) + X c∈children(p) cost(Tc)+ + X c∈children(p):χ(c)=χ(p)6=∅ πχ(p)(Sc) + cost(E (Sp))

dove cost(E(Sp)) rappresenta il costo della espressione di join E(Sp) utilizza-

ta per valutare Sp. Le relazioni in input per E(Sp) appartengono a {Jp} ∪

πχ(p)(Sc) : c ∈ children(p) .

Il costo associato ad un sottoalbero Tp si compone del costo del vertice p

in cui `e radicato pi`u il costo di tutti i sottoalberi di p. A questo risultato deve essere aggiunta l’aliquota dovuta alle operazioni di semijoin tra p ed i suoi figli. Quest’ultima viene calcolata considerando prima le eventuali operazioni di proiezione dei figli su χ(p)e poi le join (in realt`a semijoin) tra p e questi risultati. Definizione 8. (Costo associato ad una decomposizione)

Sia HD = hT, χ, λi una hypertree decomposition per un’interrogazione con- giuntiva Q di una base di dati DB di cui si hanno informazioni quantitative sulla cardinalit`a e selettivit`a degli attributi delle relazioni.

Il costo di HD `e definito da:

cost(HD) , cost(T )

Si sottolinea che il modello proposto definisce il costo di una decomposizione in termini della stima delle tuple coinvolte nel processo di valutazione suggerito dall’algoritmo di Yannakakis. Inoltre si noti come le definizioni date siano effet- tivamente indipendenti dalle particolari tecniche utilizzate per stimare il costo di join e semijoin multiple.

Capitolo 3

Tecnologie utilizzate

In questo capitolo descriviamo le tecnologie e gli strumenti utilizzati per lo sviluppo del progetto. In particolare, ci soffermiamo sulla descrizione del sistema

DLVDB, una versione del sistema DLV specifica per l’esecuzione di programmi

su DMBS, utilizzato quale motore di inferenza nella valutazione dei programmi e sul DLV Wrapper, sviluppato presso l’Universit`a della Calabria, in grado di gestire l’interazione tra la DLP e programmi scritti in Java.

3.1

DLVDB

DLVDB [8, 9, 10, 11] `e stato progettato come estensione del sistema DLV; esso combina l’esperienza (maturata nell’ambito del progetto DLV) nell’otti- mizzare programmi logici con le avanzate capacit`a di gestione delle basi di dati implementate nei DBMS esistenti. DLVDB possiede tutte le caratteristiche di elaborazione dati desiderabili da un DDS ma consente di supportare anche le funzionalit`a di ragionamento pi`u avanzate dei sistemi logici fornendo cos`ı sostan- ziali miglioramenti sia nelle prestazioni relative alla valutazione dei programmi logici, sia nella facilit`a di gestione dei dati di input e di output possibilmen- te distribuiti su pi`u database; il tutto nel contesto di un sistema logico ben collaudato. Ci`o permette di applicare tale sistema in ambiti che necessitano sia di valutare programmi complessi, sia di lavorare su grandi quantit`a di dati. L’interazione con le basi di dati `e realizzata per mezzo di connessioni ODBC che consentono di gestire in modo piuttosto semplice dati distribuiti su vari da- tabase in rete. L’architettura di DLVDB `e stata progettata in modo da poter consentire facilmente ulteriori estensioni che possano supportare le capacit`a pi`u avanzate del linguaggio di DLV e prevede due tipologie di esecuzione:

• Esecuzione in memoria centrale, che carica dati presenti in tabelle di data- base eventualmente distribuiti ed esegue il programma logico in memoria centrale. Tale tipologia di esecuzione consentir`a di sfruttare sia l’alta espressivit`a di DLV, sia la capacit`a dei DBMS di memorizzare e recu- perare efficientemente grandi quantit`a di dati; naturalmente, in questa modalit`a la quantit`a di dati su cui si potr`a lavorare contemporaneamente sar`a limitata dalla quantit`a di memoria centrale disponibile;

• Esecuzione diretta su database, che valuta i programmi logici direttamente sulla base di dati e consente di gestire grandi quantit`a di dati con un utilizzo minimo della memoria centrale.