你下载软件、传文件、存日志,背后都有一层压缩算法在帮你省流量和磁盘空间。Zstandard(简称 zstd)是其中一个由 Meta(原 Facebook)开源的无损压缩算法——无损的意思是压缩后再解压,数据一个字节都不会丢,和日常用 WinRAR 压文件是同一性质,但它面向的是程序里实时处理大量数据的场景。

它解决什么问题? 在数据不丢的前提下把体积尽量压小,同时压得足够快,快到来得及塞进网络传输、数据库备份、日志收集这类「每秒都要处理海量数据」的流水线;官方定位就是「实时压缩」,边产生数据边压缩,不让系统干等。

适合谁用? 后端开发、数据工程师、运维工程师,以及任何需要在程序里做压缩的团队。项目提供 C 语言库(libzstd)和命令行工具 zstd,既能嵌入业务代码,也能在终端直接压文件。

一套被写进互联网标准的格式

zstd 在 GitHub 上有 27.7k star、2.6k fork、超过 1.1 万次提交,采用 BSD 或 GPLv2 双许可(商用可选宽松的 BSD)。它的压缩格式已经固定,并写进了互联网标准 RFC 8878——任何语言、任何工具按这份标准产出的 .zst 文件都可以互通,不存在格式私有化的风险。官方还提供了多种编程语言的绑定,常见开发语言基本都能直接调用。

实测数据:比老牌算法快多少

官方公开了一组同机实测(Core i7-9700K、Ubuntu 24.04、标准测试语料 Silesia):默认级别下,zstd 1.5.7 压缩比 2.896,压缩速度 510 MB/s,解压速度 1550 MB/s;而长期作为事实标准的 zlib 1.3.1 压缩比 2.743,压缩只有 105 MB/s——zstd 在压缩率略胜一筹的同时,压缩快约 5 倍、解压快约 4 倍。同场对比的 lz4 解压更快(3850 MB/s),但压缩比只有 2.101,体积明显更大。zstd 在「压得小」和「压得快」之间找到了此前没有的平衡点。

速度和体积可按需调节

zstd 提供 --fast=1 到 --fast=4 的快速档:--fast=4 压缩比 2.146、速度提升到 665 MB/s;想压得更小也有慢速档可选。值得注意的特性是:解压速度几乎不随压缩档位变化(各档位稳定在 1500–2050 MB/s),这对「压缩一次、解压很多次」的场景(如软件分发)特别有利。

小块数据:用字典训练补短板

压缩算法靠「学习」前面出现过的内容来压缩后面的内容,数据太小时没东西可学,压缩效果会变差。zstd 为此提供字典训练模式:先拿同一类数据的几十个样本训练出一份「字典」文件,压缩时带上它,小块数据也能压得动——官方示例中约 1 KB 一条的 1 万条用户记录,用训练字典后压缩比显著提升。数据库行记录、小 JSON 报文这类场景都很适用。

谁在用

zstd 运行在 Meta 内部和大量大型云基础设施中,并接受 Google oss-fuzz(用自动生成的随机输入反复测试程序、查找漏洞的开源安全测试项目)的持续检验,可靠性经过了大规模生产环境的验证。

一句话带走:如果你的程序需要压缩数据,zstd 是目前最值得优先试的默认选项——压缩率与 zlib 持平甚至更好,速度却快约 5 倍,格式标准化、生态成熟。