Graphdatenbanken können überall dort ihre Stärken ausspielen, wo relationale Datenbanken aufgrund von Komplexität oder Performance an ihre Grenzen kommen. Komplexität bedeutet hier, dass man es in der relationalen Welt immer mit zwei unterschiedlichen Modellen zu tun hat, dem logischen Modell (also dem fachlichen) und dem physischen Modell (also den Tabellenstrukturen). Bei Graphdatenbanken ist das fachliche Modell und das Persistenzmodell identisch. Dadurch werden die Daten so strukturiert, wie es die Fachdomäne vorgibt.
Hinsichtlich Performance kennt man das Phänomen, dass Joins in relationalen Datenbanken mit wachsender Datenmenge langsamer werden. Intern werden sie typischerweise als B-Trees abgebildet, die mit O(log(n)) skalieren. Native Graphdatenbanken - wie Neo4j - dagegen speichern die Pendants zu Joins, also die Kanten, direkt als “Bürger erster Klasse” ab. Dadurch hängt eine Traversion durch den Datenbestand nur von der jeweils lokalen Struktur ab und ist nicht mehr abhängig von der Gesamt-Datenmenge, d.h. es ist eine O(1) Operation.
Aus technischer Sicht: Immer wenn relationale Datenbanken zu schmerzen beginnen (s.o.), man es mit halb-strukturierten Daten zu tun hat oder man in Document/KeyValue/Column-Stores zu viel mit MapReduce zu tun hat.
Aus fachlicher Sicht: Aus sehr vielen Kundenprojekten sehen wir als typische Anwendungsfälle:
Neo4j ist nicht dafür gebaut, mit einer großen Menge BLOB Daten umzugehen. Wenig Vorteil hat man auch in Fällen, in denen globale Aggregationen das typische Abfragemuster darstellen. Das können zwar Graphdatenbanken auch, aber nicht signifikant schneller als andere Technologien.
Neo4j hat seine Wurzeln noch vor der Jahrtausendwende. Die Anforderungen eines CMS Projektes konnten “klassisch” nicht gelöst werden. Daher haben unsere Gründer eine Bibliothek für Java geschrieben, mit der Daten als Knoten und Kanten abgelegt werden konnten. Über die Jahre entwickelte sich daraus eine vollwertige Datenbank.
Bis etwa 2007/2008 war es ein sehr kleines Startup in Malmö/Schweden. Vor etwa 10 Jahren kamen dann die ersten VCs an Bord und das Unternehmen ist seitdem auf nun knapp 250 Mitarbeiter weltweit gewachsen und hat insgesamt über 80 Mio. USD an Risikokapital erhalten.
Für das weitere Wachstum suchen wir neue Kollegen in verschiedenen Richtungen. Sowohl Sales, Entwicklung als auch Field Engineering. Generell wird im Bereich Entwicklung vor allem für Malmö und London gesucht, während Sales und Field Engineering naturgemäß nahe beim Kunden sein soll.
Was Neo4j von anderen Startups unterscheidet ist die Firmenkultur. Man merkt die schwedische Seele deutlich. Das bedeutet, dass man z.B. bewusst ein langsameres, dafür aber nachhaltigeres Wachstum anstrebt. Entscheidungen werden im “good consensus” getroffen.
Als großartig empfinde ich die gegenseitige Hilfsbereitschaft. Ein “diese Aufgabe ist nicht mein Job” habe ich bisher von niemandem gehört. Oder um einen Kollegen zu zitieren:
asshole-free company
Ich bin nun seit über 7 Jahren als Field Engineer bei Neo4j und begleite die Kunden von frühen Phasen mit technischer Vertriebsunterstützung über Evaluierungen und Implementierung bis hin zum “go live” und Support über den ganzen Lebenszyklus der Neo4j Projekte. Meist teilt sich das in viele kurze Engagements auf, die jeweils ein paar Tage dauern. Das bedeutet, dass ich nahezu im Wochenrhythmus mit anderen Leuten in anderen Projekten zu tun habe. Das bringt natürlich einiges an Reiserei mit sich, was ich (meistens) nicht ungern tue.
In meiner Freizeit bin ich seit vielen Jahren in der freiwilligen Feuerwehr tätig. Zum Ausspannen lese oder fotografiere ich gerne. Und leider viel zu selten auf dem Rennrad unterwegs.