SSD にハッシュ配列を使用して、16/32 バイトの何億ものキーと値のペアを格納するのに苦労しています。
京都キャビネットで : 正常に動作しているときは 70000 record/s で挿入します。低下すると、10 ~ 500 レコード/秒に低下します。デフォルト設定では、ドロップは約 100 万レコード後に発生します。ドキュメントを見ると、これが配列内のデフォルトのバケット数であるため、理にかなっています。この数を 2,500 万に増やしましたが、実際、約 2,500 万レコードまでは問題なく動作します。問題は、バケットの数を 3000 万以上にプッシュするとすぐに、挿入レートが最初から 10 ~ 500 レコード/秒に低下することです。京都キャビネットは、データベース作成後にバケット数を増やすようには設計されていないため、2,500 万件を超えるレコードを挿入することはできません。
1/バケット数が 25M を超えると、KC の挿入レートが非常に低くなるのはなぜですか?
Berkeley DBの場合: 最高速度は KC よりわずかに低く、50000 レコード/秒に近いですが、それでも問題ありません。デフォルト設定では、KC と同様に、約 100 万件のレコードで速度が急激に低下します。BDB は、バケットの数を徐々に拡張するように設計されていることを知っています。それにもかかわらず、HashNumElements と FillFactor をいじって初期数を増やそうとしましたが、これらの試みのいずれも状況を悪化させました。そのため、DBD を使用して 100 万から 200 万を超えるレコードを挿入することはまだできません。非同期トランザクションを有効にしてみたり、さまざまな速度のチェックポイントを試したり、キャッシュを増やしたりしました。ドロップダウンを改善するものは何もありません。
2/ 100 万から 200 万回の挿入後に BDB の挿入率が低下する原因は何ですか?
注:私は Java を使用しています。速度が低下すると、CPU 使用率が 0 ~ 30% に低下し、正しい速度で作業すると 100% になります。
注:プロセスを停止して挿入を再開しても、何も変わりません。したがって、メモリ制限やガベージ コレクションとは関係ないと思います。
どうも。