问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Zstd:压缩算法的全能选手

创作时间:
作者:
@小白创作中心

Zstd:压缩算法的全能选手

引用
CSDN
1.
https://blog.csdn.net/qq_38428433/article/details/139456366

什么是Zstd

Zstd(Zstandard)是Facebook在2016年开源的一种新型无损压缩算法。其主要优点在于压缩率和压缩/解压缩性能都很突出。

效果对比

下表展示了Zstd与其他一些经典压缩算法的对比效果:

压缩器名称
压缩率
压缩速度(MB/s)
解压缩速度(MB/s)
zstd 1.5.6 -1
2.887
510
1580
zlib 1.2.11 -1
2.743
95
400
brotli 1.0.9 -0
2.702
395
430
zstd 1.5.6 --fast=1
2.437
545
1890
zstd 1.5.6 --fast=3
2.239
650
2000
quicklz 1.5.0 -1
2.238
525
750
lzo1x 2.10 -1
2.106
650
825
lz4 1.9.4
2.101
700
4000
lzf 3.6 -1
2.077
420
830
snappy 1.1.9
2.073
530
1660

从对比结果可以看出,Zstd在压缩率和压缩/解压缩速度方面都表现出色。

Zstd特点

  • 全能王:在压缩率和压缩/解压速度方面都有不错的表现。
  • 训练模式:Zstd提供了一种新的训练模式,可以通过提供样本数据对算法进行调优。训练结果存储在称为“字典”的文件中,使用该字典可以在小数据上实现更高的压缩率。

实践

命令行使用

# 安装
sudo apt-get install -y zstd

# 压缩文件
zstd {{file}}

# 解压缩文件
zstd -d {{file}}.zst

# 将文件解压缩到标准输出
zstd -dc {{file}}.zst

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

# 使用更多内存以获得更高的压缩比
zstd --ultra -{{level}} {{file}}

SDK演示

在Node.js中,有多个库可以用来处理Zstandard(zstd)压缩:

  1. node-zstd:这是一个Node.js的本地插件,提供了对Zstandard压缩库的直接访问。
  2. zstd-codec:这个库提供了Zstandard的纯JavaScript实现,以及一个使用WebAssembly的版本。
  3. zstd-wasm:这个库是Zstandard的WebAssembly版本,可以在浏览器和Node.js中使用。
  4. simple-zstd:这个库提供了一个简单的Zstandard压缩和解压缩的接口,使用了node-zstd库。

这里演示一下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是综合考虑压缩率和压缩性能的最优选择。
  • 如果追求压缩速度,可以考虑使用lz4。
  • 对小数据量的压缩场景,如果能使用Zstd的字典方式,压缩效果更为突出。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号