场景选型
日志和数据管道
优先考虑 ZSTD 或 LZ4。ZSTD 提供更好的压缩率和可调级别,LZ4 更适合极低延迟路径。
如果日志需要长期保留但也经常回放,ZSTD 往往是更稳的折中;如果日志只是短期缓冲或跨进程传递,LZ4 更容易获得低延迟收益。
长期归档
优先考虑 LZMA 或 ZSTD 高级别。如果数据偏 Web 文本资源,也可以比较 Brotli。
这里最重要的是确认“写慢一点是否可以接受”。归档任务通常允许更慢压缩,但恢复时间和内存占用仍然要在演练中验证。
Web 内容
优先考虑 Brotli 和 zlib。Brotli 更适合现代浏览器环境,zlib/gzip 兼容性更强。
常见做法不是“二选一”,而是保留 gzip 兼容路径,同时为支持 Brotli 的客户端提供更小的资源。
嵌入式或低资源环境
优先关注内存和解压实现复杂度。LZ4 和 zlib 通常比高压缩率算法更容易控制资源。
如果设备端主要负责解压而不是压缩,那么解压代码复杂度、二进制体积和峰值内存常常比理论压缩率更重要。
小文件和大量相似对象
这类场景往往值得优先考虑 ZSTD 的字典能力,或者至少专门测试“是否该引入字典训练”。
单纯比较“不开字典时的大文件 benchmark”常常会错过真实收益点。
学习算法思想
- 字典匹配:LZ4、zlib、ZSTD、LZMA
- 熵编码:zlib、ZSTD、Brotli
- 上下文建模:LZMA、Brotli
- 块排序:BSC
一个简化的场景决策表
| 场景 | 更值得先试的算法 | 主要原因 |
|---|---|---|
| 热路径、低延迟 | LZ4 | 极快 |
| 通用后端服务 | ZSTD | 综合最平衡 |
| 归档 / 发布包 | LZMA、ZSTD | 更重视压缩率 |
| 浏览器静态资源 | Brotli、zlib | 文本优化 + 兼容性 |
| 老系统 / 强兼容 | zlib | 生态成熟 |
| 学习变换类思路 | BSC | 便于理解块排序 |