Какой формат архива / сжатия?
Zip, Rar, 7z, Gzip, BZip2, Tar и т. Д. Я слышал, что 7z - это вкус месяца, почему? Это лучше для всех ситуаций или есть лучший выбор для конкретных ситуаций.
Или, может быть, настоящий архиватор файлов, т.е. WinZip, WinRar, 7Zip и т. Д. (В отличие от формата), имеет больший эффект?
В своем ответе вы могли бы описать, какой компромисс между скоростью и сжатием использует ваш упомянутый формат.
Пожалуйста, предоставьте ссылки на любые эмпирические тесты, которые подтверждают ваш ответ.
Предыстория: мне нужно создать резервную копию пользовательского поискового индекса, который создает около 3000 относительно небольших файлов (менее 10 МБ), каждый из которых содержит много повторяющихся данных.
(Как обычно, в Википедии есть соответствующая статья, но раздел сравнения производительности является кратким.)
Спасибо
7 ответов
Compress, Gzip, Bzip, Bzip2 не предназначены для архивирования нескольких файлов. Они сжимают только один файл. Для архивирования они обычно используются с TAR. Проблема с TAR состоит в том, что у него нет индексной таблицы. Это хорошо, только если вы планируете восстановить все это. Если вы ожидаете, что вам когда-нибудь понадобится восстановить только ограниченное количество выбранных файлов, забудьте о TAR. Чтобы получить последний файл из tar.gz
или же tar.bz2
архив, вы должны распаковать и обработать все это. В случае zip, rar или 7-zip он перейдет в таблицу индексов, перейдет к соответствующей позиции архива и обработает только соответствующие файлы.
Хорошо, TAR отсутствует, так что у вас остаются ZIP, RAR и 7-ZIP. Из этих трех ZIP является наиболее распространенным, большинство поддерживает его, многие приложения имеют встроенную поддержку. И это быстро. С другой стороны, 7-ZIP также переносим, библиотека LGPL и имеет степень сжатия намного лучше, чем две другие, что приводит к увеличению нагрузки на процессор. RAR там действительно неудачник, ни отличное сжатие, ни действительно портативный, ни быстрый.
РЕДАКТИРОВАТЬ: кажется, что лучший вариант будет 7-ZIP, но с методом сжатия bzip2. Таким образом, у вас не будет недостатков в TAR, но вы все равно сможете воспользоваться многоядерной поддержкой bzip2. Смотрите эту статью.
Рекомендуемое чтение:
Сжатие файлов в многоядерную эпоху (Джефф Этвуд, также известный как CodingHorror, февраль 2009 г.)
Я снова немного поигрался со сжатием файлов, так как мы ежедневно создаем несколько очень больших файлов резервных копий в Stack Overflow.
Мы используем последнюю 64-битную версию 7zip (4.64) на нашем сервере баз данных. Я не большой поклонник более чем двухъядерного компьютера, но это не проблема для серверов. Чем больше ядер процессора, тем лучше! Этот сервер имеет два четырехъядерных процессора, всего 8 ядер, и я был немного обескуражен, обнаружив, что ни RAR, ни 7zip, похоже, не используют более двух.
Тем не менее, даже если он использует только 2 ядра для сжатия, алгоритм 7zip поразительно эффективен и развился за последние несколько лет и стал достаточно быстрым. Раньше я рекомендовал RAR вместо Zip, но учитывая возросшую эффективность 7zip и тот факт, что он бесплатный, а RAR нет, теперь это логичный выбор.
А что касается алгоритмов:
Почему bzip2 может работать намного быстрее, чем 7zip? [...] Bzip2 использует более 2 процессорных ядер для распараллеливания своей работы.
Это не все об эффективности и скорости. Конечно, они важны, и вы можете взглянуть на их тесты и мудро выбрать их из возможных вариантов (хотя я бы порекомендовал вам несколько простых сравнительных тестов с вашими собственными данными на вашем собственном сервере). Но в какой-то момент архивирование неизбежно приводит к повторному доступу к вашим данным (иначе почему бы просто не удалить их?). Или, может быть, спустя годы вы будете иметь доступ не к данным, а к кому-то третьему лицу. Выберите то, что будет рядом, когда вам понадобится доступ к данным, и то, что люди узнают. Я лично использую 7zip, но когда я архивирую файлы, которые могут понадобиться другим, я использую zip. Они знают это, многие инструменты могут справиться с этим. Это может быть не так быстро или совсем не так мало, но это помогает с человеческим фактором.
Кажется, что lzma очень хорошо работает как по степени сжатия, так и по скорости.
В следующих http://tukaani.org/lzma/benchmarks тестах самая быстрая настройка lzma давала времена сжатия значительно быстрее, чем самая быстрая опция bzip2, и в то же время давала сжатие лучше, чем самая медленная опция bzip2:
соотношение бзип2 лзмаш самый быстрый 35,8% 31,7% самый медленный 34,0% 25,4% время бзип2 лзмаш быстрый 1м 26с 0м 58с самый медленный 2м 37с 12м 20с * Сжатие полной установки OpenOffice.org 1.1.4 для Linux (203 МБ)
Он особенно хорошо работает с двоичными данными, но я думаю, что я прочитал некоторые тесты простого текста, где bzip2 превзошел его.
Справочная страница lzma стоит прочитать:
lzma provides notably better compression ratio than bzip2 especially with files having other than plain text content. The other advantage of lzma is fast decompression which is many times quicker than bzip2. The major disadvantage is that achieving the highest compression ratios requires extensive amount of system resources, both CPU time and RAM. Also software to handle LZMA compressed files is not installed by default on most distributions.
Взгляните на эту запись в Википедии. Внизу "Сравнение эффективности". Это даст вам процент сжатия и время, потраченное примерно. Все эти цифры будут варьироваться (в зависимости от скорости) в зависимости от скорости используемой машины, объема памяти и т. Д.
Больше тестов сжатия:
Сравнивая zip, 7z, rar с двумя чехлами
Это зависит от того, что именно вы сжимаете, но в целом 7z лучше использует несколько процессоров, а сам формат сжатия 7z обеспечивает более высокое сжатие, чем zip, а иногда и больше, чем rar (хотя rar и 7z почти эквивалентны, но rar isn не свободен...)
Мои тесты несколько месяцев назад дали следующие результаты:
Сжатие одного файла базы данных с доступом 10 МБ:
Database.mdb 17,240,064 (original)
Database.zip 1,634,794 (Regular zip, 11:1)
Database.rar 262,212 (RAR compression, 66:1)
Database.7z 195,678 (7-zip compression, 88:1)
Сжатие папки, содержащей более девяти тысяч файлов различных типов (903 488 КБ), и получение следующего (это комбинация исходного кода и всех инструментов, окружающих его для разрабатываемого программного обеспечения):
Type Time Size (KB) Compression
ZIP 7:28 247,529 3.7:1
RAR 8:15 222,232 4.1:1
7z 10:49 181,633 5.0:1
На время это было на Core2 Duo, 2 ГГц, 1 ГБ оперативной памяти и дешевом жестком диске.
Таким образом, 7z дал существенное улучшение в степени сжатия в двух случаях, которые я тестировал выше и выше zip, и даже улучшил rar, но 7z был, конечно, медленнее. Не так значительно, но достаточно, чтобы отметить.
-Адам
Я только что установил Дар (но еще не имел возможности поиграть с ним). Это похоже на tar со сжатием gzip или bzip2, с добавленной возможностью разбивать архив на несколько частей и вычислять четность так, чтобы, если одна или несколько частей были повреждены, ее можно было восстановить из файлов четности.