我有一个对某些数据使用外部缓存的应用程序(特别是另一台服务器上的 memcached)。有一个选项可以在缓存之前使用 zlib 压缩数据。问题是 - 哪种数据大小值得压缩?例如,如果我们有 10 字节的数据项,那么浪费时间压缩/解压缩它可能是没有用的。但是如果我们有 10K 的数据,这可能是值得的。存储的数据将主要是 ASCII 字符串。
我知道这在很大程度上取决于网络速度、CPU 速度、数据等等,但是否有任何指导方针或启发式方法?不一定是完美的,但如果它可以节省一些周期,那就太好了。
最佳答案
Zlib 的 deflate 具有非常小的块头(4 位)。 http://www.gzip.org/zlib/rfc-deflate.html第 3.2.3 节
它可以存储未压缩的块或使用固定的霍夫曼表对其进行压缩,因此即使您的数据很短,也不太可能大量扩展。
更新:
有项目smaz
https://github.com/antirez/smaz用于压缩短字符串(幼稚的),作者说,
think that like zlib will usually not be able to compress text shorter than 100 bytes.
为了速度。也许你应该写一个小的基准程序。我可以找到这项研究 http://pytables.github.com/usersguide/optimization.html还有一些有趣的数字:使用不同压缩(no、zlib、lzo、bzip2)写入短记录的速度;和阅读短记录。
Zlib 在写入时比未压缩时慢 5 倍,在读取时慢 8 倍。此外,lzo 在此评估中表现更好。
关于compression - zlib 压缩的最小数据大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5737189/