zlib/lz4/zstdの圧縮率、圧縮展開速度の簡易比較

先日、lz4がデータ転送に有効ということを知ったので、 lz4/zlibの圧縮率、圧縮展開速度の比較について調べることにしました。 さらに、2015年にFacebookから出たという新鋭のzstdもついでに調べることにしました。

今回は簡易調査なので、Pythonの圧縮ライブラリを使用して、 データセットはSqueeze Chart(Text/TEST_BIBLE/eng.txt)のみを使用することにしました。 スクリプト類は以下に配置しました。

GitHub - moamoai/TestComp]

  • ライブラリインストール
    Pythonの標準ライブラリにlz4とzstdはないようなので、まずはインストールです。
pip3 install lz4
pip3 install zstd
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

おまけ詳細の結果

f:id:thira2:20200419232355p:plain:w400