Zstandard , atau zstd
sebagai versi pendeknya, adalah algoritma kompresi lossless yang cepat, menargetkan skenario kompresi real-time pada level zlib dan rasio kompresi yang lebih baik. Ini didukung oleh tahap entropi yang sangat cepat, yang disediakan oleh perpustakaan Huff0 dan FSE.
Format Zstandard stabil dan didokumentasikan di RFC8878. Beberapa implementasi independen sudah tersedia. Repositori ini mewakili implementasi referensi, disediakan sebagai pustaka C berlisensi ganda BSD ATAU GPLv2 sumber terbuka, dan utilitas baris perintah yang memproduksi dan mendekode file .zst
, .gz
, .xz
dan .lz4
. Jika proyek Anda memerlukan bahasa pemrograman lain, daftar port dan binding yang diketahui tersedia di beranda Zstandard.
Status cabang pengembangan:
Sebagai referensi, beberapa algoritme kompresi cepat diuji dan dibandingkan pada desktop yang dilengkapi CPU Core i7-9700K @ 4.9GHz dan menjalankan Ubuntu 20.04 ( Linux ubu20 5.15.0-101-generic
), menggunakan lzbench, sebuah sumber terbuka dalam memori benchmark oleh @inikep dikompilasi dengan gcc 9.4.0, pada korpus kompresi Silesia.
Nama kompresor | Perbandingan | Kompresi | Dekompresi. |
---|---|---|---|
zstd 1.5.6 -1 | 2.887 | 510 MB/dtk | 1580 MB/dtk |
zlib 1.2.11 -1 | 2.743 | 95 MB/dtk | 400 MB/dtk |
brotli 1.0.9 -0 | 2.702 | 395 MB/dtk | 430 MB/dtk |
zstd 1.5.6 --cepat=1 | 2.437 | 545 MB/dtk | 1890 MB/dtk |
zstd 1.5.6 --cepat=3 | 2.239 | 650 MB/dtk | 2000 MB/dtk |
cepat 1.5.0 -1 | 2.238 | 525 MB/dtk | 750 MB/dtk |
lzo1x 2.10 -1 | 2.106 | 650 MB/dtk | 825 MB/dtk |
lz4 1.9.4 | 2.101 | 700 MB/dtk | 4000 MB/dtk |
lzf 3.6 -1 | 2.077 | 420 MB/dtk | 830 MB/dtk |
tajam 1.1.9 | 2.073 | 530 MB/dtk | 1660 MB/dtk |
Tingkat kompresi negatif, ditentukan dengan --fast=#
, menawarkan kecepatan kompresi dan dekompresi yang lebih cepat dengan mengorbankan rasio kompresi.
Zstd juga dapat menawarkan rasio kompresi yang lebih kuat dengan mengorbankan kecepatan kompresi. Pertukaran Kecepatan vs Kompresi dapat dikonfigurasi sedikit demi sedikit. Kecepatan dekompresi dipertahankan dan kira-kira tetap sama di semua pengaturan, sebuah properti yang dimiliki oleh sebagian besar algoritma kompresi LZ, seperti zlib atau lzma.
Pengujian berikut dijalankan pada server yang menjalankan Linux Debian ( Linux version 4.14.0-3-amd64
) dengan CPU Core i7-6700K @ 4.0GHz, menggunakan lzbench, benchmark dalam memori sumber terbuka oleh @inikep yang dikompilasi dengan gcc 7.3.0, pada korpus kompresi Silesia.
Kecepatan Kompresi vs Rasio | Kecepatan Dekompresi |
---|---|
Beberapa algoritme lain dapat menghasilkan rasio kompresi yang lebih tinggi pada kecepatan yang lebih lambat, sehingga berada di luar grafik. Untuk gambar yang lebih besar termasuk mode lambat, klik tautan ini.
Bagan sebelumnya memberikan hasil yang dapat diterapkan pada skenario file dan aliran umum (beberapa MB). Data kecil hadir dengan perspektif berbeda.
Semakin kecil jumlah data yang akan dikompres, maka semakin sulit untuk dikompres. Masalah ini umum terjadi pada semua algoritma kompresi, dan alasannya adalah, algoritma kompresi belajar dari data masa lalu bagaimana cara mengompresi data masa depan. Namun pada awal kumpulan data baru, tidak ada "masa lalu" yang dapat dijadikan dasar.
Untuk mengatasi situasi ini, Zstd menawarkan mode pelatihan , yang dapat digunakan untuk menyetel algoritme untuk jenis data yang dipilih. Pelatihan Zstandard dicapai dengan menyediakan beberapa sampel (satu file per sampel). Hasil pelatihan ini disimpan dalam file bernama "kamus", yang harus dimuat sebelum kompresi dan dekompresi. Dengan menggunakan kamus ini, rasio kompresi yang dapat dicapai pada data kecil meningkat secara dramatis.
Contoh berikut menggunakan kumpulan sampel github-users
, yang dibuat dari API publik github. Ini terdiri dari sekitar 10 ribu catatan dengan berat masing-masing sekitar 1 KB.
Rasio Kompresi | Kecepatan Kompresi | Kecepatan Dekompresi |
---|---|---|
Peningkatan kompresi ini dicapai sekaligus memberikan kecepatan kompresi dan dekompresi yang lebih cepat .
Pelatihan berhasil jika ada korelasi dalam kumpulan sampel data kecil. Semakin spesifik data suatu kamus, semakin efisien (tidak ada kamus universal ). Oleh karena itu, menerapkan satu kamus per jenis data akan memberikan manfaat terbesar. Penguatan kamus sebagian besar efektif pada beberapa KB pertama. Kemudian, algoritme kompresi akan secara bertahap menggunakan konten yang didekodekan sebelumnya untuk mengompresi sisa file dengan lebih baik.
Buat kamus
zstd --train FullPathToTrainingSet/* -o dictionaryName
Kompres dengan kamus
zstd -D dictionaryName FILE
Dekompresi dengan kamus
zstd -D dictionaryName --decompress FILE.zst
make
adalah sistem pembangunan yang dikelola secara resmi dari proyek ini. Semua sistem build lainnya "kompatibel" dan dikelola oleh pihak ketiga, mereka mungkin menampilkan perbedaan kecil dalam opsi lanjutan. Jika sistem Anda mengizinkannya, lebih baik gunakan make
untuk membangun zstd
dan libzstd
.
Jika sistem Anda kompatibel dengan make
standar (atau gmake
), menjalankan make
di direktori root akan menghasilkan zstd
cli di direktori root. Itu juga akan membuat libzstd
menjadi lib/
.
Opsi lain yang tersedia meliputi:
make install
: membuat dan menginstal zstd cli, perpustakaan dan halaman manualmake check
: membuat dan menjalankan zstd
, menguji perilakunya pada platform lokal Makefile
mengikuti konvensi Makefile Standar GNU, memungkinkan instalasi bertahap, flag standar, variabel direktori dan variabel perintah.
Untuk kasus penggunaan tingkat lanjut, tanda kompilasi khusus yang mengontrol pembuatan biner didokumentasikan di lib/README.md
untuk pustaka libzstd
dan di programs/README.md
untuk zstd
CLI.
Generator proyek cmake
disediakan dalam build/cmake
. Itu dapat menghasilkan Makefile atau skrip build lainnya untuk membuat biner zstd
, dan perpustakaan dinamis dan statis libzstd
.
Secara default, CMAKE_BUILD_TYPE
diatur ke Release
.
zstd
dapat dibuat dan diinstal dengan dukungan untuk Apple Silicon (M1/M2) serta Intel dengan menggunakan dukungan Universal2 CMake. Untuk melakukan build dan instalasi Fat/Universal2 gunakan perintah berikut:
cmake -B build-cmake-debug -S build/cmake -G Ninja -DCMAKE_OSX_ARCHITECTURES= " x86_64;x86_64h;arm64 "
cd build-cmake-debug
ninja
sudo ninja install
Proyek Meson disediakan dalam build/meson
. Ikuti instruksi pembuatan di direktori itu.
Anda juga dapat melihat file .travis.yml
untuk contoh bagaimana Meson digunakan untuk membangun proyek ini.
Perhatikan bahwa tipe build default adalah release .
Anda dapat membangun dan menginstal manajer ketergantungan zstd vcpkg:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install zstd
Port zstd di vcpkg selalu diperbarui oleh anggota tim Microsoft dan kontributor komunitas. Jika versinya sudah kedaluwarsa, silakan buat masalah atau tarik permintaan pada repositori vcpkg.
Anda dapat menginstal binari bawaan untuk zstd atau membuatnya dari sumber menggunakan Conan. Gunakan perintah berikut:
conan install --requires= " zstd/[*] " --build=missing
Resep zstd Conan terus diperbarui oleh pengelola Conan dan kontributor komunitas. Jika versinya sudah kedaluwarsa, silakan buat masalah atau tarik permintaan pada repositori ConanCenterIndex.
Masuk ke direktori build
, Anda akan menemukan kemungkinan tambahan:
build/VS_scripts
, yang akan membangun pustaka zstd
cli dan libzstd
tanpa perlu membuka solusi Visual Studio. Anda dapat membangun biner zstd melalui buck dengan menjalankan: buck build programs:zstd
dari root repo. Biner keluaran akan berada dalam buck-out/gen/programs/
.
Anda dapat dengan mudah mengintegrasikan zstd ke dalam proyek Bazel Anda dengan menggunakan modul yang dihosting di Repositori Pusat Bazel.
Anda dapat menjalankan tes asap lokal secara cepat dengan menjalankan make check
. Jika Anda tidak dapat menggunakan make
, jalankan skrip playTest.sh
dari direktori src/tests
. Dua variabel env $ZSTD_BIN
dan $DATAGEN_BIN
diperlukan agar skrip pengujian dapat menemukan biner zstd
dan datagen
. Untuk informasi tentang pengujian CI, silakan merujuk ke TESTING.md
.
Zstandard saat ini diterapkan di Facebook dan banyak infrastruktur cloud besar lainnya. Ini dijalankan terus menerus untuk mengompresi data dalam jumlah besar dalam berbagai format dan kasus penggunaan. Zstandard dianggap aman untuk lingkungan produksi.
Zstandard berlisensi ganda di bawah BSD ATAU GPLv2.
Cabang dev
adalah cabang tempat semua kontribusi digabungkan sebelum mencapai release
. Jika Anda berencana untuk mengusulkan patch, harap komit ke cabang dev
, atau cabang fiturnya sendiri. Komitmen langsung untuk release
tidak diizinkan. Untuk informasi lebih lanjut, silakan baca KONTRIBUSI.