TinkerGraph getLabels() 和 getTraversals() 使测试变慢

TinkerGraph getLabels() and getTraversals() are making tests to be slow

我使用 TinkerGraph(在内存中)进行了一些集成测试,每次需要 10-15 秒才能完成。通过监控,使用 VisualVM,我发现延迟的主要原因是 TraversalHelper.getLabels()TraversalHelper.getTraversals() 方法。

我期待 TinkerGraph,因为它是一个非常快的内存,但可能是我做错了什么或者确实存在一些性能问题。我的其他测试不到 200 毫秒。感谢任何帮助!

这是一个查询,它需要 5 秒以上的时间来创建 51 个顶点,每个顶点具有大约 4-5 个属性,每个属性通过 89 条边相互连接:

PasteBin Example

更新: 在使用新部署的 3.2.5 后,内存测试的性能从 ~40 秒提高到 6 秒,使用 DSE 的性能从 2 分钟提高到不到 1 分钟-SNAPSHOT 和 3.3.0-SNAPSHOT(来自 http://repository.apache.org/snapshots/). For more details you can have a look here: https://issues.apache.org/jira/browse/TINKERPOP-1642。我想非常感谢 stephen mallette 快速而精确的操作,不仅对内存中的 gremlin 遍历而且对所有在它们之上使用 gremlin 的其他基于磁盘的图形技术。

这是一个相当大的 Gremlin。老实说,我不确定在具有 350 多个链式语句的一大块 Gremlin 的性能方面会有什么期望。

我会提供一些建议。试图在一行 Gremlin 中完成所有工作会创建难以阅读且难以维护的代码。您可能不会尝试以这种方式编写您的非 Gremlin 代码(无论您使用哪种语言),因此在编写 Gremlin 时考虑您的标准编程技术可能是件好事。

虽然我不确定这个大块的 Gremlin 的性能应该如何,但我知道如果你将该语句拆分成更小的更易于管理的位,创建 51 个顶点和 89 个边不应该花费 5 + 秒 运行。我不知道如何将这种差异归因于副手,但你在遍历所有这些步骤标签时为自己创造了相当多的开销,这也许解释了你在你的问题。

更新:见下面的讨论