Русская Википедия:Zstandard
Шаблон:Infobox software Zstandard — алгоритм сжатия данных без потерь, разрабатываемый с 2015 года Яном Колле (Шаблон:Lang-fr) при поддержке корпорации Facebook; zstd — эталонная реализация алгоритма Zstandard на языке программирования Си под свободной лицензией BSD. Версия 1.0 алгоритма и реализации были представлены в конце августа 2016 года[1][2].
Сочетает словарный алгоритм сжатия данных типа LZ77 и эффективное энтропийное кодирование типа ANS (FSE — Шаблон:Lang-en2), алгоритм, сходный с кодом Хаффмана, реализующий нецелое количество бит для хранения символов[3][4].
Особенности
Целью разработки является достижение коэффициентов сжатия, сопоставимых или превосходящих классический алгоритм deflate (разработан в середине 1990-х, реализован в Zip, gzip и других) при более высокой скорости как сжатия, так и распаковки. Сходные цели решают алгоритмы Brotli (Google) и Шаблон:Нп5 (Apple, также использует ANS FSE)[5].
По данным LTCB, zstd 0.6 при максимальной степени сжатия показывает уровень сжатия, близкий к архиваторам boz, yxz, tornado; более высокий, чем у lza, brotli, bzip2, обеспечивая при этом очень быструю распаковку (2,2 нс/байт на Core i7-3930K при 4,5 ГГц)[6]
Алгоритм реализует 22 уровня сжатия, различающихся скоростью и эффективностью (уровень «1» — самый быстрый, уровень «22» — более эффективный). Опционально алгоритм может проанализировать заданный набор данных для составления специализированных внешних словарей. Задаваемый пользователем словарь улучшает степень сжатия сходных файлов, но требуется при распаковке. Словари применяют для сжатия небольших файлов, имеющих общие наборы строк, например, XML-файлы[7][8].
Эталонная реализация алгоритма на Си распространяется под свободной лицензией BSD[9]. Код опубликован на сайте Github. Начиная с версии 1.3.1[10] из условий было убрано упоминание ограниченной патентной лицензии, а код был перелицензирован под условиями двойной BSD + GPLv2 лицензии.[11]
Применение
Метод Zstandard включён в состав ядра Linux с версии 4.14 от ноября 2017 для использования в файловых системах, в частности, в btrfs и squashfs.[12][13][14] Также метод тестировался во FreeBSD для интеграции в файловую систему OpenZFS[15].
Алгоритм используется в ряде дата-центров и системах обработки «больших данных», в частности, в Amazon RedShift[16]. Поддерживается в базах данных, например RocksDB, в некоторых архиваторах, в частности, в FreeArc.
Описание метода Zstandard и MIME-тип «application/zstd» были поданы в IETF в качестве интернет-черновика[17].
Корпорация Canonical в дистрибутиве Ubuntu планирует перевести пакетный формат deb на сжатие при помощи zstd начиная с версии 18.10 (октябрь 2018) ради ускорения процесса установки примерно на 10 процентов. Сжатие пакетов при помощи Zstd на уровне 19 приводит к немного большему размеру пакета, чем при ранее использовавшемся алгоритме xz (LZMA), но zstd позволяет быстрее распаковывать[18][19].
Полноценная реализация алгоритма с выбором уровня сжатия используется в форматах .NSZ/.XCZ[20], разработанных homebrew-сообществом для гибридной игровой консоли Nintendo Switch.[21][22]
Примечания
Ссылки
- Шаблон:Official
- Шаблон:Github
- Smaller and faster data compression with Zstandard, Facebook code, 2016-08-31Шаблон:Ref-en
- Facebook опубликовал реализацию алгоритма сжатия Zstandard 1.0 / Opennet.ru, 01.09.2016
- ↑ Sergio De Simone, Facebook Open-Sources New Compression Algorithm Outperforming Zlib Шаблон:Wayback / InfoQ, Sep 02, 2016
- ↑ Шаблон:Cite news
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Компания Apple открыла реализацию алгоритма сжатия без потерь LZFSE Шаблон:Wayback // Opennet.ru, 07.07.2016
- ↑ Шаблон:Cite web
- ↑ https://indico.fnal.gov/event/15154/contribution/5/material/slides/0.pdf Шаблон:Wayback «Facebook developers report massive speedups and compression ratio improvements when using dictionaries»
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite news
- ↑ «Zstd v1.3.1 release» Шаблон:Wayback, GitHub
- ↑ «New license» Шаблон:Wayback, GitHub
- ↑ Шаблон:Wayback The rest of the 4.14 merge window [LWN.net]
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Статья
- ↑ Шаблон:Cite web