Москва: проверенные б/у ноутбуки с гарантией и проверкой перед оплатой
+7 906 722-94-45

Главная → Статьи → Оценка коэффициента сжатия данных

Оценка коэффициента сжатия: как измерить на своих данных

Измерение коэффициента сжатия: расчёт, сравнение алгоритмов и уровней, время сжатия и распаковки, репрезентативность выборки.

Прямой ответ

Коэффициент сжатия — отношение исходного размера к размеру сжатых данных. Значение измеряется на собственных данных, поскольку коэффициент определяется избыточностью конкретного набора.

# Измерение коэффициента и времени
SIZE_ORIG=$(stat -c%s data.json)
START=$(date +%s.%N)
zstd -9 -c data.json > data.zst
END=$(date +%s.%N)
SIZE_ZST=$(stat -c%s data.zst)

echo "коэффициент: $(echo "$SIZE_ORIG / $SIZE_ZST" | bc -l)"
echo "время: $(echo "$END - $START" | bc -l) с"
Показатель Формула
Коэффициент сжатия Исходный размер / сжатый размер
Степень сжатия (1 − сжатый / исходный) × 100 %
Скорость сжатия Исходный размер / время сжатия
Скорость распаковки Исходный размер / время распаковки

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

Репрезентативность выборки и сравнение вариантов

Измерение даёт пригодный результат при трёх условиях, каждое из которых проверяется.

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

Сравнение нескольких вариантов. Измеряются несколько алгоритмов и уровней, поскольку соотношение коэффициента и времени различается. Один вариант не даёт основания для выбора.

Учёт времени распаковки. Данные, которые читаются часто, требуют быстрой распаковки, поэтому время распаковки измеряется наравне со временем сжатия.

Практическое следствие: результат измерения — таблица вариантов с коэффициентом, временем сжатия и временем распаковки, а не одно число.

Отдельный аспект — объём выборки. Малая выборка не отражает распределение типов данных в наборе, поэтому коэффициент оказывается смещённым. Объём выбирается достаточным для покрытия всех типов значений.

Три признака недостоверного измерения.

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

Измерение одного варианта. Отсутствие сравнения не даёт основания для выбора алгоритма и уровня.

Игнорирование времени распаковки. Вариант с высоким коэффициентом может оказаться непригодным при частом чтении.

О соотношении коэффициента и скорости доступа — в статье про сжатие и скорость доступа; о настройке уровней — в статье про zstd.

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

Автоматизация измерения и контроль изменений

Измерение коэффициента сжатия выполняется периодически, поскольку состав данных изменяется со временем.

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

Фиксация условий. Версия инструмента, параметры сжатия и состав выборки записываются вместе с результатом, чтобы сравнение за разные периоды было корректным.

Порог отклонения. Существенное изменение коэффициента относительно предыдущего замера указывает на изменение состава данных либо на ошибку в процессе формирования данных.

Практическое следствие: периодический замер выявляет смещение коэффициента до того, как оно повлияет на объём хранения либо на время обработки.

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

Практика: измерение коэффициента сжатия

1. Выберите репрезентативную выборку. Данные берутся из фактического набора и покрывают все типы значений.

2. Измерьте исходный размер. Размер до сжатия служит основанием для расчёта коэффициента.

3. Измерьте несколько алгоритмов и уровней. Соотношение коэффициента и времени различается, поэтому один вариант не даёт основания для выбора.

4. Зафиксируйте время сжатия и распаковки. Оба показателя участвуют в выборе, поскольку данные могут читаться чаще, чем записываться.

5. Рассчитайте коэффициент и степень сжатия. Коэффициент показывает, во сколько раз уменьшился объём, степень — долю сокращения.

6. Сравните результаты в таблице. Таблица вариантов с показателями позволяет выбрать по ограничению задачи.

7. Повторите измерение при изменении данных. Изменение состава набора изменяет избыточность и коэффициент.

Рекомендации:

  1. Различайте коэффициент и степень сжатия. Коэффициент показывает кратность уменьшения, степень — долю сокращения объёма.
  2. Учитывайте потребление памяти. Алгоритмы с высоким коэффициентом требуют больше памяти, что ограничивает применимость.
  3. Проверяйте поведение на малых порциях. Заголовок алгоритма занимает фиксированный объём, поэтому на малых данных коэффициент близок к единице.
  4. Не выбирайте вариант только по коэффициентю. Время сжатия и распаковки участвуют в выборе наравне с объёмом.
  5. Фиксируйте условия измерения. Версия инструмента и параметры влияют на результат, поэтому условия записываются вместе с числами.

Практический сценарий: ожидаемый объём хранения не подтвердился

Контекст: объём хранения планировался по коэффициенту сжатия из документации, фактический объём оказался больше.

  1. Диагностика. Коэффициент из документации измерен на текстовых данных с высокой повторяемостью. Фактический набор содержал значительную долю бинарных значений без избыточности, поэтому коэффициент оказался ниже.
  2. Причина. Коэффициент перенесён с чужих данных без измерения на собственном наборе. Избыточность данных различается, поэтому результат не переносится.
  3. Действия. (а) Измерили коэффициент на репрезентативной выборке фактических данных; (б) разделили данные по типам и измерили коэффициент для каждого, поскольку доля типов различалась; (в) сравнили несколько алгоритмов и уровней по коэффициенту и времени; (г) пересчитали требуемый объём хранения по измеренным значениям; (д) зафиксировали условия измерения для повторной проверки при изменении данных.
  4. Результат. Объём хранения соответствует измеренным значениям, а выбор алгоритма основан на сравнении вариантов.

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

FAQ

Как рассчитать коэффициент сжатия? Разделить исходный размер на размер сжатых данных. Значение больше единицы означает уменьшение объёма.

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

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

Как часто повторять измерение? При изменении состава данных, поскольку избыточность определяет коэффициент. Периодическая проверка выявляет смещение.

Источники: Zstandard, gzip, Python time — ссылки в шапке.