Neo4j Java API:Bad Dijkstra性能

时间:2016-09-16 09:55:21

标签: performance graph neo4j dijkstra

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

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

这是热身运行的热门方法的分析结果:

enter image description here

类型PathExpanderCostEvaluatorLong的{​​{1}}和Integer读取属性。我尝试将来自Double的来电替换为getProperty并且没有帮助。

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

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

1 个答案:

答案 0 :(得分:0)

问题是每个城市节点都连接了很多连接关系。尽管许多关系被排除在外,但为了排除它们,必须阅读其中的每一个。解决方案是改变模型。新模型如下:

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

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