TinkerPop:添加顶点图 API v/s 遍历 API

TinkerPop: Adding Vertex Graph API v/s Traversal API

背景

SO posts之一中,建议使用Traversal API而不是Graph API来进行变异。所以我尝试了一些测试,发现 Graph API 似乎更快,我完全相信这个建议,但我试图了解它如何更好。

我尝试谷歌搜索但没有找到类似的 post


测试:

查询 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. 如果两者相同,那么为什么会有性能差异?

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

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

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