java - java spring项目中gremlin客户端集群的最佳实践是什么

标签 java gremlin tinkerpop3 amazon-neptune

我正在使用 Neptune (AWS) 图形数据库,我的客户端 api 在 java spring 中。我的应用程序读取和写入我的数据库。实际上,我们有 2 个集群作为一个 bean 进行读写。我们正在生成多个遍历,在提交每个遍历后,我们决定使用 try with ressource 关闭它。 . 关闭遍历并重新创建它是最佳做法 traversal().withRemote(..) 吗? 在一个线程中有多个连接的大型项目中,最佳实践是什么?

最佳答案

如果您的代码长时间运行,Java 的典型最佳实践(假设您使用的是 Gremlin Java 客户端)是使用客户端创建一个连接池并在您的线程之间共享该图遍历源对象 (g)。线程将共享连接池。如果您的应用程序是多线程的,则实现高吞吐量所需的大量线程大约是您连接到的 Neptune 实例上虚拟 CPU 数量的两倍。如果您的应用程序能够保持状态并且长时间运行,则无需继续打开和关闭连接。如果您的应用程序更短暂(例如定期启动和停止容器或使用 AWS Lambda 函数),那么在每次调用时创建和关闭连接通常是最佳实践。如果您的代码运行时间更长(例如在服务器中),那么保持连接池打开并在应用程序的线程之间共享连接通常是最好的方法。这避免了每次发出一些查询时创建新连接池的开销。

如果连接闲置一段时间,Neptune 可能会关闭它。如果您使用的是 Gremlin Java,则客户端会包含一个保持 Activity 状态的 ping。

如果您使用 IAM 身份验证,连接将在凭证过期 10 天后关闭。

这里有一些关于 Amazon Neptune 的 Web Socket 行为的文档:https://docs.aws.amazon.com/neptune/latest/userguide/limits.html#limits-websockets

此处有一些与 Java 客户端相关的附加信息:https://docs.aws.amazon.com/neptune/latest/userguide/best-practices-gremlin-java-client.html

关于java - java spring项目中gremlin客户端集群的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63789210/

相关文章:

java - 使用索引位置发送图像

scala - 是否可以为顶点中的标签建立索引

gremlin 路口操作

titan - Gremlin:找到两个顶点之间的边的有效方法是什么?

azure-cosmosdb - 使用gremlin查询删除父节点时如何删除所有子节点?

java - GIS - 计算两点之间的距离时得到奇怪的结果

java - Hibernate拦截器线程安全

java - 谷歌分析 - 缺少 OAuth2Native 类

Gremlin - 顶点的更新无法与合并一起使用

gremlin - JanusGraph Gremlin 图遍历 `as` 和 `select` 提供了意外的结果