0

100 万のノードと 1 億のリレーションシップで構成されるグラフを作成します。私は 16 GB の RAM しか持っていないので、すべてのノードと関係オブジェクトをキャッシュすることはできません。gcr cache_type を選択し、ノードと関係をトラバースしてグラフをウォームアップします。私のマシンには 16 コアの CPU が搭載されています。問題は、シングル スレッドによる 1 つのクエリのパフォーマンスが良好 (30 ミリ秒) であることです。ただし、マルチスレッドのパフォーマンスは大幅に低下します。たとえば、1 つのクエリの平均コストは、4 スレッドで約 100 ミリ秒です。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 に答える