我在我的Java后端中使用嵌入式JanusGraph,我的代码依赖于从
据我所知,这将直接连接到Cassandra和Elasticsearch,并在我的后端应用程序JVM中运行JanusGraph处理器。但是,如果我想扩展JanusGraph,我需要在集群上运行单独的JanusGraph服务器,并需要从后端作为客户端连接到这些服务器。
根据Github上远程JanusGraph示例,这可以通过实例化一个EmptyGraph
我可以从上面的示例中理解,我只能通过将它们提交到JanusGraph服务器来使用Gremlin查询,但是除非将代码作为字符串提交到服务器,否则我将无法直接使用管理API。
最后,我可以理解,为了可扩展性,单独运行JanusGraph服务器是更好的选择,但我将失去对JanusGraph API的直接访问,因此我想知道是否有什么我误解的地方以及远程部署方法的优缺点,以及与嵌入式方法相比将失去什么。
编辑:
根据此答案 (如果有误,请纠正):
连接到远程Gremlin服务器的优缺点
优点
- 服务器具有更多的控制权,所有查询都是集中的。 - 由于每个人都通过远程Gremlin服务器运行遍历/查询,因此所有内容都受到事务保护。远程Gremlin服务器默认在事务中运行您的遍历/查询。 - 中央策略管理 - 中央模式管理
缺点
- 很难进行手动事务管理 - 必须使用Groovy脚本作为字符串并将其发送到远程(集群提交)以执行您的代码的事务。
graph = JanusGraphFactory.open(conf)
实例化的JanusGraph。据我所知,这将直接连接到Cassandra和Elasticsearch,并在我的后端应用程序JVM中运行JanusGraph处理器。但是,如果我想扩展JanusGraph,我需要在集群上运行单独的JanusGraph服务器,并需要从后端作为客户端连接到这些服务器。
根据Github上远程JanusGraph示例,这可以通过实例化一个EmptyGraph
graph = EmptyGraph.instance();
来实现,它不是JanusGraph的实例,而是org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
的实例。我可以从上面的示例中理解,我只能通过将它们提交到JanusGraph服务器来使用Gremlin查询,但是除非将代码作为字符串提交到服务器,否则我将无法直接使用管理API。
最后,我可以理解,为了可扩展性,单独运行JanusGraph服务器是更好的选择,但我将失去对JanusGraph API的直接访问,因此我想知道是否有什么我误解的地方以及远程部署方法的优缺点,以及与嵌入式方法相比将失去什么。
编辑:
根据此答案 (如果有误,请纠正):
连接到远程Gremlin服务器的优缺点
优点
- 服务器具有更多的控制权,所有查询都是集中的。 - 由于每个人都通过远程Gremlin服务器运行遍历/查询,因此所有内容都受到事务保护。远程Gremlin服务器默认在事务中运行您的遍历/查询。 - 中央策略管理 - 中央模式管理
缺点
- 很难进行手动事务管理 - 必须使用Groovy脚本作为字符串并将其发送到远程(集群提交)以执行您的代码的事务。