Database Reference
In-Depth Information
von Schemaregeln angeht. Graphdatenbanken spielen ihre Stärken allerdings bei der Abbil-
dung von Relationen aus. Diese werden als Instanzen (oft engl. Relationship ) bereits beim
Einfügen von Daten angelegt und sind bei der Abfrage über das sehr schnelle Verfolgen
von Beziehungen (engl. Traversal ) verfügbar.
Die Besonderheit von Structr ist, dass auch komplexe (JSON-)Objekte mit verschachtelten
Datenstrukturen nicht als ein einzelnes Dokument, sondern in Graphstrukturen aufgespal-
ten und mit einem hohen Normalisierungsgrad persistiert werden. Die Denormalisation, d.
h. Aggregation zusammengesetzter Objekte aus Graphstrukturen, erfolgt dabei durch Ver-
folgen der Kanten im Graphen und Einsammeln der Attribute, die an den Knoten und Kan-
ten gespeichert sind, auf Basis der in Structr in einem Metagraphen definierten Schema-
regeln. Die Vorteile von dokumentenorientierten und Graphdatenbanken werden dadurch
kombiniert.
Erzeugung von JSON-Dokumenten aus Graphstrukturen
Um aus den in Neo4j gespeicherten Graphdaten ein JSON-Dokument zu erzeugen, ist eine
Reihe von Schritten notwendig, die im JSON-/REST-Server von Structr bei jedem Request
ablaufen. Die technischen Grundlagen dafür sind neben Neo4j selbst als Datenbank ein
eingebetteter Jetty-Servlet-Container, der für die Kommunikation per HTTP(S) zuständig
ist, und die Google-Bibliothek Gson zur De-/Serialisierung. Die Regeln für die Erzeugung
und Zerlegung der JSON-Dokumente werden direkt aus dem Datenmodell abgeleitet, das
im zur Laufzeit konfigurierbaren Schema von Structr definiert und in Neo4j als Metagraph
persistiert ist.
Wie wird nun aus einem Teil des Neo4j-Graphen ein JSON-Dokument? Zunächst wird die
REST-Anfrage zerlegt und analysiert. Structr ordnet jedem im System bekannten Typ einen
URI zu, unter dem eine Liste der JSON-Dokumente dieses Typs abgerufen werden kann.
Das gilt sowohl für die vorkonfigurierten Standardtypen wie z. B. User oder File als auch
für dynamisch über den Schemaeditor definierte Typen. Darüber hinaus können einzelne
Instanzobjekte auch über die beim Speichern vergebene UUID (Universally Unique Iden-
tifier) direkt abgerufen werden.
So lässt sich aus dem Request-URL der angefragte Typ und ggf. die UUID extrahieren, aus
denen ein oder mehrere Einstiegspunkte in den Graphen ermittelt werden müssen, die die
oberste Ebene des Dokuments darstellen. Das geschieht in der Regel durch eine Anfrage
Search WWH ::




Custom Search