Maik Wosnitzka

Java-Graph-Persistence

Ich entwickle ein Framework für Graphdatenbanken wie Amazon Neptune.

Das Java-Graph-Persistence-Framework zielt darauf ab, die Verwendung von Graphdatenbanken, auf die mit Gremlin zugegriffen werden kann, für Java-Anwendungen zu vereinfachen. Um dies zu ermöglichen, stellt das Framework Java-Annotationen bereit, um zu definieren, wie Java-Objekte (POJOs) in der Graphdatenbank darzustellen sind und wie sie mit anderen Objekten in Beziehung stehen.

Dank dieser Definition können Objekte in der Datenbank gespeichert und aus dieser gelesen werden: Ein automatischer Abfragegenerator erstellt Gremlin-Abfragen, um Graphenelemente hinzuzufügen, zu aktualisieren und zu löschen. Benutzerdefinierte Gremlin-Abfragen können ausgeführt werden und geben das Ergebnis als zugeordnete POJOs-Instanzen zurück, die alle von der Abfrage angeforderten Informationen enthalten.

Anwendungsbeispiel des Frameworks

Definieren wird eine Person als einen Knoten (Vertex). Eine Person besitzt einen Namen (Feld name), sowie ein Geburtsdatum (Feld birthplace).

@Getter
@Setter
public class Person extends GraphVertex {

  @Property
  private String name;

  @Edge
  private Place birthPlace;

}
		

Der Geburtsort birthplace ist vom Typ Place und stellt ebenfalls ein Vertex dar, welches ebenfalls einen Namen besitzt (Feld name).

@Getter
@Setter
public class Place extends GraphVertex {

  @Property
  private String name;

}
		

Na dann: Gremlin Queries automatisch generieren und damit Daten in die DB schreiben

// Prepare entities
Person myPerson = new Person("Maik");
Place myPlace = new Place("Cologne");
myPerson.setBirthPlace(myPlace);

// Generate queries
GraphTraversalQueryBuilder queryBuilder = new GraphTraversalQueryBuilder();
List<GraphTraversalQuery> traversalQueries = queryBuilder.add(myPerson);

// use the auto-generated gremlin traversal queries, for example to store them
try (final TinkerGraph graph = TinkerGraph.open()){
    for (GraphTraversalQuery query : traversalQueries){
        query.execute(graph.traversal());
    }
}