ログの圧縮は今まで gzip を使ってたのだが、そのままでいいのだろうかとふと思い最近の圧縮アルゴリズム(あるいはライブラリ)をググってみた。
その結果を gzip を 1.00 としてまとめたのが以下の表となる(小さい方が良い)。
今回の内容は gzip を基準にして各所のドキュメントを元におおまかな傾向をまとめただけのものなので、実際に同じサンプルファイルを使って比較すると違う結果が出る可能性はある。
タイプ | 圧縮方法 | サイズ | 圧縮速度 | 伸長速度 | メモリ量 |
---|---|---|---|---|---|
バランス重視 | gzip | 1.00 | 1.00 | 1.00 | 1.00 |
brotli | 0.85 | 1.05 | 1.05 | - | |
zopfli | 0.95 | 81.00 | 1.00 | - | |
圧縮率重視 | bzip2 | 0.75 | 7.20 | 5.00 | 2.75 |
xz | 0.65 | 4.00 | 1.85 | 75.00 | |
速度重視 | lzop | 1.35 | 0.20 | 0.45 | 2.00 |
snappy | 1.50 | 0.20 | 0.30 | - | |
lz4 | 1.40 | 0.15 | 0.10 | 30.00 |
こうやってまとめると、どのアルゴリズムが最強というより、いずれも一長一短あることがわかって面白い。例えば一見、圧縮率、速度の両面で xz の方が bzip2 より優れているように見える。しかし、メモリ効率で考えると圧倒的に bzip2 の方が優れている。
なお、gzip に限らず各種ツールでは、圧縮レベルを指定できるものが多いものの、傾向自体には違いがでないようだ(とはいえ、あるアルゴリズムのレベル9と別のアルゴリズムのレベル1では結果が逆転することはある)。また、メモリ量は見つけられないものもあったので、後日暇があれば調べるかもしれない。