1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-zstandard

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Zstandard

Zstandard, или zstd в сокращённом виде, — это быстрый алгоритм беспотери компрессии, ориентированный на реальные ситуации сжатия в режиме реального времени с соотношением сжатия уровня zlib и выше. Он использует очень быстрый этап энтропийного кодирования, предоставленный библиотеками Huff0 и FSE.

Формат Zstandard является стабильным и подробно описан в RFC8878. Уже доступны несколько независимых реализаций. Этот репозиторий представляет собой эталонную реализацию, представленную как открытая библиотека на языке C, лицензированная под двойной лицензией BSD или GPLv2, а также командную строку для создания и декодирования файлов с расширениями .zst, .gz, .xz и .lz4. В случае, если ваш проект требует другого языка программирования, список известных портов и привязок можно найти на главной странице Zstandard.

Статус ветки разработки:

Статус сборки Статус сборки Статус сборки Статус fuzzing

Бенчмарки

Для справки были протестированы и сравнены несколько быстрых алгоритмов сжатия на рабочей станции с процессором Core i7-9700K @ 4.9 ГГц, работающей под управлением Ubuntu 24.04 (Linux 6.8.0-53-generic) с использованием lzbench, открыто-источника внутреннего бенчмарка от @inikep, скомпилированного с помощью gcc 14.2.0, на [корпусе Silesia для сжатия].

Название компрессора Соотношение Скорость сжатия Скорость восстановления
zstd 1.5.7 -1 2.896 510 МБ/с 1550 МБ/с
zlib 1.3.1 -1 2.743 105 МБ/с 390 МБ/с
brotli 1.1.0 -0 2.702 400 МБ/с 425 МБ/с
zstd 1.5.7 --fast=1 2.439 545 МБ/с 1850 МБ/с
zstd 1.5.7 --fast=3 2.241 635 МБ/с 1980 МБ/с
quicklz 1.5.0 -1 2.238 520 МБ/с 750 МБ/с
lzo1x 2.10 -1 2.106 650 МБ/с 780 МБ/с
lz4 1.10.0 2.101 675 МБ/с 3850 МБ/с
snappy 1.2.1 2.089 520 МБ/с 1500 МБ/с
lzf 3.6 -1 2.077 410 МБ/с 820 МБ/с

Отрицательные уровни сжатия, указанные с помощью --fast=#, предлагают более высокую скорость сжатия и восстановления за счёт снижения соотношения сжатия.

Zstandard также может обеспечивать более высокое соотношение сжатия за счёт снижения скорости сжатия. Баланс между скоростью и соотношением сжатия настраивается малыми шагами. Скорость восстановления остаётся примерно одинаковой при всех настройках, что свойственно большинству алгоритмов сжатия типа LZ, таких как zlib или lzma.

Следующие тесты были выполнены на сервере с операционной системой Linux Debian (Linux версия 4.14.0-3-amd64) с процессором Core i7-6700K @ 4.0 ГГц, используя lzbench, открыто-источниковый внутренний бенчмарк от @inikep, скомпилированный с помощью gcc 7.3.0, на [корпусе Silesia для сжатия].

Скорость сжатия против соотношения сжатия Скорость восстановления
Скорость сжатия против соотношения сжатия Скорость восстановления

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

Случай сжатия малых данных

Предыдущие диаграммы предоставляют результаты применимые к типичным сценариям файлов и потоков (несколько МБ). Малые данные имеют свои особенности.

Чем меньше объём данных для сжатия, тем труднее его сжать. Это проблема общая для всех алгоритмов сжатия, причина заключается в том, что алгоритмы сжатия учатся на прошлом контенте, чтобы лучше сжимать будущий контент. Но в начале нового набора данных нет "прошлого", на котором можно было бы основаться.

Чтобы решить эту ситуацию, Zstandard предлагает режим обучения, который можно использовать для настройки алгоритма для выбранного типа данных. Обучение Zstandard достигается путём предоставления ему нескольких образцов (один файл на каждый образец). Результат этого обучения хранится в файле, называемом "словарь", который должен быть загружен перед сжатием и восстановлением. Используя этот словарь, соотношение сжатия, достижимое для малых данных, значительно улучшается.

Пример ниже использует набор образцов github-users sample set, созданный из public GitHub API. Он состоит из около 10К записей весом около 1КБ каждая.

Соотношение сжатия Скорость сжатия Скорость восстановления
Соотношение сжатия Скорость сжатия Скорость восстановления

Эти улучшения сжатия достигаются одновременно с повышением скорости сжатия и восстановления.

Обучение работает, если есть некоторая корреляция среди семейства малых данных. Чем больше специфично словарь для конкретного типа данных, тем эффективнее он будет (нет "универсального словаря"). Поэтому использование одного словаря на каждый тип данных обеспечивает наибольшие преимущества. Приобретенные преимущества особенно эффективны в первых нескольких КБ. Затем алгоритм сжатия будет постепенно использовать ранее декодированный контент для лучшего сжатия остальной части файла.

