QuOnto: Driver per SQLite e
Derby e test su database di
dimensione crescente
A cura di:
Francesco Menniti
Obiettivi Tesina

Realizzare driver di QuOnto (“Querying
Ontologies” ):



Realizzare guide all’uso dei DBMS usati:



Driver per Derby
Driver per SQLite
Guida all’uso di Derby
Guida all’uso di SQLite
Testare i driver

Confronti tra i risultati
07/07/2008
2
Descrizione Derby e SQLite


Derby è un motore Open Source
Database Technology parte dell’ Apache
DB Project
SQLite è una libreria C che implementa
un DBMS SQL incorporabile all'interno di
applicazioni.
07/07/2008
3
Derby: obiettivi, caratteristiche,
compatibilità e note

I principali obiettivi di Derby sono:



Scritto interamente in Java e Open-Source



Conformità agli standard SQL!
Portabilità (JAVA) !
Fornisce supporto JDBC (Java Batabase
Connectivity)
Può funzionare come DB embedded
Deadlock detection, crash recovery, backup
and restore ability, Multi-user, transactions
API
07/07/2008
4
SQLite: obiettivi, caratteristiche,
compatibilità e note

Gli obiettivi di SQLite sono:



Semplicità e leggerezza !
Efficienza su piccoli DB
Portabilità (ANSI-C)





Supporto mediante binding e wrapper
E’ una libreria scritta in C ed è Open-Source
Fornisce supporto JDBC (Java Batabase Connectivity)
Può funzionare come DB embedded
Non completa conformità allo standard SQL


View di sola lettura, non si possono fare insert, delete,
update
Le FOREIGN KEYS sono riconosciute ma non implementate
07/07/2008
5
Strumenti ed interfacce


Sia per Derby che per SQLite esistono
interfacce che permettono di usare tali DB
Derby: (ad es.)



SQuirreLSQL Client
Aqua Data Studio
SQLite: (ad es.)



SharpPlus Sqlite Developer
Liteman
SQLite3 (interfaccia a riga di camando)
07/07/2008
6
Valutazioni finali

Derby:



Completa compatibilità con lo standard SQL
Possibilità di creare un driver per QuOnto
SQLite


Incompleta compatibilità con SQL
Possibilità di creare un driver per QuOnto
07/07/2008
7
Implementazione

Esempi di alcune differenze implementative
tra Derby e SQLite:

Derby:



comando per rimuovere una vista è "DROP VIEW + nomeVista“
Nella UNION il DISTINCT è di default
SQLite:


07/07/2008
il comando per rimuovere una vista è "DROP VIEW IF EXIST +
nomeVista“
Nella UNION il DISTINCT non è di default
8
Implementazione …continua

Esempi di alcune somiglianze implementative
tra Derby e SQLite:

Sia in Derby sia in SQLite l’operatore di
concatenazione è “||”


(String createFunctorConcatStatment(String,String[]))
Sia in Derby sia in SQLite il comando per creare
una vista è "CREATE VIEW " + name + " AS " +
body
07/07/2008
9
Come avviene il test


Stesso computer nelle stesse condizioni per i test
Aboxes di dimensioni differenti (sia per SQLite che
per Derby): 1, 5, 10, 30 università


Realizzate off-line da un tool scritto in Java a partire dalle
Aboxes della LUBM
Output del test





EXPANSION TIME
EVALUATION TIME
TOTAL TIME (tempi rappresentati nei grafici)
NUMERO DI CQs DENTRO LA UCQ ESPANSA
Numero di answers delle query
07/07/2008
10
Query usate nei test

Per descrivere le query sono stati utilizzati i seguenti
fattori:
 Grandezza input: misura la porzione delle istanze delle classi




