【问题标题】:Neo4j Java API: Bad Dijkstra performanceNeo4j Java API:Dijkstra 性能不佳
【发布时间】:2016-09-16 09:55:20
【问题描述】:

使用 Neo4j 的 Java API 版本 3.1.0-M08,我使用 Dijkstra 算法构建了最短路径搜索。我有很多数据,磁盘上有 28 GB。节点代表城市,关系代表连接。通常,一个城市将拥有非常多的连接。在我的PathExpander 中,我排除了大量关系,这导致整个图的一小部分被遍历。然而,搜索的表现非常糟糕:

Relations traversed: 5343
Duration: ~14s
Performance: 373 relations/s

这是热身运行的分析热方法的样子:

PathExpanderCostEvaluator 读取类型为 LongIntegerDouble 的属性。我尝试用getAllProperties 替换对getProperty 的调用,但没有帮助。

应用程序使用以下 JVM 参数启动:-Xmx10g -Xms10g。我有一个相当快的 SSD,我确保在测量之前通过运行相同的搜索几次来预加载缓存。从第二次运行开始,我看不到磁盘活动,这意味着遍历的图应该在 RAM 中。

我使用默认参数调用GraphDatabaseFactory。自定义配置可以提高性能吗?请注意,我只有 16 GB RAM 用于测试目的。

【问题讨论】:

    标签: performance graph neo4j dijkstra


    【解决方案1】:

    问题是每个城市节点都连接到大量的连接关系。即使排除了很多关系,要排除它们,必须阅读它们中的每一个。解决方案是改变模型。新模型如下所示:

    (:City)-[:ConnectionDay {day: {day}}]->(:ConnectionDay)-[:Connection]->(:City)
    

    因为只能考虑特定日期的连接,所以从不触及不同日期的所有连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      相关资源
      最近更新 更多