Есть ли метод сжатия, который поддерживает твердое сжатие, а также добавляет данные в сжатый файл?

У меня есть большой сжатый файл .tar.xz , содержащий файлы журнала. Степень сжатия очень хорошая, но сжатие занимает много времени, и если я хочу добавить к нему дополнительные файлы журнала, мне нужно извлечь его, добавить новый файл и повторно сжать его — что занимает еще больше времени и использует много места на диске.

Существует ли метод архивирования/сжатия, который позволяет мне эффективно добавлять новый файл в существующий архив, сохраняя при этом преимущества твердого сжатия? (т.е. не сжимать файлы на индивидуальной основе, что и делает .zip ).


5

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

Также важно понимать, что твердое сжатие обычно используется там, где вы хотите сэкономить диск/полосу пропускания, но не обращайте внимания на дополнительное время, необходимое для сжатия или распаковки, и теряет гибкость обновления или редактирование. существуют и другие инструменты, которые обеспечивают возможность быстрого сжатия/распаковки, включая обновление существующего архива, но тогда степень сжатия не такая же, как у твердого сжатия.

Твердое сжатие, о котором вы говорите » tar.xz «представляет собой» эмулированное «твердое сжатие»

В вычислениях твердое сжатие относится к методу сжатия данных нескольких файлов, при котором все несжатые файлы объединяются и рассматривается как единый блок данных.Такой архив называется сплошным архивом.Он изначально используется в форматах 7z [1] и RAR [2], а также косвенно в форматах на основе tar, таких как .tar.gz и. tar.bz2. Напротив, формат ZIP не является надежным, поскольку он хранит отдельные сжатые файлы (хотя твердое сжатие можно эмулировать для небольших архивов, объединяя файлы в несжатый zip-архив, а затем сжимая zip-архив во втором сжатом zip-файле. ).

Позвольте мне начать с объяснения того, как вы r, используемый в настоящее время метод tar.xz работает.

  tar  

В вычислениях tar — это компьютер программная утилита для сбора множества файлов в один архивный файл, часто называемый tarball

Следовательно, Tar в основном представляет собой архив.

  xz  

xz — это программа сжатия данных без потерь и формат файла, который включает алгоритмы сжатия LZMA/LZMA2. он имеет высокую степень сжатия, однако медленное время сжатия и декомпрессии.

Следовательно, когда вы объединяете два, вы сначала архивируете (tar) несколько файлов, а затем сжимаете (xz) этот единственный файл.

Теперь по вопросу о том, как добавить новый контент/обновить существующий сжатый файл.

Если вы используете tar.xz, вам придется распаковать tar.xz, в результате вы получите файл tar и то вы можете использовать следующее, чтобы добавить архив.

  tar --append --file = archive.tar file_or_dir_to_add  

а затем снова сжать его.

  xz archive.tar  

Или, как вариант, вы можете использовать ZIP.

  zip -g archive.zip папка/файл  

ZIP — это формат файла архива, который поддерживает сжатие данных без потерь. Файл .ZIP может содержать один или несколько файлов или каталогов, которые могли быть сжаты. Формат файла .ZIP допускает ряд алгоритмов сжатия, хотя DEFLATE является наиболее распространенным.

Улучшите этот ответ
отредактировано 14 апреля ’17 в 13:16
20 января ’16 в 17:28
  • 1
    Очень хорошее объяснение — спасибо — Thorsten Niehues 15 сен 2016, в 12: 07
добавить комментарий |

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

Также важно понимать, что твердое сжатие обычно используется там, где вы хотите сэкономить диск/полосу пропускания, но не обращайте внимания на дополнительное время, необходимое для сжатия или распаковки, и теряет гибкость обновления или редактирование. существуют и другие инструменты, которые обеспечивают возможность быстрого сжатия/распаковки, включая обновление существующего архива, но тогда степень сжатия не такая же, как у твердого сжатия.

Твердое сжатие, о котором вы говорите » tar.xz «представляет собой» эмулированное «твердое сжатие»

В вычислениях твердое сжатие относится к методу сжатия данных нескольких файлов, в котором все несжатые файлы объединяются и рассматривается как единый блок данных.Такой архив называется сплошным архивом.Он изначально используется в форматах 7z [1] и RAR [2], а также косвенно в форматах на основе tar, таких как .tar.gz и. tar.bz2. Напротив, формат ZIP не является надежным, поскольку в нем хранятся отдельные сжатые файлы (хотя твердое сжатие можно эмулировать для небольших архивов, объединяя файлы в несжатый zip-архив, а затем сжимая zip-архив во втором сжатом zip-файле).

Позвольте мне начать с объяснения того, как работает ваш текущий метод tar.xz.

  tar  

В вычислениях tar — это компьютерная программная утилита для сбора множества файлов в один архивный файл, часто называемый tarball

Следовательно, Tar является в основном архив.

  xz  

xz — это программа сжатия данных без потерь и формат файла, который включает Алгоритмы сжатия LZMA/LZMA2. у него высокая степень сжатия, однако время сжатия и распаковки низкое.

Следовательно, когда вы объединяете их, вы сначала архивируете (tar) несколько файлов, а затем сжимаете (xz) этот единственный файл.

Теперь о том, как можно добавить новый контент/обновить существующий сжатый файл.

Если вы используете tar.xz, вам придется распаковать tar.xz, который оставит вас с файлом tar, а затем вы можете использовать следующее для добавления архива.

  tar --append --file = archive.tar  file_or_dir_to_add  

, а затем снова сжать его.

  xz archive.tar  

Или, как вариант, вы можете использовать ZIP.

  zip -g archive.zip папка/файл  

ZIP — это формат файла архива, который поддерживает сжатие данных без потерь. Файл .ZIP может содержать один или несколько файлов или каталогов, которые могли быть сжаты. Формат файла .ZIP позволяет использовать несколько алгоритмов сжатия, хотя DEFLATE является наиболее распространенным.



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

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

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

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

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

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

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

Спасибо


Сжатие, Gzip, Bzip, Bzip2 не предназначены для архивирования нескольких файлов. Они сжимают только один файл. Для архивирования они обычно используются с TAR. Проблема с TAR заключается в том, что у него нет индексной таблицы . Это хорошо, только если вы планируете восстановить целиком . Если вы ожидаете, что вам когда-нибудь понадобится восстановить только ограниченное количество выбранных файлов, забудьте о TAR. Чтобы получить последний файл из архива tar.gz или tar.bz2 , вы должны распаковать и обработать все Это. В случае zip, rar или 7-zip он перейдет в индексную таблицу, перейдет к соответствующей позиции архива и обработает только соответствующие файлы.

Хорошо, TAR отсутствует, так что оставляет вам ZIP, RAR и 7-ZIP. Из этих трех ZIP является наиболее распространенным, почти все его поддерживает, многие приложения имеют встроенную поддержку. И это быстро. С другой стороны, 7-ZIP также портативен, это библиотека LGPL, и ее степень сжатия намного лучше, чем у двух других, что связано с большим потреблением ресурсов процессора. RAR здесь настоящий неудачник, ни отличное сжатие, ни действительно переносимый, ни быстрый.

EDIT: кажется, что лучшим вариантом будет 7-ZIP, но с методом сжатия bzip2. Таким образом, у вас не будет недостатков TAR, но вы все равно сможете воспользоваться преимуществами многоядерной поддержки bzip2. См. Эту статью.


10
голосов

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

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

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

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

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

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

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

отредактировано 6 мая 2009 г. в 11:17
ответил 6 мая ’09 в 11:09
  • Спасибо за ссылку. Мы определенно знаем, что мнение Джеффа основано на реальном жизненном опыте! — Эш 6 мая ’09 в 11:25
добавить комментарий |

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

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

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

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

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

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

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


4
голосов

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

ответил май 06 ’09, 13:23
  • Хорошее замечание. Этот поисковый индекс будет извлекать данные непосредственно из определенных сжатых файлов. Вот почему мне интересно, есть ли какие-либо форматы, предлагающие настраиваемую производительность сжатия/распаковки. Поэтому я больше смотрю на аспект сжатия, чем на архивирование для будущего аспекта.. — Эш 7 мая ’09 в 0:59
добавить комментарий |

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


3
голосов

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

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

 ratio bzip2 lzmash самый быстрый 35,8% 31,7% самый медленный 34,0% 25,4% time bzip2 lzmash самый быстрый 1 м 26 с 0 м 58 с самый медленный 2 м 37 с 12 м 20 с * Сжатие полной установки OpenOffice.org 1.1.  4 для Linux (203 МБ) 

Он особенно хорошо работает с двоичными данными, но я думаю, что читал некоторые тесты для простого текста, где bzip2 превзошел его.

lzma страницу руководства стоит прочитать:

lzma обеспечивает заметно лучшую степень сжатия, чем bzip2, особенно с файлами, имеющими не только текстовое содержимое. Другое преимущество lzma - быстрая распаковка, которая во много раз быстрее, чем bzip2. Основным недостатком является то, что для достижения максимальной степени сжатия требуется большое количество системных ресурсов, как процессорного времени, так и оперативной памяти. Также программное обеспечение для обработки сжатых файлов LZMA не установлено по умолчанию в большинстве дистрибутивов.

отредактировано 26 мая ’11 в 15:07
ответил 6 мая ’09 в 11:31
  • Я тоже до прошлой недели, когда кто-то порекомендовал его в одном из моих вопросов о сбое сервера. Выглядит впечатляюще, просто стоит изучить производительность с обычным текстом, если вы будете использовать его для этого. — Guy C 6 мая 2009 г., 11:41
  • LZMA — это название алгоритма, используемого в 7-zip. — vartec 19 янв. ’11 в 15:47
добавить комментарий |

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

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

 ratio bzip2 lzmash самый быстрый 35,8% 31,7% самый медленный 34,0% 25,4% time bzip2 lzmash самый быстрый 1 м 26 с 0 м 58 с самый медленный 2 м 37 с 12 м 20 с * Сжатие полной установки OpenOffice.org 1.1.4 для Linux (203 МБ) 

Он особенно хорошо работает с двоичными данными, но я думаю, что читал некоторые тесты для простого текста, где bzip2 превзошел его.

Справочную страницу lzma стоит прочитать:

  lzma обеспечивает заметно лучшую степень сжатия, чем bzip2, особенно с файлами, имеющими не только текстовое содержимое.  Другое преимущество lzma - быстрая распаковка, которая во много раз быстрее, чем bzip2.  Основным недостатком является то, что для достижения максимальной степени сжатия требуется большое количество системных ресурсов, как процессорного времени, так и оперативной памяти.  Также программное обеспечение для обработки сжатых файлов LZMA не установлено по умолчанию в большинстве дистрибутивов.  

2
голосов

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

Дополнительные тесты сжатия:

  • Максимальное сжатие.
  • Тесты сжатия данных без потерь.
отредактировано 6 мая 2009 г. в 11:29
ответил 6 мая 2009 г. в 11:17
  • Спасибо, но я прочитал это и подумал, что это немного кратко (см. мою точку в вопросе). Знаете ли вы какие-либо более подробные тесты в более различных сценариях? — Эш 6 мая 2009 г., 11:27
  • Добавлена ​​пара ссылок, которые, надеюсь, предоставят дополнительную информацию. — user1797 6 мая 2009 г., 11:30
добавить комментарий |

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

Дополнительные тесты сжатия:

  • Максимальное сжатие.
  • Тесты сжатия данных без потерь.

2
голосов

Сравнение zip, 7z, rar с двумя регистрами

