はじめに
本稿では、NoSQLドキュメント指向データベースであるCouchbase Serverがどのようにデータの圧縮を制御しているかを整理します。
概要
Couchbase Serverは、クライアントとの通信、および内部処理でデータ圧縮を行なっています。
データの圧縮により、RAMとディスクスペースをより効率的に使用できます。また、ネットワーク帯域幅の消費を削減する可能性があります。一方、CPUリソースの消費量が増える可能性があります。
仕様
Couchbase Serverは、オープンソースライブラリSnappyによって圧縮機能を実現しています。
圧縮は、様々な要因〜クライアントの特性、バケットに対してユーザーが設定した圧縮モード、圧縮前のドキュメントに必要な最小サイズと圧縮後のサイズ(圧縮率)の関係〜に基づいて、アイテムに適用されます。
圧縮は、バイナリアイテムとJSONアイテムの両方に適用されます。
圧縮は、CouchbaseおよびEphemeralバケットにのみ適用できます(Memcachedバケットには適用できません)。
圧縮はCouchbaseEnterprise Editionでのみ使用可能です。
圧縮が使用される箇所
下記は、Couchbase Serverで圧縮が利用される箇所を示しています。
Couchbase SDK クライアント(1)、クラスター内レプリケーションに参加するクラスター内のノード(4)、内部Couchbaseサービス(5)、外部DCPクライアント(6)、およびクロスデータセンターレプリケーションに参加するリモートクラスター(7)、これらは、HELO
コマンドを使用して、Snappy圧縮データタイプのサポートを確認するフラグを用いて、圧縮されたアイテムを送受信することが可能かどうかを伝達します。
Couchbase Serverは、(バケットのモードに応じて)圧縮された形式でアイテムをメモリに保存する場合があります(2)。サーバーは、アイテムをディスクに保存するときに常にアイテムを圧縮します(3)。
圧縮モード
バケットは、下記の3つのモードのいずれかを用いて構成されています。クライアントが圧縮データを送受信することができるかどうかを伝達した後、サーバーでの圧縮および解凍ルーチンの実行は、指定されたバケット用いられているモードによって異なります。
パッシブ
クライアントから圧縮されたアイテムを受信すると、Couchbase Serverはそれを圧縮された形式でメモリとディスクの両方に保存します。
Couchbase Serverは、クライアントから要求された場合、アイテムを圧縮形式でクライアントに送り返します。それ以外の場合は、アイテムを非圧縮形式で送り返します。
圧縮されていないアイテムを受信すると、Couchbase Serverはそれを非圧縮形式でメモリに保存し、圧縮形式でディスクに保存します。
アイテムを非圧縮形式でクライアントに返します。
このモードはバケット新規作成時のデフォルトです。
圧縮を処理することが可能なクライアントをサポートし、さらにCouchbase Serverがメモリリソースとネットワーク帯域幅の使用を制限できるようにします。
Couchbase Serverは、クライアントにとって必要のない、アイテムの圧縮と解凍にCPUリソースを使用することを強制しません。
アクティブ
Couchbase Serverは、アイテムが非圧縮形式で受信された場合でも、メモリおよびディスクに保存するためにアイテムをアクティブに圧縮します。
アイテムは、圧縮データの受信をサポートしていないクライアントに送り返される前に解凍されます。
アイテムは、圧縮データの受信をサポートするクライアントに圧縮形式で送信されます。これらのクライアントは、元々非圧縮形式でサーバーにアイテムを送信した場合でも同様です。
このモードでは、サーバーはメモリリソースとネットワーク帯域幅を最大限に節約できます。その結果、より多くのアイテムを同時にメモリに保持できるため、全体的な効率が向上します(圧縮と解凍に必要な処理時間は、ディスクからデータをフェッチするために必要な処理時間よりも大幅に短いため)。それにもかかわらず、状況によっては、
オフ
これがMemcachedバケット、が動作する(また、5.5より前のCouchbaseServerにとっても)唯一のモードです(現在、Memcachedバケットは、既に機能拡張が停止され、将来のサポート継続が行われない予定の「非推奨(deprecated)」機能です。Memcachedバケットの要件のために、Ephemeralバケットを利用することができ、推奨されます)。
圧縮されたアイテムを受信すると、CouchbaseServerはメモリに保存するときにアイテムを解凍します。ディスクに保存するときに再圧縮します。Couchbase Serverは、アイテムを非圧縮形式で送信します。
このモードでは、圧縮の恩恵を受けることができません。
圧縮比
圧縮比は、圧縮後のドキュメントのサイズとの関係においkて、圧縮前のドキュメントの最小の大きさを指定する、クラスターレベルのパラメータです。
ドキュメントがこの要件を満たしていない場合、非圧縮形式で保持されます。
このクラスターレベルのパラメーターの値は1.2です。
したがって、ドキュメントは、original_size >= (1.2 * compressed_size)
の場合にのみ圧縮形式で保持されます。original_size < (1.2 * compressed_size)
の場合、ドキュメントは非圧縮形式で保持されます。
参考情報