zstd - Zstandard - 高速リアルタイム圧縮アルゴリズム

(Zstandard - Fast real-time compression algorithm)

Created at: 2015-01-24 08:22:38
Language: C
License: NOASSERTION

Zスタンダード

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で効果的です。次に、圧縮アルゴリズムは、以前にデコードされたコンテンツを徐々に使用して、ファイルの残りの部分をより適切に圧縮します。

辞書の圧縮 操作方法:

  1. 辞書を作成する

    zstd --train FullPathToTrainingSet/* -o dictionaryName

  2. 辞書で圧縮

    zstd -D dictionaryName FILE

  3. 辞書で解凍

    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 リポジトリで問題を作成するか、要求をプルしてください。

Visual Studio (Windows)

ディレクトリに入ると、追加の可能性があります。

build

  • Visual Studio 2005、2008、および2010のプロジェクト。
    • VS2010プロジェクトは、VS2012、VS2013、VS2015、VS2017と互換性があります。
  • ビジュアルコンパイラ用の自動ビルドスクリプト by @KrzysFR, これは、Visual Studioソリューションを開くことなくCLIとライブラリをビルドします。
    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 は BSDGPLv2 の下でデュアルライセンスされています。

貢献

ブランチは、到達する前にすべての貢献がマージされるブランチです。 パッチを提案する場合は、ブランチまたは独自の機能ブランチにコミットしてください。 への直接コミットは許可されていません。 詳細については、貢献をお読みください。

dev
release
dev
release