2017-09-06 9 views
2

私はdynamodb-janusgraph-storage-backendをAWSにデプロイしました.Javaからgremlinサーバーに接続する方法を理解しようとしています。 私はdynamodb-janusgraph-storage-backendの依存関係を自分のプロジェクトに持っていますが、私はJavaアプリケーションの一部としてgremlinサーバを使いたくありません。私はそれを独立して実行するには、Javaアプリケーションを接続する必要があります。dynamodb-janusgraph-storage-backendはJavaからリモートで接続します

Cluster(gremlin-java)とwithRemote(gremlin-driver)のような複数のオプションを調べましたが、両方に制限があります。私は、クラスタを使用するとできないJava Gremlin APIを使用したいと思います。 withRemoteメソッドを使用すると、グラフインスタンスを初期化する方法がわかりません。

JanusGraph APIを使用したい場合、gremlin docsの例ではEmptyGraph.instance()を使用できません。 私はJanusgraphで動作するように、この部品が必要です。

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)) 

私はopenManagement()や他の方法を使用できるようにJanusGraphタイプであることをオブジェクトが必要です。また、高レベルのグラフタイプを使用して、新しい頂点を追加することはできません。私は自分のJavaコードから作成、取得、更新を行うことができる必要があります。

答えて

1

現在、リモートドライバを介してJanusGraphスキーマAPIを呼び出すことはできません。アプリケーションからJanusGraphインスタンスを開く必要がない場合は、スキーマをStringとして構築し、Client submitを使用してGremlin Serverに送信する必要があります。 traversal source with remote driverを使用して、グラフを作成して照会することはできます。

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

どのようにして頂点間のエッジを作成しますか? 私はこれを試しましたが、うまくいきませんでした: gV()。( "name"、 "pepe")addE( "created").to(gV()。has( "name"、 "anotherUser" ).next()) .property( "CREATED_AT"、LocalDateTime.now()。toEpochSecond(ZoneOffset.UTC)); – monali01

+2

私はそれを得ました - これはうまくいった: gV()。 "("名前 "、"ペペ ")として(" a ")V() .has(" name "、" anotherUser ")。addE ( "a") .property( "CREATED_AT"、LocalDateTime.now()。toEpochSecond(ZoneOffset.UTC))。 – monali01

+0

私の問題は、GraphTraversalSourceを介して行うことができる頂点とエッジを追加できなかったと思います。今のところ、このソリューションは機能します。私は、コンソールまたは1つのタイムコードを使用してスキーマとインデックスを作成するつもりですので、クライアントを使用する必要があります。 – monali01

関連する問題