Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Zstandard (или zstd ) - это алгоритм сжатия данных без потерь , разработанный Янном Коллетом из Facebook .Zstd является примером реализации в C . Версия 1 этой реализации была выпущена как бесплатное программное обеспечение 31 августа 2016 года. [3] [4]

Особенности [ править ]

Zstandard был разработан для обеспечения степени сжатия, сравнимой с коэффициентом сжатия алгоритма DEFLATE (разработанного в 1991 году и использовавшегося в исходных программах ZIP и gzip ), но быстрее, особенно для распаковки. Он настраивается с уровнями сжатия от отрицательного 5 (самый быстрый) [5] до 22 ( самая низкая скорость сжатия, но наилучшая степень сжатия).

Пакет zstd включает параллельные (многопоточные) реализации как сжатия, так и распаковки. Начиная с версии 1.3.2 (октябрь 2017 г.), zstd дополнительно реализует поиск и дедупликацию на очень большом расстоянии ( --longокно, 128 МБ), аналогично rzip или lrzip . [6]

Скорость сжатия может варьироваться в 20 или более раз между самым быстрым и самым медленным уровнями, в то время как декомпрессия является равномерно быстрой, варьируя менее 20% между самым быстрым и самым медленным уровнями. [7] Командная строка Zstandard имеет «адаптивный» ( --adapt) режим, который изменяет уровень сжатия в зависимости от условий ввода-вывода, в основном от того, насколько быстро он может записывать выходные данные.

Zstd на максимальном уровне сжатия дает степень сжатия, близкую к lzma , lzham и ppmx , и работает лучше, чем lza или bzip2 . [8] [9] Zstandard достигает текущей границы Парето , поскольку распаковывает его быстрее, чем любой другой доступный в настоящее время алгоритм с аналогичной или лучшей степенью сжатия. [10] [11]

Словари могут иметь большое влияние на степень сжатия небольших файлов, поэтому Zstandard может использовать словарь сжатия, предоставленный пользователем. Он также предлагает режим обучения, в котором можно создавать словарь из набора образцов. [12] [13] В частности, один словарь может быть загружен для обработки больших наборов файлов с избыточностью между файлами, но не обязательно внутри каждого файла, например, файлов журнала .

Дизайн [ править ]

Zstandard сочетает в себе этап сопоставления словаря ( LZ77 ) с большим окном поиска и этап быстрого энтропийного кодирования , используя как энтропию конечного состояния (быстрая табличная версия ANS, tANS , используемая для записей в разделе «Последовательности»), так и кодирование Хаффмана ( используется для записей в разделе Литералы). [14]

Из-за способа, которым FSE передает состояние между символами, распаковка включает обработку символов в разделе Sequences каждого блока в обратном порядке (от последнего к первому).

Использование [ править ]

Ядро Linux включает Zstandard с ноября 2017 года (версия 4.14) в качестве метода сжатия для Btrfs и Squashfs файловых систем. [16] [17] [18]

В 2017 году Аллан Джуд интегрировал Zstandard в ядро ​​FreeBSD [19], и впоследствии он был интегрирован в качестве компрессора для дампов ядра (как пользовательских программ, так и паники ядра). Он также использовался для создания доказательства концепции метода сжатия OpenZFS [7], который был интегрирован в 2020 году [20].

В АМС красных смещений и RocksDB базы данных включают в себя поддержку для сжатия поля с использованием Zstandard. [21]

В марте 2018 года Canonical протестировала [22] использование zstd в качестве метода сжатия пакетов deb по умолчанию для дистрибутива Ubuntu Linux. По сравнению с xz- сжатием пакетов deb, zstd на уровне 19 распаковывает значительно быстрее, но за счет увеличения файлов пакетов на 6%. Разработчик Debian Ян Джексон предпочел подождать несколько лет до официального принятия. [23] [24] [25]

В 2018 году алгоритм был опубликован как RFC 8478 , который также определяет связанный тип мультимедиа «application / zstd», расширение имени файла «zst» и кодировку содержимого HTTP «zstd». [15] 

