Nis*_*mar 1 gremlin tinkerpop tinkerpop3 gremlin-server janusgraph
我通过远程连接到 janusGraph
cluster = Cluster.build()
.addContactPoints(uri.split("\\|"))
.port(port)
.serializer(new GryoMessageSerializerV1d0(GryoMapper.build().addRegistry(JanusGraphIoRegistry.getInstance())))
.maxConnectionPoolSize(poolSize)
.maxContentLength(10000000)
.create();
gts = AnonymousTraversalSource
.traversal()
.withRemote(DriverRemoteConnection.using(cluster));
Run Code Online (Sandbox Code Playgroud)
由于 gts 是线程安全的,我将 gts 保持在静态上下文中。每个线程使用相同的对象,并且没有一个线程通过调用 gts.close() 关闭 gts 每个线程运行查询,例如:
result = gts.V().has("foo","bar").valueMap().toList()
我不关闭 gts(graphTraversalSource) 不是由创建的 graphTraversal 对象gts.V()
对于GraphTraversalSource,调用的需要close()取决于您构造对象的方式(即在您的情况下为“gts”)。上的 javadocsDriverRemoteConnection解释了close(). 在您的特定情况下,您传递了Cluster您构造的对象,DriverRemoteConnection.using()这意味着您希望控制Cluster自己的关闭,因此调用GraphTraversalSource.close()只会关闭Client您GraphTraversalSource生成的任何实例来完成其工作。然后,您将需要给Cluster.close()自己打电话以获得完全有序的关闭和资源释放。
从close()aGraphTraversal生成的 a 的行为GraphTraversalSource略有不同,具体取决于您是否正在远程处理。在您的情况下,您使用的是远程遍历,因此应该调用close()以释放服务器上的副作用(如果遍历产生了任何副作用)。您的服务器是否收集副作用以供以后检索取决于您的实现,但对于最不可知的代码,最好始终明确地这样做。需要注意的是遍历催生超过被重复以完成非远程(嵌入的)图形数据库,使得hasNext()是false,将触发到呼叫close()并释放资源以图形保持。例如,调用iterate()将close()自动触发。
附带说明一下,从 3.5.0 中的 TinkerPop 协议中删除了对收集服务器上保留的副作用的支持,因此担心消失了 - 服务器根本不会再将副作用保留在内存中以供以后检索。
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |