速来报名!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:5861141
用户头像

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

关注

评论

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

进击的Java(八)

ES_her0

11月日更

TypeScript 是弱类型

HoneyMoose

TypeScript 类型系统

HoneyMoose

架构训练营 - 模块四

Geek_9de3de

架构实战营

消息队列表结构设计

guangbao

技术改进项目的质量保障思路

QualityFocus

架构 软件测试 自动化测试 质量保障 技术改进

使用 JavaScript 创建和下载文件

devpoint

JavaScript File Blob 11月日更

HW3 - 外包学生管理系统架构文档

WWH

架构实战营

flutter开发中vscode插件推荐1

坚果

flutter vscode 11月日更

Apollo选型及优势介绍

小鲍侃java

11月日更

博文推荐|Pulsar 的消息存储机制和 Bookie 的 GC 机制原理

Apache Pulsar

存储 Apache Pulsar 消息中间件 Apache BookKeeper bookie

MVCC的机制初识

卢卡多多

MVCC 11月日更

ThreadPoolExecutor 任务提交原码分析

new life

ThreadPoolExecutor

大数据训练营一期0908作业

朱磊

大数据训练营一期0919作业

朱磊

linux实战清理挖矿病毒kthreaddi

入门小站

Linux

Podman是什么

耳东@Erdong

容器 11月日更 Podman

KubeMeet 深圳站完整议题出炉!快来 get 云原生边缘计算硬核技术干货

阿里巴巴云原生

阿里云 云原生 边缘计算 KubeMeet 线下活动

在线极限词,敏感词,违禁词查询工具

入门小站

工具

详解低延时高音质:丢包、抖动与 last mile 优化那些事儿

声网

音频体验 RTE技术详解 last mile 优化

版本化ASP.NET Core WebApi

喵叔

11月日更

Vue进阶(幺玖幺):ECharts 实现地图功能

No Silver Bullet

Vue eCharts 11月日更

Pulsar的Chunk Message原理剖析

Zike Yang

Apache Pulsar 11月日更

大数据训练营一期0829作业

朱磊

面对DNS劫持,只能坐以待毙吗?

阿里巴巴云原生

阿里云 云原生 云拨测 DNS劫持 产品活动

dart系列之:在dart中使用packages

程序那些事

Java flutter dart 程序那些事 11月日更

Android C++系列:访问Assets 文件夹

轻口味

c++ android jni 11月日更

Golang Gin 框架参数解析介绍(三)

liuzhen007

11月日更

【Promise 源码学习】第九篇 - Promise.resolve 和 Promise.reject 的实现

Brave

源码 Promise 11月日更

【Flutter 专题】06 图解基础【登录】页面并学习相关 Widget

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

火出边际的Serverless,你居然还不了解?

华为云开发者联盟

云计算 Serverless 运维 云原生 敏捷

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