Между xz, gzip и bzip2, какой алгоритм сжатия дает наименьший размер файла и самую высокую скорость при сжатии довольно больших тарболлов?
3 ответа
В моем стресс-тесте я сжал 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, вероятно, следует использовать вместо него.
Я сделал свой собственный тест для установочного образа 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 не везде доступен
Я думаю, что эта статья дает очень интересные результаты.
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. Это тот, который я бы использовал для ежедневного ручного резервного копирования производственной среды.