У меня есть несколько папок размером около 8 ГБ или около того. Вместе эти папки составляют около 60 ГБ данных. Я могу сжать эти папки двумя способами: либо по отдельности, создав один сжатый архив для каждой из них, либо все вместе в один большой сжатый архив.
Вообще говоря,Если предположить, что все сжимаемые данные имеют один и тот же тип и используется один и тот же алгоритм сжатия (и что меня не волнует время, которое потребуется для распаковки большего файла), то какой из методов обеспечит лучшее сжатие, чем другой, или общие размеры сжатых файлов в двух сценариях будут примерно одинаковыми?
решение1
Обеспечивает ли сжатие в один большой архив лучшее сжатие, чем сжатие отдельных папок?Не обязательно.
Только если архив используетсплошное сжатие. Несплошной архив (например, архив Zip) сжимает файлы по отдельности. Это позволяет вам легко распаковывать отдельные файлы из архива. Это также позволяет вам добавлять файлы в архив без необходимости перепаковывать все.
С сплошными архивами все это гораздо сложнее: Чтобы распаковать файл в самом конце потока, нужно все распаковать (хотя и не обязательно записать на диск). При добавлении файла алгоритму тоже нужно все перебрать.
Однако есть и золотая середина: использование «сплошных блоков». Теперь архиватору не нужно обрабатывать весь файл все время, а только его часть.
В графическом интерфейсе 7-Zip это такая опция:
Если не принимать во внимание сжатие данных, то все очень просто:
- Несплошной: быстрый интерактивный доступ, худшее сжатие
- Сплошные блоки: довольно эффективный интерактивный доступ, лучшее сжатие
- Твердый: интерактивный доступ отсутствует, наилучшее сжатие
В зависимости от прогнозируемой схемы доступа следует выбрать подходящий вариант.
решение2
Хотя невозможно сказать с абсолютной уверенностью, один архив большего размера теоретически должен привести к меньшему размеру архива, поскольку больше блоков данных могут быть найдены как повторяющиеся. Это предполагает, что данные настолько гомогенизированы, как вы говорите.
Однако вполне возможно, что некоторые папки содержат файлы, которые имеют больше похожих блоков данных и, следовательно, могут лучше сжиматься как отдельный архив.
Единственный верный способ узнать, какой метод лучше, — это протестировать оба способа.
решение3
Единый архив почти всегда будет меньше, хотя и не по той причине, о которой вы думаете.
Проще говоря, имея только один архив, вы не тратите место на несколько заголовков архивных файлов. Существует некое минимальное количество места, которое занимает архивный файл, чтобы быть допустимым архивом, и вы в конечном итоге занимаете столько места с каждым создаваемым архивом. Единственное широко используемое исключение из этого — формат cpio
, который не имеет заголовка для самого архива, а вместо этого имеет только заголовки для каждого файла.
Более реалистично, вы будетеобычнополучить по крайней мере такую же степень сжатия, используя только один архив вместо нескольких, а с некоторыми архиваторами она может быть значительно лучше (например, zpaq
выполняет ли дедупликацияв пределахархив, поэтому он может сэкономить много места, если имеется много дублирующихся данных).
Однако есть еще один вопрос, который вам нужно задать, прежде чем вы решитесь на это: стоят ли накладные расходы на обработку одного большого архива вместо нескольких меньших экономии места? В зависимости от того, где вы храните данные, может быть более экономичным просто использовать меньшие архивы, особенно если вам, скорее всего, понадобится только одна из папок за раз.
В целом Келтари прав, единственный способ узнать наверняка — это проверить.