Arch Linux добавил поддержку zstd в качестве метода сжатия пакетов в октябре 2019 года с выпуском диспетчера пакетов pacman 5.2 [26], а в январе 2020 года переключился с xz на zstd для пакетов в официальном репозитории. Arch использует zstd -c -T0 --ultra -20 -, размер всех сжатых пакетов вместе увеличился на 0,8% (по сравнению с xz), скорость распаковки на 1300% выше, память распаковки увеличена на 50 МБ при использовании нескольких потоков, память сжатия увеличивается, но масштабируется с количеством используемых потоков . [27] [28] [29]

Fedora добавила поддержку ZStandard в RPM в мае 2018 г. (Fedora, выпуск 28) и использовала ее для упаковки выпуска в октябре 2019 г. (Fedora 31) [30]

Полная реализация алгоритма с возможностью выбора уровня сжатия используется в форматах файлов .NSZ / .XCZ [31] , разработанных доморощенным сообществом для гибридной игровой консоли Nintendo Switch . [32]

7zip доступен в расширении с zstandard до 7zip FS. [33]

Лицензия [ править ]

Эталонная реализация находится под лицензией BSD , опубликованной на GitHub . [34] Начиная с версии 1.0, он имел дополнительный Предоставление патентных прав. [35]

Начиная с версии 1.3.1, [36] эта выдача патента была отменена, и лицензия была изменена на двойную лицензию BSD + GPLv2. [37]

См. Также [ править ]

  • Злиб
  • LZFSE - аналогичный алгоритм Apple, используемый с тех пор, как iOS 9 и OS X 10.11 стали открытыми с 1 июня 2016 года.
  • LZ4 (алгоритм сжатия) - быстрый член семейства LZ77
  • 7zip с Zstandard [1]

