JanusGraph / tinkerpop中的泄漏连接

问题描述 投票:1回答:1

我正在通过]远程连接到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));

由于gts是threadSafe,因此我将gts保持在静态上下文中。每个线程使用相同的对象,并且没有线程通过调用gts.close()关闭gts。每个线程都运行查询,例如:result = gts.V().has("foo","bar").valueMap().toList()我不关闭由gts.V()

创建的gts(graphTraversalSource)或graphTraversal对象
  • 我应该关闭从中创建的每个graphTraversal对象吗?gts(graphTraversalSource)。
  • 我什么时候应该关闭这些对象?

我正在通过cluster = Cluster.build().addContactPoints(uri.split(“ \\ |”)).port(port).serializer(new ...

gremlin tinkerpop tinkerpop3 janusgraph gremlin-server
1个回答
3
投票
close()生成的GraphTraversalGraphTraversalSource的行为,根据您是否要进行远程处理而有所不同。在您的情况下,您正在使用远程遍历,因此应调用close()释放服务器上的副作用(如果遍历产生了任何副作用)。服务器是否收集副作用以供以后检索取决于您的实现,但是对于最不可知的代码,最好始终明确地这样做。请注意,在迭代完成的非远程(嵌入式)图数据库上生成的遍历(例如hasNext()false)将触发对close()的调用并释放该图所拥有的资源。例如,调用iterate()将自动触发close()
© www.soinside.com 2019 - 2024. All rights reserved.