【问题标题】:Shortestpath with complex criteria, is it possible in any graph DBMS具有复杂标准的最短路径,在任何图形 DBMS 中都可能吗
【发布时间】:2017-05-18 05:02:57
【问题描述】:

现在我正在使用 Neo4j 并从错误的方面解决了任务。 起初我得到allShortestPaths,然后用java在其中搜索正确的。 当然这种方式即使存在也不能保证结果。 所以,我正在寻找任何可以本地搜索我需要的图形 DBMS。

数据模型很简单:

  • 节点:除识别号外无属性

  • 关系:1 个属性具有 double

为了清楚起见 - 这是他们彼此拥有的组织和股份的列表(即 property=percentage >0

通过路径的标准是:

  • 如果下一个关系为 50++,则包含节点(路径继续)
  • 如果下一个关系小于,则为 50,但路径中的所有节点都拥有 50+ 这个节点,那么路径仍然继续

这意味着算法不仅要计算路径本身的关系,还要计算“边”关系(最好不总是,而仅当“下一个关系”为 50 时)。

最后但并非最不重要的一点是:它有望具有本地最短路径的性能(即在 1800 万个节点上几毫秒 + 4000 万个关系)或接近。不是几小时甚至几分钟。现在 shortestpath 可以在几毫秒内找到 30-40-50 跳的路径,这太神奇了。使用关系值我可以在几秒钟内得到几个长度的最短路径。但这不是理想的解决方案。

我不是 Neo4j 专家(还 :),从我目前发现的情况来看 - allsSortestPaths 的性能相当厚实。添加额外的标准会使性能从几毫秒降低到几小时。这是不可接受的:( 10++ 的路径长度也是必须的。

我想,我想要的太多了,但仍然欢迎任何提示、想法和解决方案!

【问题讨论】:

    标签: neo4j orientdb arangodb


    【解决方案1】:

    对于小型数据集,我只相信 Cypher 可以在某些 WHERE 条件下处理它(最简单的解决方案,效率最低)

    下一个最佳解决方案(如果可以的话)是“预编译”解决方案。如果您可以以这样一种方式来解决问题,即一些分类帐节点或关系可以存储您需要的信息,并且更新这些分类帐比完全重新编译解决方案更容易,那么这将是存储和检索信息的最佳方式(由于读取,你只需要拉起一个节点或关系)。

    但也许您无法简化解决方案,而您只需 必须 进行复杂的遍历。 Cypher 在这方面做得很好,但它对数据库中的内容视而不见,并且无法利用您会知道的事实。在这种情况下(为了获得最佳性能),您将需要使用 Traversal API(还有适用于 Neo4J 的 Java Core API,但 Traversal API 更容易,而且速度慢得可以忽略不计)

    【讨论】:

      猜你喜欢
      • 2019-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 2021-12-08
      • 2023-03-12
      • 2019-03-07
      相关资源
      最近更新 更多