Минимальный размер данных для сжатия zlib? - PullRequest
4 голосов
/ 21 апреля 2011

У меня есть приложение, которое использует внешний кеш для некоторых данных (в частности, memcached на другом сервере). Есть возможность сжать данные с помощью zlib перед кэшированием. Вопрос в том, какой размер данных заслуживает сжатия? Например, если у нас есть 10-байтовый элемент данных, вероятно, бесполезно тратить время на его сжатие / распаковку. Но если бы у нас было 10К данных, это может стоить того. Сохраненные данные будут в основном ASCII-строками.

Я знаю, что многое зависит от скорости сети, скорости процессора, данных и чего нет, но есть ли какие-то рекомендации или эвристики? Не обязательно быть идеальным, но если это может спасти несколько циклов, это было бы здорово.

1 Ответ

2 голосов
/ 21 апреля 2011

Дефлат Zlib имеет очень маленький размер заголовков блоков (4 бита). http://www.gzip.org/zlib/rfc-deflate.html раздел 3.2.3

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

UPDATE:

Существует проект smaz https://github.com/antirez/smaz для сжатия коротких строк (наивный), и автор говорит,

думаю, что zlib, как правило, не сможет сжимать текст длиной менее 100 байт.

Для скорости. Может быть, вы должны написать небольшую программу для тестирования. Я могу найти это исследование http://pytables.github.com/usersguide/optimization.html и есть интересные цифры: скорость записи коротких записей с разной компрессией (no, zlib, lzo, bzip2); и чтение коротких записей.

Zlib в 5 раз медленнее, чем несжатый при записи, и до 8 раз медленнее при чтении. Кроме того, lzo работает лучше в этой оценке.

...