Zstandard - Википедия - Zstandard

Zстандарт
Zstandard logo.png
Оригинальный автор (ы)Ян Колле
Разработчики)Янн Колле, Пшемыслав Скибинский (Иникеп )
изначальный выпуск23 января 2015 г. (2015-01-23)
Стабильный выпуск
1.4.5 / 22 мая 2020; 6 месяцев назад (2020-05-22)[1]
Репозиторий Отредактируйте это в Викиданных
Написано вC
Операционная системаКроссплатформенность
ПлатформаПортативный
ТипСжатие данных
ЛицензияДвойной: Лицензия BSD + GPLv2
Интернет сайтfacebook.github.io/ zstd/ Отредактируйте это в Викиданных

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

Функции

Zstandard был разработан для обеспечения степени сжатия, сравнимой с ВЫПУСКАТЬ алгоритм (разработан в 1991 г. и использовался в оригинальной ZIP и gzip программ), но быстрее, особенно для декомпрессии. Он настраивается с уровнями сжатия от отрицательных 5 (самый быстрый)[4] до 22 (самая низкая скорость сжатия, но наилучшая степень сжатия).

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

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

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

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

Дизайн

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

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

использование

Zстандарт
Расширение имени файла
.zst[14]
Тип интернет-СМИ
приложение / zstd[14]
Магическое число28 b5 2f fd[14]
Тип форматаСжатие данных
СтандартRFC  8478
Интернет сайтhttps://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md
Zстандартный словарь
Магическое число37 a4 30 ec[14]
СтандартRFC  8478
Интернет сайтhttps://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#dictionary-format

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

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

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

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

В 2018 году алгоритм был опубликован как RFC  8478, который также определяет связанный тип СМИ "приложение / zstd", расширение имени файла "zst" и Кодирование содержимого HTTP "zstd".[14]

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

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

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

Лицензия

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

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

Смотрите также

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

Рекомендации

  1. ^ «Релизы - facebook / zstd». Получено 22 мая 2020 - через GitHub.
  2. ^ Серхио де Симоне (2 сентября 2016 г.). «Новый алгоритм сжатия с открытыми исходными кодами Facebook превосходит Zlib». InfoQ. Получено 20 апреля 2019.
  3. ^ «Жизнь имитирует сатиру: Facebook рекламирует убийцу злибов, как Крысолов из Кремниевой долины». Реестр. 31 августа 2016 г.. Получено 6 сентября 2016.
  4. ^ https://github.com/facebook/zstd/releases/tag/v1.3.4 Более быстрые уровни сжатия
  5. ^ «Интерфейс командной строки для библиотеки Zstandard». GitHub.
  6. ^ а б «ZStandard в ZFS» (PDF). open-zfs.org. 2017. Получено 20 апреля 2019.
  7. ^ Мэтт Махони. «Тест Silesia Open Source Compression Benchmark». Получено 10 мая 2019.
  8. ^ Мэтт Махони (29 августа 2016 г.). "Тест сжатия большого текста, .2157 zstd". Получено 1 сентября 2016.
  9. ^ TurboBench: тест сжатия статического / динамического веб-контента, PowTurbo
  10. ^ Мэтт Махони, Тест Silesia Open Source Compression Benchmark
  11. ^ «Разработчики Facebook сообщают о значительном ускорении и улучшении степени сжатия при использовании словарей» (PDF).
  12. ^ «Меньшее и быстрое сжатие данных с помощью Zstandard». Facebook. 31 августа 2016 г.
  13. ^ "facebook / zstd". GitHub.
  14. ^ а б c d е Колле, Янн (октябрь 2018 г.). Кучерави, Мюррей С. (ред.). Zstandard Compression и приложение / zstd Media Type. Запрос инженерной группы Интернета о комментариях. Дои:10.17487 / RFC8478. RFC 8478. Получено 7 октября 2020.
  15. ^ "Остальная часть окна слияния 4.14 [LWN.net]". lwn.net.
  16. ^ "Linux_4.14 - новички в ядре Linux". Kernelnewbies.org. Получено 16 августа 2018.
  17. ^ «Сжатие Zstd для Btrfs и Squashfs, установленное для Linux 4.14, уже используется в Facebook - Phoronix». www.phoronix.com.
  18. ^ https://github.com/freebsd/freebsd/commit/28ef16535cde21eeeaf75f6006b3a77952b3b51
  19. ^ https://github.com/openzfs/zfs/commit/10b3c7f5e424f54b3ba82dbf1600d866e64ec0a0
  20. ^ «Zstandard Encoding - Amazon Redshift». 20 апреля 2019.
  21. ^ Ларабель, Майкл (12 марта 2018 г.). «Каноническая работа над Zstd-сжатыми пакетами Debian для Ubuntu». phoronix.com. Phoronix Media. Получено 29 октября 2019. Разработчики из Canonical рассматривают исключение для замораживания функций, чтобы получить эту недавно разработанную поддержку Zstd Apt / Dpkg в Ubuntu 18.04 LTS. При этом они упоминают, что будут рассматривать возможность включения сжатия Zstd для пакетов по умолчанию в Ubuntu 18.10.
  22. ^ «Новые установки Ubuntu можно ускорить на 10% с помощью алгоритма сжатия Zstd». Софтпедия. 12 марта 2018 г.. Получено 13 августа 2018.
  23. ^ «Каноническая работа над Zstd-сжатыми пакетами Debian для Ubuntu». фороникс. 12 марта 2018 г.. Получено 13 августа 2018.
  24. ^ RFC: поддержка zstd в пакетах .deb?, Ян Джексон, 2018-04-27.
  25. ^ https://www.phoronix.com/scan.php?page=news_item&px=Arch-Linux-Pacman-Zstd-Near
  26. ^ Брода, Робин (4 января 2020 г.). «Теперь для сжатия пакетов используется Zstandard вместо xz». Arch Linux. Получено 5 января 2020.
  27. ^ [Arch-Dev-Public RFC: (devtools) Изменение метода сжатия по умолчанию на zstd], Робин Брода, 2019-03-25.
  28. ^ Уточнение гарантий совместимости выходной мощности компрессора zstd для разных версий, Ян Колле, заверяя, что для того же двоичного результата важны версия zstd и уровень сжатия, 18.03.2019.
  29. ^ makepkg.conf: изменить метод сжатия по умолчанию на zstd, Робин Брода, Левенте Поляк, сжатие по умолчанию с помощью zstd -c -T0 --ultra -20 -, 2019-12-27.
  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. ^ «Facebook открывает исходный код алгоритма сжатия данных Zstandard, призванного заменить технологию, лежащую в основе Zip». ZDnet. 31 августа 2016 г.. Получено 1 сентября 2016.
  34. ^ zstd / ПАТЕНТЫ "Дополнительное предоставление патентных прав Версия 2", Facebook
  35. ^ "Релиз Zstd v1.3.1", GitHub "facebook / zstd"
  36. ^ «Новая лицензия», GitHub "facebook / zstd"

внешняя ссылка