ArangoDB中图遍历的性能问题

4
我已经设置了一个简单的测试案例,以最终学习一些图形数据库。
我有一个简单的树形结构,基于大约80000个顶点/文档集合,每个文档具有约25个属性。唯一的边缘是出站“is_parent”边缘,因此要找到每个节点的子节点,我可以简单地拾取所有入站边缘。我没有在任何字段上设置特定的索引。 该树深度为20级,并且我在第5级上随机选择一个节点,然后使用图形遍历接收该节点的所有后代。
FOR t IN GRAPH_TRAVERSAL("sample_tree", "sampleunit/2565130142666", "inbound",  {"maxDepth":20}) RETURN t'

这在我的开发机器上需要超过3秒的时间,我感觉可能做错了什么。是否有任何方法可以加快速度或者说我存在一些概念上的问题?
2个回答

4

我按照您描述的方式设置了一个类似树形图的示例,并对其运行了查询。

有趣的是,以下查询的执行速度比您的查询要快得多:

FOR t IN TRAVERSAL(sampleunit, unitlinks, "sampleunit/2565130142666", "inbound",  {"maxDepth":20}) RETURN t

上述查询使用了AQL中“旧”的遍历函数。我们检查了这两种遍历类型之间的性能差异,并最终找到了可以改进的内容。

已将此问题的修复推送到2.2和devel分支。如果您更喜欢cherry-picking,它已包含在提交9a1eb149aa4da514d709c43a4ebdfd8819ba2f1d中。


1
我在2.6.3版本中发现NEIGHBORS和GRAPH_NEIGHBORS之间存在类似的问题,前者比后者快30倍。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接