「Zstd」- Zstandard | 现代、高效的压缩算法和工具

认识

官网: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 都提供了一个比传统工具更优的解决方案,正在成为新一代数据压缩的事实标准。

性质

  1. 速度与效率的完美平衡
  • 解压速度极快:这是 Zstd 最大的亮点之一。其解压速度通常比 zlib 快很多倍,这对于需要频繁读取压缩数据的场景(如软件包安装、游戏资源加载、实时数据传输)至关重要。
  • 压缩速度快:在提供高压缩比的同时,其压缩速度也远超 bzip2 等传统算法,与 zlib 相当甚至更快。

  1. 可伸缩的压缩级别
  • Zstd 提供了从 `1` (最快) 到 `19` (最强) 甚至更高的压缩级别。
  • 在低级时(如 `1~3`),它追求极致的速度,压缩率适中;在高级时(如 `19~22`),它追求极致的压缩率,速度会变慢,但通常仍比同级别的其他算法(如 xz)快得多。

  1. 字典压缩
  • 对于大量小文件或特定格式的数据(如 JSON、XML、日志),可以预先训练一个“字典”。
  • 使用该字典进行压缩可以显著提升压缩率,这对于网络传输和存储优化非常有价值。

  1. 硬件加速
  • 新版本的 Zstd 支持利用现代 CPU 的特性(如 x86 的 AVX2 指令集)来进一步加速压缩和解压过程。

  1. 跨平台与活跃生态
  • 它是开源的,使用 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

“`

  • 解压文件:
“`bash

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/

# 解压

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