java - 在嵌入式上使用远程 janusgraph 连接时的优缺点是什么?
问题描述
我在我的 java 后端使用嵌入式 janusgraph 我的代码依赖于实例化的 janusgraphgraph = JanusGraphFactory.open(conf)
AFAIK 这直接连接到 Cassandra 和弹性搜索,并在我的后端应用程序 JVM 中运行 janusgraph 处理器。但是,如果我想扩展 janusgraph,我需要在集群上运行单独的 janusgraph 服务器,并且需要从我的后端作为客户端连接到这些服务器。
根据github 上的远程 janusgraph 示例,这是通过实例化一个 EmptyGraph 来完成的,该 EmptyGraphgraph = EmptyGraph.instance();
不是 JanusGraph 的实例,而是 org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
.
从上面的示例中我可以理解,我只能通过将 gremlin 查询提交到 janusgraph 服务器来使用它们,但是除非将代码作为字符串提交到服务器,否则我将无法直接使用管理 API。
最后,我可以理解单独运行janusgraph服务器对可扩展性更好,但是我将失去对janusgraph api的代码中的直接访问,所以我想知道我是否错过了理解以及 远程部署方法的优缺点是什么和嵌入式方法我会失去什么?
编辑:
根据这个答案 纠正它,如果错了:
连接到远程 gremlin 服务器的优缺点
优点
- 服务器有更多的控制权,所有的查询都是集中的。
- 由于每个人都通过远程 gremlin 服务器运行遍历/查询,因此都受到事务保护。默认情况下,远程 gremlin 服务器在事务中运行您的遍历/查询。
- 中央战略管理
- 中央模式管理
缺点
- 很难进行手动事务管理
- 您必须使用 groovy 脚本作为字符串并将其发送到删除(集群提交)以进行代码的事务执行。
解决方案
无论上面列出的优点和缺点都是正确的,我将列出我的学习:
使用gremlin 服务器方法,作为用户,该架构将看起来像一个 Web 服务器(额外成本),它正在与存储系统联系。这些 gremlin 服务器的升级/降级必须根据负载手动处理,否则将成为整个系统的瓶颈。
在嵌入式模式下,您有一个存储系统(比如 Cassandra)和另一个通过 tinker pop gremlin 与之交互的存储系统。有了这个,您不必维护 gremlin 服务器,只需您的程序/客户端与存储服务器进行交互。
考虑通过 Apache Spark 加载数据,一旦您使用更多执行器运行作业,gremlin 服务器应该能够处理负载。
推荐阅读
- apache-spark - 之前的 RDD 转换为新的 RDD 时会发生什么?
- python-3.x - 无法在 ubuntu 20.04 上安装 mysql-workbench-community
- javascript - 在不同的滚动位置更改不同的标题样式
- file - 在 Windows 中使用批处理脚本对文本文件进行排序
- python - python Django reportlab 找不到 msyh.ttf 文件
- in-app-purchase - 无法在 Google Play 开发者控制台中创建应用内购买
- julia - 复数的通用最大/最小函数
- java - HttpUrlConnection 在 android 中抛出 IOException
- flutter - 如何创建一个旋转其子级的颤动有状态小部件?
- delphi - 如何在 Github 上发布 Delphi 项目?