プログラミング
bzip3
要約
bzip3は、bzip2の後継となる新しい圧縮アルゴリズムです。より高い圧縮率とパフォーマンスを実現するため、高度なエントロピーコーダー、高速なBurrows-Wheeler変換、LZ77/PPMベースのRLEパスを採用しています。特にテキストやコードの圧縮に優れており、ベンチマークではxzやzstdと比較して優れた圧縮率を示す場合があります。
全文翻訳
BZip3 BZip2よりも優れ、速く、強力な精神的後継者です。オーダー0のコンテキストミキシングエントロピーコーダー、接尾辞配列を利用した高速なBurrows-Wheeler変換コード、そしてLZ77スタイルの文字列マッチングとPPMスタイルのコンテキストモデリングに基づいたLZ77+予測パスによるRLEにより、より高い圧縮率と優れたパフォーマンスを実現します。その祖先と同様に、BZip3はテキストやコードの圧縮に優れています。
インストール
# git cloneを使用する場合(ソースパッケージには不要)、まず...
$ ./bootstrap.sh
# すべて...
$ ./configure
$ make
$ sudo make install
または、システムのパッケージマネージャーを使用してbzip3をインストールできる場合があります。
macOSでは、Homebrewを使用して簡単にインストールできます。
$ brew install bzip3
Perlソースコードベンチマーク
まず、リリースされたすべてのPerl5のバージョンをダウンロードし、解凍しました。
% wget -r -l1 -nH --cut-dirs=2 --no-parent -A.tar.gz --no-directories https://www.cpan.org/src/5.0/
% for g in *.gz; do gunzip $g; done
% ls -la | wc -l
262
次に、結果の.tarファイルをすべて1つの.tarファイルにまとめ、さまざまなコンプレッサーを使用して圧縮してみました。
xz -T16 -9 -k all.tar
10829.91s user 26.91s system 1488% cpu 14658M memory 12:09.24 total
bzip2 -9 -k all.tar
981.78s user 9.77s system 95% cpu 8M memory 17:16.64 total
bzip3 -e -b 256 -j 12 all.tar
2713.81s user 16.28s system 634% cpu 18301M memory 7:10.10 total
bzip3 -e -b 511 -j 4 all.tar
17.65s user 12.19s system 170% cpu 12178M memory 7:08.65 total
zstd -T12 -16 all.tar
4162.94s user 16.40s system 1056% cpu 687M memory 6:35.62 total
結果は以下の通りです。
メソッド 圧縮サイズ(バイト)
LZMA (xz) 2'056'645'240
bzip2 3'441'163'911
bzip3 -b 256 1'001'957'587
bzip3 -b 511 546'456'978
Zstandard 3'076'143'660
最後に、壁時計時間での解凍時間(WD Blue HDD):
メソッド 解凍時間
LZMA (xz) 4分40秒
bzip2 9分22秒
bzip3 (parallel) 4分06秒
Zstandard 3分51秒
次に、元の.tarファイルに対してlrzipを使用して長距離重複排除を実行しました。
% time lrzip -n -o all_none.tar.lrz all.tar
546.17s user 160.87s system 102% cpu 10970M memory 11:28.00 total
% time lrzip --lzma -o all_lzma.tar.lrz all.tar
702.16s user 161.87s system 122% cpu 10792M memory 11:44.83 total
% time lrzip -b -o all_bzip2.tar.lrz all.tar
563.93s user 147.38s system 112% cpu 10970M memory 10:34.10 total
最後に、結果のnone.tar.lrzファイルをbzip3で圧縮しました。
% time bzip3 -e -b 256 -j 2 all_none.tar.lrz
32.05s user 0.76s system 146% cpu 2751M memory 22.411 total
結果は以下の通りです。
メソッド 圧縮サイズ(バイト)
lrzip + bzip3 60'672'608
lrzip + lzma 64'774'202
lrzip + bzip2 75'685'065
Turbo-Range-CoderやBSCとのさらなるベンチマークについては、powturboのbzip3、bzip2、bscなどのベンチマークを確認してください。
免責事項
このプログラム/ライブラリの使用に起因するいかなるデータ損失についても、その原因のいかんを問わず、一切の責任を負いません。
ファイルの圧縮はすべて、圧縮されたファイルが元のファイルを再現できるように解凍できるという仮定に基づいています。
このプログラムが正しく動作することを保証するために、設計、コーディング、およびテストにおいて多大な努力が払われています。
しかし、アルゴリズムの複雑さ、特に、非常に低い確率で発生するさまざまな特殊ケースの存在により、プログラムに残っているバグの可能性を排除することは不可能です。
データが回復不能になる可能性を受け入れる準備ができていない限り、このプログラムでデータを圧縮しないでください。
これは、このプログラムが本質的に信頼できないという意味ではありません。
実際、逆であることを強く願っています。
Bzip3/libbz3は慎重に構築され、広範囲にテストされています。
Bzip3のパフォーマンスはコンパイラに大きく依存します。
x64 Linux clang13ビルドは、通常、スレッドあたり最大17MiB/sの圧縮と23MiB/sの解凍が可能です。
Windowsおよび32ビットビルドは、かなり遅くなる可能性があります。
Bzip3は以下のアーキテクチャでテストされています。
x86 x86_64 armv6 armv7 aarch64 ppc64le mips mips64 sparc s390x
コーパスベンチマーク
詳細な結果については、etc/BENCHMARKS.mdを確認してください。
ライセンス
コンポーネントとそのライセンスの内訳は以下の通りです。
(ランタイム) コードベース全体: Copyright 2022-2023, Kamila Szewczyk (k@iczelia.net); LGPL (LICENSE)
(ランタイム) Burrows-Wheeler変換 (libsais) および LZPコード: 2021-2022, Ilya Grebnov (ilya.grebnov@gmail.com); Apache 2.0 (3rdparty/libsais-LICENSE)
(コンパイル時) build-aux: Copyright 2011, Daniel Richard G (skunk@iSKUNK.ORG), 2019, Marc Stevens (marc.stevens@cwi.nl), 2008, Steven G. Johnson (stevenj@alum.mit.edu); GPL-3+ with AutoConf exception
(コンパイル時) build-aux/ax_check_compile_flag.m4: Copyright 2008, Guido U. Draheim (guidod@gmx.de), 2011, Maarten Bosmans (mkbosmans@gmail.com); FSFAP
(コンパイル時) build-aux/git-version-gen: Copyright 2007-2012, Free Software Foundation, Inc; GPLv3
(ランタイム) bz3grep: Copyright 2003, Thomas Klausner; BSD-2-clause
Bzip3全体はLGPLv3のみでライセンスされています。LGPLv3およびApache 2.0のデュアルライセンスではありません。
BZip3でのBWT構築に使用されたIlya Grebnov氏のlibsaisライブラリ、および自身を改善するための参照実装として使用したLZPエンコーダーに感謝します。
Caleb Maclennan氏には、BZip3のパッケージングフレンドリーなビルドシステムとしてのautotoolsの設定に感謝します。
Ilya Muravyov氏には、このプロジェクトで使用されている派生物であるパブリックドメインのBWTポストコーダーに感謝します。