[英]Detecting cycles in neo4j property graph using 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
然而,这并不是非常有效。
有人可以建议一个更好的方法来做到这一点。
1)计算未标记的节点
2)没有传出关系的标志节点(叶子)
3)没有传入关系的标志节点(根)
4)如果任何节点在2或3中被标记,则返回步骤1
5)如果未标记的节点仍然存在,则至少有一个周期
循环将在未标记的节点集中
查看具有最少[in | out]边缘的节点可能会有所帮助
如果仍然有太多的识别周期
您当前使用的查询将返回每个节点的所有路径。 把它改成
start
n = node:node_auto_index(some lucene query that returns about 10k nodes)
where (n)-[*]->(n)
return distinct p, n
一旦找到给定节点的路径,Neo4j就会停止。 它可能仍然会很慢,但肯定不那么慢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.