Neo4J und Graphenbasierte Datenbanken mit NoSQL Cool-Aid

Neo4J sieht nach einer interessanten Lösung für Datensätze aus, die starke Verknüpfungen untereinander aufweisen. Wenn man beispielsweise komplexere Strukturen in Datenbanken speichern möchte, hätte man in der relationalen Welt eine riesige Sammlung aus Verbindungen in den Tabellen. Das würde mit vielen JOINs zu langsamen Antworten führen. Mit graphenbasierten Datenbanken werden aber intern andere Trade-Offs gefahren, womit hochgradig verbundene Datensätze besser verwaltbar werden. Dabei wird aber nie auf die Garantien hinter ACID verzichtet, was diesen graphenorientierten Weg äußerst spannend macht.

Beispiel-Graph mit Filmen und Schauspielern

Diese Ansätze könnten für eine Idee die ich derzeit verfolge spannend werden. Statt alles in Datenreihen zu speichern oder sich mühevoll eine eigene Repräsentation zu basteln, die das alles persistiert, könnte ich auf diese bereits bestehende Infrastruktur aufbauen und um die Ergebnisse eigene Engines basteln, die diese Daten direkt konsumieren. In lese also komplexe Daten, führe Pattern Matching und Normalisierungs-Algorithmen darauf aus, speichere alles in die Datenbank und gehe zum nächsten Datensatz. Am Ende kann die Datenbank dann das erste Glied zum Auslesen der Daten werden, die dann über eine Client-Anwendung wieder transformiert und präsentiert werden.

Generell kann man mit derartigen Ansätzen also auf die eine allmächtige Datenbank die alle Daten in der aktuellsten Version ohne Redundanzen in der n+1ten Normalform speichert vergessen. Stattdessen bastelt man sich Applikationen mit Flows, die über Zeit die Daten/Änderungen in die letzten Ecken des Stacks propagieren. Bei manchen Anwendungen (Suchen und großen Indices) sollte das auch kein zu großes Problem darstellen.

Zusammenfassend bin ich also schon jetzt neugierig, wie ich diese „Neuerungen“ in meine zukünftigen Entwicklungen einbauen kann und ob ich das alles gebrauchen kann. Der typische Ratschlag von „No matter what, go relational and do fancy things later!“ kann bei solchen Paradigmenwechseln glaube ich auch mal ignoriert werden. Und wenn Speicherplatz eh billig ist, kann man auch alle Daten einfach parallel in eine relationale und eine graphenbasierte Datenbank schreiben, damit im Falle eines Ausfalls die relationale Datenbank als absoluter Safespace einspringen kann und den Rest des Stacks wieder befüllt. Vermutlich gibt es massenhaft Nachteile die man erst bei der Benutzung erfährt (unvorhersehbare Query-Performance, RAM Vorraussetzungen, …), aber Offenheit zu einer kombinierten Nutzung von z.B. PostgreSQL und Neo4J könnte am Ende zu einem Vorteil führen bei Anfragen, die zu dem jeweiligen System passen.

Vielleicht kann so etwas ja einer Leserin oder einem Leser helfen! 🙂

LG,
Max

Fertigstellung der Architektur & Implementierung eines privaten Rootservers „Heimdall“ mit zentraler Benutzerverwaltung & SSO

Artikelbild ist eine Kombination aus Server-multiple.svg und Heimdall.

Nach langer Konfiguration und Research ist die Aufgabe geschafft: Der Rootserver unter root.maximaximal.com ist nun voll funktionsfähig auf seiner ersten (neuen) Ausbaustufe! Diese Version heißt nun „Heimdall“, damit er etwas mehr Persönlichkeit bekommt als nur „der Root-Server“. Dieses Mal wurden Best-Practices befolgt, Konfiguration wurde per Ansible durchgeführt und alle Benutzerdaten werden zentral in einem LDAP Verzeichnis (per OpenLDAP) gespeichert. Auf diese Weise können alle Web-Anwendungen auf den zentralen Store zugreifen und nichts muss mehr eigene Benutzerauthentifizierung betreiben. Sogar Gruppen können nun abgebildet werden, wodurch sich automatisch Zugriffsrechte in Nextcloud verwalten lassen.

Ein weiteres nettes Feature ist der Support für Instant-Messaging über den XMPP Standard. Hierdurch kann man mit allen anderen Serverteilnehmern bequem Chatten (und sogar Bilder oder Dateien übertragen), ohne die Metadaten an Dritte weitergeben zu müssen. Durch die eigene Infrastruktur ist die Performance des Netzwerks auch hinreichend gut, dass man mit größeren Diensten wie beispielsweise WhatsApp im kleinen Kreis durchaus konkurrieren kann. Durch die Federation-Features von XMPP kann man sogar mit anderen Leuten auf anderen Servern chatten, wodurch man nicht mehr auf den einzelnen Server gebunden ist. Es gibt auch noch massenhaft Erweiterungen für größere Softwarepakete wie beispielsweise Jenkins (Jabber Plugin), welche Updates über XMPP verschicken können, wodurch Neuerungen ohne ständige E-Mail Flut übermittelt werden können.

Die größte Neuerung ist allerdings, dass nun durch die verbesserte (und formalisierte) Konfiguration des Servers neue Funktionen ohne viel Schwierigkeiten hinzugebaut werden können. Es ist nun jeder Dienst genauestens dokumentiert und Neuerungen lassen sich auf einfache Weise zur Konfiguration hinzu bauen. Egal ob Wikis, andere Websites, Bugtracking oder irgendwelche RSS-Reader – alles kann man jetzt leicht anbauen. Hierdurch wird der Root-Server besser verwendet, was den Kostenpunkt rechtfertigt.

Alles in Allem bin ich sehr zufrieden mit diesen Änderungen und werde auf dieser Version nun weiter aufbauen. Es hat einige Zeit gedauert bis das jetzt gemacht wurde, da die vollkommene Rekonfiguration natürlich viel Aufwand mit sich gebracht hat. Besonders die alte Installation zu löschen war eine Überwindung, aber am Ende konnten alle Sicherungen erfolgreich gemacht werden.

Viel Glück in euren Server-Setups und viel Spaß mit den Setups von anderen, damit ihr euch das nicht antun müsst! Im Idealfall ist das ganze Ding Setup-and-forget, aber ob das wirklich so gut funktioniert wird nur die Zeit zeigen.

LG,
Max