hidekatsu-izuno 日々の記録

プログラミング、経済政策など伊津野英克が興味あることについて適当に語ります(旧サイト:A.R.N [日記])

圧縮アルゴリズム(メモ)

ログの圧縮は今まで gzip を使ってたのだが、そのままでいいのだろうかとふと思い最近の圧縮アルゴリズム(あるいはライブラリ)をググってみた。

その結果を gzip を 1.00 としてまとめたのが以下の表となる(小さい方が良い)。

今回の内容は gzip を基準にして各所のドキュメントを元におおまかな傾向をまとめただけのものなので、実際に同じサンプルファイルを使って比較すると違う結果が出る可能性はある。

タイプ圧縮方法サイズ圧縮速度伸長速度メモリ量
バランス重視gzip1.001.001.001.00
brotli0.851.051.05-
zopfli0.9581.001.00-
圧縮率重視bzip20.757.205.002.75
xz0.654.001.8575.00
速度重視lzop1.350.200.452.00
snappy1.500.200.30-
lz41.400.150.1030.00

こうやってまとめると、どのアルゴリズムが最強というより、いずれも一長一短あることがわかって面白い。例えば一見、圧縮率、速度の両面で xz の方が bzip2 より優れているように見える。しかし、メモリ効率で考えると圧倒的に bzip2 の方が優れている。

なお、gzip に限らず各種ツールでは、圧縮レベルを指定できるものが多いものの、傾向自体には違いがでないようだ(とはいえ、あるアルゴリズムのレベル9と別のアルゴリズムのレベル1では結果が逆転することはある)。また、メモリ量は見つけられないものもあったので、後日暇があれば調べるかもしれない。