Как использовать обучение для сжатия с использованием словаря:

  1. Создайте словарь

    zstd --train ПолныйПутьКОбразцам/*.json -o имя_словаря

  2. Сожмите с использованием словаря

    zstd -D имя_словаря файл

  3. Восстановите с использованием словаря

    zstd -D имя_словаря --decompress файл.zst

Инструкции по сборке

make — официально поддерживаемая система сборки этого проекта. Все другие системы сборки являются "совместимыми" и поддерживаются сторонними организациями, они могут иметь небольшие различия в продвинутых опциях. Когда ваша система позволяет это, рекомендуется использовать make для сборки zstd и libzstd.

MakefileЕсли ваша система совместима со стандартным make (или gmake), вызов make в корневом каталоге создаст zstd CLI в корневом каталоге. Также будут созданы libzstd в lib/.

Другие доступные опции включают:

  • make install: создаёт и устанавливает zstd CLI, библиотеку и страницы мануалов
  • make check: создаёт и запускает zstd, проверяет его работу на локальной платформе

Makefile следует стандартным правилам GNU Makefile, позволяющим стадийную установку, стандартные флаги, директории и команды.

Для продвинутых случаев использования, специализированные компиляционные флаги, контролирующие генерацию бинарника, документированы в lib/README.md для библиотеки libzstd и в programs/README.md для CLI zstd.

cmake

Проект-генератор cmake находится в build/cmake. Он может создать Makefiles или другие скрипты сборки для создания бинарника zstd и динамических и статических библиотек libzstd.

По умолчанию, CMAKE_BUILD_TYPE установлен на Release.

Поддержка универсальных (Fat) выходных данных

zstd может быть собран и установлен с поддержкой как для Apple Silicon (M1/M2), так и для Intel, используя поддержку Universal2 в cmake. Чтобы выполнить сборку Fat/Universal2 и установку, используйте следующие команды:

cmake -B build-cmake-debug -S build/cmake -G Ninja -DCMAKE_OSX_ARCHITECTURES="x86_64;x86_64h;arm64"
cd build-cmake-debug
ninja
sudo ninja install

Meson

Проект Meson расположен в build/meson. Посмотрите инструкции по сборке в этом каталоге.

Вы можете также взглянуть на файл .travis.yml для примера того, как используется Meson для сборки этого проекта.

Заметьте, что по умолчанию тип сборки установлен на release.

VCPKG

Вы можете собрать и установить zstd vcpkg менеджера зависимостей:

git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install zstd

Модуль zstd в vcpkg поддерживается командой Microsoft и сообществом. Если версия устарела, пожалуйста, создайте issue или pull request на репозиторий vcpkg.

Conan

Вы можете установить предварительно собранные бинарники для zstd или собрать его из исходников с помощью Conan. Используйте следующую команду:

conan install --requires="zstd/[*]" --build=missing

Рецепт zstd в Conan поддерживается командой Conan и сообществом. Если версия устарела, пожалуйста, создайте issue или pull request на репозиторий ConanCenterIndex.

Visual Studio (Windows)

Перейдя в каталог build, вы найдёте дополнительные возможности:

  • Проекты для Visual Studio 2005, 2008 и 2010.
    • Проект VS2010 совместим с VS2012, VS2013, VS2015 и VS2017.
  • Автоматизированные скрипты сборки для Visual Compiler от @KrzysFR, в build/VS_scripts, которые позволят собрать zstd CLI и libzstd библиотеку без необходимости открывать решение Visual Studio.

Buck

Вы можете собрать бинарник zstd через buck, выполнив: buck build programs:zstd из корня репозитория. Выходной бинарник будет находиться в buck-out/gen/programs/.

Bazel

Вы легко можете интегрировать zstd в свой проект Bazel, используя модуль, хостируемый на Bazel Central Repository.

Тестирование

Вы можете выполнить быстрое локальное тестирование, запустив make check. Если вы не можете использовать make, выполните скрипт playTest.sh из каталога src/tests. Для тестового скрипта необходимы две переменные окружения $ZSTD_BIN и $DATAGEN_BIN для расположения бинарников zstd и datagen. Для информации о CI тестировании, обратитесь к файлу TESTING.md.

Статус

Zstandard активно используется внутри Facebook и многих других крупных облачных инфраструктур. Он постоянно используется для сжатия больших объёмов данных в различных форматах и случаях применения. Zstandard считается безопасным для использования в производственной среде.

Лицензия

Zstandard распространяется под двойной лицензией BSD или GPLv2.

Вклад

Ветка dev — это та, где все вклады сливаются перед выпуском release. Если вы планируете предложить исправление, пожалуйста, сделайте коммит в ветку dev или её собственную ветку функциональности. Прямые коммиты в release не допускаются. Для получения дополнительной информации прочитайте CONTRIBUTING.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
C и 6 других языков
GPL-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-zstandard.git
git@api.gitlife.ru:oschina-mirror/mirrors-zstandard.git
oschina-mirror
mirrors-zstandard
mirrors-zstandard
dev