0

我创建了一个由 100 万个节点和 1 亿个关系组成的图。我只有 16 GB RAM,无法缓存所有节点和关系对象。我选择 gcr cache_type 并通过遍历节点和关系来预热图表。我的机器有 16 核 CPU。问题是单线程一次查询的性能很好(30毫秒)。但是多线程的性能下降很多,例如,一个查询的平均成本约为 100 毫秒,4 线程。我发现 NodeManager.lockId() 占用了大部分时间。NodeManager 的源码在这里:

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 并阻塞线程。

我不知道如何避免锁定或做其他事情来减少开销。我想提高多线程的性能。提前致谢!

4

1 回答 1

0

仅供参考,我想指出您所指的锁定在 2.0 中将不存在,其中 2.0-M06 将是第一个具有此功能的里程碑。

于 2013-10-07T16:46:40.593 回答