Inhalt

DGraph - Teil 1: Installation & erste Schritte

Ich war auf der Suche nach einem Datenbanksystem für ein internes Projekt in unserer Firma. Aus diesem Grund habe ich mir verschiedene Systeme angesehen. Neben alten Bekannten aus dem SQL oder NoSQL Umfeld bin ich auf etwas sehr interessantes gestoßen. Graph Datenbanken. Ohne großartig auf die Unterschiede eingehen zu wollen, hier die für mich interessantesten Aspekte, weshalb ich mich entschieden habe für meine Projekt eine Graphdatenbank zu wählen:

  • kein festes Datenbankschema erforderlich
  • Daten werden in Form von Knoten und Verbindungen abgebildet
  • starker Fokus auf die Beziehungen von Datensätzen zueinander
  • präziser Abruf von Daten auch über Beziehungen hinweg
  • gRPC Server eingebaut
  • GraphQL Server eingebaut

Dgraph Server starten

Am einfachsten lässt sich Dgraph mit Docker starten. Da wir persistente Daten haben wollen erstellen wir einen Ordner dgraph den wir unserem Container als Volume zur Verfügung stellen.

1
mkdir ~/dgraph
1
docker run -p 8080:8080 -p 9080:9080 -p 8000:8000 -it -v ~/dgraph:/dgraph dgraph/standalone:latest

Damit wird dgraph gestartet. Ist der Container noch nicht vorhanden wird das Image heruntergeladen. Zur Zeit ist die aktuelle Version die 2.0. Einen Überblick über die Version gibt es auf dem Docker Hub unter https://hub.docker.com/r/dgraph/dgraph/tags

Was bekommen wir hier?

  • einen HTTP Dienst auf Port 8080 mit den Endpunkten /admin und /graphql
  • einen HTTP Dienst auf Port 8000 mit dem WebInterface für Dgraph namens Ratel
  • einen gRPC Dienst auf Port 9080

Die ersten Datensätze speichern und wieder abrufen

Jetzt kann man auch schon mit der Datenbank interagieren und zwar auf eine der 3 oben stehenden Arten. Wir können uns unter http://localhost:8000/ in Ratel einloggen und unter Console anfangen die ersten Daten zu speichern. Dazu klicken wir erst einmal auf Mutation. Unsere erste Mutation sieht so aus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
  set{
    _:Peter <name> "Peter Parker" .
    _:Peter <hometown> "New York" .
    _:Mary <name> "Mary Jane Watson" .
    _:Mary <hometown> "New York" .
    _:Mary <friend_of> _:Peter .
    _:Harry <name> "Harry Osborne" .
    _:Harry <hometown> "New York" .
    _:Harry <friend_of> _:Peter .
    _:Harry <friend_of> _:Mary .
  }
}

Hiermit erstellen wir mehrere Personen mit den Feldern name und hometown. Das Feld friend_of ist eine Verbindung zu einem anderen Datensatz. Wer sich wegen des Formates wundert, es handelt sich hier um das RDF N-Quad Format. Keine Sorge deswegen, dazu kommen wir noch und das Format ist relativ einfach.

Jetzt können wir die Daten abfragen. Dazu wählen wir in der Konsole die Query aus und geben folgendes ein:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
  all(func: has(name)){
    uid
    name
    hometown
    friend_of{
      uid
      name
      hometown
    }
  }
}

Wir erstellen eine Abfrage all und nutzen dazu die Funktion has. Damit suchen wir alle Datensätze, die das Feld name haben. Dann geben wir an, dass wie die Felder uid, name, hometown und friend_of haben möchten. Da friend_of eine Verbindung zu einem anderen Datensatz ist geben wir hier wieder an welche Felder wir gerne haben möchten.

Wir haben jetzt erst einmal gesehen, wie man Dgraph startet und die ersten Schritte geht. Bisher haben wir ja auch nur mit Ratel gearbeitet. Der GraphQL endpunkt ist zwar gestartet, aber meckert, dass wir kein Schema haben. Außerdem haben wird RDF N-Quads kennengelernt. Hier müssen wir auf jeden Fall nochmal ansetzen 😊