DSEFS圧縮

DSEFSは、ストレージ・スペースと帯域幅を節約するためにファイルを圧縮できます。

dse.yaml

dse.yamlファイルの場所は、インストールのタイプによって異なります。
パッケージ・インストール /etc/dse/dse.yaml
tarボール・インストール installation_location/resources/dse/conf/dse.yaml

DSEFSは、ストレージ・スペースと帯域幅を節約するためにファイルを圧縮できます。圧縮は、ユーザーの明示的な要求に従って、アップロード中にDSEによって実行されます。解凍は、透過的です。データは、クライアントに返される前に常にサーバーによって解凍されます。

圧縮は、ブロック境界内で実行されます。圧縮の単位、すなわち個別に圧縮されるデータのチャンクはフレームと呼ばれ、そのサイズはファイルのアップロード時に指定できます。

エンコーダー

DSEFSには、すぐに使用できるlz4エンコーダーが同梱されています。

圧縮

ファイルを圧縮するには、putまたはcpコマンドで-cまたは--compression-encoderパラメーターを使用します。このパラメーターは、アップロードしようとしているファイルに使用する圧縮エンコーダーを指定します。

dsefs / > put -c lz4 file /path/to/file

フレーム・サイズは、必要に応じて-f, --compression-frame-sizeオプションを使用して設定できます。

最大フレーム・サイズ(バイト)は、compression_frame_max_sizeオプション( dse.yaml)で設定します。put -fを使用するときにフレーム・サイズをcompression_frame_max_sizeよりも大きな値に設定すると、エラーがスローされ、コマンドは失敗します。ノードの使用可能なメモリーに基づいて、compression_frame_max_size設定を変更します。

圧縮したファイルは、解凍されたファイルと同じように追加書き込みできます。ファイルを圧縮する場合、追加書き込みされるデータは、最初のput操作に指定されたファイルのエンコーダーで透過的に圧縮されます。

ディレクトリーには、mkdirコマンドでディレクトリーが作成される際に指定されたデフォルトの圧縮エンコーダーを含めることができます。putコマンドで新たに追加されたファイルは、このデフォルトの圧縮エンコーダーを含んでいるディレクトリーからこれを継承します。put操作中にcパラメーターを使用してデフォルトの圧縮エンコーダーをオーバーライドできます。

dsefs / > mkdir -c lz4 /some/path

解凍

解凍は、データをクライアントに転送するすべてのコマンドで自動的に実行されます。元の解凍されたファイルの内容を取得するために追加の構成は必要ありません。

ストレージ・スペース

圧縮を有効にすると、論理ファイル・サイズと物理ファイル・サイズ間に差異が生じます。

論理サイズは、DSEFSにファイルをアップロードする前のファイルのサイズで、ファイルはこの後に圧縮されます。論理サイズは、DSEFSコマンド・ライン・ツール・コマンドを実行するとSizeに表示されます。

dsefs dsefs://10.0.0.1:5598/ > stat /tmp/wikipedia-sample.bz2
FILE dsefs://10.0.0.1:5598/tmp/wikipedia-sample.bz2:
Owner           none
Group           none
Permission      rwxrwxrwx
Created         2017-04-06 20:06:21+0000
Modified        2017-04-06 20:06:21+0000
Accessed        2017-04-06 20:06:21+0000
Size            7723180
Block size      67108864
Redundancy      3
Compressed      true
Encrypted       false
Comment

物理サイズは、ストレージ・デバイスに格納されたデータの実際のサイズです。物理サイズは、DSEFSコマンド・ライン・ツール・コマンドとstat -vコマンドをブロックごとに個別に実行することでCompressed lengthカラムに表示されます。

制限事項

圧縮ファイルにTRUNCATEを実行することはできません。