Это зависит от того, что именно вы сжимаете, но в целом 7z лучше использует несколько процессоров, а сам формат сжатия 7z дает более высокое сжатие, чем zip, а иногда и более высокое, чем rar (хотя rar и 7z почти эквивалентны , но rar не бесплатен …)

Мои тесты несколько месяцев назад дали следующие результаты:

Сжатие одного файла базы данных размером 10 МБ:

  Database.mdb 17,240,064 (оригинал) Database.zip 1,634,794 (обычный zip, 11: 1) Database.rar 262,212 (сжатие RAR, 66: 1) Базы данных  e.7z 195 678 (сжатие 7-zip, 88: 1)  

При сжатии папки, содержащей более девяти тысяч файлов разных типов (903 488 КБ), получено следующее (это комбинация исходного кода и всех окружающих его инструментов для разрабатываемого программного обеспечения):

  Тип Время Размер (КБ) СжатиеZIP 7:28 247,529 3,7: 1RAR 8:15 222,232 4.1:  17z 10:49 181,633 5,0: 1  

Для целей расчета времени это было на Core2 Duo, 2 ГГц, 1 ГБ ОЗУ и дешевом жестком диске.

Итак, 7z дал существенное улучшение степени сжатия в двух случаях, которые я тестировал помимо zip, и даже улучшился на rar, но 7z определенно был медленнее. Несущественно, но этого достаточно, чтобы отметить.

-Adam

отредактировано 6 мая ’09, 13:09
ответил 6 мая 2009 г., 13:02
  • Хорошие тесты. Это сжатие MDB огромно. Я получаю только 4 к 1 в файлах бинарных индексных слов размером 100 тыс., Которые я тестировал. Я думаю, это показывает, насколько важно тестировать файлы/данные, аналогичные тем, которые вы будете использовать в вашей системе. — Эш, 7 мая 2009 г., 0:52
  • Да, файлы MDB — пустяки и не содержат содержания. Двоичный файл получит меньше (потому что он использует все 8 бит, в то время как текстовые файлы используют немногим более 6 бит), и есть хорошие шансы, что в нем не происходит большого дублирования. Хотя всегда важно проверить. Возможно, вам повезет больше, если вы поиграете с настройками сжатия — иногда вы можете оптимизировать его для использования и получить лучше, чем предоставляют стандартные настройки. — Адам Дэвис, 7 мая 2009, 16:47
добавить комментарий |

Сравнение zip, 7z, rar с двумя случаями

Это зависит от того, что именно вы сжимаете, но в целом 7z лучше использует несколько процессоров, а сам формат сжатия 7z дает более высокое сжатие, чем zip, а иногда и выше, чем rar (хотя rar и 7z почти эквивалентны, но rar не бесплатен …)

Мои тесты несколько месяцев назад дали следующие результаты:

Сжатие одного файла базы данных размером 10 МБ:

  База данных.  mdb 17 240 064 (исходный) Database.zip 1 634 794 (обычный zip, 11: 1) Database.rar 262 212 (сжатие RAR, 66: 1) Database.7z 195 678 (сжатие 7 zip, 88: 1)  

Сжатие папки, содержащей более девяти тысяч файлов разных типов (903 488 КБ), и получено следующее (это комбинация исходного кода и всех окружающих его инструментов для разрабатываемого программного обеспечения):

  Тип Время Размер (КБ) СжатиеZIP 7:28 247 529 3,7: 1RAR 8:15 222 232 4,1: 17z 10:49 181 633 5,0: 1  

Для экономии времени это было на Core2 Duo, 2 ГГц, 1 ГБ ОЗУ и дешевом жестком диске.

Таким образом, 7z дал существенное улучшение степени сжатия в два случая, которые я тестировал помимо zip, и даже улучшил на rar, но 7z определенно был медленнее. Несущественно, но этого достаточно, чтобы отметить.

-Adam


0
голосов

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

ответил 7 июня ’09 в 16:19
добавить комментарий |

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

Оцените статью
logicle.ru
Добавить комментарий