Ссылки [ править ]

  1. ^ «Авторы facebook / zstd» . github.com . Архивировано из оригинального 27 января 2021 года . Проверено 26 января 2021 года .
  2. ^ "Релизы - facebook / zstd" . Проверено 20 декабря 2020 г. - через GitHub .
  3. Серхио Де Симоне (2 сентября 2016 г.). «Новый алгоритм сжатия с открытыми исходными кодами Facebook, превосходящий Zlib» . InfoQ . Проверено 20 апреля 2019 .
  4. ^ «Жизнь имитирует сатиру: Facebook рекламирует убийцу злибов, как Крысолов из Кремниевой долины» . Реестр. 31 августа 2016 . Проверено 6 сентября 2016 года .
  5. ^ https://github.com/facebook/zstd/releases/tag/v1.3.4 Более быстрые уровни сжатия
  6. ^ "Интерфейс командной строки для библиотеки Zstandard" . GitHub .
  7. ^ a b «Стандарт ZFS в ZFS» (PDF) . open-zfs.org . 2017 . Проверено 20 апреля 2019 .
  8. ^ Мэтт Махони. "Silesia Open Source Compression Benchmark" . Дата обращения 10 мая 2019 .
  9. ^ Мэтт Махони (29 августа 2016 г.). «Тест сжатия большого текста, .2157 zstd» . Проверено 1 сентября 2016 года .
  10. ^ TurboBench: Тест сжатия статического / динамического веб-контента , PowTurbo
  11. ^ Мэтт Махони, Silesia Open Source Compression Benchmark
  12. ^ «Разработчики Facebook сообщают о значительном ускорении и улучшении степени сжатия при использовании словарей» (PDF) .
  13. ^ "Меньшее и быстрое сжатие данных с помощью Zstandard" . Facebook. 31 августа 2016 г.
  14. ^ "facebook / zstd" . GitHub .
  15. ^ a b c d e Колле, Янн (октябрь 2018 г.). Кучерави, Мюррей С. (ред.). Zстандартное сжатие и приложение / zstd Media Type . Запрос инженерной группы Интернета о комментариях. DOI : 10,17487 / RFC8478 . RFC 8478 . Дата обращения 7 октября 2020 .
  16. ^ "Остальная часть окна слияния 4.14 [LWN.net]" . lwn.net .
  17. ^ "Linux_4.14 - новички в ядре Linux" . Kernelnewbies.org . Проверено 16 августа 2018 .
  18. ^ «Сжатие Zstd для Btrfs и Squashfs, установленное для Linux 4.14, уже используется в Facebook - Phoronix» . www.phoronix.com .
  19. ^ https://github.com/freebsd/freebsd/commit/28ef16535cde21eeeaf75f6006b3a77952b3b51
  20. ^ https://github.com/openzfs/zfs/commit/10b3c7f5e424f54b3ba82dbf1600d866e64ec0a0
  21. ^ «Zstandard Encoding - Amazon Redshift» . 20 апреля 2019.
  22. ^ Larabel, Майкл (12 марта 2018). «Каноническая работа над Zstd-сжатыми пакетами Debian для Ubuntu» . phoronix.com . Phoronix Media . Проверено 29 октября 2019 года . Разработчики из Canonical рассматривают исключение для замораживания функций, чтобы получить эту недавно разработанную поддержку Zstd Apt / Dpkg в Ubuntu 18.04 LTS. При этом они упоминают, что будут рассматривать возможность включения сжатия Zstd для пакетов по умолчанию в Ubuntu 18.10.
  23. ^ «Новые установки Ubuntu могут быть ускорены на 10% с помощью алгоритма сжатия Zstd» . Софтпедия . 12 марта 2018 . Проверено 13 августа 2018 .
  24. ^ «Каноническая работа над Zstd-сжатыми пакетами Debian для Ubuntu» . фороникс . 12 марта 2018 . Проверено 13 августа 2018 .
  25. Джексон, Ян (27 апреля 2018 г.). «RFC: поддержка zstd в пакетах .deb?» . debian-devel (список рассылки).
  26. ^ https://www.phoronix.com/scan.php?page=news_item&px=Arch-Linux-Pacman-Zstd-Near
  27. ^ Брод, Робин (4 января 2020). «Теперь для сжатия пакетов используется Zstandard вместо xz» . Arch Linux . Проверено 5 января 2020 года .
  28. ^ Брод, Робин (25 марта 2019). «RFC: (devtools) Изменение метода сжатия по умолчанию на zstd» . arch-dev-public (список рассылки).
  29. ^ Брода, Робин; Поляк, Левенте (27 декабря 2019 г.). "makepkg.conf: изменить метод сжатия по умолчанию на zstd" .
  30. ^ https://fedoraproject.org/wiki/Changes/Switch_RPMs_to_zstd_compression
  31. ^ «RELEASE - nsZip - компрессор / декомпрессор NSP для уменьшения объема памяти» . GBAtemp.net - Независимое сообщество видеоигр . Дата обращения 3 ноября 2019 .
  32. ^ Босхард, Нико (31 октября 2019 г.), nsZip - это инструмент для сжатия / распаковки игр Nintendo Switch с использованием указанного здесь формата файла NSZ: nicoboss / nsZip , получено 3 ноября 2019 г.
  33. ^ https://github.com/mcmilk/7-Zip-zstd
  34. ^ "Facebook открывает исходный код алгоритма сжатия данных Zstandard, призванного заменить технологию, лежащую в основе Zip" . ZDnet. 31 августа 2016 . Проверено 1 сентября 2016 года .
  35. ^ zstd / ПАТЕНТЫ «Дополнительная гарантия патентных прав, версия 2» , Facebook
  36. ^ "Zstd v1.3.1 release" , GitHub "facebook / zstd"
  37. ^ "Новая лицензия" , GitHub "facebook / zstd"

Внешние ссылки [ править ]

  • Официальный веб-сайт
  • zstd на GitHub
  • « Меньшее и быстрое сжатие данных с помощью Zstandard », Ян Колле и Чип Тернер, 31 августа 2016 г., объявление в Facebook
  • The Guardian использует ZStandard вместо zlib