2016-11-04 28 views
1

我有一个neo4j图,其中不同节点通过定向关系连接。此图包含循环。我想查找具有这种关系的最大路径中的一组给定实体的所有实体到一组目标实体。我正在使用的查询如下所示: 注意:示例图中的节点数= 1000,关系= 2500,深度=无限。也是我们最后的图表可能包含节点高达25000使用密码查询寻找无限深度的巨大循环neo4j有向图中的最大路径

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分钟。 预先感谢和PLZ恢复,如果你需要任何进一步的信息!

回答

2

最基本的问题是,您正试图执行不合理的昂贵查询。

基于数据特征:

  • 一个dataEntity节点具有约2.5传出关系
  • 从任何节点n到任何节点d的路径的平均可具有高达2500
  • 的长度

比方说,例如,从一个特定的n到一个特定的的特定路径(可能是非常大量的可能路径之外)的长度为500.要找到单一路径,操作次数应为(2.5^500),或大约为10^199

你需要重新考虑你想要做什么,看看是否有更聪明的方式去做你想做的事。也许改变数据模型会有所帮助,但这一切都取决于你的用例。