我正在尝试使用ArangoDB构建一个大型的社交网络图。我在那里得到了数据 - 大约35k个顶点,边缘约150k。
我意识到这是一个非常多的数据,所以我希望一次只绘制一个子集 - 可能与起点相距2或3度。
但是如果maxDepth大于1,我会收到1909: too many iterations
错误,即使我将maxIterations设置得非常低(比如1)
例如,这个查询给了我太多的迭代错误
GRAPH_TRAVERSAL('Friends', 'people/1342', 'outbound', {maxDepth: 2, maxIterations: 10})
如果我省略maxIterations,我会得到同样的错误。
图表在网络界面中成功绘制,所以我不认为问题在于我的数据本身。我的图表中是否只有ArangoDB可以处理的数据?或者我做错了什么?
答案 0 :(得分:3)
maxIterations
参数控制遍历自动中止的迭代次数。当在循环图上运行遍历时,这种自动堕胎可以防止您无休止地遍历。
maxIterations
不控制遍历深度,但在经过多少个顶点后,遍历将停止并抛出错误。
以下是如何确定最大值的示例:
遍历将从指定的起始顶点开始。这是第一次迭代。对于起始顶点,将确定所有传出(或进入)连接。让我们说从起始顶点开始有五个连接,所以下一轮遍历将考虑它们。因此maxIterations
至少需要6的值(1表示起始顶点加5表示下一轮)。如果现在5个顶点中的每一个也有5个连接,则需要至少25次迭代,因此您需要31的maxIterations
值。对于下一级,每个5个连接,您将需要125多等。
因此,对于每个级别,您不能简单地为maxIterations
添加常量值。我们看到的系列(1,6,31,156)显然是非线性的。您需要多少次迭代显然取决于底层数据以及顶点的连接方式。
如果要实现的目的是将遍历深度限制在一定水平,则可以使用minDepth
或maxDepth
参数,并将maxIterations
设置为非常高的值(因为遍历受maxDepth
限制,所以可能永远不会达到。控制来自遍历的数据量的其他选项是direction
(any
将产生大部分结果,并且可以更容易地导致周期,每当使用inbound
或outbound
时可能)和uniqueness
(控制访问给定顶点或连接边的频率)。
答案 1 :(得分:2)
maxIterations是一个控制太多计算周期的阈值。因此,图表越大,游戏中的边/节点越多,您需要的计算周期越多(maxIterations参数应该越高)。
因此,尝试平滑地增加maxDeth == 2的maxIterations,依此类推。但不是太顺利,例如尝试+ 1:=尝试* 10: - )