Назад | Перейти на главную страницу

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

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

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

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

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

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

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

Спасибо

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. См. Эту статью.

Рекомендуемая литература:

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

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

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

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

А по поводу алгоритмов:

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

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

Lzma кажется, очень хорошо работает как по степени сжатия, так и по скорости.

В следующих http://tukaani.org/lzma/benchmarks тестирует, что самый быстрый параметр lzma дает время сжатия значительно быстрее, чем самый быстрый вариант bzip2, но при этом дает сжатие лучше, чем самый медленный вариант bzip2:

    ratio   bzip2   lzmash
    fastest 35.8%   31.7%       
    slowest 34.0%   25.4%

    time    bzip2   lzmash  
    fastest 1m 26s  0m 58s  
    slowest 2m 37s  12m 20s

    *Compressing  full installation of OpenOffice.org 1.1.4 for Linux (203 MB) 

Он особенно хорошо работает с двоичными данными, но я думаю, что читал несколько тестов для простого текста, где 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, с добавленной возможностью разбивать архив на несколько частей и вычислять четность, чтобы в случае повреждения одной или нескольких частей ее можно было восстановить из файлов четности.