【Zstd: 压缩全能王】

什么是Zstd

zstd是Facebook在2016年开源的新无损压缩算法,优点是压缩率和压缩/解压缩性能都很突出。

效果对比

压缩率 与 压缩速度,此图来源Zstd官网,为一些经典的压缩算法对比,

Compressor nameRatioCompressionDecompress.
zstd 1.5.6 -12.887510 MB/s1580 MB/s
https://www.zlib.net/ 1.2.11 -12.74395 MB/s400 MB/s
brotli 1.0.9 -02.702395 MB/s430 MB/s
zstd 1.5.6 --fast=12.437545 MB/s1890 MB/s
zstd 1.5.6 --fast=32.239650 MB/s2000 MB/s
quicklz 1.5.0 -12.238525 MB/s750 MB/s
lzo1x 2.10 -12.106650 MB/s825 MB/s
https://lz4.github.io/lz4/ 1.9.42.101700 MB/s4000 MB/s
lzf 3.6 -12.077420 MB/s830 MB/s
snappy 1.1.92.073530 MB/s1660 MB/s

根据对比,我们看到

Zstd特点

  • 全能王:压缩率和压缩/解压速度都不错。
  • 训练模式:Zstd 提供了一种新的训练模式,可以使用这种模式对所选数据类型的算法进行调优。训练 Zstandard 是通过提供一些样本(每个样本一个文件)来实现的,训练的结果存储在称为“字典”的文件中,该文件必须在压缩和解压缩之前加载。使用此字典,可以在小数据上实现的压缩率大大提高

实践

命令行

# 安装
sudo apt-get install -y zstd

命令行使用示例:

将一个文件压缩到一个 .zst 后缀的压缩文件中:
zstd {{file}}

解压缩一个文件:
zstd -d {{file}}.zst

将文件解压缩到标准输出 (stdout):
zstd -dc {{file}}.zst

使用指定的压缩等级来压缩一个文件.0 = 最差,19 = 最好 (默认等级是 3):
zstd -{{level}} {{file}}

使用更多内存 (解压或压缩时) 来得到更高的压缩比:
zstd --ultra -{{level}} {{file}}

SDK演示

这里选取语言为Node.js,Node.js中有几个库可以用来处理Zstandard(zstd)压缩:

  1. node-zstd: 这是一个Node.js的本地插件,它提供了对Zstandard压缩库的直接访问。它需要C++编译器和Zstandard库来编译和运行。
  2. zstd-codec: 这个库提供了Zstandard的纯JavaScript实现,以及一个使用WebAssembly的版本。它可以在没有本地依赖的情况下运行。
  3. zstd-wasm: 这个库是Zstandard的WebAssembly版本,可以在浏览器和Node.js中使用。
  4. simple-zstd: 这个库提供了一个简单的Zstandard压缩和解压缩的接口,它使用了node-zstd库。

这些库都可以通过npm进行安装。你选择哪个库取决于你的具体需求,例如你是否需要纯JavaScript的实现,或者你是否需要在浏览器中使用Zstandard。

这里演示下zstd-wasm使用方式,zstd-wasm:

const { init, compress, decompress } = require("@bokuweb/zstd-wasm");

(async () => {
  await init();
  const compressed = compress(Buffer.from("Hello zstd!!"), 10);
  console.log(compressed);
  const res = decompress(compressed);
  console.log(Buffer.from(res).toString()); // Hello zstd!!
})();

示例演示完后,再补充些个人对于压缩的思考。

压缩界的真相

熵值

搞过压缩的朋友,可能会有体会。越相似的内容,压缩效率越大,反之压缩效率低。
同样在Zstd中,如果在一组小的数据样本中存在某种相关性,它的压缩率就比较高,反之,数据相关性不大,无序混乱不相似,则压缩率则偏低,此时即使强如Zstd也是巧妇难为无米之炊。

建议

  • 对大数据量的文本压缩场景,zstd是综合考虑压缩率和压缩性能最优的选择。
  • 如果追求压缩速度,可以lz4。(可以看这篇快速入门 :【压缩算法-lz4 和 lz4hc】
  • 对小数据量的压缩场景,如果能使用zstd的字典方式,压缩效果更为突出。
  • 34
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值