WiredTigerストレージエンジンを搭載したMongoDB3.0を使用すると、データベースに保存されているデータを透過的に圧縮できます。これは非常にエキサイティングで便利な機能であり、急増するデータのディスクスペース使用量を削減するために使用できます。デフォルトでは、wiredtigerはすべてのコレクションに「Snappy」ブロック圧縮エンジンを使用します。 MongoDBサーバー構成ファイルの次のオプションを使用して、デフォルトで圧縮をオフにできます。
storage: engine: wiredTiger wiredTiger: collectionConfig: blockCompressor: none
圧縮アルゴリズムは、クラスターの作成時にコレクションレベルで指定できます。 「zlib」圧縮を使用してコレクションを作成する例を次に示します。
db.createCollection( "test", {storageEngine:{wiredTiger:{configString:'block_compressor=zlib'}}} );
MongoDB WiredTigerストレージエンジンは、圧縮に2つのオプション(snappyとzlib)を提供します。基本的に、圧縮の範囲と解凍するCPU負荷の量の間にはトレードオフがあります。 「zlib」はより多くの圧縮を実現し、それに応じてパフォーマンスが低下します。 「Snappy」は「非常に高速で適度な圧縮を目指す」ことを目的としています。
圧縮パフォーマンスを測定するために、いくつかの単純な非科学的なテストを実行しました。うまく圧縮できると思われる文字列を格納するデータセットの1つを使用しました。各ドキュメントの基本構造は次のとおりです。
{ '_id': <ObjectID>, 'name': <Five character string>, 'value': <Random 1MB string> }
これらのドキュメントを約5000個(約5GBのデータ)挿入しましたが、結果はかなり印象的でした。 Zlibは、かなりの量の圧縮を実現します。 Snappyは、システムにほとんどまたはまったく負荷をかけずに、かなりの量の圧縮も実現します。
データサイズ(MB) | 5000.5 | 5000.5 | 5000.5 |
ストレージサイズ(MB) | 19.62 | 254.37 | 5019 |
いつものように、データセットのパフォーマンスの向上を理解するには、いくつかのテストを実行する必要があります。圧縮パフォーマンスとトレードオフに関するより詳細なベンチマーク調査は次のとおりです。
http://www.mongodb.com/blog/post/new-compression-options-mongodb-30
http://www.acmebenchmarking.com/2015/02/mongodb-v30-compression-benchmarks.html
https://comerford.cc/2015/02/04/mongodb-3-0-testing-compression/