我有一个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分钟。 如果您需要任何进一步的信息,请提前致谢并恢复!
答案 0 :(得分:2)
基本问题是您正在尝试执行不合理的昂贵查询。
根据您的数据特征:
dataEntity
节点平均有大约2.5个传出关系n
到任何节点d
的路径长度最多可达2500 比方说,例如,从一个特定n
到一个特定d
的特定路径(可能是非常多的可能路径)的长度为500.要查找该单个路径路径,操作次数为(2.5 ^ 500),或约 10 ^ 199 。
你需要重新考虑你想做什么,看看是否有更聪明的方法去做你想做的事。也许更改数据模型会有所帮助,但这一切都取决于您的使用案例。