我有下一个配置:使用Janus GraphDB的远程Gremlin服务器(TinkerPop 3.2.6)
我在remote.yaml中有gremlin-console(带janus插件)+ conf:
hosts: [10.1.3.2] # IP og gremlin-server host
port: 8182
serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}
所以我想通过gremlin-server建立连接(不是直接通过graph = JanusGraphFactory.build().set("storage.backend", "cassandra").set("storage.hostname", "127.0.0.1").open();
连接到JanusGraph)并获得支持事务的图形?
有可能吗?因为我看到所有TinkerFactory图表都不支持交易
答案 0 :(得分:1)
据我所知,通过gremlin服务器使用Janus图,你应该:
在gremlin-console的配置文件中定义ip& port:
conf/remote.yaml
通过Gremlin-console连接到gremlin服务器:
: remote connect tinkerpop.server conf/remote.yaml
==> Configured localhost/10.1.23.113: 8182
...并以远程模式工作(使用:>
或:remote console
),即将所有命令(或@script)发送到gremlin-server。
:> graph.addVertex(...)
或
:remote console
==>All scripts will now be sent to Gremlin Server - [10.1.2.222/10.1.2.222:818]
graph.addVertex(...)
您不需要为图表和trawersal定义变量,而是使用
graph. - for the graph
g. - for the traversal
在这种情况下,您可以使用JanusGraphDB提供的所有图形功能。
答案 1 :(得分:1)
Tinkerpop提供了Cluster对象来保持连接的配置。使用集群对象可以生成graphTraversalSource对象。
this.cluster = Cluster.build()
.addContactPoints("192.168.0.2","192.168.0.1")
.port(8082)
.credentials(username, password)
.serializer(new GryoMessageSerializerV1d0(GryoMapper.build().addRegistry(JanusGraphIoRegistry.getInstance())))
.maxConnectionPoolSize(8)
.maxContentLength(10000000)
.create();
this.gts = AnonymousTraversalSource
.traversal()
.withRemote(DriverRemoteConnection.using(cluster));
gts对象是线程安全的。使用远程时,每个查询将在单独的事务中执行。理想情况下,gts应该是一个单例对象。
请确保在应用程序关闭时调用gts.close()和cluster.close(),否则可能导致连接泄漏。
答案 2 :(得分:0)
我相信使用withRemote()
将Java应用程序连接到正在运行的gremlin服务器将不支持事务。我也很难找到与此有关的信息,但是据我所知,如果您除了阅读图形还想做任何事情,则需要使用“嵌入式janusgraph”并将远程托管的持久性数据存储在“存储后端”中。就像您在问题下半部分所描述的那样,从应用程序连接到“”。
https://groups.google.com/forum/#!topic/janusgraph-users/t7gNBeWC844
我在这里找到的一些讨论^^提到了它在远程模式下自动提交单个事务,但是当我尝试时似乎并没有这样做。