Zstandard - Zstandard
Pierwotny autor (autorzy) | Yann Collet |
---|---|
Deweloper(zy) | Yann Collet, Nick Terrell, Przemysław Skibiński |
Pierwsze wydanie | 23 stycznia 2015 |
Wersja stabilna | 1.5.0 / 14 maja 2021
|
Magazyn | |
Napisane w | C |
System operacyjny | Wieloplatformowy |
Platforma | Przenośny |
Rodzaj | Kompresja danych |
Licencja | Podwójna: licencja BSD , GPLv2 |
Strona internetowa |
Facebook |
Zstandard (lub zstd ) to bezstratny algorytm kompresji danych opracowany przez Yanna Colleta z Facebooka . Zstd jest implementacją referencyjną w C . Wersja 1 tej implementacji została wydana jako oprogramowanie typu open source w dniu 31 sierpnia 2016 r.
Cechy
Zstandard został zaprojektowany, aby zapewnić współczynnik kompresji porównywalny z algorytmem DEFLATE (opracowanym w 1991 roku i używanym w oryginalnych programach ZIP i gzip ), ale szybszym, szczególnie w przypadku dekompresji. Można go dostosować do poziomów kompresji od minus 7 (najszybsza) do 22 (najwolniejsza prędkość kompresji, ale najlepszy współczynnik kompresji).
Pakiet zstd zawiera równoległe (wielowątkowe) implementacje zarówno kompresji, jak i dekompresji. Począwszy od wersji 1.3.2 (październik 2017), zstd opcjonalnie implementuje bardzo dalekie wyszukiwanie i deduplikację ( --long
okno 128 MiB) podobne do rzip lub lrzip .
Szybkość kompresji może różnić się 20-krotnie lub więcej między najszybszym i najwolniejszym poziomem, podczas gdy dekompresja jest jednostajnie szybka, różniąc się o mniej niż 20% między najszybszym i najwolniejszym poziomem. Wiersz poleceń Zstandard ma --adapt
tryb „adaptacyjny” ( ), który zmienia poziom kompresji w zależności od warunków we/wy, głównie od szybkości zapisu danych wyjściowych.
Zstd na maksymalnym poziomie kompresji daje współczynnik kompresji bliski lzma , lzham i ppmx i działa lepiej niż lza lub bzip2 . Zstandard osiąga obecną granicę Pareto , ponieważ dekompresuje się szybciej niż jakikolwiek inny obecnie dostępny algorytm o podobnym lub lepszym współczynniku kompresji.
Słowniki mogą mieć duży wpływ na stopień kompresji małych plików, dlatego Zstandard może korzystać ze słownika kompresji dostarczonego przez użytkownika. Oferuje również tryb uczenia, zdolny do generowania słownika z zestawu próbek. W szczególności jeden słownik może być załadowany do przetwarzania dużych zestawów plików z redundancją między plikami, ale niekoniecznie w obrębie każdego pliku, np . pliki dziennika .
Projekt
Zstandard łączy etap dopasowywania słownika ( LZ77 ) z dużym oknem wyszukiwania i etapem szybkiego kodowania entropijnego , wykorzystując zarówno Entropię skończoną (szybko tabelaryczną wersję ANS, tANS , używaną do wpisów w sekcji Sekwencje), jak i kodowanie Huffmana ( używane dla wpisów w sekcji Literały).
Ze względu na sposób, w jaki FSE przenosi stan między symbolami, dekompresja obejmuje przetwarzanie symboli w sekcji sekwencji każdego bloku w odwrotnej kolejności (od ostatniego do pierwszego).
Stosowanie
Rozszerzenie nazwy pliku |
.zst
|
---|---|
Rodzaj mediów internetowych |
aplikacja/zstd |
magiczny numer | 28 b5 2f fd |
Rodzaj formatu | Kompresja danych |
Standard | RFC 8478 |
Strona internetowa | https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md |
Rodzaj mediów internetowych | aplikacja/zstandard |
---|---|
magiczny numer | 37 a4 30 we |
Standard | RFC 8478 |
Strona internetowa | https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#dictionary-format |
Jądro Linux włączyła Zstandard od listopada 2017 (wersja 4.14) jako metody kompresji dla btrfs i squashfs systemów plików.
W 2017 r. Allan Jude zintegrował Zstandard z jądrem FreeBSD, a następnie został zintegrowany jako opcja kompresora dla zrzutów rdzenia (zarówno programów użytkownika, jak i paniki jądra). Wykorzystano go również do stworzenia dowodu koncepcji metody kompresji OpenZFS , która została zintegrowana w 2020 roku.
W AWS przesunięcie ku czerwieni i RocksDB bazy danych obejmują wsparcie dla kompresji polowych przy Zstandard.
W marcu 2018 r. firma Canonical przetestowała domyślnie użycie zstd jako metody kompresji pakietów deb dla dystrybucji Ubuntu Linux. W porównaniu z kompresją xz pakietów deb, zstd na poziomie 19 dekompresuje się znacznie szybciej, ale kosztem 6% większych plików pakietów. Deweloper Debiana, Ian Jackson, wolał czekać kilka lat przed oficjalnym przyjęciem.
W 2018 roku algorytm został opublikowany jako RFC 8478 , który definiuje również powiązany typ nośnika „application/zstd”, rozszerzenie nazwy pliku „zst” i kodowanie treści HTTP „zstd”.
Arch Linux dodał obsługę zstd jako metody kompresji pakietów w październiku 2019 r. wraz z wydaniem menedżera pakietów pacman 5.2, a w styczniu 2020 r. przeszedł z xz na zstd dla pakietów w oficjalnym repozytorium. Używa Arch zstd -c -T0 --ultra -20 -
, rozmiar wszystkich skompresowanych pakietów łącznie wzrósł o 0,8% (w porównaniu do xz), szybkość dekompresji jest 14 razy szybsza, pamięć dekompresji wzrosła o 50 MiB przy użyciu wielu wątków, pamięć kompresji wzrasta, ale skaluje się wraz z liczbą użytych wątków .
Fedora dodała obsługę ZStandard do RPM w maju 2018 r. (Fedora wydanie 28) i użyła go do pakowania wydania w październiku 2019 r. (Fedora 31)
Pełna implementacja algorytmu z możliwością wyboru poziomu kompresji jest wykorzystywana w formatach plików .NSZ / .XCZ, opracowanych przez społeczność homebrew dla hybrydowej konsoli do gier Nintendo Switch .
7-Zip ZS, port 7-Zip FM z obsługą Zstandard (i innych formatów), został opracowany przez Tino Reichardta.
Modern7z, wtyczka Zstandard (i inne formaty) dla 7-Zip FM została opracowana przez Denisa Anisimova (TC4shell).
7-zip-zstd, widelec 7-zip z obsługą Zstandard.
Licencja
Implementacja referencyjna jest licencjonowana na licencji BSD , opublikowanej na GitHub . Od wersji 1.0 posiadał dodatkowe przyznanie praw patentowych.
Od wersji 1.3.1 ten patent został porzucony, a licencja została zmieniona na podwójną licencję BSD + GPLv2.
Zobacz też
- Zlib
- LZFSE – podobny algorytm firmy Apple używany od czasu udostępnienia systemów iOS 9 i OS X 10.11 jako open source 1 czerwca 2016 r.
- LZ4 (algorytm kompresji) – szybki członek rodziny LZ77
Bibliografia
Zewnętrzne linki
- Oficjalna strona internetowa
- zstd na GitHub
- 7zip ze standardem Z na GitHub
- „ Mniejsza i szybsza kompresja danych ze standardem Z ”, Yann Collet i Chip Turner, 31 sierpnia 2016, ogłoszenie na Facebooku
- Guardian używa ZStandard zamiast zlib