У меня есть веб-сервер с множеством сжатых архивных файлов (zip-файлов), доступных для скачивания. Я хотел бы значительно сократить объем дискового пространства, которое эти архивы занимают на сервере.
Ключевой вывод заключается в том, что эти архивы на самом деле являются немного разными версиями одного и того же несжатого контента. Если вы распакуете любые два из этих многочисленных архивов и сравните результаты, я полагаю, вы обнаружите, что разница составляет около 1% от общего размера архива.
Эти архивы на самом деле являются файлами JAR, но детали сжатия, как я полагаю, не имеют значения. Но это объясняет, что обслуживание этих архивов в определенном сжатом формате не подлежит обсуждению: это основная цель сервера.
Само по себе для меня не проблема установить дифференциальное хранилище для содержимого этих архивов, что значительно сократит объем диска, занимаемый набором архивов. Существует множество способов сделать это, используя дельта-кодирование или сжатую файловую систему, которая понимает совместное использование (например, I думаю, что btrfs понимает совместное использование блоков, или я мог бы использовать моментальные снимки, чтобы обеспечить его соблюдение).
Вопрос в том, как создать сжатые ZIP-файлы из этих файлов? Мой сервер имеет очень небольшую вычислительную мощность, определенно недостаточную для воссоздания JAR-файлов на лету из контента для совместного использования блоков.
Есть ли программный способ выставить общий контент на несжатом уровне на сжатый уровень? Легко переводимый в zip инкрементный сжатый формат?
Должен ли я искать решение для кэширования в сочетании с созданием JAR-файлов на лету? Это, по крайней мере, облегчило бы вычислительную боль при создании наиболее востребованных JAR-файлов.
Существует специализированное оборудование это может очень быстро создавать почтовые индексы, но я бы предпочел избежать расходов. Это также не очень масштабируемое решение, так как количество запросов к серверу растет.