使用Cypher检测相当大的图中的循环的最佳方法是什么。
我有一个图,它有大约250000个节点和大约270000个关系,我想在大约10k个节点和涉及100k个关系的子图中检测循环。我写的密码是这样的
start
n = node:node_auto_index(some lucene query that returns about 10k nodes)
match
p = n-[:r1|r2|r3*]->n
return p
然而,事实证明,这并不是非常有效。
有人能建议一个更好的方法来做这件事吗?
2条答案
按热度按时间ih99xse11#
1)计算未标记的节点数
2)标记没有传出关系的节点(叶)
3)标记没有传入关系的节点(根)
4)如果在第2或第3中标记了任何节点,请返回步骤1
5)如果仍有未标记的节点,则至少有1个周期
循环将位于未标记的节点集中
查看边最少[In|Out]的节点可能会有所帮助
如果仍然有太多的周期无法识别
xuo3flqw2#
您目前使用的查询将返回每个节点的所有路径。将其更改为
一旦找到给定节点的路径,就会让Neo4j停止。它可能仍将是缓慢的,但肯定不会那么慢。