Цель эксперимента: выбрать наилучший алгоритм сжатия файлов на хостинге. Специфика заключается в том что в папках хранится определенная доля похожих (содержащих одинаковые фрагменты или полностью идентичных) файлов (многие сайты используют одни и те-же движки, библиотеки, наборы графических файлов и т.п.). Можно ли сэкономить место на дисках, выбрав алгоритм сжатия, учитывающий "повторы" одинаковых блоков в разных файлах?
Сеттинг: создана папка, содержащая 4 папки с разным содержимым:
- два графических файла в формате jpg и png (J и P)
- архив tar содержащий те же файлы
- архив tar содержащий те же файлы + текстовый файл
- файлы J и P в разных подпапках.
Процедура:
Сжимаем папку с помощью разных алгоритмов сжатия. Результаты приведены в таблице:
Алгоритм сжатия
Итоговый размер (КБ)
Разница (%)
без сжатия
1200
0
1.7z
276
-77
1.ar
884
-26
1.cbz
1100
-8
1.jar
1100
-8
1.rar
1100
-8
1.tar.7z
280
-77
1.tar.bz2
672
-44
1.tar.gz
1100
-8
1.tar.lz
280
-77
1.tar.xz
280
-77
1.tar.Z
1500
25
1.zip
1100
-8
Как видим - такие часто используемые алгоритмы как gz (tar.gz), rar, zip показывают низкую эффективность (8% сжатия). bz2 ведет себя чуть лучше (44%), однако лидерами являются xz,lz,7z (77% сжатия).
Испытания на наших серверах на протяжении последнего года показали, что переход с tar.gz на tar.xz дает 15-20% экономии места. Для точки восстановления в 15Гб это примерно +3Гб свободного места. Впрочем, есть и trade off - загрузка ЦП при архивации увеличивается (примерно на те-же 20%).