Zstandard

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

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

Содержание
  • 1 Функции
  • 2 Дизайн
  • 3 Использование
  • 4 Лицензия
  • 5 См. также
  • 6 Ссылки
  • 7 Внешние ссылки
Возможности

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

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

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

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

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

Дизайн

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

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

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

Ядро Linux включает Zstandard с ноября 2017 года (версия 4.14) в качестве метода сжатия для файловых систем btrfs и squashfs.

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

Базы данных AWS Redshift и RocksDB включают поддержка сжатия полей с использованием Zstandard.

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

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

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

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

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

Лицензия

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

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

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

Последняя правка сделана 2021-06-23 11:44:13
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте