Рассмотрим гипотетический формат архива, который делает следующее под обложками, учитывая список файлов для упаковки:

  1. gzip каждый файл в отдельности
  2. Тар gzips вместе

Сравните это с традиционной смолой, за которой следует gzip.

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

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

1 ответ1

0
  1. Каждый отдельный сжатый файл имеет свой собственный заголовок и, следовательно, уменьшает сжатие, увеличивая количество заголовков. Каждый заголовок небольшой, может быть, несколько сотен байтов, но они складываются.

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

  3. Данные, которые либо не могут быть сжаты, либо имеют очень маленькое соотношение, будут иметь незначительный эффект, если они будут сжаты по отдельности.

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

  5. Большое количество похожих файлов, таких как недели сжатых файлов журналов, будет совместно использовать словари и экономить место.

  6. Каждая файловая система использует блоки хранения четного размера, во многих случаях 4 КБ, и некоторая часть этих 4 КБ тратится на каждый файл.

До тех пор, пока вы не разберетесь с тысячами или десятками тысяч файлов, суммы, сохраненные или утерянные, будут невелики ни для одной из техник.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .