Какой формат архива / сжатия?

8

Zip, Rar, 7z, Gzip, BZip2, Tar и т. Д. Я слышал, что 7z - аромат месяца, почему? Это лучше для всех ситуаций или есть лучший выбор для конкретных ситуаций.

Или, может быть, настоящий архиватор файлов, т.е. WinZip, WinRar, 7Zip и т. Д. (В отличие от формата), имеет больший эффект?

В своем ответе вы могли бы описать, какой компромисс между скоростью и сжатием использует ваш упомянутый формат.

Пожалуйста, предоставьте ссылки на любые эмпирические тесты, которые подтверждают ваш ответ.

Предыстория: мне нужно создать резервную копию пользовательского поискового индекса, который создает около 3000 относительно небольших файлов (менее 10 МБ), каждый из которых содержит много повторяющихся данных.

(Как обычно, в Википедии есть соответствующая статья, но раздел сравнения производительности является кратким.)

Спасибо

ясень
источник

Ответы:

14

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. Смотрите эту статью.

Vartec
источник
Отличная информация, спасибо. Я видел TAR во время игры с Linux, но никогда не смотрел на него внимательно.
Эш
Я бы не согласился с RAR. Сжатие хорошее (по сравнению с gzip, по крайней мере), и скорость кажется хорошей в моих случаях использования. Что мне нравится в rar, так это то, что он может обрабатывать потоковое содержимое или отдельные файлы и позволяет автоматически включать
отметку
10

Рекомендуемое чтение:

Сжатие файлов в многоядерную эпоху (Джефф Этвуд, также известный как CodingHorror, февраль 2009 г.)

Я снова немного поигрался со сжатием файлов, так как мы ежедневно создаем несколько очень больших файлов резервных копий в Stack Overflow.

Мы используем последнюю 64-битную версию 7zip (4.64) на нашем сервере баз данных. Я не большой поклонник более чем двухъядерного компьютера, но это не проблема для серверов. Чем больше ядер процессора, тем лучше! Этот сервер имеет два четырехъядерных процессора, всего 8 ядер, и я был немного обескуражен, обнаружив, что ни RAR, ни 7zip, похоже, не используют более двух.

Тем не менее, даже если он использует только 2 ядра для сжатия, алгоритм 7zip поразительно эффективен и развился за последние несколько лет и стал достаточно быстрым. Раньше я рекомендовал RAR вместо Zip, но учитывая возросшую эффективность 7zip и тот факт, что он бесплатный, а RAR нет, теперь это логичный выбор.

А что касается алгоритмов:

Почему bzip2 может работать намного быстрее, чем 7zip? [...] Bzip2 использует более 2 процессорных ядер для распараллеливания своей работы.

splattne
источник
Спасибо за ссылку. Мы, конечно, знаем, что взгляд Джеффа основан на реальном жизненном опыте!
Эш
4

Это не все об эффективности и скорости. Конечно, они важны, и вы можете взглянуть на их тесты и мудро выбрать их из возможных вариантов (хотя я бы порекомендовал провести собственный сравнительный анализ с вашими данными на вашем собственном сервере). Но в какой-то момент архивирование неизбежно приводит к повторному доступу к вашим данным (иначе почему бы просто не удалить их?). Или, может быть, спустя годы вы будете иметь доступ не к данным, а к кому-то третьему лицу. Выберите то, что будет рядом, когда вам понадобится доступ к данным, и то, что люди узнают. Я лично использую 7zip, но когда я архивирую файлы, которые могут понадобиться другим, я использую zip. Они знают это, многие инструменты могут справиться с этим. Это может быть не так быстро или совсем не так мало, но это помогает с человеческим фактором.

Джошуа Хантер
источник
Хорошая точка зрения. Этот поисковый индекс будет извлекать данные непосредственно из определенных сжатых файлов. Вот почему мне интересно, есть ли какие-либо форматы, которые могут настраивать производительность сжатия / распаковки. Поэтому я больше смотрю на аспект сжатия, чем на архивирование будущего.
Эш
3

Кажется, что 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.
Парень с
источник
Я тоже до прошлой недели, когда кто-то рекомендовал это на одном из моих вопросов о сбое сервера. Это выглядит впечатляюще, просто стоит изучить производительность с помощью простого текста, если вы будете использовать его для этого.
Парень C
LZMA - это название алгоритма, используемого в 7-zip.
vartec
2

Взгляните на эту запись в Википедии . Внизу «Сравнение эффективности». Это даст вам процент сжатия и время, потраченное примерно. Все эти цифры будут варьироваться (в зависимости от скорости) в зависимости от скорости используемой машины, объема памяти и т. Д.

Больше тестов сжатия:


источник
Спасибо, но я прочитал это и подумал, что это было немного кратко (см. Мою точку зрения в вопросе). Знаете ли вы какие-либо более подробные тесты в более разных сценариях?
Эш
Добавил пару ссылок, которые, я надеюсь, предоставят больше информации.
2

Сравнивая 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 был, конечно, медленнее. Не так значительно, но достаточно, чтобы отметить.

-Адам

Адам Дэвис
источник
Хорошие тесты. Это сжатие MDB огромно. Я получаю только 4 к 1 в файлах слов с двоичным индексом 100k, на которых я тестировал. Я предполагаю, что это показывает, насколько важно тестировать файлы / данные, аналогичные тем, которые вы используете в своей системе.
Эш
Да, файлы MDB - все пух и не имеют значения. Двоичный файл получит меньше (потому что он использует все 8 бит, в то время как текстовые файлы используют чуть больше 6 бит), и есть вероятность, что в нем не так много дублирования. Всегда важно проверять, хотя. Возможно, вам больше повезет, играя с настройками сжатия - иногда вы можете оптимизировать его для использования и получить лучше, чем стандартные настройки.
Адам Дэвис
0

Я только что установил Дар (но еще не имел возможности поиграть с ним). Это похоже на tar со сжатием gzip или bzip2, с дополнительной возможностью разбивать архив на несколько частей и вычислять четность так, чтобы, если одна или несколько частей были повреждены, ее можно было восстановить из файлов четности.

PGS
источник