bzip3: новый архиватор, который сжимает все версии Perl5 до 546 МБ

bzip3: новый архиватор, который сжимает все версии Perl5 до 546 МБ

bzip3 — это духовный наследник BZip2, который обещает лучшую степень сжатия и производительность. В benchmark на всех версиях Perl5, bzip3 сжимает 7.5 ГБ данных до 546 МБ, обгоняя xz, bzip2 и Zstandard. В сочетании с lrzip достигает 60 МБ. Автор предупреждает о возможных потерях данных и зависимости производительности от компилятора.

Как и его предок, BZip3 excels at compressing text or code.
  1. altairprime

    Ранее: «Привет, я автор инструмента». Полезное объяснение преобразования Барроуза-Уилера, используемого в bzip3: https://news.ycombinator.com/item?id=42902407

    «bzip3 еще не указан в большом тесте сжатия текста» Теперь указан: https://mattmahoney.net/dc/text.html

    (2 года назад, 176 комментариев) https://news.ycombinator.com/item?id=42899713

    (4 года назад, 104 комментария) https://news.ycombinator.com/item?id=31324439

  2. 8organicbits

    Недавно я обрабатывал сжатые .jsonl файлы (формат JSON lines). Я обнаружил, что lzma дает гораздо лучшее сжатие, чем gzip или bzip2, что помогает с затратами на архивирование, но с ним сложно работать, так как поддержка со стороны программного обеспечения недостаточна. Я использую duckdb, который прозрачно поддерживает gzip. Существует расширение для bzip2, но не для lzma или bzip3.

    В итоге я использовал gzip, потому что он лучше всего поддерживается используемым мной ПО и, скорее всего, будет поддерживаться в ПО, которое я приму в будущем. Но он дал худшие результаты сжатия из всех опробованных вариантов. Эти цифры по bzip3 определенно вызывают у меня FOMO...

  3. ot

    Бенчмарки нечестные, до такой степени, что выглядят подтасованными. Размер блока для bzip3 установлен в 512 МБ, а размер окна для zstd оставлен по умолчанию (8 МБ, насколько я знаю, для высоких уровней). Таким образом, в этом корпусе, который состоит из всех версий исходного кода Perl, объединенных вместе, окно слишком мало, чтобы увидеть все идентичные файлы и просто сопоставить их.

    Кроме того, корпуса, состоящие из очень длинных повторений, — это почти лучший сценарий для компрессоров на основе BWT.

    Если мы сопоставим размер окна zstd с размером окна bzip3, мы получим радикально другие результаты:

    % gzcat *.gz | time zstd -T8 -16 | wc -c # базовый уровень

    2819113884

    zstd -T8 -16 2054.50s user 3.47s system 783% cpu 4:22.80 total

    % gzcat *.gz | time zstd -T8 -16 --long=29 | wc -c

    196405076

    zstd -T8 -16 --long=29 1083.06s user 2.41s system 783% cpu 2:18.55 total

    Почти в 15 раз меньше, чем базовый уровень, и более чем в 2 раза меньше, чем bzip3, а время CPU сокращается вдвое (поскольку длинные совпадения находятся раньше, работы меньше).

    (Базовое число немного отличается, потому что у меня нет точного набора версий Perl, использованного автором)

    Кроме того, в тестах с использованием lrzip, где размер окна становится менее важным, zstd вообще не сравнивается.

  4. JdeBP

    Интересный непреднамеренный тест — зайти на https://github.com/iczelia/bzip3/releases и посмотреть, насколько bzip3 сжимает свои собственные релизные архивы; и зайти на https://github.com/iczelia/bzip3/blob/master/.github/workflo... чтобы увидеть, какие параметры были выбраны для других компрессоров.

  5. CodesInChaos

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

  6. amelius

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

    Похоже, это хороший тестовый пример для формализации + ИИ?

  7. whatever1

    Я думаю, что алгоритмы сжатия созрели для значительного улучшения с помощью LLM. Это идеальная задача для замкнутого цикла оценки, и можно просто позволить агенту пробовать разные варианты.

  8. charcircuit

    Неприятно использовать такое имя, когда оно не создано авторами bzip. По какой-то причине разработчики открытого ПО любят использовать имена, которые могут нарушать товарные знаки, вместо того чтобы придумать что-то уникальное.

Ещё за этот день

2026-09-07