【问题标题】:Finding largest path in huge cyclic neo4j directed graph with infinite depth using cypher query使用密码查询在具有无限深度的巨大循环 Neo4j 有向图中找到最大路径
【发布时间】:2016-11-04 06:24:51
【问题描述】:

我有一个 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 分钟。 提前感谢,如果您需要任何进一步的信息,请回复!!!

【问题讨论】:

    标签: neo4j spring-data-neo4j


    【解决方案1】:

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

    根据您的数据特征:

    • dataEntity 节点平均有大约 2.5 个传出关系
    • 从任意节点n 到任意节点d 的路径最长可达2500

    例如,假设从一个特定的n 到一个特定的d 的特定路径(可能是非常多的可能路径)的长度为 500。要找到该单个路径,数字操作数为 (2.5^500),或大约 10^199

    你需要重新考虑你想要做什么,看看是否有更聪明的方法来做你想做的事。也许更改数据模型会有所帮助,但这完全取决于您的用例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      相关资源
      最近更新 更多