coinvolte nella query sul totale delle istanze delle classi
(grande se input > 5%)
Selettività: misura come la porzione stimata delle istanze
delle classi coinvolte nella query soddisfano i criteri di
selezione della query (alta se la porzione < 10%)
Complessità: il numero di classi e di proprietà coinvolte nella
query determina la complessità della stessa
Assunzione di gerarchia: considera se informazioni
provenienti da una gerarchia di classi o da una gerarchia di
proprietà sono richieste per raggiungere la risposta completa
(ampia se la profondità della gerarchia > 3)
Assunzione di inferenza logica: considera se l’inferenza
logica è richiesta per raggiungere la completezza della
risposta
07/07/2008
11
Query usate nei test (cont.)
1. {x | GraduateStudent(x) AND takesCourse(x,”Dep0.Univ0/GraduateCourse0”)}
(query con grande input, alta selettività, tale query riguarda una classe e una
proprietà, non assume nessuna informazione gerarchica)
2. {x,y,z | GraduateStudent(x) AND University(y) AND Department(z) AND
subOrganizationOf(z,y) AND memberOf(x,z) AND undergraduateDegreeFrom(x,y)}
(query con pattern triangolare, riguarda 3 classi e tre proprietà, quindi molti join)
5. {x | Person(x) AND memberOf(x,”Dep0.Univ0”)}
(Person e memberOf hanno una gerarchia molto ampia)
6. {x | Student(x)}
(query con grande quantità in input, e una discreta gerarchia determinata da
Student, tale query è relativa ad una sola classe; assume sia la SubClassOf esplicita
della relazioni tra UndergraduateStudent e Student e quella implicita tra
GraduateStudent e Student )
07/07/2008
12
Query usate nei test (cont.)
7. {x,y | Student(x) AND Course(y) AND takesCourse(x,y) AND
teacherOf(“Dep0.Univ0/AssociateProfessor0”,y)}
(query simile alla precedente ma con selettività più alta, infatti è relativa a 2
classi e ad una proprietà)
8. {x,y,z | Student(x) AND Department(y) AND memberOf(x,y) AND
subOrganizationOf(y,”Univ0”) AND emailAddress(x,z)}
(query ancora più complessa della 7 con aggiunta di un’altra proprietà)
13. {x | Person(x) AND hasAlumnus(“Univ0”,x)}
(query di verifica per relazioni inverse)
14. {x | UndergraduateStudent(x)}
(è la query più semplice: grande quantità in input, bassa selettività, assenza
di gerarchia, assenza di inferenza)
07/07/2008
13
Test SQLite
(millisecondi)
Tempo di calcolo della Query
Test SQLitequery
query leggere
TestSQLite
pesanti
450000
7000
400000
6000
350000
5000
300000
Tempo di calcolo 4000
250000
(millisecondi) 3000
200000
150000
2000
100000
1000
50000
0
0
0
0
5
5
10
15
20
25
30
10
15 dati (numero
20 di università)
25
Dimensione
35
30
35
Dimensione dati (numero di università)
Query 1
07/07/2008 Query 11
Query 12
Query 3
Query 4
Query 5
Query 14Query 2
Query 6Query 7Query 8
Query 10
Query 13
Query 9
14
Test Derby
TestDerby
Derby
query
leggere
Test
Derby
query
molto
pesanti
Test
query
pesanti
6000
120000000
250000
5000
100000000
200000
4000
Tempo di calcolo80000000
3000
Tempo
di
Tempo(millisecondi)
di calcolo
calcolo 150000
60000000
2000
(millisecondi)
(millisecondi) 100000
40000000
1000
0
50000
20000000
0
0 0
0 0
5
10
15
20
25
30
(numero
di20
università)
15
20
25
5 5 Dimensione
1010 dati 15
25
Query 1
Query 3
Dimensionedati
dati(numero
(numerodidiuniversità)
università)
Dimensione
Query 4
Query 5
Query 7
Query 10
Query 11
Query 12
Query 13
14 8 QueryQuery
6 9
Query 2 Query Query
07/07/2008
35
30
30
35
35
15
Esempio 1: query 4
{x,y1,y2,y3 | Professor(x) AND worksFor(x,”Dep0.Univ0”) AND name(x,y1) AND
emailAddress(x,y2) AND telephone(x,y3)}
(query con 3 attributi di concetto che interroga su proprietà multiple di una
singola classe, ampia gerarchia per Professor, piccolo input e alta selettività)
Confronto Derby SQLite query 4
6000
5000
4000
Tempo di calcolo
(millisecondi)
Query SQLite
3000
Query Derby
2000
1000
0
07/07/2008
1
5
10
30
Query SQLite
172
469
500
750
Query Derby
4532
5125
5313
5562
Dimensione dati (numero di università)
16
Esempio 2: query 7
{x,y | Student(x) AND Course(y) AND takesCourse(x,y) AND
teacherOf(“Dep0.Univ0/AssociateProfessor0”,y)}
(query con selettività alta, infatti è relativa a 2 classi e ad una proprietà)
Confronto Derby SQLite query 7
8000
6000
Tempo di calcolo
(millisecondi)
Query SQLite
4000
Query Derby
2000
0
07/07/2008
1
5
10
30
Query SQLite
46
78
109
5860
Query Derby
31
438
2594
5029
Dimensione dati (numero di università)
17
Esempio 3: query 12
{x,y | Chair(x) AND Department(y) AND worksFor(x,y) AND
subOrganizationOf(y,”Univ0”)}
(tale query richiede di inferire che professore è una istanza della classe Chair
perché lui o lei sono a capo del dipartimento; query con piccolo input)
Confronto Derby SQLite query 12
8000
6000
Tempo di calcolo
(millisecondi)
Query SQLite
4000
Query Derby
2000
0
07/07/2008
1
5
10
30
Query SQLite
5593
3375
3625
7422
Query Derby
878
625
984
1344
Dimensione dati (numero di università)
18
Esempio 4: query 14
{x | UndergraduateStudent(x)}
(è la query più semplice: grande quantità in input, bassa
selettività, assenza di gerarchia, assenza di inferenza)
Confronto Derby SQLite query 14
30000000
25000000
20000000
Tempo di calcolo
(millisecondi)
Query SQLite
15000000
Query Derby
10000000
5000000
0
07/07/2008
1
5
10
30
Query SQLite
0
0
0
312
Query Derby
14875
262860
1181765
28509265
Dimensione dati (numero di università)
19
Conclusioni

Derby:





Si comporta molto meglio di SQLite per Aboxes di grandi dimensioni
In via generale all’aumentare della dimensione della Abox i tempi di
answering aumentano in modo pressoché lineare o quasi
Estrema lentezza nel fare answering sulle query con grandi quantità di
dati in ingresso e dove ci sono molti elementi da restituire
Più veloce in query dove bisogna effettuare inferenza logica
SQLite:




07/07/2008

si comporta meglio di Derby per Aboxes di dimensioni ridotte
In via generale all’aumentare della dimensione della Abox i tempi di
answering aumentano in modo pressoché lineare o quasi
Limite: massimo numero di termini che possono essere messi in
UNION, UNION ALL, EXCEPT, oppure INTERSECT è determinato da un
parametro fisso e tale parametro di default è settato a 500
Su query con più di qualche attributo di concetto SQLite risulta più
veloce rispetto a Derby indipendentemente dalla dimensione della Abox
considerata
Su query dove bisogna fare inferenza logica SQLite risulta più lento,
20
perché non adotta ottimizzazioni particolari
Scarica

Derby