【问题标题】:Minimal data size for zlib compression?zlib 压缩的最小数据大小?
【发布时间】:2011-04-20 22:04:25
【问题描述】:

我有一个应用程序对某些数据使用外部缓存(特别是在另一台服务器上的 memcached)。有一个选项可以在缓存之前使用 zlib 压缩数据。问题是——哪种数据大小值得压缩?例如,如果我们有 10 字节的数据项,那么浪费时间压缩/解压缩它可能是没有用的。但如果我们有 10K 的数据,这可能是值得的。存储的数据将主要是 ASCII 字符串。

我知道这在很大程度上取决于网络速度、CPU 速度、数据等等,但有什么指导方针或启发式方法吗?不一定要完美,但如果它可以节省一些周期,那就太好了。

【问题讨论】:

  • 我在想压缩小于网络数据包的数据可能不值得,因为发送它需要大致相同的时间......我想知道它是否正确?

标签: compression memcached zlib


【解决方案1】:

Zlib 的 deflate 具有极小的块头(4 位)。 http://www.gzip.org/zlib/rfc-deflate.html 3.2.3 节

它可以存储未压缩的块或使用固定的霍夫曼表压缩它,因此即使数据很短,也不太可能扩展很多。

更新:

有一个项目smazhttps://github.com/antirez/smaz用于压缩短字符串(天真的),作者说,

认为像 zlib 这样通常无法压缩小于 100 字节的文本。

为了速度。也许你应该写一个小的基准程序。我可以找到这项研究http://pytables.github.com/usersguide/optimization.html 并且有一些有趣的数字:不同压缩(no、zlib、lzo、bzip2)写入短记录的速度;并阅读简短的记录。

Zlib 在写入时比未压缩时慢 5 倍,而在读取时则慢 8 倍。此外,lzo 在本次评估中表现更好。

【讨论】:

  • 我不太担心扩展,而是担心在压缩和解压缩内容上浪费时间而没有从压缩中获得任何加速。