Florian Steurer

Florian ist Softwareentwickler und am liebsten im Backend zu Hause
07.07.2020 | 5 min Lesezeit

JanusGraph: Eine Open-Source Graphdatenbank

Erste Schritte mit dem JanusGraph

Eine Graphdatenbank repräsentiert Daten in Form eines Netzwerks aus Datenpunkten (sog. Knoten) und deren Beziehungen zueinander (sog. Kanten). Vor allem für Anwendungsfälle, bei denen der Fokus auf den Beziehungen zwischen Daten liegt, lassen sich Graphdatenbanken nutzen um effiziente, erweiterbare und leistungsfähige Lösungen zu entwickeln. Ein häufig angeführtes Beispiel für den Nutzen von Graphdatenbanken sind Recommender-Systeme. Allein aus den Datenpunkten (z.B. den Nutzern und Artikeln im System) lassen sich keine Erkentnisse gewinnen. Mehrwert wird erst durch die vielen möglichen Beziehungen der Daten zueinander generiert z.B.: Welcher User hat welche Artikel gekauft? Und welche Artikel wurden außerdem angesehen? Durch die intuitive Repräsentation in einem Graph lassen sich diese Informationen leicht auswerten und das Recommender-System ist in der Lage, personalisierte Vorschläge zu produzieren.

Wenn nun ein solcher Graph-Use-Case vorliegt, stellt sich bald die Frage nach der Wahl einer geeigneten Graphdatenbank. Die Welt der Graphdatenbanken wird heute vor allem von proprietärer Software dominiert. Amazon und Microsoft setzen mit Neptune und CosmosDB auf cloud-only Datenbanken und auch die Konkurrenz bietet meist managed-cloud Lösungen an (z.B. Neo4j Aura). Neben der Cloud setzen viele Anbieter wie Neo4j, ArangoDB oder OrientDB auf ein Open-Core Geschäftsmodell, bei dem zwar die Grundfunktionalität als Open-Source verfügbar ist, erweiterte Features und Support aber teils teuer erstanden werden müssen. Insbesondere im Hinblick auf Verteilbarkeit und Skalierbarkeit zeigen sich die Einschränkungen der freien Versionen1.

Was also, wenn man sich weder auf die Azure- oder AWS-Cloud festlegen möchte, noch viel Geld für eine Enterprise-Subscription ausgeben möchte? Eine mögliche Alternative bietet JanusGraph, eine Open-Source Graphdatenbank, deren technische Aspekte im Folgenden vorgestellt werden sollen.

Architektur

JanusGraph ist eine Open-Source Graphdatenbank, welche nach dem Erwerb durch DataStax aus TitanDB hervorging, und heute in der Linux-Foundation verwaltet wird. JanusGraph selbst ist keine monolitische Datenbank, sondern nutzt existierende Datenbank- und Indextechnologien um den Graph zu speichern und zu durchsuchen. Als Schnittstelle für Applikationen wird eine Gremlin-API angeboten. Vereinfacht gesagt, übersetzt JanusGraph also zwischen dem Tinkerpop Graphmodell und bewährten Storage Backends wie z.B. Apache Cassandra.

Das Storage Backend wird über einen Storage Adapter integiert und dient zur Speicherung des Graphs. Die Wahl der zugrundeliegenden Speichertechnologie sollte nach Anwendungsfall erfolgen. So sind sowohl Apache Cassandra als auch Apache HBase verteilte Datenbanken, dennoch eignet sich Cassandra z.B. besser für hohe Verfügbarkeit, während sich HBase besser für Szenarien eignet, in denen hohe Konsistenz gefordert ist (vgl. hier). Das Engagement von DataStax lässt vermuten, dass sich der Fokus von JanusGraph eventuell in Richtung Cassandra verschieben wird.

Zusätzlich sorgt ein Index Backend für eine Optimierung der Datenbankzugriffe, insbesondere bei anspruchsvollen Abfragen wie Volltextsuche oder Bereichsabfragen. Hier lassen sich ElasticSearch oder Apache Solr integrieren.

