2013-03-18 125 views
0

我想记录Neo4J算法的执行。我运行一个算法10次,但第一次运行总是比其他执行时间长得多。例如:Neo4J作业执行时间

elapsed time = | 86345.0 | 3417.0 | 3416.0 | 4228.0 | 3369.0 | 3323.0 | 3338.0 | 3370.0 | 3775.0 | 3370.0 //ms 

为什么会发生这种情况? Neo4J是否足够聪明,可以将已经访问过的(从数据库中读取的)顶点存储在内存中,从而从第二次执行中读取内存而不是数据库?我的数据集足够小以适应内存(还有很多空间)。

回答

4

你的假设是正确的。 Neo4j的多层次使用缓存:

  1. 映射内存缓存
  2. 对象缓存

第一次运行在寒冷的高速缓存操作,因此所有数据必须从I/O子系统读取。随后的任何访问都将从缓存中受益。

如需更详细的解释,请参阅http://docs.neo4j.org/chunked/stable/configuration-caches.html