Решил сравнить разные утилиты для сжатия данных.
У меня есть задача: делать 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