1

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 など) を使用したりしますか?

4

1 に答える 1