私のシステムでは、Java Berkeley DB を使用して永続データを保存しています。
大量のデータをロードする必要があるため、多数のスレッドでそれを実行しようとしています。スレッドの数が少ない場合、たとえば 10 の場合は問題なく動作します。ただし、より高い値 (たとえば 30) に設定すると、読み取りプロセスが停止します。Java Berkeley DB には同時読み取りの上限があるように見えますか? 私は正しいですか?制限を更新するにはどうすればよいですか?
私のシステムでは、Java Berkeley DB を使用して永続データを保存しています。
大量のデータをロードする必要があるため、多数のスレッドでそれを実行しようとしています。スレッドの数が少ない場合、たとえば 10 の場合は問題なく動作します。ただし、より高い値 (たとえば 30) に設定すると、読み取りプロセスが停止します。Java Berkeley DB には同時読み取りの上限があるように見えますか? 私は正しいですか?制限を更新するにはどうすればよいですか?
あなたは言いました...「ロードされますか?」
ええと、あなたがしたと思いました!
したがって、あなたが話しているスレッドは「読み取り」スレッドではなく、「書き込み」スレッドです!
そして、何を推測してください: 彼らは互いに競争していて、何を推測して、彼らは負けています!
残念ながら、スレッドを使用して物事をスピードアップしようとするあなたの「試み」は(IMHO ...)「誠実ですが、見当違い」でした。最終的に、Berkely DB は「単一のディスク上のデータ構造」であるため、(IMHO...) マルチスレッドを使用してプロセスを高速化する機会はありません。
ただし、他のさまざまな戦略が機能する可能性があります。たとえば、適切な外部コマンドを使用して、挿入するレコードを並べ替えると、それらのレコードを挿入するプロセスが「便利に (はるかに?)速く」なることがあります。言い換えれば、並べ替えに費やされた時間を補うのに十分な速度差です。(ただし、これがあなたの状況に当てはまるかどうかを確認する方法は 1 つしかありません。「ベンチマーク、実際のデータの使用、実際の並べ替えコマンドなど」)。