Zstandard

出典: フリー百科事典『ウィキペディア(Wikipedia)』
Zstdから転送)
Zstandard
作者 Yann Collet
開発元 Meta Platforms, Inc.
初版 2015年1月23日 (9年前) (2015-01-23)
最新版
1.5.6[1] ウィキデータを編集 / 27 3月 2024
リポジトリ ウィキデータを編集
プログラミング
言語
C言語
対応OS クロスプラットホーム
プラットフォーム ポータブル
サポート状況 開発中
種別 データ圧縮
ライセンス 三条項BSDライセンスGPLv2デュアルライセンス
公式サイト facebook.github.io/zstd/ ウィキデータを編集
テンプレートを表示
Zstandard
拡張子.zst
MIMEタイプapplication/zstd
種別データ圧縮
国際標準RFC 8878
オープン
フォーマット
Yes
ウェブサイトfacebook.github.io/zstd/

Zstandard (zstd) は、圧縮・展開が速いことを特徴とする可逆圧縮アルゴリズムである[2]。またC言語で書かれた前述のアルゴリズムのリファレンス実装の名前でもある。Meta Platforms, Inc.に所属しているYann Colletによって2015年から開発されている。

この実装のバージョン1.0.0は2016年8月31日にフリーソフトウェアとして公開された[3][4]。2018年10月に RFC 8478 で規格化され、2021年2月に RFC 8878 に更新された。メディアタイプapplication/zstd [5]。英語発音はズィースタンダード(zee standard)[5]

特徴[編集]

Zstandardは、デフォルトの圧縮レベル3の場合、現在主流であるDeflate (ZIP, gzip) アルゴリズムとほぼ同じ圧縮率だが、より高速に圧縮と解凍が行えるように設計されている[2][6]

圧縮レベルは正の側は1~22が指定可能で、圧縮レベルを上げると圧縮率は上がり、幅広いレンジの圧縮率に対応している。Arch Linuxのパッケージ圧縮はZstandardを採用しているが、圧縮レベル20を採用していて[7]xzと比較してサイズの増加は0.8%に留まり、解凍は14倍高速である[8]。圧縮レベルは-1以下も存在し、コマンドライン版では --fast=# で指定することが可能で、Zstandardの開発者による調査だと --fast=2 は QuickLZ や Snappy 相当、--fast=3 は LZO 相当、--fast=4 は LZ4 相当である[9]

Zstandardは大きな検索窓の辞書式圧縮アルゴリズム (LZ77) とエントロピー符号化を併用しており、エントロピー符号化ステージで有限状態エントロピー(FSE)のtANS英語版 あるいはハフマン符号化を使用している[10]。Zstandardの実装で特徴的なのはエントロピー復号時に逆方向から読み取ることである。

デフォルトでは利用しないが、並列圧縮にも対応していて、コマンドライン版は-T#で指定する。#に並列度を入れ、0の場合はCPUのコア数となる[11]。標準の Zstandard は並列解凍には対応していないが[12]、ファイルをチャンクサイズで分割して圧縮・解凍する Parallel Zstandard (PZstandard) があり、こちらは並列解凍に対応している[13]

コマンドラインプログラム[編集]

  • zstd - メインプログラム
  • unzstd - zstd の解凍用。zstd -d と同じ。
  • zstdmt - 並列圧縮。zstd -T0 と同じ。[14]
  • zstdcat - zstd で圧縮されたファイルに対して cat する。zstd -dcf と同じ。
  • zstdless - zstd で圧縮されたファイルに対して less する。[15]
  • zstdgrep - zstd で圧縮されたファイルに対して grep する。[16]
  • pzstd - Parallel Zstandard 。ファイルをチャンクサイズで分割して並列圧縮・並列解凍する。並列解凍でなくても良いならば普通の zstd で解凍できる。[17]

API[編集]

C言語で実装され、APIが提供されている。それに対して、様々なプログラミング言語でのバインディングおよび再実装が存在する。[2]

ライセンス[編集]

バージョン1.0.0から1.3.0までは、リファレンス実装がBSDライセンスにてGitHubで公開されていて、関連する特許の使用を認める追加ライセンス[18] も付属していた。

2017年8月21日にリリースされたバージョン1.3.1 [19] から、この特許条項は削除され、ライセンスは三条項BSDとGPLv2のデュアルライセンスに変更された[20]

利用例[編集]

Linuxカーネルには2017年11月(バージョン4.14)からZstandardが含まれており、btrfsやsquashfsファイルシステムでの圧縮方法として利用可能となっている。また、2020年10月(バージョン5.9)からカーネルイメージの圧縮方法として利用可能となった。

FreeBSDカーネルには2017年からZstandardが含まれており、コアダンプ(ユーザープログラムとカーネルパニックの両方)の圧縮オプションとして利用可能となっている。

