首页 > 解决方案 > 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")

问题

  1. 哪个更好,为什么?
  2. 如果两者都相同,那么为什么性能差异?

标签: tinkerpoptinkerpop3

解决方案


Graph API 适用于图形提供者,而 Traversal API(实际上是 Gremlin 语言)适用于用户。使用 Graph API 肯定会降低代码的可移植性。那里的“服务器图”,如 Amazon Neptune、DSE Graph、CosmosDB 等,提供的环境不允许您访问 Graph API,因此如果您愿意,您将永远无法切换到这些环境。 . 您还开始围绕两个 API 构建应用程序,从而为您的开发创建了一种非统一的方法(即,在某些情况下,您将为GraphGraph API 传递一个对象,在某些情况下GraphTraversalSource为 Traversal API 传递一个对象)。

我不知道你是如何执行你的测试的,但是你看到微基准测试中的性能差异并不让我感到惊讶。Traversal API 有一些成本,但 TinkerPop 在该领域不断改进 - 以最近关闭的TINKERPOP-1950为例。我不确定这是否会对您的特定基准测试有所帮助,因为基准测试是很棘手的事情,但关键是我们还没有停止尝试在该领域进行优化。

最后,如果 TinkerPop 社区的讨论继续朝着他们过去一年的方向发展,我完全希望看到 Graph API 在 TinkerPop 4.x 中消失。此版本没有时间表,仅处于讨论阶段,但我想如果您打算让您的应用程序在未来很多年有效,您可能会对这些信息感兴趣。


推荐阅读