我正在尝试使用ArangoDB构建大型社交网络图。我在那里有数据-大约35k顶点和大约150k边。

我意识到这是大量数据,所以我希望一次只绘制一个子集-可能与起点分离2或3度。

但是,即使我将maxIterations设置得很低(例如1),如果maxDepth大于1,我也会收到1909: too many iterations错误。

例如,此查询给我带来了太多的迭代错误
GRAPH_TRAVERSAL('Friends', 'people/1342', 'outbound', {maxDepth: 2, maxIterations: 10})
如果省略maxIterations,则会出现相同的错误。

该图已成功在Web界面中绘制,因此我认为问题不在于数据本身。我的图表中是否只有更多数据,而ArangoDB无法处理?还是我做错了什么?

最佳答案

maxIterations参数控制遍历多少次迭代后自动中止。在循环图中运行遍历时,可以使用这种自动中止来防止遍历遍历。
maxIterations不控制遍历深度,但是在经过多少个顶点后,遍历将停止并引发错误。

这是一个示例如何计算最大值:
遍历将从指定的起始顶点开始。这是第一次迭代。对于起始顶点,将确定所有传出(或传入)连接。假设从起始顶点开始有五个连接,因此下一轮遍历将考虑它们。因此,maxIterations至少需要为6(开始顶点为1,下一轮为5)。如果现在这5个顶点中的每一个顶点也都具有5个连接,则至少需要25个迭代,因此您需要的maxIterations值为31。对于下一个级别,每5个顶点,您将需要125个以上的连接。

因此,对于每个级别,您不能简单地为maxIterations添加一个常量值。我们看到的序列(1、6、31、156)显然是非线性的。显然需要多少次迭代取决于基础数据以及顶点的连接方式。

如果您要实现的只是将遍历深度限制在某个级别,则可以使用minDepthmaxDepth参数,并将maxIterations设置为一个很高的值(因为遍历受maxDepth限制,因此可能永远无法实现)。控制遍历的数据量的其他选项是direction(any将产生最多的结果,并且更容易导致循环,请尽可能使用inboundoutbound)和uniqueness(控制给定顶点或连接边的频率)被访问)。

10-07 15:19