2015-01-26 103 views
2

我试图用ArangoDB构建一个大型的社交网络图。我已经获得了数据 - 约有35k个顶点,边缘约150k。ArangoDB图maxDepth - 迭代次数过多

我意识到这是一个非常多的数据,所以我希望一次只绘制一个子集 - 可能是从起始点分离2或3度。

但我得到一个1909: too many iterations错误如果maxDepth大于1,即使我设置maxIterations非常低(比如1)

例如,这个查询给了我太多的重复错误

GRAPH_TRAVERSAL('Friends', 'people/1342', 'outbound', {maxDepth: 2, maxIterations: 10})

如果我忽略maxIterations,则会得到相同的错误。

该图在Web界面中成功绘制,所以我认为问题不在于我的数据本身。我的图中是否只有ArangoDB可以处理的数据?或者我做错了什么?

回答

3

maxIterations参数控制遍历多少遍后自动中止。这种自动堕胎功能可以保护您在循环图上运行遍历时不受无限循环的影响。

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

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

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

如果你想实现的是遍历深度限制到一定程度,就可以使用minDepthmaxDepth参数和设置maxIterations到一个很高的值(即有可能将永远无法达到,因为遍历为界通过maxDepth)。控制来自遍历的数据量的更多选项是:directionany将产生大多数结果并且可以更容易地导致周期,尽可能使用inboundoutbound)和uniqueness(用于控制给定顶点或连接边的多久被访问)。

2

maxIterations是一个阈值,它将控制太多的计算周期。因此,图形越大,边缘/节点在游戏中越多,则需要更多的计算周期(并且maxIterations参数应该越高)。

因此,请尽量顺利增加maxDeth == 2的maxIterations等等。但不太顺利,例如尝试+ 1:=尝试* 10 :-)

+0

我开始在100k,然后50k,然后10k,然后1000,100,1最大 - 我应该把它提高几个数量级? – 2015-01-26 20:12:04

+0

您可能需要更多,而不是更少的maxIterations。 – 2015-01-27 08:23:17