问题描述
我有一个有向图,包含大约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()
谢谢
解决方法
如果您的数据是高度连接的,那可能是一个昂贵的查询。即使有一个小图。我已经看到人们使用约束来尝试限制搜索的总量。这些可能包括使用times
或loops
设置最大搜索深度。即使使用我的航线数据集(实际上是一个很小的图),该查询也可能会产生非常大的结果集。格雷姆林错是不是那么多。更多取决于顶点的连接方式。
通常,从给定起点搜索所有路径可能是昂贵的查询。