LINUX.ORG.RU

ZXC 0.12.0

 , , , ,


0

1

18 июня, после более месяца разработки, состоялся выпуск 0.12.0 библиотеки и кроссплатформенной консольной утилиты ZXC (github.com), реализующих высокопроизводительное многопоточное асимметричное сжатие без потерь и оптимизированное для игровых ресурсов, прошивок и пакетов приложений. Формат разработан по принципу «один раз записать, многократно читать» (WORM).

В отличие от таких кодеков, как LZ4, ZXC жертвует скоростью сжатия ради максимальной пропускной способности при распаковке.

Декларируется скорость распаковки на 10-47% выше, чем у LZ4 с уровнем компрессии по умолчанию, с равным или более высоким коэффициентом сжатия.

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

Версия формата контейнера обновлена до v6, а версия библиотеки SOVERSION увеличена с 3 до 4.

Проект написан на языке C и распространяется по лицензии BSD 3.

Основные изменения:

  • компрессия с предварительно обученным словарём и общей таблицей Хаффмана;
  • изменения в консольной утилите:
    • добавлен параметр --train для обучения словаря на основе входных файлов (путь к выходным файлам указывается с помощью параметра -o; по умолчанию — dictionary_<dict_id>.zxd). Этот параметр заменил прежний параметр --train-dict PATH;
    • -D, --dict FILE — сжимает или распаковывает файл, используя словарь FILE; -l, --list — выводит содержание архива или информацию о словаре .zxd;
    • добавлен новый псевдоним для распаковки unzxc — он инсталлируется в виде символьной ссылки на zxc и по умолчанию работает в режиме распаковки (эквивалентно команде zxc -d).
  • компрессия с уровнем 6 примерно на 10% быстрее версии 0.11.0;
  • декомпрессия с уровнями 1 и 2 примерно на 3% быстрее версии 0.11.0;
  • другие улучшения и исправления ошибок.

>>> Подробности на GitHub

★★★★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от etwrq

Как будто в lz4 или zstd это не так.

dataman ★★★★★
() автор топика
Ответ на: комментарий от etwrq

т.е. если потерял словарь - потерял архив?)

А иного способа сжимать пока не изобрели, только по договоренности «Вот эта комбинация символов = имеет вот такое сокращение».

Но пока по эффективности сжатия лидирует китайская грамота =)

windows10 ★★★★★
()
Ответ на: комментарий от etwrq

Нет, по крайней мере в lz4 и zstd.

$ lz4 -h:

-D FILE: use FILE as dictionary (compression & decompression)

$ zstd -H:

-D DICT Use DICT as the dictionary for compression or decompression.

Автор zxc на них и ориентируется, скорее всего.

dataman ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Немного устарело, но https://nigeltao.github.io/blog/2022/zstandard-part-7-dictionaries.html пишет:

Dictionaries are supplied out-of-band to a Zstandard file. Each frame in a Zstandard file can refer to its own dictionary, identified by a uint32 number.

Dictionaries are optional and the romeo.txt.zst example doesn’t use them. Instead, here’s a 4 KiB dictionary built from 64 KiB chunks of Shakespeare’s complete works:

$ wget –quiet https://www.gutenberg.org/files/100/100-0.txt
$ zstd –train –maxdict=4096 -B65536 -o 100-0.dict 100-0.txt 2> /dev/null

Но наверное, для 7z можно написать плагин, который будет хранить в архиве и словарь тоже. А может кто-то уже так и сделал. :)

dataman ★★★★★
() автор топика

Я вот считаю микрощелочные усилия, сжать что-то, просто беспорядочными действиями. Ты потратишь больше времени на запаковку, чем потом вообще когда-нибудь притронешься к своему файлу. И так, уже давно самые большие объемы данных сжимают эффективнее всего всякие av1/h.265 По сути сжимая ты тратишь процессорное время, чтобы потом распаковать, и снова потратить время. Есть конечно полезные типы файлов которые можно сжимать, картинки например, но ты просто уменьшаешь их размер, а не пакуешь в архив, из которого надо достать. Максимум использовать его как папку для пересылки файлов, без сжатия. Ведь сжатие архива, экономит смешные мегабайты памяти. Плюс степень силы упаковки архива, требует огромных усилий при его открытии. Так еще и место свободного много нужно для временных файлов , чтобы его открыть. Да и к тому же, большинство файлов и так уже сжаты, так что заниматься переупаковой сжатых файлов, такое себе дело. Архивы-зло.

REDDERa
()
Ответ на: комментарий от dataman

Кажется понял. Есть набор стандартных словарей. Но можно этот некий «типа стандартный» словарь расширить еще и своими вариантами, надеюсь понял верно

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от REDDERa

Ну тут не все так однозначно.

Сжатие аудиовизуальной информации - к сжатию не относится как к таковому, там скорее отбрасывание неразличимых человеком элементов.

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

И экономит это не смешные мегабайты памяти, а иногда гигабайты и часы. Например у меня на одном из серверов, SQL дамп занимает 25 гиг. Сжатый занимает что-то около 450 мегабайт.

Свободное место для открытия архива не нужно, в наборе к архиваторам идут утилиты, которые умеют сразу в stdout, например zcat.

Я понимаю о чем вы можете подумать, поэтому говорю заранее: 25 гигабайт - это объем информации, не подлежащей оптимизации, хоть в 10 таблиц ее разнесите, хоть в 100 баз - она будет занимать 25 гигабайт

И кстати, усилий работа с архивами требует минимальных.

windows10 ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Есть набор стандартных словарей.

В Brotli есть, в zstd и lz4 нет.

dataman ★★★★★
() автор топика
Ответ на: комментарий от REDDERa

Я вот считаю микрощелочные усилия, сжать что-то, просто беспорядочными действиями.

Касаемо сабжа, автор планировал написать модуль для ядра (а может уже и есть).

Тогда его смогут использовать различные ФС.

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

если пользовательский словарь сохранять в архиве, то он та-да-дам не отличим от обычной архивации :)
смысл ентой затеи, чтобы сгенерить универсальный словарик и держать его отдельно.

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от REDDERa

Честно говоря удивлен, текстовые логи часто из 600 мегабайт становятся 600 килобайтами. Например пакеты в сети как знаете не жмут, вот pcap-файл для всяких wireshark/tcpdump жмутся в 10-15 раз. Наконец архив типа tar ни разу не зло, просто 5000 файлов становятся одним и очень быстро передаются через шары и netcat-ы одной командой

I-Love-Microsoft ★★★★★
()

В отличии от zpaq, в области низких коэфицентов сжатия этот подход выглядит совершенно ненужным.

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.