使用Neo4j的Java API版本3.1.0-M08,我使用Dijkstra算法构建了最短路径搜索。我有很多数据,磁盘上有28 GB。节点代表城市,关系代表连接。通常情况下,一个城市将有很多的连接。在我的PathExpander
中,我排除了大量关系,导致遍历整个图的只有很小的一部分。尽管如此,搜索执行不亦乐乎:Neo4j Java API:Bad Dijkstra性能
Relations traversed: 5343
Duration: ~14s
Performance: 373 relations/s
这是剖析热身运行的热方法是这样的:
的PathExpander
和CostEvaluator
阅读Long
类型,Integer
的性质和Double
。我试图用getAllProperties
替换getProperty
的呼叫,但没有帮助。
该应用程序使用以下JVM参数启动:-Xmx10g -Xms10g
。我有一个相当快速的固态硬盘,并且确保在测量之前通过运行相同的搜索几次来预加载高速缓存。从第二次运行开始,我看不到磁盘活动,这意味着遍历的图应该在RAM中。
我使用默认参数调用GraphDatabaseFactory
。定制配置可以提高性能吗?请注意,我只有16 GB RAM用于测试目的。