Zstandard - Zstandard

Zstandard
Zstandardowe logo.png
Pierwotny autor (autorzy) Yann Collet
Deweloper(zy) Yann Collet, Nick Terrell, Przemysław Skibiński
Pierwsze wydanie 23 stycznia 2015 ( 23.01.2015 )
Wersja stabilna
1.5.0 / 14 maja 2021 ; 5 miesięcy temu ( 14.05.2021 )
Magazyn
Napisane w C
System operacyjny Wieloplatformowy
Platforma Przenośny
Rodzaj Kompresja danych
Licencja Podwójna: licencja BSD , GPLv2
Strona internetowa Facebook .github .io /zstd / Edytuj to na Wikidanych

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ę ( --longokno 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 --adapttryb „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

Zstandard
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
Zstandardowy słownik
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