认识
官网:https://facebook.github.io/zstd/doc/api_manual_latest.html
文档:http://www.zstd.net
仓库:https://github.com/facebook/zstd
Zstd,全称 Zstandard,是由 Facebook (Meta) 开发的开源无损数据压缩算法。其核心设计目标是提供极高的压缩和解压速度,同时保持与同类算法(如 zlib)相当甚至更优的压缩率。
它不仅在压缩大数据块时表现卓越,对大量小数据块的压缩也有很好的支持。
Zstd 是现代数据压缩领域的一个里程碑。 它成功地打破了“压缩率越高,速度就越慢”的传统权衡,在速度与压缩率之间找到了一个近乎完美的平衡点。无论是对于终端用户、开发者还是系统管理员,Zstd 都提供了一个比传统工具更优的解决方案,正在成为新一代数据压缩的事实标准。
性质
- 速度与效率的完美平衡
- 解压速度极快:这是 Zstd 最大的亮点之一。其解压速度通常比 zlib 快很多倍,这对于需要频繁读取压缩数据的场景(如软件包安装、游戏资源加载、实时数据传输)至关重要。
- 压缩速度快:在提供高压缩比的同时,其压缩速度也远超 bzip2 等传统算法,与 zlib 相当甚至更快。
- 可伸缩的压缩级别
- Zstd 提供了从 `1` (最快) 到 `19` (最强) 甚至更高的压缩级别。
- 在低级时(如 `1~3`),它追求极致的速度,压缩率适中;在高级时(如 `19~22`),它追求极致的压缩率,速度会变慢,但通常仍比同级别的其他算法(如 xz)快得多。
- 字典压缩
- 对于大量小文件或特定格式的数据(如 JSON、XML、日志),可以预先训练一个“字典”。
- 使用该字典进行压缩可以显著提升压缩率,这对于网络传输和存储优化非常有价值。
- 硬件加速
- 新版本的 Zstd 支持利用现代 CPU 的特性(如 x86 的 AVX2 指令集)来进一步加速压缩和解压过程。
- 跨平台与活跃生态
- 它是开源的,使用 BSD 协议,可以自由使用。
- 拥有多种编程语言的绑定(C, C++, Python, Java, Go, Rust, …),易于集成到各种项目中。
- 被众多主流软件和系统原生支持。
构建
### 基本命令行用法回顾
- 压缩文件:
“`bash
zstd file.txt
# 生成 file.txt.zst,并删除原文件
“`
“`bash
zstd -k file.txt
# 压缩并保留原文件 (-k)
“`
“`bash
zstd -19 -k file.txt
# 使用最高压缩级别 19
“`
zstd file.txt
# 生成 file.txt.zst,并删除原文件
“`
“`bash
zstd -k file.txt
# 压缩并保留原文件 (-k)
“`
“`bash
zstd -19 -k file.txt
# 使用最高压缩级别 19
“`
- 解压文件:
“`bash
zstd -d file.txt.zst
# 解压并删除原 .zst 文件
“`
“`bash
zstd -d -k file.txt.zst
# 解压并保留原 .zst 文件
“`
“`bash
zstd -d -c file.txt.zst > output.txt
# 解压到标准输出并重定向到新文件
“`
zstd -d file.txt.zst
# 解压并删除原 .zst 文件
“`
“`bash
zstd -d -k file.txt.zst
# 解压并保留原 .zst 文件
“`
“`bash
zstd -d -c file.txt.zst > output.txt
# 解压到标准输出并重定向到新文件
“`
- 与 tar 命令结合(非常实用):
“`bash
# 创建并压缩
tar -cf – directory/ | zstd – -o archive.tar.zst
# 或者使用 `–zstd` 选项(如果 tar 版本支持)
tar –zstd -cf archive.tar.zst directory/
# 创建并压缩
tar -cf – directory/ | zstd – -o archive.tar.zst
# 或者使用 `–zstd` 选项(如果 tar 版本支持)
tar –zstd -cf archive.tar.zst directory/
# 解压
zstd -dc archive.tar.zst | tar -x
# 或者
tar –zstd -xf archive.tar.zst
“`
zstd -dc archive.tar.zst | tar -x
# 或者
tar –zstd -xf archive.tar.zst
“`
应用
由于其出色的性能,Zstd 已被广泛集成到众多知名项目和系统中,如 Linux 内核、Hadoop、Spark、Redis、Amazon S3 等。
软件包管理
- Linux 内核:支持使用 Zstd 压缩内核镜像和模块(`.ko.zst`)。
- Arch Linux:`pacman` 包管理器默认使用 Zstd 压缩软件包(`.pkg.tar.zst`)。
- Homebrew:macOS 的包管理器使用 Zstd 来压缩公式(formula)的下载包。
- Facebook:内部大量使用 Zstd 进行代码和数据的压缩与分发。
大数据与数据库
- Hadoop/Spark:支持 Zstd 作为数据存储格式的压缩编解码器。
- Redis:支持使用 Zstd 进行 RDB 快照压缩。
- RocksDB/ZippyDB:Facebook 的数据库使用 Zstd 进行压缩。
游戏开发
- 游戏客户端资源包(Assets)通常很大,使用 Zstd 压缩可以极大减少下载体积,并且其极快的解压速度能加快游戏加载速度,提升玩家体验。
网络传输与存储
- HTTP 压缩:可通过 `Accept-Encoding: zstd` 支持,比 gzip 更高效。
- Amazon S3:对象存储支持使用 Zstd 进行压缩。
- 备份与归档:替代 tar.gz 或 tar.xz,在速度和压缩率之间取得更好平衡。
参考
DeepSeek / 介绍 Zstd