Краткое сравнение xz и традиционных утилит сжатия

в 9:02, , рубрики: bzip2, gzip, linux, lzma, метки: , ,

Решил сравнить разные утилиты для сжатия данных.

У меня есть задача: делать mysqldump большой базы с однотипными данными (статистика посещения).
Отрезал гигабайт от дампа, пожал xz с разными уровнями сжатия, а также gzip и bzip2.
xz у меня коробочный из CentOS x86_64 (4.999.9beta)


ratio = raw_size/compressed_size, больше — лучше
dump hrs = оценка времени сжатия полного дампа (~300 Gb)
dump GBs = оценка размера сжатого дампа

level time ratio dump hrs dump GBs
gzip 27.5 10.64 2.29 28.19
xz -0 42.6 9.88 3.55 30.37
xz -1 46.5 10.62 3.88 28.26
xz -2 41.2 15.23 3.43 19.69
xz -3 292.8 19.21 24.40 15.61
bzip2 297.3 17.89 24.77 16.77
xz -4 302.6 19.06 25.21 15.74
xz -5 314.7 18.95 26.22 15.83
xz -6 463.2 19.02 38.60 15.77
xz -7 471.8 18.95 39.31 15.83
xz -8 486.9 18.89 40.58 15.88
xz -9 509.0 18.82 42.42 15.94

Наиболее предпочтительным в моем случае выглядит xz -2.

Какие еще можно сделать выводы:

  • xz -3 сжимает немного лучше (на 7.2%), чем bzip2 при таком же времени работы.
  • gzip быстрее их всех и лучше, чем -0 и -1 (-0 обещают заменить на «какой-нибудь другой быстрый алгоритм» в будущих версиях)
  • xz -3 имеет смысл использовать вместо bzip2
  • xz -2 можно использовать вместо gzip, он в полтора раза медленнее, но во столько же эффективнее
  • xz -3 или xz по-дефолту (-6) имеет смысл использовать, если размер важнее времени. При этом нужно иметь ввиду, что сжатие может быть в 10-20 медленнее, чем при использовании gzip.
  • Базу можно бэкапить и другими способами
  • Для других данных результаты могут значительно отличаться.

В будущих версиях обещают сделать многопоточность, тогда на Quad-core с HT xz -3 приблизится к gzip, а на двухпроцессорной машине будет лучшим выбором. (при условии свободных процессорных ресурсов и оптимальной организации многопоточности).
Вопрос использования памяти и скорости разархивации я не рассматривал.

Автор: catharsis

Источник

Поделиться

* - обязательные к заполнению поля