Aus der Architektur ergeben sich auch verschiedene Stärken und Schwächen, auf die im Folgenden genauer eingegangen wird.

Architekturdiagramm JanusGraph
Abbildung 1: Architekturdiagramm (Quelle: https://docs.janusgraph.org/getting-started/architecture/)

Stärken und Schwächen

Stärken

Open-Source & Feature-rich Die größte Stärke von JanusGraph, ist die Lizenzierung unter der Apache2 Open-Source-Lizenz. So lassen sich viele Features nutzen, welche bei der Konkurrenz den Enterprise-Kunden vorbehalten sind, wie z.B. Schemata, Hot Backups und horizontale Skalierung2. Die Lizenz ermöglicht auch die Entwicklung zusätzlicher 3rd-Party-Adapter, wie es z.B. bereits für DynamoDB geschehen ist.

Skalierbarkeit und Anpassbarkeit Durch den Aufbau auf etablierten und skalierbaren Technologien verspricht auch JanusGraph hohe Skalierbarkeit, Verteilbarkeit und Verfügbarkeit. Gleichzeitig lässt sich ein JanusGraph-Deployment individuell an vorhandene Use-Cases anpassen.

Gremlin Query Language Zuletzt ist auch die Fokussierung auf Gremlin als Abfragesprache der Wahl vorteilhaft. So kann bestehendes Tooling, z.B. für Visualisierung, verwendet werden und Entwickler müssen keine proprietäre Abfragesprache lernen (z.B. AQL bei ArangoDB).

Schwächen

Nicht production-ready Eine der größten Schwächen ist, dass JanusGraph im Vergleich zu anderen Graphdatenbanken noch relativ jung ist. Die geringe Verbreitung erschwert es, Codebeispiele oder Hilfe bei Fragen zu finden. Zudem besteht das Risiko, dass sich JanusGraph auf lange Sicht nicht etablieren könnte. Prominente Unterstützer wie DataStax, IBM und Google lassen aber auf eine positive Entwicklung hoffen. Außerdem befindet sich JanusGraph zur Zeit in der Version 0.5.2 und ist somit auch noch nicht ready-for-production.

Anspruchsvolle Konfiguration Eine weitere Schwäche ergibt sich aus der Architektur. JanusGraph ermöglicht eine Vielzahl verschiedener Deployment-Szenarien. Um die passende Konfiguration für den vorliegenden Anwendungsfall auszuwählen, muss viel Zeit investiert werden. Für anspruchsvollere Deploymentszenarien, muss Wissen über Konfiguration und Deployment von Storage- und Indexbackend vorhanden sein. Vorgefertigte Docker-Compose Dateien und managed-cloud Lösungen wie in der IBM Cloud können den Aufwand dafür reduzieren.

Fazit

JanusGraph kann sich von der Konkurrenz insbesondere durch das Lizenzmodell absetzen, welches die Nutzung aller Features entgeltfrei ermöglicht. Durch modulare Architektur können dem konkreten Use-Case oder Know-How angepasste Technologien eingesetzt und hohe Skalierbarkeit und Verfügbarkeit erreicht werden. Um diese Vorteile allerdings voll ausnutzen zu können, muss auch viel Zeit in Evaluation und Performance-Tuning der Komponenten investiert werden. Die größte Schwäche der Technologie ist, dass sie sich momentan in Version 0.5.2 befindet und nicht production-ready ist.

Alles in Allem ist JanusGraph ein vielversprechendes Projekt, welches das Potenzial hat, eine echte Alternative zu den etablierten Lösungen zu bieten. Ich persönlich werde die zukünftige Entwicklung gespannt verfolgen.


  1. Als Beispiel beschränkt z.B. Neo4j Community die erlaubte Graph-Größe, die maximale Anzahl an CPUs und erlaubt keine horizontale Skalierung durch Clustering. Weitere Einschränken, finden sich hier und hier

  2. Einige Features hängen von den Fähigkeiten des zugrundeliegenden Storage Backends ab. Wie JanusGraph sind aber auch Cassandra und HBase unter Apache2 lizenziert.