Zstandard、または短いバージョンとして、高速可逆圧縮アルゴリズムです。 ZLIB レベルでのリアルタイム圧縮シナリオと、より優れた圧縮率をターゲットにします。 これは、Huff0とFSEライブラリによって提供される非常に高速なエントロピーステージによって支えられています。
zstd
Zstandardのフォーマットは安定しており、RFC8878に記載されています。複数の独立した実装がすでに利用可能です。 このリポジトリは、オープンソースのデュアルBSDおよびGPLv2ライセンスのCライブラリとして提供されるリファレンス実装を表しています。 、、およびファイルを生成およびデコードするコマンドラインユーティリティ。 プロジェクトに別のプログラミング言語が必要な場合は、 既知のポートとバインディングのリストは、Zstandardのホームページで提供されています。
.zst
.gz
.xz
.lz4
開発ブランチのステータス:
参考までに、いくつかの高速圧縮アルゴリズムをテストして比較しました Ubuntu 20.04()を実行しているデスクトップでは、 コアi7-9700K CPU @ 4.9GHzで、 @inikepによるオープンソースのインメモリベンチマークであるLZBucを使用する GCC 9.3.0でコンパイルされ、 シレジア圧縮コーパスで。
Linux 5.11.0-41-generic
コンプレッサー名 | 比 | 圧縮 | 減圧する。 |
---|---|---|---|
zstd 1.5.1 -1 | 2.887 | 530 メガバイト/秒 | 1700 メガバイト/秒 |
zlib 1.2.11 -1 | 2.743 | 95 メガバイト/秒 | 400 メガバイト/秒 |
ブロトリ1.0.9 -0 | 2.702 | 395 メガバイト/秒 | 450 メガバイト/秒 |
zstd 1.5.1 --fast=1 | 2.437 | 600 メガバイト/秒 | 2150 メガバイト/秒 |
zstd 1.5.1 --fast=3 | 2.239 | 670 メガバイト/秒 | 2250 メガバイト/秒 |
クイックルツ1.5.0 -1 | 2.238 | 540 メガバイト/秒 | 760 メガバイト/秒 |
zstd 1.5.1 --fast=4 | 2.148 | 710 メガバイト/秒 | 2300 メガバイト/秒 |
LZO1X 2.10 -1 | 2.106 | 660 メガバイト/秒 | 845 メガバイト/秒 |
LZ4 1.9.3 | 2.101 | 740 メガバイト/秒 | 4500 メガバイト/秒 |
LZF 3.6 -1 | 2.077 | 410 メガバイト/秒 | 830 メガバイト/秒 |
スナッピー1.1.9 | 2.073 | 550 メガバイト/秒 | 1750 メガバイト/秒 |
で指定される負の圧縮レベル , より速い圧縮および解凍速度を提供する 圧縮率を犠牲にして(レベル1と比較して)。
--fast=#
Zstdは、圧縮速度を犠牲にして、より強力な圧縮率を提供することもできます。 速度と圧縮のトレードオフは、小さな増分で構成できます。 解凍速度は維持され、すべての設定でほぼ同じままです。 zlib や lzma などのほとんどの LZ 圧縮アルゴリズムで共有されるプロパティ。
次のテストが実行されました Linux Debian を実行しているサーバ上 () コアi7-6700K CPU @ 4.0GHzで、 @inikepによるオープンソースのインメモリベンチマークであるLZBucを使用する GCC 7.3.0でコンパイルされ、 シレジア圧縮コーパスで。
Linux version 4.14.0-3-amd64
圧縮速度対比率 | 減圧速度 |
---|---|
![]() |
![]() |
他のいくつかのアルゴリズムは、グラフの外に出て、より遅い速度でより高い圧縮率を生成することができます。 スローモードを含むより大きな画像については、このリンクをクリックしてください。
前のグラフでは、一般的なファイルとストリームのシナリオ (数MB) に適用できる結果が提供されます。小さなデータにはさまざまな視点があります。
圧縮するデータの量が少ないほど、圧縮が難しくなります。この問題はすべての圧縮アルゴリズムに共通しており、その理由は、圧縮アルゴリズムが過去のデータから将来のデータを圧縮する方法を学習するためです。しかし、新しいデータセットの開始時には、構築する「過去」はありません。
この状況を解決するために、Zstdは、選択したタイプのデータのアルゴリズムを調整するために使用できるトレーニングモードを提供します。 トレーニング Zstandard は、いくつかのサンプル (サンプルごとに 1 つのファイル) を提供することによって実現されます。このトレーニングの結果は「辞書」と呼ばれるファイルに保存され、圧縮および解凍の前にロードする必要があります。 この辞書を使用すると、小さなデータで達成可能な圧縮率が劇的に向上します。
次の例では、github パブリック API から作成されたサンプル セットを使用します。 これは、それぞれ約1KBの重さの約10Kのレコードで構成されています。
github-users
圧縮率 | 圧縮速度 | 減圧速度 |
---|---|---|
![]() |
![]() |
![]() |
これらの圧縮ゲインは、より速い圧縮および解凍速度を提供すると同時に達成されます。
トレーニングは、小さなデータ サンプルのファミリに何らかの相関関係がある場合に機能します。ディクショナリがデータ固有であるほど、より効率的になります(ユニバーサルディクショナリはありません)。 したがって、データの種類ごとに 1 つのディクショナリを展開すると、最大のメリットが得られます。 辞書のゲインは、ほとんどの場合、最初の数KBで効果的です。次に、圧縮アルゴリズムは、以前にデコードされたコンテンツを徐々に使用して、ファイルの残りの部分をより適切に圧縮します。
辞書を作成する
zstd --train FullPathToTrainingSet/* -o dictionaryName
辞書で圧縮
zstd -D dictionaryName FILE
辞書で解凍
zstd -D dictionaryName --decompress FILE.zst
makeは、このプロジェクトの公式に維持されているビルドシステムです。 他のすべてのビルドシステムは「互換性」があり、3番目のパーティが維持しています。 高度なオプションにわずかな違いがある場合があります。 システムで許可されている場合は、ビルドと.
make
zstd
libzstd
システムが標準(または)と互換性がある場合、 ルートディレクトリで呼び出すと、ルートディレクトリにCLIが生成されます。 また、 にも作成されます。
make
gmake
make
zstd
libzstd
lib/
その他の使用可能なオプションは次のとおりです。
make install: zstd cli、ライブラリ、マニュアルページの作成とインストール
make check:作成して実行し、ローカルプラットフォームでその動作をテストします
zstd
GNU標準メイクファイルの規則は次のとおりです。 段階的なインストール、標準フラグ、ディレクトリ変数、およびコマンド変数を許可します。
Makefile
高度なユースケースでは、バイナリ生成を制御する特殊なコンパイルフラグ
ライブラリの lib/README.md
に記載されています。
および CLI のプログラム/README.md
にあります。
libzstd
zstd
プロジェクトジェネレータは、 内で提供されます。 メイクファイルやその他のビルドスクリプトを生成できます バイナリライブラリ、動的ライブラリ、静的ライブラリを作成します。
cmake
build/cmake
zstd
libzstd
デフォルトでは、 は に設定されます。
CMAKE_BUILD_TYPE
Release
中間子プロジェクトはビルド/中間子
内で提供されます。従う
そのディレクトリに命令をビルドします。
また、.travis.yml
ファイルを見て、
このプロジェクトを構築するためにMesonを使用する方法の例。
デフォルトのビルドタイプはリリースであることに注意してください。
zstd vcpkg 依存関係マネージャーをビルドしてインストールできます。
git clone https://github.com/Microsoft/vcpkg.git cd vcpkg ./bootstrap-vcpkg.sh ./vcpkg integrate install ./vcpkg install zstd
vcpkg の zstd ポートは、マイクロソフトのチーム メンバーとコミュニティの共同作成者によって最新の状態に保たれています。 バージョンが古い場合は、vcpkg リポジトリで問題を作成するか、要求をプルしてください。
ディレクトリに入ると、追加の可能性があります。
build
build/VS_scripts
zstd
libzstd
リポジトリのルートから次のコマンドを実行して、buck経由でzstdバイナリを構築できます。 出力バイナリは .
buck build programs:zstd
buck-out/gen/programs/
ディレクトリからスクリプトを実行することで、ローカルでのクイックスモークテストを実行できます。 2つの環境変数があり、テストスクリプトがzstdバイナリとdatagenバイナリを見つけるために必要です。 CIテストの詳細については、以下を参照してください TESTING.md
playTest.sh
src/tests
$ZSTD_BIN
$DATAGEN_BIN
Zstandardは現在Facebook内に展開されています。これは、複数の形式とユースケースで大量のデータを圧縮するために継続的に使用されます。 Zstandard は、運用環境に対して安全であると考えられています。
Zstandard は BSD と GPLv2 の下でデュアルライセンスされています。
ブランチは、到達する前にすべての貢献がマージされるブランチです。 パッチを提案する場合は、ブランチまたは独自の機能ブランチにコミットしてください。 への直接コミットは許可されていません。 詳細については、貢献をお読みください。
dev
release
dev
release