GNU tar は2019年1月2日にリリースされた 1.31 から対応している。拡張子は .tar.zst もしくは .tzst 。bsdtar (libarchive) は2019年4月11日にリリースされた 3.3.3 から対応している。[21][22]

rsync では2020年6月19日にリリースされた 3.2.0 から zlib 以外に、Zstandard と LZ4 に対応した。[23]

Ubuntu 21.10[24](非デフォルトとしてはUbuntu 18.04より[25])、Red Hat Enterprise Linux 9[26]Fedora 31[27]、2019年12月27日以降のArch Linux[8]等、多くのLinuxディストリビューションでデフォルトのパッケージ圧縮方式としてZstandardを利用している。Ubuntuでは圧縮レベル19[25]、Arch Linuxでは圧縮レベル20[7]を採用したが、xzの圧縮レベル6に比べて、Zstandardの圧縮レベル19では6%[25]、圧縮レベル20では0.8%[8]パッケージのサイズが増加するが、展開速度は格段に高速になる[8]。Debian からフォークしている Ubuntu が先行した形で、Debian 側の dpkg は2023年1月10日に Zstandard に対応したが[28]、Debian 12 現在は引き続き xz をデフォルトとしている。

Google Chrome 123(2024年3月19日リリース)、Microsoft Edge 123、Mozilla Firefox 126 より、HTTP の Content-Encoding に zstd が使える。[29][30]

参照[編集]

参考文献[編集]

  1. ^ Release Zstandard v1.5.6 - Chrome Edition · facebook/zstd” (英語). 27 3月 2024閲覧。
  2. ^ a b c Zstandard - Real-time data compression algorithm”. facebook.github.io. 2024年5月4日閲覧。
  3. ^ Sergio De Simone, Facebook Open-Sources New Compression Algorithm Outperforming Zlib / InfoQ, Sep 02, 2016
  4. ^ “Life imitates satire: Facebook touts zlib killer just like Silicon Valley's Pied Piper”. The Register. (2016年8月31日). http://www.theregister.co.uk/2016/08/31/facebook_open_source_database/ 2016年9月6日閲覧。 
  5. ^ a b RFC 8878
  6. ^ Smaller and faster data compression with Zstandard - Engineering at Meta
  7. ^ a b arch-dev-public RFC: (devtools) Changing default compression method to zstd
  8. ^ a b c d Arch Linux - News: Now using Zstandard instead of xz for package compression
  9. ^ Release Zstandard v1.3.4 - faster everything · facebook/zstd
  10. ^ https://github.com/facebook/zstd/blob/master/doc/zstd_compression_format.md#entropy-encoding
  11. ^ zstd(1) — Arch manual pages”. 2024年3月31日閲覧。
  12. ^ Multithreaded decompression · Issue #2470 · facebook/zstd - GitHub”. 2024年3月31日閲覧。
  13. ^ zstd/contrib/pzstd/README.md at v1.5.6 · facebook/zstd - GitHub”. 2024年3月31日閲覧。
  14. ^ zstdmt(1) — zstd — Debian bookworm — Debian Manpages”. manpages.debian.org. 2024年5月4日閲覧。
  15. ^ zstdless(1) — zstd — Debian bookworm — Debian Manpages”. manpages.debian.org. 2024年5月4日閲覧。
  16. ^ zstdgrep(1) — zstd — Debian bookworm — Debian Manpages”. manpages.debian.org. 2024年5月4日閲覧。
  17. ^ pzstd(1) — zstd — Debian bookworm — Debian Manpages”. manpages.debian.org. 2024年5月4日閲覧。
  18. ^ zstd/PATENTS "Additional Grant of Patent Rights Version 2", Facebook
  19. ^ "Zstd v1.3.1 release", GitHub
  20. ^ "New license", GitHub
  21. ^ tar-1.31 released stable
  22. ^ Release Feature and Security Release · libarchive/libarchive
  23. ^ NEWS for rsync 3.2.0 (19 Jun 2020) - NEWS for rsync
  24. ^ Hello zstd compressed .debs in Ubuntu! | Obsessed with reality
  25. ^ a b c zstd compression for packages - ubuntu devel
  26. ^ 22.1. Notable changes to software management - Considerations in adopting RHEL 9 Red Hat Enterprise Linux 9 | Red Hat Customer Portal”. Red Hat Customer Portal. 2024年5月2日閲覧。
  27. ^ Changes/Switch RPMs to zstd compression - Fedora Project Wiki”. fedoraproject.org. 2024年5月2日閲覧。
  28. ^ 1.21.18 : dpkg package : Debian”. Launchpad. 2023年7月22日閲覧。
  29. ^ Chrome 123 の新機能  |  Blog  |  Chrome for Developers”. 2024年5月4日閲覧。
  30. ^ Content-Encoding - HTTP”. 2024年5月4日閲覧。

外部リンク[編集]