首页 > 其他分享 >【Zstd: 压缩全能王】

【Zstd: 压缩全能王】

时间:2024-06-04 23:33:33浏览次数:25  
标签:MB zstd 压缩 全能王 Zstandard 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的字典方式,压缩效果更为突出。

标签:MB,zstd,压缩,全能王,Zstandard,Zstd,压缩率
From: https://blog.csdn.net/qq_38428433/article/details/139456366

相关文章

  • 命令行压缩工具用法
    tar归档#创建一个未压缩的tar归档文件#其中,`-c`表示创建归档文件,`-v`表示显示详细信息,`-f`表示指定归档文件名。tar-cvfarchive.tarfile1file2dir1#创建一个使用gzip压缩的tar归档文件#其中,`-z`表示使用gzip压缩。tar-czvfarchive.tar.gzfile1fi......
  • [工具] 批量BMP图片转为PNG透明图片,去掉BMP黑色背景,去黑底,压缩导出png图片V1.1
    批量BMP图片转为PNG透明图片,去掉BMP黑色背景,压缩导出png图片V1.1前段时间上传了一款bmp转png并去黑底的demo软件,非常受欢迎,  上一版本地址:批量BMP图片转为PNG透明图片,去掉BMP黑色背景应广大爱好者的要求,完善了一下软件的功能,增加了导出png图片压缩功能,界面如下:  压......
  • 导入ZIP压缩包比较图片的hash值重复
    项目中碰到需要在导入过程中和当前目录中的图片进行比较,判断是否存在相同的图片,相同则把导入的图片删除掉该内容较多:需要仔细分析每部分代码,结合你需要内容获取对应代码!!!!!!!!首先把工具类导入进来:对应hash比较工具类我是参考该作者博客:java通过哈希比较图片相似度_jav......
  • 压缩包文件批量解压助手工具
    压缩包文件批量解压助手工具主要用于批量化解压压缩包文件,省去了繁琐的人工操作主要包含以下功能:自动获取文件夹内所有压缩包文件(支持:zip、tar、7z、uvz、rar格式)自动从密码本中匹配压缩包密码后自动解压压缩包支持解压完成后自动删除压缩包文件支持快速、标准、性能三种......
  • Redis笔记——底层数据结构之压缩列表
    是什么?        本质上就是紧凑的列表。        压缩列表在Redis中有两种编码方式,分别是ZIPLIST与LISTTPACK。LISTPACK从Redis5.0引入,直至Redis7.0完全替换了ZIPLIST,可以看作是ZIPLIST的进阶版。有什么作用?        在List文章中,提......
  • 长城电脑压缩文件丢失了怎么办?怎么解决
    在数字化时代,电脑已成为我们日常生活和工作中不可或缺的设备。长城电脑作为国内知名品牌,以其稳定可靠的性能赢得了广大用户的信赖。然而,即便是可靠的电脑,也难免会遇到一些问题。其中,压缩文件丢失无疑是一个令人头疼的难题。本文将围绕这一问题,探讨其可能的原因,并提供相应的解决......
  • Linux压缩、解压缩指令
    tar【tar指令是打包指令,最后打包后的文件是.tar.gz文件】 案例1:压缩多个文件,将/home/pig.txt和/home/cat.txt压缩成pc.tar.gztar-zcvfpc.tar.gz/home/pig.txt/home/cat.txt案例2:将/home的文件夹压缩成myhome.tar.gztar-zcvfmyhome.tar.gz/hom......
  • 用c#实现哈夫曼压缩算法
    ///<summary>///hash压缩算法///</summary>///<paramname="file"></param>///<paramname="cancellationToken"></param>///<returns></returns>publicasyncTas......
  • [工具] 批量BMP图片转为PNG透明图片,去掉BMP黑色背景,去黑底,压缩导出png图片V1.1
    批量BMP图片转为PNG透明图片,去掉BMP黑色背景,压缩导出png图片V1.1前段时间上传了一款bmp转png并去黑底的demo软件,非常受欢迎,  上一版本地址:批量BMP图片转为PNG透明图片,去掉BMP黑色背景应广大爱好者的要求,完善了一下软件的功能,增加了导出png图片压缩功能,界面如下:下载地址请关......
  • 音频剪辑技巧:音频压缩怎么不损失质量?分享6个小妙招
    你以前尝试过压缩音频文件吗?音频压缩可以减小音频文件的大小,同时保持原始数据的完整性,帮助你更方便地将音频文件在线传输给他人,从而,也更容易在互联网和其他设备上上传或传输。这一技能在很多情况下都非常有益。例如,你需要向你公司发送音频作为工作汇报,但文件太大,无法放入电子邮......