ArangoDB 图 maxDepth - 迭代太多

ArangoDB graph maxDepth - too many iterations

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

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

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

例如,这个查询给出了太多迭代错误

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

如果我省略 maxIterations,我会得到同样的错误。

该图在网络界面中绘制成功,所以我认为问题不在于我的数据本身。我的图表中的数据是否超出了 ArangoDB 的处理能力?还是我做错了什么?

maxIterations 是一个阈值,应该控制过多的计算周期。因此,图表越大,游戏中的 edges/nodes 越多,您需要的计算周期就越多(并且 maxIterations 参数应该越高)。

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

maxIterations 参数控制遍历多少次迭代后自动中止。当运行在循环图上遍历时,这个自动中止是为了保护你不会无休止地遍历。

maxIterations不控制遍历深度,而是控制遍历到多少个顶点后停止并报错。

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

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

如果你想达到的只是将遍历深度限制在一定程度,可以使用minDepthmaxDepth参数,将maxIterations设置为非常高值(可能永远不会达到,因为遍历受 maxDepth 限制)。控制遍历数据量的其他选项是 directionany 会产生最多的结果并且更容易导致循环,使用 inboundoutbound 每当可能)和 uniqueness(控制访问给定顶点或连接边的频率)。