Size: 62
Comment:
|
Size: 5710
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
#acl Simon Skilevic:read,write all:read | #acl Simon Skilevic:read,write Björn Buchhold:read,write All:read,write |
Line 4: | Line 4: |
We tested the performance of two triple stores: Virtuoso and RDF-3X. We compare them to our own triple score on a couple of benchmarks. == Software Installation == === Installation von Virtuoso Open-Source Edition: === 1. [[http://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/VOSDownload|Runterladen]] 2. Anweisungen in README-Datei folgen. === Installation von rdf3x: === 1. [[https://code.google.com/p/rdf3x/downloads/list|Runterladen]] 2. Kompilieren === Installation von SparqlEngineDraft: === 1. [[https://code.google.com/p/rdf3x/downloads/list|Klonen]] 2. [[https://github.com/Buchhold/SparqlEngineDraft#1-build|Anweisungen]] befolgen. == Data Import == Um den Datensatz in die Triple-Stores laden zu können, musste dieser Satz in einen für RDF-Speicherung gängigen Format umgewandelt werden. Ausgewählt wurde "*.nt"-Format. Der ursprünglicher Satz enthielt Values und Enteties. Values waren schon nt-konform, die Enteties mussten umgewandelt werden. Dafür wurden die Enteties in die eckigen Klammer gesetzt und die unzulässige Zeichen durch die entsprechende Prozent-Kodierungen oder auch von uns definierten Ersatzzeichen ersetzt. === Ersetzungstabelle: === || % |||| < |||| > |||| \ |||| ^ |||| ` |||| space || || %25 |||| %3C |||| %3E |||| %5C |||| %5E |||| %60 |||| _ || Z.B.: '' Mikel Jackson --> <Mikel_Jackson> '' === Data Import Virtuoso: === Datenladen in den Virtuoso wurde mit [[http://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/VirtBulkRDFLoader|Bulk loading process]] durchgefuhrt. Bei diesem Prozess muss der Name des RDF-Graphen als graph_iri eingegeben werden. Unter dieser Namen ist der RDF-Satz bei Virtuoso erreichbar und man benutzt graph_iri als prefix bei jeder Entety, wenn man eine Spqrql-Anfrage an den Store erstellt. Z.B.: '' Mikel Jackson --> '<http://foo/Mikel_Jackson>' '' ''*'' Für die bessere Ladeperformance empfiehlt sich die Variablen ''NumberOfBuffers'' und ''MaxDirtyBuffers'' auf einen höheren Wert in der virtuoso.ini Datei zu setzten (Genauere ist in virtuoso.ini beschrieben). Die Datei liegt unter ''<Installationsordner von virtuoso>/var/lib/virtuoso/db/virtuoso.ini'' === Data Import Rdf3x: === Das Datenladen in den Rdf3x-Store erfolgt durch einen Skript ''<Installationsordner von Rdf3x>/bin/rdf3xload <DB-Name> <RDF-Satz-Pfad>''. Kein zusätzlicher Präfix ist bei der Anfragegenerierung erforderlich. Z.B.: '' Mikel Jackson --> '<Mikel_Jackson>' '' === Data Import SparqlEngineDraft: === [[https://github.com/Buchhold/SparqlEngineDraft#2-creating-an-index|Anweisungen]] befolgen. Kein zusätzlicher Präfix ist bei der Anfragegenerierung erforderlich. Z.B.: '' Mikel Jackson --> '<Mikel_Jackson>' '' === Indexerstellung: === Die Größe des Input-RDF-Sets in der NT-Format beträgt 17 GB. || '''RDF-Store''' |||| '''Ladezeit''' |||| '''Indexgroße auf der Festplatte''' || '''Indexgroße in der Arbeitspeicher''' || || Virtuoso |||| 23 min |||| 7.9 GB |||| ? || || Rdf3x |||| 76 min |||| 12 GB |||| ? || || SparqlEngineDraft |||| 26 min |||| 14.2 GB |||| 3.5 GB || === Tests === '''Zeilenformat:''' ''<time> (number of lines in result)'' || '''Query \ RDF Store''' |||| '''rdf3x''' |||| '''SparqlEngineDraft''' |||| '''Virtuoso''' || || '''Query 1''' |||| 0.728ms(1) |||| 31.827ms(1) |||| 2647ms(1) || || '''Query 2''' |||| 20.643ms(5162) |||| 5.393ms(5162) |||| 119ms(5164) || || '''Query 3''' |||| 119.230ms(1579) |||| 53.888ms(1579) |||| 544ms(1579) || || '''Query 4''' |||| 24.504ms(9767) |||| 7.247ms(9767) |||| 41ms(9767) || || '''Query 5''' |||| 5.125ms(4) |||| 141.942ms(4) |||| 1453ms(4) || || '''Query 6''' |||| 65.493ms(0) |||| 42.091ms(0) |||| 148ms(0) || || '''Query 7''' |||| 30.298ms(3697) |||| 11.998ms(3697) |||| 102ms(3697) || || '''Query 8''' |||| 9.510ms(164) |||| 17.403ms(164) |||| 165ms(164) || || '''Query 9''' |||| 0.532ms(128) |||| 2.113ms(128) |||| 1004ms(128) || || '''Query 10''' |||| 476.193ms(1528) |||| 231.813ms(1528) |||| 921ms(1528) || ''' Queries ''' ''' Query 1 ''' '' SELECT ?x WHERE { '' '' ?x <is-a> <Book> . '' '' ?x <Author> <Anthony_Newman_(Author)> '' '' } '' ''' Query 2 ''' '' SELECT ?x WHERE { '' '' ?x <Genre> <Comedy> . ?x <is-a> <Award-Nominated_Work> . ?x <is-a> <Film> . '' '' } '' ''' Query 3 ''' '' SELECT ?x WHERE { '' '' ?x <is-a> <Politician> . ?x <Film_performance> ?y . ?y <Genre> <Comedy> . '' '' } '' ''' Query 4 ''' '' SELECT ?x WHERE { '' '' ?x <is-a> <Olympic_athlete> . ?x <is-a> <Deceased_Person> '' '' } '' ''' Query 5 ''' '' SELECT ?x WHERE { '' '' ?x <Release> <Technodrome,_Volume_2_(Consumer_product)> . '' '' ?x <is-a> <Canonical_Version> . '' '' ?x <is-a> <Musical_Recording> . '' '' } '' ''' Query 6 ''' '' SELECT ?x ?y WHERE { '' '' ?x <is-a> <Person> . ?x <Country_of_nationality> <Germany> . ?x <Author> ?y . ?y <is-a> <Award-Nominated_Work> '' '' } '' ''' Query 7 ''' '' SELECT ?x WHERE { '' '' ?x <is-a> <Politician> . ?x <Parent> ?y . ?x <Parent> ?z . ?y <is-a> <Politician> . ?z <is-a> <Politician> . '' '' } '' ''' Query 8 ''' '' SELECT ?x ?y WHERE{ ?x <is-a> <Monarch> . ?x <is-a> <Deceased_Person> .?x <Cause_of_death> <Assassination> . ?x <Place_of_birth> ?y } '' ''' Query 9 ''' '' SELECT ?x WHERE{ ?x <is-a> <Lake> . ?x <Contained_by> <Russia> } '' ''' Query 10 ''' '' SELECT ?x ?y ?z WHERE{ ?x <is-a> <Musical_Recording> . ?x <Recorded_by> ?y . ?y <Award_Won> <Bollywood_Movie_Humanitarian_Award> . ?y <Celebrity_friend> ?z . ?z <Profession> <Prophet> } '' |
Triple Stores
We tested the performance of two triple stores: Virtuoso and RDF-3X. We compare them to our own triple score on a couple of benchmarks.
Software Installation
Installation von Virtuoso Open-Source Edition:
- Anweisungen in README-Datei folgen.
Installation von rdf3x:
- Kompilieren
Installation von SparqlEngineDraft:
Anweisungen befolgen.
Data Import
Um den Datensatz in die Triple-Stores laden zu können, musste dieser Satz in einen für RDF-Speicherung gängigen Format umgewandelt werden. Ausgewählt wurde "*.nt"-Format. Der ursprünglicher Satz enthielt Values und Enteties. Values waren schon nt-konform, die Enteties mussten umgewandelt werden. Dafür wurden die Enteties in die eckigen Klammer gesetzt und die unzulässige Zeichen durch die entsprechende Prozent-Kodierungen oder auch von uns definierten Ersatzzeichen ersetzt.
Ersetzungstabelle:
% |
< |
> |
\ |
^ |
` |
space |
||||||
%25 |
%3C |
%3E |
%5C |
%5E |
%60 |
_ |
Z.B.: Mikel Jackson --> <Mikel_Jackson>
Data Import Virtuoso:
Datenladen in den Virtuoso wurde mit Bulk loading process durchgefuhrt. Bei diesem Prozess muss der Name des RDF-Graphen als graph_iri eingegeben werden. Unter dieser Namen ist der RDF-Satz bei Virtuoso erreichbar und man benutzt graph_iri als prefix bei jeder Entety, wenn man eine Spqrql-Anfrage an den Store erstellt.
Z.B.: Mikel Jackson --> '<http://foo/Mikel_Jackson>'
* Für die bessere Ladeperformance empfiehlt sich die Variablen NumberOfBuffers und MaxDirtyBuffers auf einen höheren Wert in der virtuoso.ini Datei zu setzten (Genauere ist in virtuoso.ini beschrieben). Die Datei liegt unter <Installationsordner von virtuoso>/var/lib/virtuoso/db/virtuoso.ini
Data Import Rdf3x:
Das Datenladen in den Rdf3x-Store erfolgt durch einen Skript <Installationsordner von Rdf3x>/bin/rdf3xload <DB-Name> <RDF-Satz-Pfad>. Kein zusätzlicher Präfix ist bei der Anfragegenerierung erforderlich.
Z.B.: Mikel Jackson --> '<Mikel_Jackson>'
Data Import SparqlEngineDraft:
Anweisungen befolgen. Kein zusätzlicher Präfix ist bei der Anfragegenerierung erforderlich.
Z.B.: Mikel Jackson --> '<Mikel_Jackson>'
Indexerstellung:
Die Größe des Input-RDF-Sets in der NT-Format beträgt 17 GB.
RDF-Store |
Ladezeit |
Indexgroße auf der Festplatte |
Indexgroße in der Arbeitspeicher |
|||
Virtuoso |
23 min |
7.9 GB |
? |
|||
Rdf3x |
76 min |
12 GB |
? |
|||
26 min |
14.2 GB |
3.5 GB |
Tests
Zeilenformat: <time> (number of lines in result)
Query \ RDF Store |
rdf3x |
Virtuoso |
||||
Query 1 |
0.728ms(1) |
31.827ms(1) |
2647ms(1) |
|||
Query 2 |
20.643ms(5162) |
5.393ms(5162) |
119ms(5164) |
|||
Query 3 |
119.230ms(1579) |
53.888ms(1579) |
544ms(1579) |
|||
Query 4 |
24.504ms(9767) |
7.247ms(9767) |
41ms(9767) |
|||
Query 5 |
5.125ms(4) |
141.942ms(4) |
1453ms(4) |
|||
Query 6 |
65.493ms(0) |
42.091ms(0) |
148ms(0) |
|||
Query 7 |
30.298ms(3697) |
11.998ms(3697) |
102ms(3697) |
|||
Query 8 |
9.510ms(164) |
17.403ms(164) |
165ms(164) |
|||
Query 9 |
0.532ms(128) |
2.113ms(128) |
1004ms(128) |
|||
Query 10 |
476.193ms(1528) |
231.813ms(1528) |
921ms(1528) |
Queries
Query 1
SELECT ?x WHERE { ?x <is-a> <Book> . ?x <Author> <Anthony_Newman_(Author)> }
Query 2
SELECT ?x WHERE { ?x <Genre> <Comedy> . ?x <is-a> <Award-Nominated_Work> . ?x <is-a> <Film> . }
Query 3
SELECT ?x WHERE { ?x <is-a> <Politician> . ?x <Film_performance> ?y . ?y <Genre> <Comedy> . }
Query 4
SELECT ?x WHERE { ?x <is-a> <Olympic_athlete> . ?x <is-a> <Deceased_Person> }
Query 5
SELECT ?x WHERE { ?x <Release> <Technodrome,_Volume_2_(Consumer_product)> . ?x <is-a> <Canonical_Version> . ?x <is-a> <Musical_Recording> . }
Query 6
SELECT ?x ?y WHERE { ?x <is-a> <Person> . ?x <Country_of_nationality> <Germany> . ?x <Author> ?y . ?y <is-a> <Award-Nominated_Work> }
Query 7
SELECT ?x WHERE { ?x <is-a> <Politician> . ?x <Parent> ?y . ?x <Parent> ?z . ?y <is-a> <Politician> . ?z <is-a> <Politician> . }
Query 8
SELECT ?x ?y WHERE{ ?x <is-a> <Monarch> . ?x <is-a> <Deceased_Person> .?x <Cause_of_death> <Assassination> . ?x <Place_of_birth> ?y }
Query 9
SELECT ?x WHERE{ ?x <is-a> <Lake> . ?x <Contained_by> <Russia> }
Query 10
SELECT ?x ?y ?z WHERE{ ?x <is-a> <Musical_Recording> . ?x <Recorded_by> ?y . ?y <Award_Won> <Bollywood_Movie_Humanitarian_Award> . ?y <Celebrity_friend> ?z . ?z <Profession> <Prophet> }