圧縮アルゴリズム完全検証

以前も簡単に圧縮コマンドの結果を比較したことがありましたが,
圧縮率比較 - なぜか数学者にはワイン好きが多い
Kyoto CabinetやApache Hadoopがlzoライブラリの採用を始めたため,改めてベンチマークしてみました.

使用した圧縮コマンドは,

の4種類.

大容量テキストファイル

4ギガ前後のファイルで,Wkipediaの生データを使いました.
Wikipedia:データベースダウンロード - Wikipedia
↑の中のjawiki-latest-pages-articles.xmlです.

圧縮・伸張時間


圧縮サイズ


総評

gzipは圧縮速度は速くは無いですが,解凍速度は速く,圧縮サイズは中くらい.
bzip2は圧縮速度は速いですが解凍速度は遅く,圧縮サイズは小さい方.
xzは圧縮速度は圧倒的に遅いですが解凍速度は速く,圧縮サイズは小さい.
lzopは圧縮速度は余り速くなく,解凍速度は普通.圧縮サイズは大きめ.

よって,ファイルの配布のような使う人優先の場合は圧縮率が高く解凍速度も速いxzがお勧め,ライブラリとしてシステムの中で使うにはgzipかlzoがお勧めです.

小容量テキストファイル

600キロバイトの英文テキストファイル,グーテンベルクプロジェクトからコナン・ドイルの「シャーロック・ホームズの冒険」をもらってきました.
http://www.gutenberg.org/cache/epub/1661/pg1661.txt

圧縮・伸張時間


圧縮サイズ

総評

1メガバイト以下のファイルが対象なら,圧縮も伸長も処理時間はほぼ1秒以内でした.ただし,xzで高圧縮率を求めると1秒近くかかりました.
一方,圧縮サイズはデフォルトでもbzip2が最小.よって,ファイルサイズが小さめな場合はbzip2がお勧めです.

小容量圧縮後ファイル

5メガバイト程度のMP3ファイル,MP3なので既に圧縮がかかっているファイルを対象としました.

圧縮・伸張時間


圧縮サイズ

総評

bzip2とxzは,圧縮がこれ以上かからないにも関わらず努力したらしく,処理時間がかかっていました.
圧縮結果のファイルサイズは,元のサイズの99%前後でほとんど変わっていません.
よって,このような圧縮済みのデータには圧縮のコーデックは挟むべきではありません.

大容量圧縮後ファイル

290メガバイト程度のVOBファイル,DVDなので既に圧縮がかかっているファイルを対象としました.

圧縮・伸張時間


圧縮サイズ


総評

xzが意外に圧縮サイズが96%を切った他は,圧縮率はほとんど高くありません.
速度は,gzipが無難に速いです.
よって,既に圧縮がかかっているけどさらなるメモリを節約する期待がある時はxzを,そうでない時はgzipを使うのが無難でしょう.


中容量ファイル

650メガバイト程度のイメージファイル,具体的にはCentOS5.6の配布ファイルの一つを使いました.
イメージファイルという意味ではバイナリファイルですが,マウントするとそのまま読めるため,非圧縮のデータ列も多いはずです.

圧縮・伸張時間


圧縮サイズ

総評

処理時間は,gzipとlzopの-9オプション以外が速いようです.
圧縮後ファイルサイズも,gzipとlzopは無難です.
xzは処理時間が長いですが,ファイルサイズはそこそこ小さくなっています.

よって,メガサイズのファイル処理にはgzipかlzopをお勧めします.xzはファイルサイズは小さいですが,処理時間が圧縮も伸長もかかっているのでお勧めできません.



結論

目的によってずいぶん異なるので,結論は先送りです.
私の目的は,1ファイルが数10メガバイトで,そのファイル10個から20個をリアルタイムに処理することなので,また条件を変えて実験してみます.