Size: 5627
Comment:
|
Size: 5850
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 5: | Line 5: |
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. | We tested the performance of two triple stores: Virtuoso and RDF-3X. We compare them to our own triple store on a couple of benchmarks. |
Line 11: | Line 11: |
1. [[http://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/VOSDownload|Runterladen]] 2. Anweisungen in README-Datei folgen. |
1. [[http://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/VOSDownload|Herunterladen]] 2. Anweisungen in der README-Datei folgen. |
Line 14: | Line 14: |
1. [[https://code.google.com/p/rdf3x/downloads/list|Runterladen]] | 1. [[https://code.google.com/p/rdf3x/downloads/list|Herunterladen]] |
Line 20: | Line 20: |
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. |
Um den Datensatz in die Triple-Stores laden zu können, muss dieser Satz in ein für die RDF-Speicherung gängiges Format umgewandelt werden. Ausgewählt wurde das NT-Format. Der ursprüngliche Datensatz enthält Values und Entities. Values waren schon nt-konform, die Entities mussten umgewandelt werden. Dafür wurden die Entities in eckige Klammern gesetzt und unzulässige Zeichen durch die entsprechenden Prozent-Kodierungen oder durch von uns definierte Ersatzzeichen ersetzt (siehe Ersetzungtabelle unten). |
Line 28: | Line 28: |
Z.B.: '' Mikel Jackson --> <Mikel_Jackson> '' | Z.B.: '' Michael Jackson --> <Michael_Jackson> '' |
Line 31: | Line 31: |
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. | Das Importieren der Daten in den Virtuoso Store wurde mit dem [[http://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/VirtBulkRDFLoader|Bulk loading process]] durchgeführt. Bei diesem Prozess muss der Name des RDF-Graphen als graph_iri eingegeben werden. Unter diesem Namen ist der RDF-Satz bei Virtuoso erreichbar: Wenn man eine Sparql-Anfrage an den Store erstellt, muss man die graph_iri als prefix für jede Entity benutzen. |
Line 33: | Line 33: |
Z.B.: '' Mikel Jackson --> '<http://foo/Mikel_Jackson>' '' | Z.B.: '' Michael Jackson --> '<http://foo/Michael_Jackson>' '' |
Line 35: | Line 35: |
''*'' Für die bessere Ladeperformance empfiehlt sich die Variablen ''NumberOfBuffers'' und ''MaxDirtyBuffers'' auf einen höheren Wert unter 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'' | ''*'' Für bessere Ladeperformance empfiehlt sich die Variablen ''NumberOfBuffers'' und ''MaxDirtyBuffers'' in der virtuoso.ini-Datei auf einen höheren Wert zu setzen (genaueres ist in virtuoso.ini beschrieben). Die Datei liegt unter ''<Installationsordner von virtuoso>/var/lib/virtuoso/db/virtuoso.ini'' |
Line 38: | Line 38: |
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. | Das Importieren der Daten in den Rdf3x-Store erfolgt durch ein Skript in ''<Installationsordner von Rdf3x>/bin/rdf3xload <DB-Name> <RDF-Satz-Pfad>''. Bei der Anfragegenerierung ist kein zusätzlicher Präfix erforderlich. |
Line 40: | Line 40: |
Z.B.: '' Mikel Jackson --> '<Mikel_Jackson>' '' | Z.B.: '' Michael Jackson --> '<Michael_Jackson>' '' |
Line 43: | Line 43: |
[[https://github.com/Buchhold/SparqlEngineDraft#2-creating-an-index|Anweisungen]] befolgen. Kein zusätzlicher Präfix ist bei der Anfragegenerierung erforderlich. | [[https://github.com/Buchhold/SparqlEngineDraft#2-creating-an-index|Anweisungen]] befolgen. Bei der Anfragegenerierung ist kein zusätzlicher Präfix erforderlich. |
Line 45: | Line 45: |
Z.B.: '' Mikel Jackson --> '<Mikel_Jackson>' '' | Z.B.: '' Michael Jackson --> '<Michael_Jackson>' '' |
Line 49: | Line 49: |
Die Größe des Input-RDF-Sets in der NT-Format beträgt 17 GB. | Die Größe des Input-RDF-Sets im NT-Format beträgt 17 GB. |
Line 51: | Line 51: |
|| '''RDF-Store''' |||| '''Ladezeit''' |||| '''Indexgroße auf der Festplatte''' || '''Indexgroße in der Arbeitspeicher''' || || Virtuoso |||| 23 min |||| 7.9 GB |||| ? || |
|| '''RDF-Store''' |||| '''Ladezeit''' |||| '''Indexgröße auf der Festplatte''' || '''Indexgröße im Arbeitspeicher (unmittelbar nach dem Serverstart)''' || || Virtuoso |||| 23 min |||| 7.9 GB |||| 5.8 GB || |
Line 54: | Line 54: |
|| SparqlEngineDraft |||| 26 min |||| 14.2 GB |||| 3.5 GB || | || !SparqlEngineDraft |||| 26 min |||| 14.2 GB |||| 3.5 GB || |
Line 58: | Line 58: |
'''Testbeschreibung:''' Alle Testfälle wurden mit dem gelöschten Cache durchgeführt. |
|
Line 62: | Line 60: |
|| '''Query \ RDF Store''' |||| '''rdf3x''' |||| '''SparqlEngineDraft''' || || '''Query 1''' |||| 0.581ms(1) |||| 13.827ms(1) || || '''Query 2''' |||| 17.632ms(5162) |||| 10.568ms(5162) || || '''Query 3''' |||| 98.772ms(1579) |||| 57.344ms(1579) || || '''Query 4''' |||| 22.731ms(9767) |||| 16.673ms(9767) || || '''Query 5''' |||| 5.030ms(4) |||| 239.383ms(4) || || '''Query 6''' |||| 65.057ms(0) |||| 72.879ms(0) || || '''Query 7''' |||| 28.483ms(3697) |||| 30.418ms(3697) || || '''Query 8''' |||| 9.559ms(164) |||| 21.509ms(164) || || '''Query 9''' |||| 0.501ms(128) |||| 2.319ms(128) || || '''Query 10''' |||| 476.191ms(1528) |||| 314.789ms(1528) || |
|| '''Query \ RDF Store''' |||| '''rdf3x''' |||| '''SparqlEngineDraft''' |||| '''Virtuoso''' || || '''Query 1''' |||| 0.730ms(1) |||| 36.819ms(1) |||| 2433.000ms(1) || || '''Query 2''' |||| 16.472ms(5162) |||| 4.587ms(5162) |||| 121.000ms(5164) || || '''Query 3''' |||| 98.460ms(1579) |||| 57.766ms(1579) |||| 530.000ms(1579) || || '''Query 4''' |||| 24.536ms(9767) |||| 6.898ms(9767) |||| 38.000ms(9767) || || '''Query 5''' |||| 5.164ms(4) |||| 109.617ms(4) |||| 1229.000ms(4) || || '''Query 6''' |||| 75.784ms(0) |||| 41.713ms(0) |||| 138.000ms(0) || || '''Query 7''' |||| 31.728ms(3697) |||| 17.634ms(3697) |||| 101.000ms(3697) || || '''Query 8''' |||| 9.443ms(164) |||| 19.144ms(164) |||| 163.000ms(164) || || '''Query 9''' |||| 0.513ms(128) |||| 2.586ms(128) |||| 883.000ms(128) || || '''Query 10''' |||| 466.715ms(1528) |||| 208.694ms(1528) |||| 801.000ms(1528) || |
Line 74: | Line 72: |
''' Queries ''' | === Queries === |
Line 76: | Line 74: |
''' Query 1 ''' | '''Query 1''' |
Line 78: | Line 76: |
'' SELECT ?x WHERE { '' '' ?x <is-a> <Book> . '' '' ?x <Author> <Anthony_Newman_(Author)> '' '' } '' |
{{{ SELECT ?x WHERE { ?x <is-a> <Book> . ?x <Author> <Anthony_Newman_(Author)> } |
Line 83: | Line 82: |
''' Query 2 ''' | '''Query 2''' |
Line 85: | Line 84: |
'' SELECT ?x WHERE { '' '' ?x <Genre> <Comedy> . ?x <is-a> <Award-Nominated_Work> . ?x <is-a> <Film> . '' '' } '' |
{{{ SELECT ?x WHERE { ?x <Genre> <Comedy> . ?x <is-a> <Award-Nominated_Work> . ?x <is-a> <Film> . } }}} |
Line 89: | Line 92: |
''' Query 3 ''' | '''Query 3''' |
Line 91: | Line 94: |
'' SELECT ?x WHERE { '' '' ?x <is-a> <Politician> . ?x <Film_performance> ?y . ?y <Genre> <Comedy> . '' '' } '' |
{{{ SELECT ?x WHERE { ?x <is-a> <Politician> . ?x <Film_performance> ?y . ?y <Genre> <Comedy> . } }}} |
Line 95: | Line 102: |
''' Query 4 ''' | '''Query 4''' |
Triple Stores
We tested the performance of two triple stores: Virtuoso and RDF-3X. We compare them to our own triple store on a couple of benchmarks.
Software Installation
Installation von Virtuoso Open-Source Edition:
- Anweisungen in der 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, muss dieser Satz in ein für die RDF-Speicherung gängiges Format umgewandelt werden. Ausgewählt wurde das NT-Format. Der ursprüngliche Datensatz enthält Values und Entities. Values waren schon nt-konform, die Entities mussten umgewandelt werden. Dafür wurden die Entities in eckige Klammern gesetzt und unzulässige Zeichen durch die entsprechenden Prozent-Kodierungen oder durch von uns definierte Ersatzzeichen ersetzt (siehe Ersetzungtabelle unten).
Ersetzungstabelle:
% |
< |
> |
\ |
^ |
` |
space |
||||||
%25 |
%3C |
%3E |
%5C |
%5E |
%60 |
_ |
Z.B.: Michael Jackson --> <Michael_Jackson>
Data Import Virtuoso:
Das Importieren der Daten in den Virtuoso Store wurde mit dem Bulk loading process durchgeführt. Bei diesem Prozess muss der Name des RDF-Graphen als graph_iri eingegeben werden. Unter diesem Namen ist der RDF-Satz bei Virtuoso erreichbar: Wenn man eine Sparql-Anfrage an den Store erstellt, muss man die graph_iri als prefix für jede Entity benutzen.
Z.B.: Michael Jackson --> '<http://foo/Michael_Jackson>'
* Für bessere Ladeperformance empfiehlt sich die Variablen NumberOfBuffers und MaxDirtyBuffers in der virtuoso.ini-Datei auf einen höheren Wert zu setzen (genaueres ist in virtuoso.ini beschrieben). Die Datei liegt unter <Installationsordner von virtuoso>/var/lib/virtuoso/db/virtuoso.ini
Data Import Rdf3x:
Das Importieren der Daten in den Rdf3x-Store erfolgt durch ein Skript in <Installationsordner von Rdf3x>/bin/rdf3xload <DB-Name> <RDF-Satz-Pfad>. Bei der Anfragegenerierung ist kein zusätzlicher Präfix erforderlich.
Z.B.: Michael Jackson --> '<Michael_Jackson>'
Data Import SparqlEngineDraft:
Anweisungen befolgen. Bei der Anfragegenerierung ist kein zusätzlicher Präfix erforderlich.
Z.B.: Michael Jackson --> '<Michael_Jackson>'
Indexerstellung:
Die Größe des Input-RDF-Sets im NT-Format beträgt 17 GB.
RDF-Store |
Ladezeit |
Indexgröße auf der Festplatte |
Indexgröße im Arbeitspeicher (unmittelbar nach dem Serverstart) |
|||
Virtuoso |
23 min |
7.9 GB |
5.8 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 |
Virtuoso |
||||
Query 1 |
0.730ms(1) |
36.819ms(1) |
2433.000ms(1) |
|||
Query 2 |
16.472ms(5162) |
4.587ms(5162) |
121.000ms(5164) |
|||
Query 3 |
98.460ms(1579) |
57.766ms(1579) |
530.000ms(1579) |
|||
Query 4 |
24.536ms(9767) |
6.898ms(9767) |
38.000ms(9767) |
|||
Query 5 |
5.164ms(4) |
109.617ms(4) |
1229.000ms(4) |
|||
Query 6 |
75.784ms(0) |
41.713ms(0) |
138.000ms(0) |
|||
Query 7 |
31.728ms(3697) |
17.634ms(3697) |
101.000ms(3697) |
|||
Query 8 |
9.443ms(164) |
19.144ms(164) |
163.000ms(164) |
|||
Query 9 |
0.513ms(128) |
2.586ms(128) |
883.000ms(128) |
|||
Query 10 |
466.715ms(1528) |
208.694ms(1528) |
801.000ms(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> }