tinkerpop - TinkerPop:添加 Vertex Graph API v/s Traversal API
问题描述
背景:
在其中一篇SO 帖子中,建议使用 Traversal API 而不是 Graph API 来进行突变。所以我尝试了一些测试,发现 Graph API 似乎更快,我完全相信这个建议,但我试图了解它如何更好。
我确实尝试过谷歌搜索,但没有找到类似的帖子
测试:
查询1:0.19734525680541992秒执行
g.addV('Test').property('title1', 'abc').property('title2', 'abc')
查询 2:在 0.13838958740234375 秒内执行
graph.addVertex(label, "Test", "title1", "abc", "title2", "abc")
问题:
- 哪个更好,为什么?
- 如果两者都相同,那么为什么性能差异?
解决方案
Graph API 适用于图形提供者,而 Traversal API(实际上是 Gremlin 语言)适用于用户。使用 Graph API 肯定会降低代码的可移植性。那里的“服务器图”,如 Amazon Neptune、DSE Graph、CosmosDB 等,提供的环境不允许您访问 Graph API,因此如果您愿意,您将永远无法切换到这些环境。 . 您还开始围绕两个 API 构建应用程序,从而为您的开发创建了一种非统一的方法(即,在某些情况下,您将为Graph
Graph API 传递一个对象,在某些情况下GraphTraversalSource
为 Traversal API 传递一个对象)。
我不知道你是如何执行你的测试的,但是你看到微基准测试中的性能差异并不让我感到惊讶。Traversal API 有一些成本,但 TinkerPop 在该领域不断改进 - 以最近关闭的TINKERPOP-1950为例。我不确定这是否会对您的特定基准测试有所帮助,因为基准测试是很棘手的事情,但关键是我们还没有停止尝试在该领域进行优化。
最后,如果 TinkerPop 社区的讨论继续朝着他们过去一年的方向发展,我完全希望看到 Graph API 在 TinkerPop 4.x 中消失。此版本没有时间表,仅处于讨论阶段,但我想如果您打算让您的应用程序在未来很多年有效,您可能会对这些信息感兴趣。
推荐阅读
- typescript - 是否可以在 TypeScript 中设置特定的编译目标来转换代码以获得更高的性能?
- ansible - 将变量转义为字符串
- c# - 在 C# 中,是否可以有单独的路由器和控制器?
- pytorch-lightning - Pytorch Lightning limit_val_batches 和 val_check_interval 行为
- web - 阅读 PowerBi 中的 Web 服务器完整目录
- r - 如何用现有字符替换 R 中字符串中的特定字符?
- asp.net-core - 如何将 LinqExpression 转换为 OData 查询 URI
- sql - 我在查询中的加入未正确通过
- ruby-on-rails - 简单表单不保存嵌套属性
- python - 使用 vs 代码导入键盘时遇到问题