2013-03-18 90 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