[英]Finding largest path in huge cyclic neo4j directed graph with infinite depth using cypher query
我有一个neo4j图,其中不同的节点通过有向关系进行连接。此图包含周期。 我想找到最大路径中具有此关系的所有实体,这些关系是一组给定实体与一组目标实体的关系。 下面提供了我正在使用的查询:注意:示例图中的节点数= 1000,关系= 2500,深度=无限。 同样,我们的最终图形可能包含最多25000个节点。
match (n:dataEntity) where id(n) in
[28, 4, 27, 151, 34, 36, 57, 59, 71, 73, 75, 119, 121, 140, 142, 144]
match (d:dataEntity) where NOT (d)-[:dependsOn]->(:dataEntity)
with distinct d ,n
match res =(n)-[:dependsOn*]->(d)
with d,n,nodes(res) as x
return x
该查询的问题是它可以很好地工作到深度5,但是由于不确定的深度,它花费了太多时间,即超过20分钟。 在此先感谢,如果您需要任何其他信息,请恢复!
基本问题是您正在尝试执行不合理的昂贵查询。
根据您的数据特征:
dataEntity
节点平均具有约2.5个传出关系 n
到任何节点d
的路径的最大长度为2500 例如,假设从一个特定的n
到一个特定的d
的特定路径(可能有大量可能的路径)的长度为500。要找到该路径,操作数应为(2.5 ^ 500),或大约10 ^ 199 。
您需要重新考虑您要尝试做的事情,看看是否有更聪明的方法来做您想做的事情。 也许更改数据模型会有所帮助,但这全部取决于您的用例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.