31 июл. 2016 г.

Почему средствами Windows файл сжимается хуже, чем программой WinZip?

Автор: Рэймонд Чен.
Оригинал статьи: When I tell Windows to compress a file, the compression is far worse than I get if I ask WinZip to compress the file; why is that?

Пользователь заметил, что при установке флажка "Сжимать содержимое для экономии места на диске" для очень большого (множество гигабайт) файла сжатие составило 25%. Затем ему понадобилось скопировать файл на USB-накопитель, и он использовал старую копию WinZip для сжатия файла, в результате объём архива составил половину размера исходного файла.

Почему программа 10-летней давности может сжать файлы лучше, чем встроенное сжатие диска Windows 2012? Неужели в команде сжатия NTFS одни ленивые бездельники?

К прозрачному сжатия файлов NTFS предъявляются совсем другие требования, чем к программе-архиватору WinZip.

У программ наподобие WinZip нет ограничений по времени: они могут довольно долго анализировать данные, чтобы обеспечить высокую степень сжатия. Кроме того, такие программы выполняют лишь операции вида "Сжать файл полностью" и "Распаковать файл полностью". Если вы хотите прочитать последний байт файла, вам придётся распаковать и выкинуть всё, кроме последнего байта. Если вы хотите перезаписать байт в середине файла, вам надо распаковать его, перезаписать байт, затем сжать всё снова.

С другой стороны, прозрачное сжатие файлов должно работать в реальном времени. Программы ожидают, что можно считать байт в произвольной позиции файла; они также предполагают, что можно записать байт в произвольной позиции, оставив другие байты неизменёнными. Эти действия должны выполняться за время, близкое к O(1).

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

Всё это означает, что прозрачное сжатие файлов должно пожертвовать степенью сжатия ради скорости. Именно поэтому такое сжатие выглядит неважно в сравнении с программой-архиватором, для которой не предъявляются требования к скорости.

Комментариев нет:

Отправить комментарий