GND in lokale Datenbank laden (reloaded)

Gulf of Mexico, United States. Photo by NASA on Unsplash.

Wir setzen unser lokales Testsystem für Experimente mit der Linked Open Data Version der Gemeinsamen Normdatei mit Oxigraph neu auf.

Wir hatten vor über einem Jahr schon einen ausführlichen Artikel zum Laden der GND in einen Apache Jena Triplestore verfasst. Das beschriebene Setup ist nach wie vor im Einsatz und wir sind auch (meistens) zufrieden damit. Jedoch dauert das Einlesen von Daten doch recht lange, was das Aufsetzen von Ad-Hoc Experimenten erschwert.

Daher haben wir als Alternative das relativ neue Projekt Oxigraph getestet.

Datenbank: Oxigraph

Das Projekt Oxigraph ermöglicht uns ein ähnliches Setup, wie wir es mit Apache Jena aufgebaut haben. Anders als Apache Jena basiert Oxigraph auf der Programmiersprache Rust und verwendet RocksDB als Datenbank im Hintergrund. Das ist für den Endanwender jedoch nicht sichtbar, so dass diese technischen Details sich hauptsächlich in einer schnelleren Verarbeitungsgeschwindigkeit bemerkbar machen.

Einlesen der Daten

Zum Einlesen haben wir uns die Datei authorities-gnd_lds.nt.gz aus dem DNB Data Dump heruntergeladen. Anders als in unserem Apache Jena Projekt, müssen wir die Komprimierung der Daten vor dem Einlesen mit gzip -d authorities-gnd_lds.nt.gz auflösen. 1

Wir arbeiten mit der folgenden Ordnerstruktur:

flowchart TD subgraph data[far:fa-folder-open data] fuseki[far:fa-folder oxigraph] gnd_triples[far:fa-folder gnd_triples] end root[far:fa-folder-open oxigraph_test] --> data root --> README[far:fa-file README.md]
  • README.md: Überblick über das Projekt und die Daten geben!
  • oxigraph: Ordner zum Persistieren der Datenbank von Oxigraph.
  • gnd_triples: Speicherort der .nt Datei.

Einlese-Variante 1

In dieser Variante lassen wir zuerst die Daten in einem Container einlesen und dann in einem neuen Container anzeigen. Der folgende Befehl startet einen Docker Container mit dem Verzeichnis der Daten zum Einlesen und einem Verzeichnis zum Speichern der Datenbank.

docker run -it --rm --name=gnd-oxigraph -v "${PWD}/data/gnd_triples:/gnd_triples" -v "${PWD}/data/oxigraph:/data" oxigraph/oxigraph --location /data load --file /gnd_triples/authorities-gnd_lds.nt

Sobald der Einleseprozess beendet wurde und der Container sich schließt, können wir einen neuen Container zum Arbeiten mit den Daten starten.

docker run -d --rm --name=gnd-oxigraph -p 8080:7878 -v "${PWD}/data/oxigraph:/data" oxigraph/oxigraph --location /data serve --bind=0.0.0.0:7878

Anschließend können wir die Benutzeroberfläche in einem Webbrowser über http://localhost:8080 aufrufen. Der Port 8080 wurde hierbei von uns im docker run Befehl gesetzt und kann angepasst werden.

Einlese-Variante 2

Wir können die Daten auch direkt in dem Arbeitscontainer einlesen lassen. Beim Starten des Containers müssen wir dabei zusätzlich den Pfad zu den GND Daten einbinden.

docker run -d --rm --name=gnd-oxigraph -p 8080:7878 -v "${PWD}/data/gnd_triples:/gnd_triples" -v "${PWD}/data/oxigraph:/data" oxigraph/oxigraph --location /data serve --bind=0.0.0.0:7878

Anschließend starten wir den Einleseprozess, indem wir den Befehl oxigraph_server load in dem laufenden Container ausführen.

docker exec -it gnd-oxigraph /usr/local/bin/oxigraph load --location /data --file /gnd_triples/authorities-gnd_lds.nt

3. Anzeigen der Daten

Abschließend testen wir exemplarisch, ob die Daten nutzbar sind. Hierfür verwenden wir eine SPARQL Abfrage mit einem Standardbeispiel aus der GND Ontology.

SELECT ?p ?o
WHERE {
  <https://d-nb.info/gnd/118514091> ?p ?o
}

Zusammenfassung und Ausblick

Oxigraph ist im Vergleich zu Apache Jena noch etwas grob an manchen Stellen und befindet sich noch in der aktiven Entwicklung. Es ist also gut möglich, dass die hier verwendeten Befehle in einer späteren Version nicht mehr so funktioniert oder Schritte wie das Auflösen der .gz-Komprimierung nicht mehr notwendig sind. 2

Bildschirmfoto der Weboberfläche von Oxigraph.
Bildschirmfoto der Weboberfläche von Oxigraph.

Überrascht waren wir von der Geschwindigkeit, mit der die Daten der GND eingelesen und Abfragen ausgeführt werden können. In der folgenden Tabelle ist ein direkter Vergleich mit unserem Apache Jena Setup für das Einlesens der GND und das Durchführens der Abfrage aus Erste Experimente mit der GND gelistet.

GND ladenTestabfrage
Apache Jena5.329,1s17,5s
Oxigraph391,0s3,6s

Das ist natürlich kein ausführlicher oder repräsentativer Benchmark, zeigt aber direkt den Geschwindigkeitsunterschied mit den Daten mit denen wir aktuell arbeiten. Das ermöglichst uns zukünftig Umgebungen für Ad-Hoc Experimente mit der GND zu erstellen.


  1. Wir haben für diesen Blogbeitrag Oxigraph in Version v0.3.8 und den GND Dump vom 13. Oktober 2022 verwendet. ↩︎

  2. Dokumentation zur Verwendung des Oxigraph Docker Image ↩︎

Benjamin Rosemann
Benjamin Rosemann
Data Scientist

Ich evaluiere KI- und Software-Lösungen und integriere sie in den Archivalltag.

Ähnliches