【问题标题】:What is the best practice for gremlin client cluster in java spring projectjava spring项目中gremlin客户端集群的最佳实践是什么
【发布时间】:2020-09-08 07:36:57
【问题描述】:

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

【问题讨论】:

    标签: java gremlin tinkerpop3 amazon-neptune


    【解决方案1】:

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

    如果连接空闲一段时间,Neptune 可能会关闭它。如果您使用 Gremlin Java,那么客户端会包含一个保持活动状态的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      • 2013-07-13
      • 2020-08-15
      相关资源
      最近更新 更多