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