2013-09-30 44 views
0

我創建了一個由100萬個節點和1億個關係組成的圖。我只有16 GB RAM,無法緩存所有節點和關係對象。我選擇gcr cache_type並通過遍歷節點和關係來預熱圖形。 我的機器有16核CPU。問題是單線程查詢的性能很好(30 ms)。但多線程的性能下降很多,例如,一個查詢的平均成本大約爲100毫秒,4線程。我發現NodeManager.lockId()佔用了大部分時間。節點管理器的來源是在這裏:當我使用Neo4j中的多線程查詢時,如何避免ReentrantLock

http://grepcode.com/file/repo1.maven.org/maven2/org.neo4j/neo4j-kernel/1.9.2/org/neo4j/kernel/impl/core/NodeManager.java?av=f

看來,當我們到達一個節點或關係,它會嘗試做一些對它們進行緩存,其產生的ReentrantLock和阻塞線程。

我不知道如何避免鎖定或做別的事情來減少開銷。我想改善多線程的性能。提前致謝!

回答

0

僅供參考我想指出的是,您所指的鎖不會在2.0中存在,其中2.0-M06將成爲第一個具有此特徵的里程碑。

+0

我已閱讀關於您的提交的https://github.com/neo4j/neo4j/pull/1202並嘗試2.0.0-M05,但「neo4j.kernel.impl.cache.LockstripedCache.lockId」仍佔用大多數時候。我試圖添加2.0.0-M06到我的pom文件,但maven無法編譯。我必須使用2.0-M06嗎?下面是我的POM文件 org.neo4j 的Neo4j企業 2.0.0-M05的一部分 – GameBoy

相關問題