sql >> データベース >  >> NoSQL >> MongoDB

MongoDB3.0WiredTigerでのインデックスプレフィックス圧縮

    WiredTigerを搭載したMongoDB3.0には、「インデックスプレフィックス圧縮」と呼ばれる新機能が導入されており、インデックスによって消費されるメモリが大幅に削減されます。インデックスで使用されるメモリが少ないということは、ドキュメントストレージやその他のインデックス用のメモリが多いことを意味し、パフォーマンスが向上することを意味します。

    MongoDBで最高のパフォーマンスを得るには、インデックスをメモリに保持しておくと便利です。インデックスのページミスは二重の問題です。1つのページフォールトで実際のインデックスページをメモリに取り込み、別のページフォールトで後でデータページをメモリに取り込みます。

    テクノロジー

    インデックスプレフィックス圧縮はブロック圧縮(zlib、snappyなど)を使用しませんが、インデックスをメモリに格納するための別の手法です。同一のプレフィックスを1回だけ保存することにより、メモリ使用量を削減します。 「キープレフィックス圧縮」は、データを圧縮するドメイン固有の方法であり、WiredTigerのキーストレージ形式を指します。詳細については、ファイル形式のWiredTigerドキュメントを参照してください。

    パフォーマンステスト

    パフォーマンステストでは、以下に詳述するドキュメント構造を使用します。

    {
       employeeID: <long>,
       firstName: <string>,
       lastName: <string>,
       income: <long>,
       supervisor: {ID: <long>, 'firstName': <string>, 'lastName': <string>;}
    }
    

    この設定に次のインデックスを追加しました:

    Index 1: db.ensureIndex({'employeeID':1});
    Index 2: db.ensureIndex({'lastName':1, 'firstName':1});
    Index 3: db.ensureIndex({'income':1});
    Index 4: db.ensureIndex({'supervisor.lastName':1, 'supervisor.firstName':1})
    

    結果

    テスト実行では、同一のデータ(約1,000万レコード)を2つのクラスターに挿入しました。1つは2.6.xレプリカセットで、もう1つはWiredTigerを備えたMongoDB3.0です。次に、両方のクラスター構成に上記のインデックスを追加しました。結果は非常に驚異的です。場合によっては、インデックスサイズに桁違いの違いがあります!

    インデックス名 MMAPインデックスサイズ(MB) WTインデックスサイズ(MB) サイズの%縮小
    {employeeID:1} 230.7 94 59%
    {lastName:1、firstName:1} 1530 36 97%
    {収入:1} 230 94 59%
    {‘supervisor.lastName’:1、‘supervisor.firstName’:1} 1530 35 97%

    インデックスに保存されるすべてのメモリは、データや他のインデックスなどのキャッシュに使用できるメモリです。マイレージは異なる場合があります。特定のインデックス構造をテストしてください。インデックスサイズの縮小は、Mongo 3.0の大幅な改善であり、パフォーマンスに大きな違いをもたらす可能性があります。


    1. IDではないフィールドをマングースモデルに入力します

    2. キャッシュドライバーの分散アトミックロックとは何ですか?

    3. MongoDBのインストール

    4. MongoDBのパフォーマンス:MongoDBMapの実行-セカンダリでの操作の削減