Neo4j

Übersicht und Anwendung 

Neo4j ist eine Platform für eine Vielzahl von Softwareprodukten und Dienstleistungen, in deren Kern das Graphdatenbank-Verwaltungssystem Neo4j DB steht. Es ist auf das Traversieren von Graphen optimiert. Damit eignet sich Neo4j dafür, stark vernetzte oder hierarchische Datenstrukturen zu speichern, abzufragen und Datenrelationen zu analysieren. Typische Anwendungsgebiete sind beispielsweise Empfehlungssysteme, Speichern und Analysieren von Sozialen Netzwerken oder das Überwachen von Lieferketten.

Weitere Produkte und Dienste die unter Neo4j angeboten werden:

  • Neo4j Graph Data Science: Eine Softwareplattform die Algorithmen sowie Modelle des Maschinenellen Lernens für die Analyse von Graphen bereit stellt.
  • Neo4j Bloom: Eine integrierte Anwendung für interaktive Visualisierungen von Graphen.
  • Cypher Query Language: Eine Abfragesprache für Graphdatenbanken.
  • Neo4j Connectors and Integrators: Zur Integration in die bestehende Softwarearchitektur.
  • Neo4j Developer Tools: Eine Reihe von Anwendungen, welche die Arbeit mit Neo4j erleichtern soll.

Angeboten und verwaltet werden diese von dem gleichnamigen Unternehmen. Im folgenden Text soll mit dem Begriff auf die Softwareprodukte und Dienste verwiesen werden. Die Bereitstellung von Neo4j kann auf einem lokalen Server oder über Cloud-Dienstleistungen wie AuraDB erfolgen.

Datenmodell

Neo4j speichert Daten in der Struktur von Graphen. Es werden damit sowohl Daten als auch deren Relationen zueinander festgehalten. Die Knoten bestehen aus mindestens einem “label“, sowie „properties“.Die gerichteten Kanten bestehen aus genau einem „type“ und „properties“. Eigenschaften von Knoten und Kanten sind durch Paare von Eigenschaftbezeichnung und Wert repräsentiert.

 

 

Abfragen mit Cypher

In Neo4j können komplexe Abfragen mittels der deklarativen Abfragesprache „Cypher“ durchgeführt werden. Mit Cypher-Ausdrücken deklariert ein Anwender Eigenschaften eines gesuchten Musters. Die Datenbank-Engine traversiert dementsprechend alle notwendigen Pfade und gibt das Resultat zurück. Damit können Daten und Relationen gesucht, erstellt, verändert, zusammengeführt und gelöscht werden. Die Deklaration eines gesuchten Musters beginnt mit dem Keyword MATCH. Nach WHERE können Bedingungen formuliert werden, nach denen die Ergebnisse gefiltert werden. Mit RETURN wird spezifiziert welche Resultate zurückgegeben werden.

Beispiele:

Gebe alle Werte der Eigenschaft „property2“ zurück, von all jenen Knoten, welche die Eigenschaft „property1“ mit dem Wert „some string value“ belegt haben.

MATCH (var : Label)
WHERE var.property1 = „some string value“
RETURN var.property2

Nach Eigenschaften kann auch direkt durch MATCH gefiltert werden.

MATCH (var : Label {property1 = „some string value“})
RETURN var

Gebe aufsteigend alle Werte der Eigenschaft „r_property“ zurück, von Relationen des Typs „type1“ zwischen zwei Knoten A und B. A muss das Label „Label1“ tragen. B muss das Label „Label2“ tragen.

MATCH (:Label1)-[rvar : type1]-> (:Label2)
RETURN rvar.r_property AS r_prop
ORDER BY r_prop ASC

Wie anhand dieser Beispiele zu sehen ist, werden Knoten durch Klammern repräsentiert 

(node_variable : Label, … {property : value, … }) 

und Relationen durch einen grafischen Pfeil, in dessen Mitte eckige Klammern stehen.

-[relation_variable : type {property : value, … }]->

BPMN-Modell

Das Modell bildet den Prozess der Produktempfehlung eines fiktiven Online-Einzelhandels ab. Teilnehmer an diesem Prozess sind Kunden, die Abteilung „Einkauf“, die Abteilung „Marketing & Verkauf“, sowie eine Graphdatenbank.

Praxisbeispiel

