Zunächst wünscht das Structr-Team allen ein frohes neues Jahr!
Sie haben vielleicht bemerkt, dass es in den letzten Wochen etwas ruhig um uns war, wir haben nicht viel getwittert und keine neuen Blogartikel oder Updates auf unserer Website veröffentlicht. Keine Sorge, wir waren und sind so produktiv und fleißig wie eh und je, und ihr könnt an der Menge und Häufigkeit der Commits sehen, dass es eine Menge Entwicklungsarbeit für unsere kommende Hauptversion 2.0 gibt.
Structr auf Neo4j 2.3 – endlich verfügbar und schneller als je zuvor
Vielleicht ist Ihnen auch aufgefallen, dass die letzten Snapshots von Structr (ebenso wie der Master-Zweig) nur gegen Neo4j 2.2 kompiliert wurden, obwohl die neueste stabile Version von Neo4j 2.3 ist. Der Grund dafür war, dass wir einen erheblichen Leistungsabfall feststellten, da der Lesezugriff auf Graph-Objekte und -Eigenschaften im Vergleich zu Neo4j 2.2 um etwa 60% (!) langsamer war. Wir haben einige Nachforschungen angestellt und sind zu dem Schluss gekommen, dass die Entfernung des JVM-basierten Objekt-Caches in Neo4j 2.3 daran schuld ist. Offensichtlich profitiert Structr sehr von Neo4js Objekt/Property-Cache, der zugunsten eines neuen Seiten-Caches, der in Neo4j 2.2 eingeführt wurde, entfernt wurde.
Die gute Nachricht ist, dass Structr ab heute jede (aktuelle) Neo4j-Version unterstützt und mit jeder Version optimale Leistung bietet.
Neue Datenbankabstraktionsschicht
Nicht nur, um unabhängig von der zugrundeliegenden Neo4j-Version die gleiche Performance zu bieten, sondern auch, um die laufende Entwicklung von Structr im Allgemeinen von einer bestimmten Neo4j-Version zu entkoppeln, haben wir uns entschlossen, eine neue Datenbankabstraktions-API und Treiber für Neo4j 2.2 und 2.3 zu entwickeln, die die genannte API implementieren. Es wurde soeben in den Master-Zweig eingefügt und es gibt ein neues Projekt namens structr-neo4j-driver, das geklont und gegen die gewünschte Neo4j-Version kompiliert werden muss, bevor Structr mit dem Treiber als neue Abhängigkeit kompiliert wird.
Die folgende Abbildung veranschaulicht die neue Architektur:

Leistungssteigerung: 30% mehr
Um eine optimale Leistung auf allen Neo4j-Versionen zu gewährleisten, haben wir in den neuen Neo4j-Treiber von Structr einen neuen (Second-Level-)Objekt-Cache eingebaut, um den entfernten Cache in Neo4j zu kompensieren, wodurch sich die Gesamtleistung gegenüber Neo4j 2.2 um etwa 30 % erhöht hat.
Die neue Datenbankabstraktion bietet nicht nur eine bessere Performance und eine gewisse Unabhängigkeit vom Neo4j-Release-Zyklus, sondern wird es auch ermöglichen, verschiedene Arten von Treibern zu implementieren, z.B. mit Neo4j embedded, in einem Remote-Server-Setup oder sogar als In-Memory- oder Read-Only-Datenbank. Langfristig wird die neue Datenbank-Abstraktionsschicht es Structr ermöglichen, auch andere Datenbanken mit einer OpenCypher-API zu unterstützen.
Bitte zögern Sie nicht, den neuesten Structr-Snapshot zu testen, der auf der neuen Abstraktionsschicht basiert und wie immer auf Maven Central verfügbar ist: https://oss.sonatype.org/content/repositories/snapshots/org/structr/structr-ui/2.0-SNAPSHOT/.