阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

Zstandard:一种新的无损压缩算法

  • 2015-01-29
  • 本文字数:976 字

    阅读完需:约 3 分钟

Zstandard (缩写为 Zstd)是一种新的无损压缩算法,旨在提供快速压缩,并实现高压缩比。它既不像 LZMA ZPAQ 那样追求尽可能高的压缩比,也不像 LZ4 那样追求极致的压缩速度。

下面是一组基准测试数据:

压缩算法名称

压缩比

压缩速度(MB/s)

解压速度(MB/s)

zlib 1.2.8 -6

3.099

18

275

Zstd

2.872

201

498

zlib 1.2.8 -1

2.73

58

250

LZ4 HC r127

2.72

26

1720

QuickLZ 1.5.1b6

2.237

323

373

LZO 2.06

2.106

351

510

Snappy 1.1.0

2.091

238

964

LZ4 r127

2.084

370

1590

LZF 3.6

2.077

220

502

(环境:Core i5-4300U @ 1.9GHZ;基准测试程序:开源程序 fsbench 0.14.3

从上表可以看出,Zstd 的压缩比和压缩速度都比较高,而且解压速度大约为每核 500MB/s。

Zstd 的压缩速度可以根据不同的情况进行配置。在上述测试中,它提供了大约每核 200MB/s 的速度,可以用于一些实时压缩场景。同时,与 LZ4 类似,它可以提供平衡压缩比和压缩时间的衍生算法,并且不影响解压性能。

Zstd 还有一个特点是内存需求可配置。这使它可以适应内存配置低或者服务器并行处理多个请求的情况。此外,它采用了“有限状态熵(Finite State Entropy,缩写为FSE)”编码器。该编码器是由Jarek Duda 基于ANS 理论开发的一种新型熵编码器,旨在与“霍夫曼编码器(Huffman encoder)”和“算数编码器(Arithmetic encoder)”相竞争。

另据 Cyan4973 项目创建者 Yann Collet介绍,虽然Zstd 是一个速度很快的压缩/ 解压算法,但它并没有进入LZ4 的适用范围。在一项基准测试中(测试方法见这里),Collet 得出了这样的结论:

当传输速度高于50MB/s 时,LZ4 是更好的选择;而当传输速度介于0.5MB/s 和50MB/s 时,Zstd 在速度上领先于其它算法。

此外,在回复用户评论时,Collect 比较了Zstd 与 lzham

根据我的理解,它们的设计出发点不同。Lzham 来源于 LZMA……以离线压缩场景作为衡量标准……而 Zstd 的基本原则更像 Zlib ,但主要有三点变化:

  • FSE 代替霍夫曼编码器;
  • 不限匹配尺寸;
  • 偏移量可重复。

最后,请读者朋友们注意:Zstd 开发尚处于起步阶段,本文的一些测试结果也只是早期的测试结果,其实现将会随着时间的推移继续改进和提高,尤其是在项目创建的第一年里。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2015-01-29 19:5860097
用户头像

发布了 1008 篇内容, 共 373.9 次阅读, 收获喜欢 340 次。

关注

评论

发布
暂无评论
发现更多内容

面试突击62:group by 有哪些注意事项?

王磊

Java MySQL 面试

面试突击63:MySQL 中如何去重?

王磊

Java MySQL 面试

CRMEB 商城系统如何助力营销?

CRMEB

Android 无限循环ViewPager滑动空白Bug及报错跳坑

芝麻粒儿

android 手机 7月月更

Fedora/REHL 安装 semanage

HoneyMoose

基本磁盘与动态磁盘 RAID磁盘冗余阵列区分

Albert Edison

7月月更

小程序在产业互联网中的作用

Geek_99967b

小程序 小程序容器

猿桌派第三季开播在即,打开出海浪潮下的开发者新视野

融云 RongCloud

看抖音直播Beyond演唱会有感

Empty

devkit入门

乌龟哥哥

7月月更

解构运算符的理解与运用

是乃德也是Ned

7月月更

【LeetCode】装满石头的背包的最大数量Java题解

Albert

LeetCode 7月月更

分布式不来点网关都说不过去

zxhtom

7月月更

SAP UI5 框架的 manifest.json

Jerry Wang

SAP Fiori SAP UI5 ui5 7月月更

LeetCode-155. 最小栈(java)

bug菌

Leet Code 7月月更

详细页返回列表保留原来滚动条所在位置

小恺

7月月更

CSS 基于文字的图片马赛克你见过吗

南城FE

CSS 前端 马赛克 7月月更

使用标签模板解决用户恶意输入的问题

猪痞恶霸

前端 js ES6 7月月更

深入理解计算机系统(CSAPP)第1章计算机系统漫游

小明Java问道之路

计算机基础 csapp 计算机结构 7月月更 解读

python 函数二三事

AIWeker

Python python小知识 7月月更

小程序容器可以发挥的价值

Geek_99967b

小程序 小程序容器

前端知识链条中少不了的一环--Ajax

是乃德也是Ned

ajax 前端 7月月更

C++|TCP 服务端中接收文件

中国好公民st

c++ TCP通信 7月月更

基于STM32+华为云IOT设计的智能路灯

DS小龙哥

7月月更

中移动、蚂蚁、顺丰、兴盛优选技术专家,带你了解架构稳定性保障

博文视点Broadview

node の SQLite

空城机

sqlite Node 7月月更

在QWidget上实现窗口阻塞

小肉球

qt 7月月更

synchronized 和 ReentrantLock

zarmnosaj

7月月更

图解网络:TCP三次握手背后的原理,为啥两次握手不可以?

wljslmz

TCP 三次握手 网络协议 网络技术 7月月更

Python|数据结构——字典和集合

AXYZdong

Python 7月月更

Promise

Jason199

Promise 7月月更

Zstandard:一种新的无损压缩算法_语言 & 开发_谢丽_InfoQ精选文章