2017-09-06 7 views
2

Ich habe Dynamodb-Janusgraph-Storage-Backend auf AWS bereitgestellt und ich versuche herauszufinden, wie Sie eine Verbindung zum Gremlin-Server von Java herstellen. Ich habe eine sbt-Abhängigkeit von dynamodb-janusgraph-storage-backend in meinem Projekt, aber ich möchte nicht den Gremlin-Server als Teil meiner Java-Anwendung verwenden. Ich brauche es, um unabhängig zu laufen und verbinden Sie Java-Anwendung damit.dynamodb-janusgraph-storage-backend connect remote von Java

Ich schaute in mehrere Optionen wie Cluster (Gremlin-Java) und mitRemote (Gremlin-Treiber), aber beide haben ihre Grenzen. Ich möchte die Java Gremlin API verwenden, die ich nicht verwenden kann, wenn ich Cluster verwende. Mit der Methode withRemote kann ich nicht herausfinden, wie die Grafikinstanz initialisiert wird.

Die Beispiele auf Gremlin docs zeigt EmptyGraph.instance(), die ich nicht verwenden kann, wenn ich JanusGraph API verwenden möchte. Ich brauche diesen Teil mit Janusgraph zu arbeiten:

Cluster cluster = Cluster.open("conf/remote-objects.yaml"); // this has hosts and ports to gremlin server running in AWS 
graph = EmptyGraph.instance(); 
graph.traversal().withRemote(DriverRemoteConnection.using(cluster)) 

Ich brauche das Objekt JanusGraph Typ sein, damit ich openManagement() und andere Methoden verwenden können. Mit dem High-Level-Graph-Typ kann ich auch keine neuen Eckpunkte hinzufügen. Ich muss in der Lage sein, create, get, update von meinem Java-Code zu machen.

Antwort

1

Derzeit ist es nicht möglich, die JanusGraph Schema APIs über den Remote-Treiber aufzurufen. Wenn Sie keine JanusGraph-Instanz von Ihrer Anwendung aus öffnen möchten, müssen Sie das Schema als String erstellen und Client submit verwenden, um es an den Gremlin-Server zu senden. Sie können weiterhin das traversal source with remote driver verwenden, um das Diagramm zu erstellen und abzufragen.

Cluster cluster = Cluster.open("conf/remote-objects.yaml"); 

// use client to create the schema 
Client client = cluster.connect(); 
String schema = "mgmt=graph.openManagement();"; 
schema += "mgmt.makeVertexLabel(\"person\").make();"; 
schema += "mgmt.makeVertexLabel(\"person\");"; 
schema + "mgmt.makePropertyKey(\"name\").dataType(String.class).make();" 
schema += "mgmt.commit(); true"; 
CompletableFuture<List<Result>> results = client.submit(schema).all(); 

// use traversals only to interact with the graph 
Graph graph = EmptyGraph.instance(); 
GraphTraversalSource g = graph.traversal().withRemote(DriverRemoteConnection.using(cluster)); 
Vertex v = g.addV("person").property("name", "pepe").next(); 
List<Vertex> vlist = g.V().toList(); 
+0

Wie würden Sie Kanten zwischen Scheitelpunkten erstellen? Ich habe es versucht, aber nicht funktioniert: gV(). Hat ("name", "pepe"). AddE ("erstellt") .to (gV(). Hat ("name", "anotherUser") .next()) .property ("CREATED_AT", LocalDateTime.now(). toEpochSecond (ZoneOffset.UTC)); – monali01

+2

Ich habe es - das hat funktioniert: gV(). Hat ("name", "pepe"). As ("a"). V() .has ("name", "anotherUser"). AddE (erstellt) .from ("a") .Eigenschaft ("CREATED_AT", LocalDateTime.now(). toEpochSecond (ZoneOffset.UTC)). next(); – monali01

+0

Ich denke, mein Problem war nicht in der Lage, Scheitelpunkt und Kanten, die ich durch GraphTraversalSource tun kann, so für den Moment, diese Lösung wird funktionieren. Ich werde Schemas und Indizes entweder über die Konsole oder einen Zeitcode erstellen, also sollte es in Ordnung sein, wenn ich den Client dafür verwenden muss. – monali01