Какой алгоритм сжатия наиболее эффективен между xz, gzip и bzip2?

16

Между xz, gzip и bzip2, какой алгоритм сжатия дает наименьший размер файла и самую высокую скорость при сжатии довольно больших тарболлов?

Nathan2055
источник
«лучший» как в «в результате размер файла наименьший»?
Хеннес
Я не знаю, я пытался найти способ сформулировать вопрос, чтобы я мог добавить свой тест в качестве ответа. Я также понятия не имею, почему эта вещь была закрыта. @Karan
Nathan2055
1
О, почему это было закрыто, это легко. «Лучшее» очень субъективно и обычно приводит к дискуссиям или неконструктивным ответам. Наилучшим сжатием может быть наименьший размер файла, самое быстрое сжатие, наименьшая мощность, используемая для сжатия (например, на ноутбуке), наименьшее влияние на систему при сжатии (например, древние однопоточные программы, использующие только одно из ядер), ... или комбинация из всех тех.
Hennes
Интересная статья для чтения - tomshardware.com/reviews/winrar-winzip-7-zip-magicrar,3436.html (основанная на Windows и ориентированная на 7zip, magicRAR, WinRAR и WinZip, а не на xz, gz или bz, но все же интересная и предоставление справочной информации).
Хеннес
@Hennes - Я убрал пост, чтобы заменить лучшее на то, что я исследовал. Кроме того, спасибо за статью, которую вы упомянули, я прочитаю ее позже сегодня.
Nathan2055

Ответы:

15

В моем стресс-тесте я сжал 464 мегабайта данных, используя три перечисленных формата. Gzip вернул файл размером 364 МБ. Bzip2 вернул файл размером 315 МБ. Xz вернул файл размером 254 МБ. Я также сделал простой тест скорости:

Сжатие:

1: Gzip

2: Xz

3: Bzip2 (мой вентилятор дул довольно долго, пока это происходило, указывая на то, что мой Athlon II был довольно напряженным)

Декомпрессия:

1: Xz

2: Gzip

3: Bzip2

Обратите внимание, что все эти тесты были выполнены с использованием последней версии 7-Zip.

Xz - лучший формат для всестороннего сжатия, в то время как Gzip очень хорош для скорости. Bzip2 подходит для своей степени сжатия, хотя xz, вероятно, следует использовать вместо него.

Nathan2055
источник
2
Хорошее исследование. Вы пробовали различные варианты уровня сжатия, предлагаемые (по крайней мере) bzip2, например bzip2 -9 <file>?
Аарон Миллер
@AaronMiller - Нет, возможно ли использовать их через 7-Zip?
Nathan2055
Это выглядит так, хотя я не уверен, в какой степени: см. Dotnetperls.com/7-zip-examples , раздел «Switch m».
Аарон Миллер
7
Из любопытства, какие данные были в файле теста?
Близнецы Домино
Обратите внимание, что разные типы данных приводят к разным сжатым размерам. Смотрите здесь для примеров.
Плони
4

Я сделал свой собственный тест для установочного образа Linux на 1.1GB vmdk:

rar    =260MB   comp= 85s   decomp= 5s
7z(p7z)=269MB   comp= 98s   decomp=15s
tar.xz =288MB   comp=400s   decomp=30s
tar.bz2=382MB   comp= 91s   decomp=70s
tar.gz =421MB   comp=181s   decomp= 5s

все уровни сжатия на макс., процессор Intel I7 3740QM, память 32 ГБ 1600, источник и место назначения на RAM-диске

Обычно я использую rar или 7z для архивирования обычных файлов, таких как документы.
и для архивирования системных файлов я использую .tar.gz или .tar.xz с помощью file-roller или tar с параметрами -z или -J вместе с --preserve для непосредственного сжатия с помощью tar и сохранения разрешений (также альтернативно .tar.7z или .tar.rar можно использовать)

Обновление: поскольку tar сохраняет только обычные разрешения, но не ACL, в любом случае также можно использовать обычные разрешения .7z плюс резервное копирование и восстановление, а также ACL вручную через getfacl и sefacl, что представляется наилучшим вариантом как для архивирования файлов, так и для резервного копирования системных файлов, поскольку он будет заполнен Сохранять разрешения и ACL, имеет контрольную сумму, проверку целостности и возможность шифрования, только недостатком является то, что p7zip не везде доступен

Sudoer
источник
Студент, какие были варианты рар? Почему бы не попробовать lrzip by kolivas , он должен хорошо работать для образов виртуальных дисков.
osgx
Я перехожу с RAR на Git и tarballs для моих текстовых файлов и btrfs для всего остального; моя причина использования RAR не в производительности, я использую ее из-за таких функций, как запись восстановления, отдельная 256-битная контрольная сумма на уровне файлов для каждого файла и ....
Sudoer
3

Я думаю, что эта статья дает очень интересные результаты.

http://pokecraft.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO

Наиболее эффективными форматами являются xz и lzma, оба с переданным параметром -e.

Самым быстрым алгоритмом на сегодняшний день являются lzop и lz4, которые могут выдавать уровень сжатия не очень далеко от gzip за 1,3 секунды, тогда как gzip занимал 8,1 секунды. Степень сжатия составляет 2,8 для lz4 и 3,7 для gzip.

Вот несколько результатов, которые я извлек из этой статьи:

  • Gzip: 8,1 с при 3,7

  • lz4: 1,3 с при 2,8

  • xz: 32,2 с при 5,43

  • xz-e: 6m40 @ 7.063

  • xz: 4m51s @ 7.063

Так что если вам действительно нужна скорость, lz4 великолепен и по-прежнему обеспечивает степень сжатия 2,8.

Если вам отчаянно нужно сэкономить байт, xz при максимальном уровне сжатия (9) лучше всего справляется с текстовыми файлами, такими как исходный код ядра. Тем не менее, это очень долго и занимает много памяти.

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

Johnride
источник