我正在尝试使用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)显然是非线性的。显然需要多少次迭代取决于基础数据以及顶点的连接方式。
如果您要实现的只是将遍历深度限制在某个级别,则可以使用minDepth
或maxDepth
参数,并将maxIterations
设置为一个很高的值(因为遍历受maxDepth
限制,因此可能永远无法实现)。控制遍历的数据量的其他选项是direction
(any
将产生最多的结果,并且更容易导致循环,请尽可能使用inbound
或outbound
)和uniqueness
(控制给定顶点或连接边的频率)被访问)。