Zstandard

Zstandard (zstd) の詳細解説



Zstandard (zstd) は、Yann Collet氏によって開発された、高速な圧縮と展開が特徴の可逆圧縮アルゴリズムです。2016年にフリーソフトウェアとして公開され、その後RFCで標準化、多くのソフトウェアやOSに採用されるなど、広く利用されています。

Zstandard の特徴



Zstandard の最大の特徴は、その高速性です。[Deflate]]アルゴリズム]と同等の圧縮率を達成しながら、圧縮と解凍の処理速度が大幅に向上しています。これは、高度に最適化された[[アルゴリズムと実装によるものです。

圧縮レベルは1~22で調整可能で、レベルを上げるほど圧縮率は向上しますが、処理速度は低下します。多くのLinuxディストリビューションでは、高い圧縮レベル(19~20)を採用することで、xzなどの既存アルゴリズムと比較して、ファイルサイズ増加はわずかながらも、解凍速度を大幅に向上させています。さらに、高速圧縮を優先する場合は、`--fast` オプションで圧縮レベルを調整できます。

Zstandard は、LZ77と呼ばれる辞書式圧縮アルゴリズムとエントロピー符号化を組み合わせたアルゴリズムを採用しています。エントロピー符号化には、有限状態エントロピー(FSE)やtANS、ハフマン符号化などを用いています。実装における特徴的な点として、エントロピー復号時にデータを逆方向から読み取ることで高速化を図っている点が挙げられます。

デフォルトでは利用されませんが、並列圧縮にも対応しています。並列処理を利用することで、大規模なファイルの圧縮時間を短縮できます。一方、標準のZstandardは並列解凍に対応していませんが、Parallel Zstandard (PZstandard) という拡張機能を利用することで、並列解凍も可能になります。

コマンドラインツール



Zstandard は、`zstd` というコマンドラインツールを提供しています。このツールを使用することで、ファイルの圧縮、解凍、そして様々な操作をコマンドラインから実行できます。主なツールは以下の通りです。

`zstd`: メインプログラム (圧縮と解凍)
`unzstd`: 解凍専用プログラム (`zstd -d` と同等)
`zstdmt`: 並列圧縮 (`zstd -T0` と同等)
`zstdcat`: 圧縮ファイルの表示 (`zstd -dcf` と同等)
`zstdless`: 圧縮ファイルの表示 (less コマンドと連携)
`zstdgrep`: 圧縮ファイル内での検索 (grep コマンドと連携)
`pzstd`: Parallel Zstandard (並列圧縮・解凍)

API



Zstandard は C言語で実装されており、API が提供されています。そのため、様々なプログラミング言語から利用することができ、多くの言語向けのライブラリやバインディングが存在します。

ライセンス



Zstandard のライセンスは、三条項BSD[[ライセンス]]とGPLv2ライセンスのデュアルライセンスです。初期のバージョンではBSD[[ライセンス]]に特許条項が追加されていましたが、現在は削除されています。

利用例



Zstandard は、様々なソフトウェアやOSに採用されています。代表的な例として以下が挙げられます。

Linux カーネル: 2017年から採用され、btrfs や squashfs ファイルシステム、カーネルイメージの圧縮に使用されています。
FreeBSD カーネル: 2017年から採用され、コアダンプの圧縮に使用されています。
GNU tar: 1.31 (2019年1月)から対応 (.tar.zst または .tzst 拡張子)
bsdtar (libarchive): 3.3.3 (2019年4月)から対応
rsync: 3.2.0 (2020年6月)から対応
多くのLinuxディストリビューション: Ubuntu、Fedora、Arch Linux など、多くのディストリビューションでデフォルトのパッケージ圧縮方式として採用されています。
Webブラウザ: Google Chrome, Microsoft Edge, Mozilla Firefox など主要なWebブラウザで、HTTP の Content-Encoding に対応しました。

関連技術



Zstandard は、LZ77 アルゴリズム、非対称数値システム (ANS)、そして他の圧縮アルゴリズム (Brotli、LZFSE など) と関連しています。

まとめ



Zstandard は、高速性と高い圧縮率を両立させた、優れた可逆圧縮アルゴリズムです。その性能と柔軟性から、多くのソフトウェアやOSに採用されており、今後も広く利用されていくことが期待されます。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。