Neo4jDE eBook

  • Published on
    18-Jan-2016

  • View
    62

  • Download
    0

Embed Size (px)

Transcript

<ul><li><p>Michael Hunger</p><p> Neo4j 2.0Eine Graphdatenbank fr alle</p><p>schnell+kompakt</p></li><li><p>Michael Hunger Neo4j 2.0 Eine Graphdatenbank fr alle</p><p>schnell+kompaktISBN: 9783-86802-315-2</p><p> 2014 entwickler.pressein Imprint der Software &amp; Support Media GmbH</p><p>http://www.entwickler-press.dehttp://www.software-support.biz</p><p>Ihr Kontakt zum Verlag und Lektorat: lektorat@entwickler-press.de</p><p>Bibliografische Information Der Deutschen BibliothekDie Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet ber http://dnb.ddb.de abrufbar.</p><p>Lektorat: Theresa VgleKorrektorat: Jennifer DienerSatz: Dominique KalbassiUmschlaggestaltung: Maria RudiBelichtung, Druck &amp; Bindung: M.P. Media-Print Informationstechnolo-gie GmbH, Paderborn</p><p>Alle Rechte, auch fr bersetzungen, sind vorbehalten. Reproduktion jeglicher Art (Fotokopie, Nachdruck, Mikrofilm, Erfassung auf elektroni-schen Datentrgern oder andere Verfahren) nur mit schriftlicher Geneh-migung des Verlags. Jegliche Haftung fr die Richtigkeit des gesamten Werks, kann, trotz sorgfltiger Prfung durch Autor und Verlag, nicht bernommen werden. Die im Buch genannten Produkte, Warenzeichen und Firmennamen sind in der Regel durch deren Inhaber geschtzt.</p></li><li><p>5schnell + kompakt</p><p>Inhaltsverzeichnis</p><p>Inhaltsverzeichnis</p><p>1 Einfhrung: Die Welt ist ein Graph 7</p><p>2 Neo4j im NoSQL-Umfeld 17</p><p>3 Erste Schritte mit Neo4j 21</p><p>4 Installation und Ober flche des Neo4j-Servers 31</p><p>5 Neo4j 2.0 Was ist neu? 37</p><p>6 APIs von Neo4j 41</p><p>7 Beispieldatenmodell 45</p><p>8 Einfhrung in Cypher 51</p><p>9 Treiber fr den Neo4j-Server 63</p><p>10 Webanwendung mit Neo4j-Backend 71</p><p>11 Inkrementelles Datenmodellieren 85</p></li><li><p>6 Inhaltsverzeichnis</p><p>12 Datenimport 93</p><p>13 Anwendungsflle fr Graphdatenbanken 97</p><p>14 Interaktive Datenmodelle: GraphGists 101</p><p>15 Servererweiterung mit dem Java-API 107</p><p>16 Spring Data Neo4j 115</p><p>17 Neo4j im Produktiv einsatz 123</p><p>18 Ausblick und Neo4j Roadmap 127</p><p>Anhang 129</p></li><li><p>7schnell + kompakt</p><p>KAPITEL 1</p><p>Einfhrung: Die Welt ist ein Graph</p><p>Wir sind umgeben von einem Netz aus InformationenVon all den Informationen, die tagtglich verarbeitet werden, ist ein betrchtlicher Anteil nicht wegen ihres Umfangs interessant, sondern wegen der inhrenten Verknpfungen, die darin enthal-ten sind. Denn diese machen den eigentlichen Wert solcher Daten aus.</p><p>Verknpfungen reichen von historischen Ereignissen, die zu Or-ten, Personen und anderen Ereignissen in Beziehung stehen (und selbst in der heutigen Politik ihre Auswirkungen zeigen), bis hin zu Genstrukturen, die unter konkreten Umwelteinflssen auf Pro-teinnetzwerke abgebildet werden. </p><p>In der IT-Branche sind es Netzwerke, Computer, Anwendungen und Nutzer, die weitreichende Netze bilden, in denen Informatio-nen ausgetauscht und verarbeitet werden. Und nicht zuletzt stel-len soziale Netzwerke (ja, neben den virtuellen gibt es auch noch reale) aus Familien, Kollegen, Freunden, Nachbarn bis hin zu gan-zen Kommunen einen wichtigen Aspekt unseres Lebens dar.</p><p>Jeder Teil unseres Lebens wird von zahlreichen Verbindungen zwischen Informationen, Dingen, Personen, Ereignissen oder Or-ten bestimmt. Groe Internetfirmen versuchen natrlich, sich die-se Informationen zunutze zu machen. Beispiele fr groangeleg-</p></li><li><p>8 Einfhrung: Die Welt ist ein Graph</p><p>te Projekte in dem Zusammenhang sind der Google Knowledge Graph1 oder Facebook Graph Search2.</p><p>Abbildung 1.1: Die Welt ist ein Graph</p><p>Vernetzte Informationen und DatenbankenWenn diese vernetzten Informationen in Datenbanken abgespei-chert werden sollen, mssen wir uns Gedanken darber machen, wie wir mit den Verbindungen umgehen. Normalerweise werden sie ignoriert, denormalisiert oder zusammengefasst, um in das Datenmodell der Datenbank zu passen und auch Abfragen schnell </p><p>1http://www.google.com/insidesearch/features/search/knowledge.html</p><p>2http://www.facebook.com/about/graphsearch</p></li><li><p>9schnell + kompakt</p><p>Graphdatenmodell </p><p>genug zu machen. Was dabei jedoch verloren geht, ist die Infor-mationsflle, die in anderen Datenbanken und Datenmodellen erhalten geblieben wre. Genau in dieser Situation spielen Graph-datenbanken und das Graphdatenmodell ihre Strken aus. Stark vernetzte Daten fallen in einer relationalen Datenbank sofort durch die schiere Menge an JOIN-Tabellen und JOIN-Klauseln in Abfragen auf (und durch die daraus resultierende schlechtere Ab-fragegeschwindigkeit).</p><p>Abbildung 1.2: Relationale JOIN-Tabelle</p><p>GraphdatenmodellDie mathematische Theorie zu Graphen ist viel lter als man denkt. Leonard Euler begrndete sie, als er einen Weg ber die sieben Brcken des damaligen Knigsbergs finden wollte, ohne </p></li><li><p>10</p><p> Einfhrung: Die Welt ist ein Graph</p><p>eine doppelt berqueren zu mssen.3 Die Mathematik hat sich seitdem sehr ausfhrlich mit Graphtheorie und Graphalgorith-men befasst. Diese sollen aber nicht der Gegenstand dieses Buchs sein. Hier soll stattdessen praktisches Wissen fr den pragmatischen und effektiven Umgang mit vernetzten Daten vermittelt werden.</p><p>GraphdatenbankenDie Kombination aus Management von Graphstrukturen (und damit von vernetzten Daten) und Datenbankeneigenschaften wie Transaktionalitt und ACID ist eine neuere Erscheinung. Graph-datenbanken, die dies leisten, sind Teil der NoSQL-Bewegung, die zumeist nicht relationale Datenbanken umfasst. Diese Daten-banken sind grtenteils quelloffen, entwicklerorientiert und mit einem Datenmodell versehen, das bestimmte Anwendungsflle besonders gut untersttzt.</p><p>Graphdatenbanken sind dafr prdestiniert, relevante Informa-tionsnetzwerke transaktional zu speichern und besonders schnell und effizient abzufragen. Das Datenmodell besteht aus Knoten, die mittels gerichteter, getypter Verbindungen miteinander ver-knpft sind. Beide knnen beliebige Mengen von Attribut-Wert-Paaren (Properties) enthalten. Daher wird dieses Datenmodell auch als Property-Graph bezeichnet (Abbildung1.3).</p><p>Jeder hat definitiv schon einmal mit Graphen gearbeitet. Sei es bei der Modellierung fr eine relationale Datenbank (ER-Diagramm), beim Skizzieren von Domnenaspekten auf einem Whiteboard/Tafel (Symbole und Linien) oder einfach whrend der kreativen Sammlung von Informationen (Mindmaps). Graphen sind auf-grund der Einfachheit des Datenmodells und einer besonders leichten Visualisierung gut verstndlich und leicht zu handhaben.</p><p>3 http://de.wikipedia.org/wiki/K%C3%B6nigsberger_Br%C3%BCckenproblem</p></li><li><p>11schnell + kompakt</p><p>Graphdatenbanken </p><p>Abbildung 1.3: Property-Graph</p><p>Aber was ist nun so besonders an Graphdatenbanken? Dieses Kapitel geht nher auf dieses Thema anhand von Neo4j, einer Open-Source-Graphdatenbank ein. Sie ist nativ und in Java im-plementiert. Nativ bedeutet, dass Knoten und Beziehungen direkt in den internen Datenbankstrukturen als Records in den Daten-bankdateien reprsentiert sind. Neo4j nutzt keine andere Daten-bank als Persistenzmechanismus, sondern baut auf einer eigenen Infrastruktur auf, die speziell dafr entwickelt wurde, vernetzte Daten effizient zu speichern.</p><p>Wie schafft es eine Graphdatenbank, die hochperformante Navi-gation im Graphen zu realisieren? Das ist ganz einfach: mit einem Trick. Statt bei jeder Abfrage rechen- und speicherintensiv Entit-ten immer wieder zu korrelieren, werden die Verbindungen beim Einfgen in die Datenbank als persistente Strukturen abgelegt. So wird zwar beim Speichern ein Zusatzaufwand in Kauf ge-nommen, aber beim viel hufigeren Abfragen der Informationen knnen die direkt gespeicherten Verknpfungsinformationen zur schnellen Navigation in konstanter Zeit genutzt werden.</p></li><li><p>12</p><p> Einfhrung: Die Welt ist ein Graph</p><p>Neo4j reprsentiert Knoten und Beziehungen in seinem Java-API als Java-Objekte (Node, Relationship) und im HTTP-API als JSON-Objekte. In der eigens fr Graphen entwickelten Abfrage-sprache Cypher hingegen wird ASCII-Art verwendet.</p><p>Neo4js Abfragesprache CypherWas? ASCII-Art? Wie soll das denn funktionieren? Man denke einfach an Kreise und Pfeile auf einer Tafel oder einem White-board, die man zum Diskutieren von Modellen schnell aufzeich-nen kann. Das klappt, solange die Datenmengen, die es zu vi-sualisieren gilt, klein genug oder nur konzeptionell sind, richtig gut. Bei greren Graphen kann es schnell passieren, dass man den Wald vor Bumen (oder Subgraphen) nicht mehr sehen kann. Aber wir wissen eigentlich, wonach wir suchen. Wir sind an ganz bestimmten Mustern im Graphen interessiert und ausgehend von diesen Strukturen wollen wir Daten aggregieren und projizieren, sodass unsere Fragen beantwortet und Anwendungsflle abge-bildet werden knnen. In einer Visualisierung knnen wir diese Muster z.B. mit anderen Farben hervorheben (Abbildung1.4).</p></li><li><p>13schnell + kompakt</p><p>Neo4js Abfragesprache Cypher </p><p>Abbildung 1.4: Graph-Muster im Graph</p><p>Aber wie wrden wir diese Muster in einer textuellen Abfra-gesprache beschreiben? Dort kommt die ASCII-Art ins Spiel. Wir zeichnen einfach Knoten als geklammerte Bezeichner und Beziehungen als Pfeile aus Bindestrichen (ggf. mit Zusatzinfor-mationen wie Richtung oder Typ). Attribute werden in einer JSON-hnlichen Syntax in geschweiften Klammern dargestellt (Abbildung1.5).</p><p>Abbildung 1.5: Graph-Muster als ASCII-Art</p></li><li><p>14</p><p> Einfhrung: Die Welt ist ein Graph</p><p>Viel klarer wird das mit einem Beispiel, hier aus der Domne der Filmdatenbanken:</p><p>(m:Movie {title: "The Matrix"}) </p></li><li><p>15schnell + kompakt</p><p>Neo4js Abfragesprache Cypher </p><p>// Erzeugt einen Film mit der gesamten Besetzung in // einem Zug // Benutzt Parameter wie in Prepared-Statements CREATE (movie:Movie {title:{movie_title}}) FOREACH (a in {actors} : CREATE (:Actor {name:a.name}) -[:ACTS_IN {role:a.role}]-&gt;(movie)) // Findet die Top-10-Schauspielerkollegen von Keanu Reeves MATCH (keanu:Actor)-[:ACTS_IN]-&gt;()</p></li><li><p>17schnell + kompakt</p><p>KAPITEL 2</p><p>Neo4j im NoSQL-Umfeld</p><p>NoSQLDas Interesse an nicht relationalen Datenbanken hat sich im letzten Jahrzehnt deutlich verstrkt. Ein Grund dafr ist neben dem massiv angestiegenen Datenvolumen auch die wachsende Heterogenitt der Daten und die zunehmende Komplexitt der Beziehungen zwischen den verschiedenen Aspekten der Informa-tionen, die verarbeitet werden mssen.</p><p>Da relationale Datenbanken mit ihrem Eine fr alles-Anspruch den konkreten Anforderungen oft nicht gewachsen waren, hat sich eine neue Generation von Datenbanken stark gemacht, solche Anwendungsflle besser zu untersttzen.</p><p>Ausgehend von den groen Internetkonzernen wie Google, Ama-zon und Facebook wurden fr ganz bestimmte Nutzungsszenari-en und Datenmengen interne Datenbanken entwickelt (BigTable, Dynamo, Cassandra), die deutliche Performanceverbesserungen zur Folge hatten. Diese Datenbanken wurden dann entweder als Open Source zugnglich gemacht oder wenigstens ihre Konzep-te in technischen Artikeln detailliert erlutert. Das bereitete die Grundlage fr einen massiven Anstieg der Anzahl von Daten-banklsungen, die sich auf einige wenige Anwendungsflle spezi-alisieren und diese dafr optimal abbilden.</p></li><li><p>18</p><p> Neo4j im NoSQL-Umfeld</p><p>Im Allgemeinen werden diese neuen Persistenzlsungen als NoSQL zusammengefasst, eine nicht sehr glcklich gewhlte Bezeichnung. Unter dem Gesichtspunkt der polyglotten Persis-tenz steht dieses Krzel aber eher fr Nicht nur (Not only) SQL. Relationale Datenbanken haben weiterhin ebenso ihre Daseins-berechtigung und Einsatzzwecke wie alle anderen Datenbanken auch.</p><p>Mit der groen Auswahl ist auch eine neue Verantwortlichkeit auf die Schultern der Entwickler gelegt worden. Sie mssen sich mit den vorhandenen Technologien kritisch auseinandersetzen und mit diesem Hintergrundwissen fundierte Entscheidungen fr den Einsatz bestimmter Datenbanktechnologien fr konkrete Anwen-dungsflle und Datenstrukturen treffen.</p><p>Den meisten Datenbankanbietern ist das klar. Daher sind Infor-mationsveranstaltungen, Trainings und Bcher (wie dieses) ber diese Technologien zurzeit hoch im Kurs. </p><p>Ein wichtiger Aspekt in den Herausforderungen modernen Da-tenmanagements ist die Verarbeitung heterogener, aber stark vernetzter Daten, die im relationalen Umfeld sprlich besetzte Tabellen und den Verzicht auf Fremdschlsselbeziehungen (da optional) nach sich ziehen wrden.</p><p>Informationen ber Entitten aus unserem realen Umfeld sind ohne die sie verbindenden Beziehungen weniger als die Hlfte wert. Heutzutage werden aus den expliziten und impliziten Ver-knpfungen entscheidungskritische Analysen erstellt, die fr das schnelle Agieren am Markt unabdingbar sind.</p><p>Graphdatenbanken und Neo4jUnd so hat sich neben den in die Breite skalierbaren, aggregatori-entierten NoSQL-Datenbanken auch die Kategorie der Graphda-</p></li><li><p>19schnell + kompakt</p><p>Graphdatenbanken und Neo4j </p><p>tenbanken etabliert, die sich auf die Verarbeitung stark vernetzter Informationen spezialisiert hat.</p><p>Neo4j als einer der ltesten Vertreter der Kategorie der Graphda-tenbanken (RDF und Tripelstores bleiben bei diesen Betrachtun-gen auen vor) ist schon seit zehn Jahren in der Entwicklung und am Markt. Ursprnglich fr die Echtzeitsuche von verschlagwor-teten Dokumenten ber Sprachgrenzen (27 Sprachen) und Bedeu-tungshierarchien hinweg als Teil eines Onlinedokumentenma-nage mentsystems entwickelt, wird seine Entwicklung seit 2007 von Neo Technology offiziell gesponsert.</p><p>Neo4j ist eine in Java implementierte Graphdatenbank, die ur-sprnglich als hochperformante, in die JVM eingebettete Biblio-thek genutzt wurde, aber seit einigen Jahren als Serverdatenbank zur Verfgung steht. Anders als andere Graphdatenbanken nutzt es einen eigenen, optimierten Persistenzmechanismus fr die Speicherung und Verwaltung der Graphdaten. Mit einer mittels Java NIO (Datei-Memory-Mapping usw.) implementierten Persis-tenzschicht, die Blcke fester Gre zum Abspeichern von Kno-ten und Verbindungsinformationen nutzt, kann Neo4j die unteren Schichten optimal auf seine Bedrfnisse optimieren.</p><p>Da Graphdatenbanken, anders als aggregatorientierte Anstze, auf feingranulare Elemente setzen, die miteinander verknpft werden, ist es notwendig, fr nderungsoperationen einen Kon-text bereitzustellen, in dem nderungen entweder ganz oder gar nicht erfolgen. Bekanntlich sind dafr Transaktionen ziemlich gut geeignet. Neo4j selbst stellt eine komplette JTA- (und auch XA-2PC-)Transaktionsinfrastruktur zur Verfgung, die die gewohn-ten ACID-Garantien mitbringt und auch mit anderen transaktio-nalen Datenquellen integriert werden kann.</p></li><li><p>21schnell + kompakt</p><p>KAPITEL 3</p><p>Erste Schritte mit Neo4j</p><p>Was wre ein guter Weg, um mit dem Graphdatenmodell und Graphdatenbanken durchzustarten? In diesem Kapitel sollen eini-ge der wichtigsten Aspekte angerissen werden. Wir beschftigen uns mit jedem Teilbereich spter noch einmal genauer.</p><p>ModellierungZuerst sollte man einen Schritt zurcktreten und das grere Ganze betrachten. Einige der Lsungen, die man sich mit relatio-nalen Datenbanken erarbeitet hat, sollten berdacht und kritisch hinterfragt werden, wenn man die Technologie und das Daten-modell wechselt. </p><p>Um ein gutes Graphmodell der eigenen Domne zu erarbeiten, braucht man nicht viel. Ein Kollege oder Domnenexperte und ein Whiteboard sind genug, um ein Modell aufzuzeigen, das alle notwendigen Informationen und Beziehungen enthlt, um Antworten fr die wichtigsten Fragen und Anwendungsflle zu liefern. Dies e...</p></li></ul>