ArangoDB图maxDepth - 迭代次数过多

时间:2015-01-26 19:02:41

标签: javascript graph arangodb

我正在尝试使用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可以处理的数据?或者我做错了什么?

2 个答案:

答案 0 :(得分:3)

maxIterations参数控制遍历自动中止的迭代次数。当在循环图上运行遍历时,这种自动堕胎可以防止您无休止地遍历。

maxIterations不控制遍历深度,但在经过多少个顶点后,遍历将停止并抛出错误。

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

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

如果要实现的目的是将遍历深度限制在一定水平,则可以使用minDepthmaxDepth参数,并将maxIterations设置为非常高的值(因为遍历受maxDepth限制,所以可能永远不会达到。控制来自遍历的数据量的其他选项是directionany将产生大部分结果,并且可以更容易地导致周期,每当使用inboundoutbound时可能)和uniqueness(控制访问给定顶点或连接边的频率)。

答案 1 :(得分:2)

maxIterations是一个控制太多计算周期的阈值。因此,图表越大,游戏中的边/节点越多,您需要的计算周期越多(maxIterations参数应该越高)。

因此,尝试平滑地增加maxDeth == 2的maxIterations,依此类推。但不是太顺利,例如尝试+ 1:=尝试* 10: - )