Chronicle Map を使用して、非常に多数の KV ペア (実際には数十億) を一時的に保存/検索しています。耐久性やレプリケーションは必要ありません。また、純粋なオフヒープ メモリではなく、メモリ マップ ファイルを使用しています。平均キー長は 8 バイトです。
小規模なデータ セット (最大 2 億エントリ) の場合、1 秒あたり約 100 万エントリのスループットが得られます。つまり、エントリの作成に約 200 秒かかります。それらを作成するのに1500秒。
Mac OSX/16GB Quad Core/500GB SSD と、8 コア/64GB RAM/300GB Raid 1 (SSD ではない) を搭載した Linux を実行する Proliant G6 サーバーの両方でテストを実行しました。両方のプラットフォームで同じ動作が見られます。
それが役立つ場合、マップのセットアップは次のとおりです。
try {
f = File.createTempFile(name, ".map");
catalog = ChronicleMapBuilder
.of(String.class, Long.class)
.entries(size)
.averageKeySize(8)
.createPersistedTo(f);
} catch (IOException ioe) {
// blah
}
そして簡単なライターテスト:
long now = -System.currentTimeMillis();
long count = 400_000_000L;
for (long i = 0; i < count; i++) {
catalog.put(Long.toString(i), i);
if ((i % 1_000_000) == 0) {
System.out.println(i + ": " + (now + System.currentTimeMillis()));
}
}
System.out.println(count + ": " + (now + System.currentTimeMillis()));
catalog.close();
だから私の質問は - これを改善するために私ができるチューニングはありますか? たとえば、セグメント数を変更したり、別のキータイプ (CharSequence など) を使用したりしますか?