格雷姆林:找到指定顶点的所有下游出路径

问题描述

我有一个有向图,包含大约1000个顶点和3000个包含循环的边。

我正在尝试查找给定顶点的所有下游(出)路径。

使用以下Gremlin查询

g.V(45712).repeat(out().simplePath()).until(outE().count().is(0)).path()

对于某些路径,由于循环的原因,要花很多时间才能获得结果,尽管simplePath步骤应避免这种情况。

我尝试优化查询,并没有使用aggregate步骤和without两次遍历相同的顶点,但是现在跳过了某些顶点。

g.V(45712).repeat(out().where(without('x'))
.aggregate(Scope.local,'x'))
.until(outE().count().is(0))
.path()

谢谢

解决方法

如果您的数据是高度连接的,那可能是一个昂贵的查询。即使有一个小图。我已经看到人们使用约束来尝试限制搜索的总量。这些可能包括使用timesloops设置最大搜索深度。即使使用我的航线数据集(实际上是一个很小的图),该查询也可能会产生非常大的结果集。格雷姆林错是不是那么多。更多取决于顶点的连接方式。

通常,从给定起点搜索所有路径可能是昂贵的查询。