Open Source im professionellen Einsatz
Linux-Magazin 06/2014
© Buchachon Petthanya, 123RF

© Buchachon Petthanya, 123RF

Netzwerk-Beziehungen in Neo4j speichern und auswerten

So 'n Beziehungsding

Die Graphdatenbank Neo4j eignet sich viel besser als relationale Datenbanken, um Knoten und deren Beziehungen zueinander zu speichern und gezielt abzufragen. Wessen Freundeskreis nicht verworren genug ist, um als Graph-basierter Anwendungsfall durchzugehen, inventarisiert eben sein LAN damit.

513

Konstrukte wie der Social Graph von Facebook, der Verbindungen von Freunden und deren Bekanntschaften abbildet, oder die Follower-Struktur von Twitter sträuben sich hartnäckig, wenn es darum geht, ihre Daten persistent in traditionelle Datenbanken zu packen: Überführt man einen Pfad, der sich auf einem Whiteboard sehr einfach mit Kringeln und Pfeilen darstellen lässt, in ein relationales Modell, kommen Performance fressende Join-Anweisungen heraus – was sich mit den Anforderungen an eine schnell antwortende Website beißt.

Die Graphdatenbank Neo4j [2] dagegen speichert Graphmodelle nativ und legt dabei eine sagenhafte Performance hin – solange man es mit der Komplexität der Queries nicht übertreibt. Ihr generisches Speichermodell besteht aus Nodes (Knoten) mit Relationships (Kanten). Beide dürfen Attribute führen, so könnte ein Node, der eine Person repräsentiert, ein »name« -Feld zum Speichern des Namens enthalten oder eine Beziehung »is_friends_with« und deren Gütegrad ( »best_friend« , »casual_friend« ).

Online PLUS

In einem Screencast demonstriert Michael Schilli das Beispiel: http://www.linux-magazin.de/2014/06/plus

Abfragesprache Cypher

Die in der Datenbank liegenden Daten nimmt der Query-Prozessor von Neo4j in der SQL-ähnlichen Sprache Cypher entgegen und liefert reihenweise Ergebnisse, die Cypher ebenfalls im Stile von SQL filtert und aufbereitet (also sortiert, gruppiert et cetera).

Nach dem Installieren des GPL-lizenzierten Neo4j-Community-Servers (eine kostenpflichtige Enterprise-Version gibt's auch) lauscht dieser auf Port 7474 auf Kommandos, die entweder über REST eingehen oder den neueren simplen Json-Prozessor nutzen. Programmieren lässt sich ein Client in mehreren Dutzend Sprachen, unter anderem mit dem CPAN-Modul REST::Neo4p.

Dem auf [2] angebotenen Debian-Paket liegt darüber hinaus eine praktische Kommandoshell bei: »neo4j-sh« . Mit ihr kann jedermann ähnlich wie mit dem interaktiven MySQL-Client Anweisungen absetzen, um neue Daten in das Modell einzufügen und gespeicherte Informationen über Cypher-Queries zu extrahieren.

Mächtig deklarativ

Cypher gibt sich, ähnlich wie SQL, deklarativ: Der User bestimmt, welche Ergebnisse er sucht, macht aber zugleich keine prozeduralen Angaben darüber, wie diese genau zu finden sind. Match-Anweisungen bestimmen, welche Daten interessieren (beispielsweise "Finde alle Daten" oder "Finde alle Relationen vom Typ »is_friends_with« ). Where-Klauseln reduzieren anschließend die Anzahl der Treffer, zum Beispiel könnten den anfragenden User nur Personen interessieren, die älter als 18 Jahre sind.

Am Ende modeln später einsetzende Aufbereitungsschritte die Daten um, sortieren oder fassen sie zusammen. Aber auch weitere Match-Anweisungen auf die Ergebnisliste und sogar zwischendurch einsetzende Aktionen zum Erzeugen neuer Daten sind erlaubt.

Zur Illustration einiger praktischer Abfragen soll der Graph eines Heimnetzwerks in Abbildung 1 dienen. Netze mit Knoten und Verbindungskanten stellen tatsächlich ein beliebtes Aufgabenfeld für Neo4j dar. Denn um festzustellen, ob ein Router über andere Knoten problemlos das offene Internet erreicht, muss die Datenbank einen offenen Pfad von A nach B über n oft trickreich verbundene Knoten finden, was auf relationalen Systemen eine Performance-Implosion verursacht, aber sich auf Graphdatenbanken oft in den Griff bekommen lässt.

Abbildung 1: Die Komponenten eines Home-Netzwerks – für die Analyse füttert sie der Perl-Snapshot in eine Graphdatenbank ein.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Kaspersky möbelt Mail-Gateway auf

    Der russische Sicherheitsspezialist Kaspersky hat sein Anti-Spam-Produkt für Linux- und Unix-Server überarbeitet.

  • Mesh-Netzwerke

    Gegen Überwachung können Mesh-Netzwerke entgegen einer verbreiteten Annahme zwar nur wenig ausrichten, dennoch sterben die Ad-hoc-Netzwerke trotz kommerzieller Konkurrenz nicht aus. Im Gegenteil: Sie haben Zulauf, und auf Protokollebene gibt es ständig neue Entwicklungen.

  • Vermascht

    Ein WLAN ist eine zentralistische Sache und räumlich rund um den Accesspoint begrenzt. Die bisherigen Linux-Mesh-Implementationen für den Ad-hoc-Modus umwehte der Hauch einer Bastelstube. Die Aufnahme des offiziellen IEEE 802.11s-Codes in den Linux-Kernel könnte das ändern.

  • Graphdatenbanken

    Sie erkennen mit klarem Blick die wirklich relevanten Beziehungen im Social Web, verstehen die Sprache, finden zielstrebig die kürzesten Wege und optimieren Besucherströme. Das sind die Aufgaben, die Graphdatenbanken mit Bravour erledigen. Dieser Artikel vergleicht fünf blaublütige Open-Source-Vertreter.

  • Doppelt genäht

    Fällt der Internetprovider aus, sitzt der Nutzer zu Hause auf dem Trockenen. Es sei denn, er hilft sich wie ein Profi und schaltet auf die Konkurrenz um. Ein Perl-Skript konfiguriert dann den Rechner neu.

comments powered by Disqus