zstd,未来可期的数据压缩算法

zstd,未来可期的数据压缩算法,第1张

最近了解到了 zstd 这种新的压缩算法。不像lz4,lzo,snappy等近几年流行的压缩算法专注于压缩和解压缩性能,zstd在性能不错的同时号称压缩率跟Deflate(zip/gzip的算法)相当。下面是 官网 列出的数据

我们知道,压缩算法的效果和性能跟被压缩的数据类型和模式有很大的关系,光看别人的测试数据、benchmark是不够的。正好有功能开发需要,于是结合我们的使用场景真实测试的一下。

惊喜的是,实测的结果比官方提供的还好,终于找到了我们的cup of tea。

Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz, 8G内存

CentOS 7.0

对几种支持流式写入的压缩算法,使用对应的命令行工具进行压缩测试。

除了snappy,各种压缩算法/工具都支持设置压缩级别,高级别意味着以更长的压缩时间换取更高的压缩率。

100万行不重复的某个应用的日志文件,大小为977MB。

从上面可以看出:

zstd无论从处理时间还是压缩率来看都闷旁占优。snappy, lz4, lzo的压缩率较低,但压缩速度都很快,而zstd甚至比这些算法更快。Gzip的压缩率比lz4等高不少,而zstd的压缩率比gzip还提升一倍。

如果从上面的比较还不是特别直观的话,我们再引入一个创造性的指标(从网上其他压缩算法对比没有见过使用这项指标):

代表单位处理时间可以压缩去掉多少冗余数据。其中 权重系数 用来指定压缩率和压缩速度哪个更重要,这里我们认为在我们的使用场景里两者同样重要,取系数为1。

从这里我们可以明显看出好李, zstd >lz4 >lzo >snappy >>其他 。

对1000行、大小约为1MB的文件进行压缩测试,各种算法的压缩率跟1GB大文件的压缩率几乎一样。

下面再对更小的数据量——10行日志数据的压缩率进行对比。虽然我们的使用场景里没友罩迟有对小数据量的压缩处理,但还是比较好奇zstd字典模式的效果。

其中最后一组数据为zstd使用10000行日志进行训练生成字典文件,并利用字典文件辅助压缩测试数据。

可以看出来,除了zstd字典模式外,各种压缩算法在处理更小的数据量时压缩率都下降很多。而zstd字典模式对压缩率带来帮助非常明显,与gzip对比,压缩率从1000行时相差1倍,到10行时变为了相差接近3倍。

下一篇文章将给大家对比这几种算法的golang开源库的性能和压缩率。敬请期待。

zst文件解压成安卓安装包的具体步骤如下

扩展名.zst表示存档由zstd压缩。tar命令有一个选项-I(-use-compress-program)来指定压缩/解压缩命令。可以按照如下命令进行解压:$tar-Izstd-xvfxxxx.tar.zst

但州销乱是在执行tar-Izstd-xvfxxxx.tar.zst过程中遇到了如下问题:

tar(child):zstd:Cannotexec:Nosuchfileordirectory

tar(child):Errorisnotrecoverable:exitingnow

tar:Childreturnedstatus2

tar:Errorisnotrecoverable:exitingnow

出现了这个是因为没有安装zstd包,斗冲需册档要手动安装这个安装包来解压zst

ubuntu系统可以直接通过下面命令进行安装$sudoaptinstallzstd


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/12252944.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存