#acl Simon Skilevic:read,write Björn Buchhold:read,write All:read,write = 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. [[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 == 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 --> '' === 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 --> '' '' === Data Import Rdf3x: === Das Datenladen in den Rdf3x-Store erfolgt durch einen Skript ''/bin/rdf3xload ''. Das wars! Bei der Nfragestellung muss man keinen zusätzlichen Prefix eingeben. Z.B.: '' 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 {'' '' ?b ?c'' ''}'' '''Beispiel Anfrage für Virtuoso:''' ''SPARQL SELECT * WHERE {'' '' ?b ?c'' ''};'' === Tests === '''Zeilenformat:''' ''