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.
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());
}
}
Das vollständige Projekt liegt inklusive README auf GitHub.