zstd 压缩的优势:速度比 gzip 快 5 倍、压缩率也好 20%
zstd 是什么
Zstandard(简称 zstd)是 Facebook / Meta 开源的实时压缩算法,定位是「在高压缩比和高速之间找一个现代平衡点」。在压缩工具链里的地位类似 Rust 在编程语言里的地位——设计目标是替代传统老算法。
三维对比
压缩速度
| 算法 | 压缩速度(MB/s) | 相对 zstd |
|---|---|---|
| zstd -3 | ~500 | 1× 基准 |
| gzip -6 | ~150 | 慢 3~4 倍 |
| xz -6 | ~50 | 慢 10 倍 |
zstd 的压缩速度是 gzip 的 3~5 倍、xz 的 10 倍以上。这意味着备份过程等待时间大幅缩短——特别是数据量上 GB 的聊天应用。
压缩率(同样数据的压缩后体积)
| 算法 | 压缩后体积 | 相对原始数据 |
|---|---|---|
| zstd -3 | ~35% | 1× 基准 |
| gzip -6 | ~42% | 比 zstd 大 20% |
| xz -6 | ~28% | 比 zstd 小 20% |
xz 的压缩率确实最好,但代价是慢到不能用。zstd 在压缩率上比 gzip 好约 20%,省空间同时不牺牲速度。
解压速度
| 算法 | 解压速度 |
|---|---|
| zstd | 极快,比 gzip 还快 30~50% |
| gzip | 中等 |
| xz | 最慢 |
恢复时解压速度直接决定你等多久。zstd 的解压速度是 xz 的 3~6.5 倍,是 gzip 的 1.3~1.5 倍。
为什么这对备份很重要
备份场景有两个特点:
- 一次要处理很多文件——每个应用一个 tar 包,几十上百个应用依次压缩
- 速度和空间都要——太快但占空间的算法(比如不压缩)也不行,太省空间但慢到不能用的也不行
zstd 恰好卡在最甜的位置——备份时不浪费时间等压缩,恢复时解压快不浪费时间,压缩率也过得去。
DataBackup 的压缩策略
DataBackup 对每个应用的 APK 和数据目录分别打 tar,然后各用 zstd 压缩成 .tar.zst。这样做的好处:
- APK 和数据分开压缩,恢复时可以只解其中一个
- tar.zst 是公开格式,不用 DataBackup 也能用标准工具解压查看