我在Java后端中使用嵌入式janusgraph,我的代码取决于从graph = JanusGraphFactory.open(conf)实例化的janusgraph

AFAIK这将直接连接到Cassandra和 Elasticsearch ,并在我的后端应用程序JVM中运行janusgraph处理器。但是,如果要扩展janusgraph,则需要在群集上运行单独的janusgraph服务器,并且需要从后端作为客户端连接到这些服务器。

根据remote janusgraph example on github,这是通过实例化EmptyGraph graph = EmptyGraph.instance();来实现的,该模板不是JanusGraph的实例,而是org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;的实例。

从上面的示例可以理解,我只能通过将gremlin查询提交给janusgraph服务器来使用,但是除非将代码作为字符串提交给服​​务器,否则我将无法直接使用管理API。

最后,我可以理解,最好是分别运行janusgraph服务器可伸缩性更好,但是我将失去对janusgraph apis的直接访问权限,因此我想知道是否缺少我了解的内容和远程部署的优缺点。方式,与嵌入式方式相比,我会失去什么?

编辑:

根据此answer纠正错误:

连接到远程gremlin服务器的优点/缺点

优点

  • 服务器具有更多控制权,并且所有查询都是集中式的。
  • 由于每个人都通过远程gremlin服务器运行遍历/查询,因此所有事务都受到事务保护。远程gremlin服务器默认在事务中运行遍历/查询。
  • 中央策略管理
  • 中央模式管理

  • 缺点
  • 艰难地做手动交易管理
  • 您必须使用groovy脚本作为字符串,并将其发送以删除(集群提交)以进行代码的事务处理。
  • 最佳答案

    上面列出的任何缺点,无论是什么优点,都是正确的,同时我将列出我的经验:

    使用 gremlin服务器方法,作为用户,该体系结构看起来像是与存储系统联系的Web服务器(附加成本)。这些gremlin服务器的高级/低级必须根据负载手动进行处理,否则它将成为整个系统的瓶颈。

    嵌入式模式中,您有一个存储系统(例如Cassandra),还有一个通过修补匠pop gremlin与之交互的存储系统。这样,您不必维护gremlin服务器,只需您的程序/客户端与存储服务器进行交互即可。

    考虑通过Apache Spark进行数据加载,一旦与更多执行者一起运行作业,gremlin服务器应具有足够的能力来处理负载。

    10-04 13:50