AD Research Wiki:

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:

  1. Runterladen

  2. Anweisungen in README-Datei folgen.

Installation von rdf3x:

  1. Runterladen

  2. Kompilieren

Installation von SparqlEngineDraft:

  1. Klonen

  2. Punkt '1.Build' in der Repository-Beschreibung 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-conform, 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 defenierten 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>'

Data Import Rdf3x:

Das Datenladen in den Rdf3x-Store erfolgt durch einen Skript <Installationsordner von Rdf3x>/bin/rdf3xload <DB-Name> <RDF-Satz-Pfad>. Das wars! Bei der Nfragestellung muss man keinen zusätzlichen Prefix eingeben.

Z.B.: Mikel Jackson --> '<Mikel_Jackson>'

Ladezeiten:

RDF-Store

Ladezeit

Virtuoso

1170 min

Rdf3x

noch nicht gemessen, aber deutlich weniger als bei Virtuoso

Queries

Testvorgang

Als test-Framework wurde ein Python-Skript verwendet. Dabei wurde folgendes Abschnitt immer 3-Fach für jede Kombination Query<>RDF-Store ausgeführt.

start = int(round(time.time()*1000))

process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)

out, err = process.communicate()

end = int(round(time.time()*1000))

wo

command = virtuosoISQL_path + "isql 127.0.0.1:1113 dba dba " + queryFile für Virtuoso

command = rdf3x_path + "rdf3xquery" + dataBase + " " + queryFile für rdf3x

Anfragen

Für jede Anfrage wurden zwei Datein erstellt die diese Anfrage enthalten: Eine für rdf3x und eine für Virtuoso.

Beispiel Anfrage für rdf3x:

SELECT * WHERE {

<The%20Format%20(Musical%20Recording)%20%231> ?b ?c

}

Beispiel Anfrage für Virtuoso:

SPARQL SELECT * WHERE {

<http://foo.org/The%20Format%20(Musical%20Recording)%20%231> ?b ?c

};

Tests

Zeilenformat: <time> (number of lines in result)

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)

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> }

AD Research Wiki: TripleStores (last edited 2015-04-09 14:59:08 by stromboli)