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.
Взгляните на это Запись в Википедии. Внизу: «Сравнение эффективности». Это даст вам приблизительный процент сжатия и затраченное время. Все эти числа будут варьироваться (по скорости) в зависимости от скорости используемой машины, объема памяти и т. Д.
Дополнительные тесты сжатия:
Это зависит от того, что именно вы сжимаете, но в целом 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, с добавленной возможностью разбивать архив на несколько частей и вычислять четность, чтобы в случае повреждения одной или нескольких частей ее можно было восстановить из файлов четности.