Первоначальный автор (ы) | Янн Колле |
---|---|
Разработчик (и) | Янн Колле, Пшемыслав Скибинский (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 года.
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 каждого блока в обратном порядке (от последнего к первому).
Расширение имени файла | .zst |
---|---|
Тип интернет-носителя | application / zstd |
Магическое число | 28 b5 2f fd |
Тип формат | Сжатие данных |
Стандартный | RFC 8478 |
Веб-сайт | https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md |
Магическое число | 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.