Как оптимально заархивировать файлы, чтобы распаковать их средствами ISPmanager? оптимально значит, что уже достаточно быстро, но еще приемлемо плотно

В определенных случаях файлы выгоднее заливать на веб-сервер в виде архива. Во-первых, если данные хорошо сжимаются, или же просто файлов очень много, это сократит время заливки. Во-вторых, в любом случае это обезопасит данные от случайного повреждения, так как при распаковке архива происходит проверка его целостности с помощью контрольной суммы (CRC). Однако, не вполне понятно, какой формат архива и тип сжатия выбирать? Мы провели небольшое экспериментальное исследование на эту тему.

На входе у нас были файлы базы данных MySQL: DATABASE.MYD (17.9 GB) и DATABASE.MYI (2.48 GB). MYD-файл содержит текстовые данные базы, которые сжимаются неплохо. В MYI-файле находится индекс, гораздо менее склонный к циклическим повторениям, а от того сжимающийся хуже. Как известно, 7-Zip это один из лучших архиваторов, и в режиме «Ультра» он сжал эти файлы следующим образом:

  • DATABASE.MYD_(7z-Ultra).7z = 1.84 ГБ. (10,29% оригинала)
  • DATABASE.MYI_(7z-Ultra).7z = 0.89 ГБ. (36,03%)

Однако, формат 7z по-умолчанию не поддерживается ни в CentOS, ни тем более в ISPmanager, поэтому информация приведена просто для справки. Нашей задачей было найти тот тип архива, который можно распаковать прямо из Менеджера Файлов, нажав кнопку "Извлечь":

Самый очевидный тип архива, который наверняка поддерживается почти всем вокруг, это классический ZIP. Он поддерживается и панелью ISPmanager, а чтобы создать такой архив под Windows мы будем использовать 7-zip (16.04, x64):

Как видите, 7-zip предлагает несколько вариантов компрессии: Deflate, Deflate64, BZip2, LZMA, PPMd. Сразу скажем, что алгоритмы LZMA и PPMd не поддерживаются в ISPmanager и при попытке их распаковать возникнет ошибка. Алгоритм Deflate дефолтный и самый старый, и мы даже не стали проверять, как он работает, зная, что относительно плохо. Deflate64 при «Нормальном» уровне сжатия показал следующий результат:

  • DATABASE.MYD_(Def64-Norm).zip = 3.16 ГБ. (17,67%)
  • DATABASE.MYI_(Def64-Norm).zip = 1.27 ГБ. (51,80%)

Мы попробовали использовать уровень сжатия «Максимальный» и «Ультра», но тут возникли проблемы. Несмотря на выбор 8 потоков, два наших 4 ядерных XEON'а загружались всего на 10-15%, а весь процесс сжатия, изначально оценивавшийся в 3 часа, через 6 часов оценивался уже в 12-13 часов. Что-то долговато!

Следующий алгоритм, BZip2 работает не в пример быстрее, и -- ура! -- поддерживается в ISPmanager по крайней мере 5-й версии. Алгоритм отлично распараллеливается и плотно грузит все 8 ядер системы, таким образом мы сфокусировались на нем и получили следующие результаты:

  • Уровень сжатия «Ультра», время сжатия 116 минут на оба файла:
    • DATABASE.MYD_(BZip2-Ultra).zip = 2.33 ГБ. (13,07651%)
    • DATABASE.MYI_(BZip2-Ultra).zip = 1.17 ГБ. (47,52%)
  • Уровень сжатия «Максимум», время сжатия 42 минуты на оба файла:
    • DATABASE.MYD_(BZip2-Max).zip = 2.33 ГБ. (13,07654%)
    • DATABASE.MYI_(BZip2-Max).zip = 1.27 ГБ. (51,51%) заметьте, результат похож на Deflate64, но скорость сжатия выше в 1.5-2 раза
  • Уровень сжатия «Нормальный», время сжатия 25 минут на оба файла :
    • DATABASE.MYD_(BZip2-Norm).zip = 2.33 ГБ. (13,07710%)
    • DATABASE.MYI_(BZip2-Norm).zip = 1.29 ГБ. (52,34%)
  • Уровень сжатия «Быстрый», время сжатия 13 минут на оба файла:
    • DATABASE.MYD_(BZip2-Fast).zip = 3.62 ГБ. (20,26%)
    • DATABASE.MYI_(BZip2-Fast).zip = 1.48 ГБ. (59,90%)

Легко можно сделать следующие выводы:

  • BZip2 -- оптимальный алгоритм компрессии для ZIP, совместимый с ISPmanager и CentOS. Он сжимает в целом лучше дефолтных Deflate и Deflate64, но, конечно, уступая 7z с его LZMA2. Алгоритм отлично поддерживает многопоточность, и, возможно, только за счет этого выигрывает по скорости у Deflate64.
  • Уровни сжатия «Максимум» и«Ультра» дают незначительный выигрыш в сжатии по сравнению с «Нормальным», не оправдываемый временными затратами. Особенно это проявляется при сжатии хорошо сжимаемых данных -- почти никакого толка в сильном сжатии нет.
  • А вот уровень «Быстрый», при экономии времени в 2 раза (которое составило всего 12 минут и уже не критично в данном случае), вдруг резко отстает от «Нормального» по сжатию, причем даже хорошо сжимаемого DATABASE.MYD.

Таким образом, алгоритм BZip2 с уровнем «Нормальный» -- оптимальное универсальное решение для поставленной задачи.

Комментарии (1)

Никола-ленивец (2020-06-05, 13:17)

Отличная статья! Вот натурально радует, когда люди проявляют инженерный подход к решению задач, в наше время это редкость!

Блог

Что с Мастерхостом? Когда заработает?!

Этот вопрос всё чаще задают в Интернете начиная примерно с 12:00 дня 2 марта. А всё потому, что он накрылся!

далее

Автоматизированная Система Управления Бэкапами

Автоматизированная Система Управления Бэкапами позволяет добиться полного контроля над резервными копиями сайтов внутри инфраструктуры веб-студии. Если вы поддерживаете десятки сайтов на разных хостингах, без подобной системы вы не можете быть на 100% уверены в том, что каждый из них был корректно зарезервирован прошлой ночью.

далее

WebSocket: интеграция с NetCat

Хотите добавить на сайт под управлением CMS NetCat поддержку технологии WebSocket? Обращайтесь к нам! Посетители сайта смогут получать мгновенные уведомления о событиях сайта без обращений к серверу и перезагрузок страниц. Превратите свой сайт в интерактивную площадку, работающую в реальном времени!

далее

NetCat: техническая поддержка и доработка сайтов

Мы работаем с CMS NetCat уже больше 10 лет. У нас большой опыт и ответственный подход к делу.

далее

Весь блог тут