zlib/lz4/zstdの圧縮率、圧縮展開速度の簡易比較
先日、lz4がデータ転送に有効ということを知ったので、 lz4/zlibの圧縮率、圧縮展開速度の比較について調べることにしました。 さらに、2015年にFacebookから出たという新鋭のzstdもついでに調べることにしました。
今回は簡易調査なので、Pythonの圧縮ライブラリを使用して、 データセットはSqueeze Chart(Text/TEST_BIBLE/eng.txt)のみを使用することにしました。 スクリプト類は以下に配置しました。
- ライブラリインストール
Pythonの標準ライブラリにlz4とzstdはないようなので、まずはインストールです。
pip3 install lz4 pip3 install zstd
- データ作成
- Squeeze Chart • Lossless Data Compression Benchmarks からExcelをDownloadします。
- Textシート内からデータのURLをクリックしデータ入手します。解答して中にあるeng.txtをデータとして使用します。
- Pythonスクリプトで↑のデータをテストしたいサイズ毎にファイル書きします。
python3 mk_data_from_file.py
- 圧縮率/圧縮/展開速度の測定
- 各圧縮ライブラリで圧縮/展開します。この時間をtimeライブラリで測定します。
- 圧縮後のデータサイズを圧縮前のデータサイズで割って、圧縮率を算出します。
python3 comp_data.py
圧縮率、圧縮展開速度の結果表
zlibを基準として、以下結果になりました。 lz4は圧縮率がzlibに比べて低いですが、最も高速ということがわかりました。 zstdは圧縮率はzlibより少し低いくらいですが、圧縮展開ともに2倍以上高速になることがわかりました。
Lib | Comp ration | Comp speed | Decomp speed |
---|---|---|---|
zlib | 1..00 | 1..00 | 1..00 |
lz4 | 1.622272738 | 16.77 | 4.26 |
zstd | 1.104684112 | 12.28 | 2.22 |
あとがき
というわけで、一つのデータだけなので、不正確な面は多数あるでしょうが、 それっぽい結果を出すことができました。
ただ、zstdの公式サイトをみると、decomp性能が10倍以上zlibよりも高速なようでした。 測定条件、測定環境次第でそこまでのポテンシャルを秘めているようです。
Zstandard - Real-time data compression algorithm
また、lzbench?という圧縮ソフトの比較サイトがあることがわかりました。 lzbenchのデータセットは「http://sun.aei.polsl.pl/~sdeor/index.php?page=silesia」にあるものを使用しているようでした。
GitHub - inikep/lzbench: lzbench is an in-memory benchmark of open-source LZ77/LZSS/LZMA compressors
おまけ詳細の結果