Im folgenden wird beispielhaft die Nutzung der Neo4j DB in Bezug zu diesem Modell aufgezeigt. Dazu werden außerdem Docker und Neo4j Browser verwendet. In diesem Praxisbeispiel wird Neo4j über ein Dockerimage bereitgestellt. Im ersten Schritt muss dazu also Docker installiert und gestartet werden. Dann kann in der Kommandozeile über folgenden Befehl ein neuer Dockercontainer mit einem Neo4j-Image erstellt und aktiviert werden.

docker run -p 7474:7474 -p 7687:7687 \
--name=neo4j_demo
--volume=$HOME/neo4j/data:/data \
--volume=$HOME/neo4j/data/imports:/var/lib/neo4j/import \
--env NEO4J_AUTH=none \
neo4j:latest

Dabei werden auch Ports, der Name des Containers, Ordner für Daten und Import, Passworteinstellungen sowie die Version des Neo4j Image spezifiziert. Sobald der Container gestartet ist, kann Neo4j über Neo4j Browser unter der Adresse http://localhost:7474/browser/ verwendet werden. Neo4j Browser ist visuell in einzelnen Zellen organisiert, die jeweils aus einer Kommandozeile für Cypher-Audrücke bestehen. Sobald eine Abfrage gestellt wird, wird die entsprechende Zelle um ein Ausgabefenster erweitert.

Das BPMN-Modell beginnt damit, dass Kunden des Online-Einzelhandels ein Kundenprofil anlegen. Dabei wird in der Graphdatenbank ein neuer Knoten erstellt, der den Kunden repräsentiert.

Damit ein Kunde Produktdaten abfragen und Käufe tätigen kann, muss die Abteilung „Einkauf“ diese Produktdaten in die Datenbank einpflegen. Die Daten könnten dabei beispielsweise bereits als CSV-Datei („product_nodes.csv“) vorliegen.

Im nächsten Schritt kann ein Kunde ein Produkt kaufen und erstellt damit eine Relation zwischen dem Knoten der ihn repräsentiert und dem gekauften Produkt.

Wenn diese Prozesse von mehreren Kunden durchlaufen werden, entsteht damit eine vernetzte Datenstruktur. In diesem Praxisbeispiel wird von einer minimalen Anzahl von zwei Kunden ausgegangen, die notwendig ist, um mit dem gewählten Empfehlungsverfahren eine Produktempfehlung ausführen zu können. Die vollständige Datenbank könnte dann so aussehen:

Die Kunden „TAR“ und „SRC“ kaufen beide das Produkt „PROD_B“. Kunde „SRC“ kauft außerdem auch „PROD_A“. Keiner der beiden Kunden entscheidet sich für „PROD_C“. Wie hier zu sehen ist, zeigen die beiden Kunden Überschneidungen in ihren Kaufentscheidungen. Außerdem existiert eine transitive Relation zwischen den Knoten „TAR“ und „PRO_A“ über die Knoten „PROD_B“ und „SRC“. Für die Abteilung „Marketing & Verkauf“ ist es von Interesse solche Muster zu identifizieren, wenn sie davon ausgehen, dass der Kunde „TAR“ ebenfalls ein Interesse an „PROD_A“ haben könnte. Dazu können sie eine entsprechende Cypher-Abfrage an die Datenbank stellen und sich das zu empfehlende Produkt sowie den potentiellen Käufer zurückgeben lassen.

Alternativen

Es existiert eine Vielzahl von Plattformen mit Softwareprodukten und Dienstleistungen um Graphdatenbanken. Im folgenden sind einige prominente Beispiele aufgelistet.

  • Dgraph
  • Amazon Neptune
  • Tiger Graph
  • OrientDB

Fazit

Neo4j ist eine weit bekannte und etablierte Platform rund um Graphdatenbanken. Außerdem existiert eine umfassende und gepflegte Dokumentation, sowie eine aktive Nutzergemeinschaft. Viele der Angebote legen den Fokus auf einen einfachen Einstieg oder Lesbarkeit beispielsweise durch grafische Oberflächen, Visualisierung von Graphen oder visuelle Analogien in der Abfragesprache Cypher.

Quellen

https://neo4j.com/product

https://neo4j.com/docs/ (mit allen Unterseiten)

Andreas Meier, Michael Kaufmann (2016). SQL- & NoSQL-Datenbanken (8. Auflage). SpringerVieweg