Open Source im professionellen Einsatz

Angeheftete Eigenschaften

Seit Version 2 der Datenbank darf man nur noch den Knoten Properties anheften, was die Entwickler mit einer höheren Verarbeitungsgeschwindigkeit begründen. Wer an den Kanten Properties benötigt, muss selbst weitere Zwischenknoten einfügen – die assoziativen Knoten. Darüber hinaus gibt es nur ungerichtete Kanten, die auch noch zwingend zwei Knoten miteinander verbinden müssen. Obendrein kann Info Grid die Properties nicht indizieren.

Jede Änderung im Graphen erzeugt ein Ereignis (Event), für das sich Objekte als so genannte Listener registrieren lassen. Info Grid benachrichtigt sie dann automatisch beim Eintreten des Events. Auf diese Weise kann der Anwender beispielsweise automatisch auf eine neue Meldung in einem Newsfeed reagieren. Listing 2 zeigt in einem Beispiel, wie er in Java eine Info-Grid-Datenbank anlegt und sie mit ein paar Knoten füttert. Das Vorgehen ähnelt dabei Neo4j.

Listing 2

Java-Zugriff auf Info Grid

01 // In-Memory-Datenbank erstellen:
02 MeshBase datenbank = MMeshBase.create();
03 MeshObjectLifecycleManager molm = datenbank.getMeshObjectLifecycleManager();
04 // Transkation festlegen:
05 Transaction tx = datenbank.createTransactionAsap();
06 // Knoten erzeugen:
07 MeshObject dortmund = molm.createMeshObject();
08 MeshObject koeln = molm.createMeshObject();
09 //Properties setzen:
10 dortmund.setProperty("Name", "Dortmund");
11 koeln.setProperty("Name", "Köln");
12 //mit Kante verbinden:
13 dortmund.relate(koeln);
14 // Transaktion abschicken:
15 if(tx!=null) tx.commitTransaction();

Die Info-Grid-Entwickler stellen auf ihrer Homepage eine Beispiel-Webanwendung namens Mesh World bereit [12]. Die bietet netterweise auch Einblick in den Graphen und die Möglichkeit, ihn dort relativ bequem zu manipulieren. Treibende Kraft hinter Info Grid ist die Firma Net Mesh, die auch kommerziellen Support anbietet [13].

Hyper Graph DB

Aus der Ecke der künstlichen Intelligenz stammt Hyper Graph DB. Wie der Name bereits andeutet, arbeitet sie mit Hypergraphen, bei denen der Anwender sogar Kanten mit anderen Kanten in Beziehung setzen darf. Im Gegensatz zur Konkurrenz versteht sich Hyper Graph DB als reine eingebettete Datenbank (Embedded Database). Wer sie verwenden will, muss immer eine eigene Anwendung darum herumstricken.

Das funktioniert derzeit nur in Java, Anbindungen oder Konvertierungen an andere Sprachen fehlen. Dafür nehmen die Knoten des verwalteten Graphen beliebige Java-Objekte auf, man muss sie nur in die Datenbank schieben und dann mit Kanten verbinden. Wie simpel und einfach das über die Bühne geht, veranschaulicht Listing 3.

Listing 3

Java-Zugriff auf Hyper Graph DB

01 // Datenbank erstellen:
02 HyperGraph graph = HGEnvironment.get("/var/speicherort");
03 // Transaktion einleiten:
04 graph.getTransactionManager().beginTransaction();
05 // Knoten einfügen, Stadt ist eine vom Autor definierte Java-Klasse:
06 HGHandle dortmund = graph.add(new Stadt("Dortmund"));
07 HGHandle koeln = graph.add(new Stadt("Köln"));
08 // mit einfacher Kante verbinden:
09 HGHandle kante = graph.add(new HGPlainLink(dortmund, koeln));
10 // Transaktion abschließen:
11 graph.getTransactionManager().commit();

Die »add()« -Methoden packen ein Java-Objekt in jeweils einen Knoten und liefern anschließend ein Handle zurück. Über diesen Fingerabdruck wird der Admin den Knoten später in der Datenbank wiederfinden beziehungsweise mit anderen Hyper-Graph-Methoden manipulieren. Um die Knoten zu speichern, serialisiert Hyper Graph zunächst die Java-Objekte mit dem entsprechenden Java-API und schiebt sie anschließend in eine Berkeley-DB-Datenbank [14]. Diese Arbeitsweise ist für Programmierer extrem bequem, gleichzeitig aber auch wenig performant.

Kanten sind in Hyper Graph DB ebenfalls einfache Java-Objekte, die nur das dafür abgestellte Interface »HGLink« implementieren. Bildlich kann man sie sich wie bei Info Grid als Zwischenknoten vorstellen. Normalerweise müsste Listing 3 also eine eigene Java-Klasse erstellen, die das Interface »HGLink« implementiert. Um dem Entwickler etwas Arbeit zu ersparen, bringt Hyper Graph DB bereits ein paar fertige Klassen mit. So ist etwa »HGPlainLink« aus Zeile 9 eine einfache, unbeschriftete Kante.

Die Arbeit mit Hyper Graph DB geht somit schnell von der Hand. Wer in der Dokumentation stöbert, stolpert jedoch schnell über eine etwas gewöhnungsbedürftige Terminologie. So heißen die Grundbausteine eines Graphen Atome. Sie besitzen einen bestimmten Typ und können beliebige Nutzdaten aufnehmen. Sofern ein Atom mit einem oder anderen Kollegen eine Verbindung eingeht, handelt es sich um einen Link (Kante), andernfalls übernehmen sie die Funktion eines Node (Knoten).

Um an gespeicherte Atome wieder heranzukommen, bastelt sich der Programmierer mit eigens dafür abgerichteten Java-Objekten und -Methoden eine Anfrage zusammen. Auf Wunsch kann Hyper Graph DB eine solche Abfrage zunächst analysieren, daraus einen Abfrageplan erstellen und sich diesen merken. Eine erneute Anfrage läuft dann wesentlich schneller ab. Traversierungen lassen sich wie bei Neo4j umfassend steuern, darüber hinausgehende Algorithmen gibt es aber nicht.

Mehrere einzelne Hyper-Graph-Instanzen arbeiten auf Wunsch auch als Agenten-basierte Peer-to-Peer-Datenbank zusammen. Alle Beteiligten kommunizieren dabei über das JXTA-Protokoll [15] oder das aus dem Instant Messaging bekannte XMPP-Jabber.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 8 Heftseiten

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

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook