stringtranslate.com

зстд

Zstandard — это алгоритм сжатия данных без потерь, разработанный Яном Коллетом из Facebook . Zstd — это соответствующая эталонная реализация на языке C , выпущенная как программное обеспечение с открытым исходным кодом 31 августа 2016 года. [3] [4]

Функции

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

Начиная с версии 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 ) с большим окном поиска и этапом быстрого энтропийного кодирования . Он использует как кодирование Хаффмана (используемое для записей в разделе «Литералы») [14] , так и конечную энтропию (FSE) — быструю табличную версию ANS, tANS , используемую для записей в разделе «Последовательности». Из-за того, как FSE переносит состояние между символами, декомпрессия включает обработку символов в разделе «Последовательности» каждого блока в обратном порядке (от последнего к первому).

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

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

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

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

В марте 2018 года Canonical протестировала [22] использование zstd в качестве метода сжатия deb-пакетов по умолчанию для дистрибутива Ubuntu Linux. По сравнению с xz -сжатием deb-пакетов, zstd на уровне 19 распаковывает значительно быстрее, но за счет увеличения размера файлов пакетов на 6%. Поддержка была добавлена ​​в Debian (и впоследствии в Ubuntu) в апреле 2018 года (в версии 1.6~rc1). [23] [22] [24]

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

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

Fedora добавила поддержку ZStandard в RPM в мае 2018 года (выпуск Fedora 28) и использовала ее для упаковки выпуска в октябре 2019 года (Fedora 31). [31] В Fedora 33 файловая система по умолчанию сжимается с помощью zstd. [32] [33]

Полная реализация алгоритма с возможностью выбора уровня сжатия используется в форматах файлов .NSZ/.XCZ [34], разработанных сообществом homebrew для гибридной игровой консоли Nintendo Switch . [35] Аналогично, это также один из многих поддерживаемых алгоритмов сжатия в формате файлов образов дисков .RVZ Wii и GameCube .

15 июня 2020 года Zstandard был реализован в версии 6.3.8 формата zip-файла с кодеком номером 93, что отменило предыдущий кодек номер 20, реализованный в версии 6.3.7, выпущенной 1 июня. [36] [37]

В марте 2024 года Google Chrome версии 123 (и браузеры на базе Chromium , такие как Brave или Microsoft Edge ) добавили поддержку zstd в заголовке HTTP Content-Encoding . [38] В мае 2024 года Firefox версии 126.0 добавил поддержку zstd в заголовке HTTP Content-Encoding . [39]

Лицензия

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

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

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

Ссылки

  1. ^ "Contributors to facebook/zstd". github.com . Архивировано из оригинала 27 января 2021 г. . Получено 26 января 2021 г. .
  2. ^ "Выпуск Zstandard v1.5.6 - Chrome Edition · facebook/zstd" . Получено 27 марта 2024 г. .
  3. ^ Серхио Де Симоне (2 сентября 2016 г.). «Facebook Open-Sources New Compression Algorithm Outperforming Zlib». InfoQ . Получено 20 апреля 2019 г. .
  4. ^ "Жизнь имитирует сатиру: Facebook рекламирует убийцу zlib, как Крысолова из Кремниевой долины". The Register . 31 августа 2016 г. Получено 6 сентября 2016 г.
  5. ^ "Выпуск Zstandard v1.3.4 - быстрее все · facebook/zstd". GitHub . Получено 27 марта 2024 г. .
  6. ^ "Интерфейс командной строки для библиотеки Zstandard". GitHub . 28 октября 2021 г.
  7. ^ ab "ZStandard в ZFS" (PDF) . open-zfs.org . 2017 . Получено 20 апреля 2019 .
  8. ^ Мэтт Махони. "Silesia Open Source Compression Benchmark" . Получено 10 мая 2019 г.
  9. ^ Мэтт Махони (29 августа 2016 г.). "Large Text Compression Benchmark, .2157 zstd" . Получено 1 сентября 2016 г.
  10. ^ TurboBench: Тест статического/динамического сжатия веб-контента, PowTurbo
  11. ^ Мэтт Махони, Тест сжатия с открытым исходным кодом Silesia
  12. ^ «Разработчики Facebook сообщают о значительном ускорении и улучшении коэффициента сжатия при использовании словарей» (PDF) . Fermilab . 11 октября 2017 г. . Получено 27 марта 2024 г. .
  13. ^ «Более компактное и быстрое сжатие данных с Zstandard». Facebook. 31 августа 2016 г.
  14. ^ "facebook/zstd". GitHub . 28 октября 2021 г.
  15. ^ abcd Collet, Yann (февраль 2021 г.). Kucherawy, Murray S. (ред.). Zstandard Compression и application/zstd Media Type. Запрос комментариев от Internet Engineering Task Force. doi : 10.17487/RFC8878 . RFC 8878 . Получено 26 февраля 2023 г. .
  16. ^ Корбет, Джонатан (17 сентября 2017 г.). «Остальная часть окна слияния 4.14 [LWN.net]». lwn.net . Получено 27 марта 2024 г. .
  17. ^ "Linux_4.14 - Linux Kernel Newbies". Kernelnewbies.org. 30 декабря 2017 г. Получено 16 августа 2018 г.
  18. ^ Ларабель, Майкл (8 сентября 2017 г.). «Сжатие Zstd для Btrfs и Squashfs установлено для Linux 4.14, уже используется в Facebook — Phoronix». www.phoronix.com .
  19. ^ "Интеграция ZSTD в ядро ​​· freebsd/Freebsd-SRC@28ef165". GitHub .
  20. ^ "Добавить поддержку ZSTD в ZFS · openzfs/ZFS@10b3c7f". GitHub .
  21. ^ "Zstandard Encoding - Amazon Redshift". 20 апреля 2019 г.
  22. ^ ab Larabel, Michael (12 марта 2018 г.). "Canonical Working On Zstd-Compressed Debian Packages For Ubuntu". phoronix.com . Phoronix Media . Получено 29 октября 2019 г. Разработчики Canonical рассматривают исключение заморозки функций, чтобы получить поддержку недавно разработанного Zstd Apt/Dpkg в Ubuntu 18.04 LTS. При этом они упоминают, что будут рассматривать включение сжатия Zstd для пакетов по умолчанию в Ubuntu 18.10.
  23. ^ "Новые установки Ubuntu могут быть ускорены на 10% с помощью алгоритма сжатия Zstd". Softpedia . 12 марта 2018 г. . Получено 13 августа 2018 г. .
  24. ^ "Debian Changelog for apt". Debian . 19 апреля 2021 г. Получено 7 ноября 2022 г.
  25. ^ Коллет, Янн (октябрь 2018 г.). Кучерави, Мюррей С. (ред.). Zstandard Compression и application/zstd Media Type. Запрос комментариев от Internet Engineering Task Force. doi : 10.17487/RFC8478 . RFC 8478. Получено 7 октября 2020 г.
  26. ^ Ларабель, Майкл (16 октября 2019 г.). «Arch Linux близок к выпуску сжатых пакетов ZSTD для более быстрой установки Pacman». Phoronix .
  27. ^ Брода, Мара (4 января 2020 г.). «Теперь для сжатия пакетов используется Zstandard вместо xz». Arch Linux . Получено 5 января 2020 г. .
  28. ^ Брода, Мара (25 марта 2019 г.). "RFC: (devtools) Изменение метода сжатия по умолчанию на zstd". arch-dev-public (список рассылки).
  29. ^ Брода, Мара; Поляк, Левенте (27 декабря 2019 г.). "makepkg.conf: изменить метод сжатия по умолчанию на zstd". GitHub .
  30. ^ Razzolini, Giancarlo (19 февраля 2021 г.). "Новости: Переход на образы Zstandard по умолчанию в mkinitcpio". Arch Linux . Получено 28 декабря 2021 г. .
  31. ^ "Изменения/переключение сжатия RPMS на ZSTD". Fedora Project Wiki .
  32. ^ "Fedora Workstation 34 feature focus: Btrfs transparent compression". Fedora Magazine . 14 апреля 2021 г. . Получено 12 мая 2022 г. .
  33. ^ "Changes/BtrfsTransparentCompression". Fedora Project Wiki . Получено 12 мая 2022 г.
  34. ^ "RELEASE - nsZip - NSP compressor/decompressor to reduce storage". GBAtemp.net - The Independent Video Game Community . 20 октября 2019 г. Получено 3 ноября 2019 г.
  35. ^ Bosshard, Nico (31 октября 2019 г.), nsZip — это инструмент для сжатия/распаковки игр Nintendo Switch с использованием указанного здесь формата файлов NSZ: nicoboss/nsZip , получено 3 ноября 2019 г.
  36. ^ APPNOTE.TXT - Спецификация формата файла .ZIP Версия: 6.3.8, 15 июня 2020 г. , получено 7 июля 2020 г.
  37. ^ APPNOTE.TXT - Спецификация формата файла .ZIP Версия: 6.3.7, 1 июня 2020 г. , получено 6 июня 2020 г.
  38. ^ "Новое в Chrome 123 | Блог Chrome". Chrome для разработчиков . 19 марта 2024 г. Получено 16 апреля 2024 г.
  39. ^ "Firefox 126.0, см. все новые функции, обновления и исправления" . Получено 15 мая 2024 г.
  40. ^ "Алгоритм сжатия данных Zstandard с открытым исходным кодом Facebook, призван заменить технологию, лежащую в основе Zip". ZDnet. 31 августа 2016 г. Получено 1 сентября 2016 г.
  41. ^ "zstd/PATENTS в v1.3.0 · facebook/zstd". GitHub . Получено 27 марта 2024 г. .
  42. ^ "Выпуск Zstandard v1.3.1 · facebook/zstd". GitHub . Получено 27 марта 2024 г. .
  43. ^ "Новая лицензия от Cyan4973 · Запрос на извлечение #801 · facebook/zstd". GitHub . Получено 27 марта 2024 г. .

Внешние ссылки