UNIVERSITÀ DEGLI STUDI DI CATANIA FACOLTÀ DI SCIENZE MATEMATICHE, FISICHE E NATURALI Corso di Laurea in Scienze dell’Informazione Indici gerarchizzati per interrogazioni approssimate a database relazionali Fabio Longo Relatore: Ch.mo Prof. A. Ferro Correlatore: Dott.ssa R. Giugno Anno Accademico Tesi di laurea
OBIETTIVI Creazione di un Web Server mSQL. Estensione dell’mSQL 2.0 con funzioni atte all’utilizzo completo di tali indici. Nuovo paradigma d’indicizzazione. - Ricerche approssimate - gerarchizzazione degli elementi coinvolti nella ricerca
RICERCA APPROSSIMATA ………………... Funzione d(o i,o j ) con i, j {1,2, …n} tale che renda (O,d) uno spazio metrico d(o x,o n ) d(o x,o 2 ) d(o x,o 3 ) d(o x,o 1 ) Problema: calcolare gli o k tali che d(o x,o k ) t con t>0 k {1,2,3, …n}
MODELLI DI RICERCA APPROSSIMATA GIA’ STUDIATI Modelli statici: FQ-tree (Fixed Query Tree) VP-tree (Vantage Point Tree) MVP-tree (Multiple Vantage Point Tree) Modelli dinamici: M-tree (Metric Tree) Indici gerarchizzati
METODO DI K.OFLAZER Notazione Vertex List Sequence: set di liste di vertici indicanti i singoli cammini dalla radice ad ognuna delle foglie dell’albero.
METODO DI K.OFLAZER Sia Z=Z 1, …,Z p una generica vertex list sequence. Z[j] denota l’iniziale sottosequenza di j liste di vertici inclusa quella di posto j dist(X[i],Y[j]) = j * S Se i=0 i * S Se j=0 min(dist(X[i-1],Y[j-1]+C,dist(X[i-1],Y[j]+S, dist(X[i],Y[j-1]+S) Se X i e Y j differiscono solo per l’etichetta del nodo. min(dist(X[i-1],Y[j]),dist(X[i],Y[j-1]))+S Altrimenti Dove C = costo in caso di differenti etichette S = costo in caso di differenti strutture
METODO DI K.OFLAZER Sforzo computazionale stimato per la ricerca di quei VLS che non distano da un altro VLS-query oltre un certa soglia t: O(L 2 logLk 1/ceiling(t/S) ) Dove L = numero di foglie in ogni albero k = numero degli alberi nella foresta t = tolleranza S = costo dell’aggiunta o cancellazione della foglia in un certo albero.
FORMALIZZAZIONE TEORICA DEL PROBLEMA R i :{T i } i=1, …,n schema relazionale R i (A 1 :T 1, A 2 :T 2, …, A m :T m ) schema di relazione Vincoli d’integrità: Y insieme di attributi NOT NULL X insieme di attributi tale da essere una chiave primaria per R i :{T i } i=1, …,n. Vertex List Sequence formato da attributi di R i :{T i } i=1, …,n T = Natural join tra gli schemi di relazione fra i quali attributi ne figura almeno uno di Y.
FORMALIZZAZIONE TEORICA DEL PROBLEMA n-upla di una istanza di T si crei un VLS. Si immergano tutti i VLS generati in una struttura di tipo Trie. Applicazione del metodo di Oflazer per ricavare tutti i VLS del Trie che distano da un dato VLS-query in input non oltre una soglia t.
ESEMPIO: una semplice istanza. Natural join: T[XY] X chiave primaria Y={A 1, A 2, A 3 } VLS=( (A 1,A 2 ) (A 1,A 3 ) ) dove A 1, A 2, A 3 R i per certi i {1,2,…,n}
ESEMPIO: una semplice istanza. Creazione del VLS-query fissando i parametri: a x {a 1, a 2, a 3, … } b x {b 1, b 2, b 3, …} c x {c 1, c 2, c 3, … }
API per l’estensione dell’mSQL 2.0 (C ansi) Creazione del Trie createTrie() int createTrie ( sock, key, treeIndex) int sock ; char * key ; char * treeIndex Uso: costruisce il Trie relativo al database associato al proprio descrittore di socket sock, a partire dal VLS dato dalla stringa treeIndex, in cui tutti gli attributi ivi contenuti avranno la forma: “tabella.attributo”. Esecuzione della Ricerca Approssimata trieSelect() m_result * trieSelect ( query_tree, t, c, s) char * query_tree ; int t ; int c ; int s ; Uso: Calcola i VLS del trie creato da createTrie(), la cui distanza dall’VLS query_tree non eccede il valore della tolleranza t, e che tiene conto dei parametri c ed s. Cardinalità dell’output trieNumRows() int trieNumRows ( result ) m_result * result ; Uso: restituisce il numero delle righe coinvolte negli esiti di una ricerca approssimata, in base all’handle result di una precedente chiamata di trieSelect(). Fetch delle righe trieFetchRow() m_row * trieFetchRow ( result ) m_result * result ; Uso: serve per accedere ai singoli campi di una riga, in base all’handle result di una precedente chiamata di trieSelect().
COSTRUZIONE DI UN INDICE GERARCHIZZATO IDEA: Scegliere l’altezza dell’albero. Determinare quali dovranno essere gli attributi che andranno ad occupare ognuno dei livelli dell’albero. Determinare le parentele tra nodi di livelli differenti rispettando i vincoli gerarchici definiti.
VINCOLI GERARCHICI Definizione: Utilità: particolari restrizioni ai quali un albero è soggetto al momento di decidere, per un qualsiasi livello, chi dovrà essere il padre di un nuovo nodo tra quelli del livello soprastante. fornire un criterio coerente, di cui un algoritmo non interattivo possa servirsi, per costruire il VLS che costituirà l’indice gerarchizzato.
VINCOLI GERARCHICI Un vincolo gerarchico può essere espresso come una funzione discreta F tale che, su un attributo a: - F(a)=b Se b nella gerarchia definibile dev’essere necessariamente padre di a. - F(a)=NULL Altrimenti
APPLICAZIONE: gestione di un database di alberghi Scopo del progetto: Creazione di un sito Web nel quale un utente abbia la possibilità di scegliere un albergo in un database, definendo le sue caratteristiche preferenziali ed il loro grado d’importanza. Permettere all’utente di scegliere quale indice gerarchizzato utilizzare per la ricerca (visualizzato in forma opportuna e comprensibile), o di crearne uno nuovo secondo le sue preferenze attraverso una semplice interfaccia.
Espressivita’delle ricerche approssimate Possibilita’di definire: Citta’ e quartiere dell’albergo Presenza di strutture aggiuntive quali: piscina, shop store, campo da tennis, etc. Caratteristiche delle stanze singole, doppie e delle suite, quali: prezzo, vista, etc. Caratteristiche di eventuali strutture annesse all’albergo, quali: ristoranti, sale congressi, etc.
Esempio computazionale di ricerca approssimata
CONCLUSIONI Risultati: soddisfacenti Applicazione server testata su: - Pentium 133Mhz, 16 Mb RAM, linux nella sua distribuzione REDHAT AMD K6 333Mhz, 64 MB RAM, linux nella sua distribuzione Mandrake 5.3
CONCLUSIONI Algoritmo di creazione indici assenza di significativi limiti per quel che riguarda: l’altezza dell’albero Il numero di attributi coinvolti nella ricerca approssimata I vincoli gerarchici ai quali l’indice possa essere soggetto FINE