这里比较了六种数据压缩算法,结果表明Brotli算法会代替普遍使用的Deflate算法。分别用Canterbury compression corpus,web contentcorpus,和 enwik8三种不同的数据集来测试,并比较六种算法在压缩比和压缩速度上的性能。而且,也表明了Zopfli,LZMA,LZHAM,和 bzip2在压缩和解压缩时占用CPU时间较长,不会直接代替deflate。

  Deflate不仅能支持很好的适配现在已有的系统,而且它比较简单快速的编解码。因此,很多无损数据压缩都采用Deflate方法实现的。2013年,谷歌发布Zopfli,改算法不仅兼容Deflate格式,而且支持稠密压缩。现在Zopfli逐渐广泛被接收,有人开始提出目前应该从Deflate算法向更加先进的算法转变。Brotli是谷歌开发的一个新一代的压缩算法。这里将该算法和其他已有的压缩算法进行一个比较。  

CPU

intel@Xeon CPU E5-1650 v2, 3.5G, 6 core

操作系统

Linux 3.13.0

编译器

GCC 4.8.4

单线程

singel

测试文件1

Canterbury compression corpus

测试文件2

A web content, 1285 files and 70611753 bytes

测试文件3

Ebwik8 single file 100M

LZMA和LAHMA算法,窗口越大,压缩速度越慢,压缩比越高。

窗口大小(bit)

版本

Brotli

NA

Brotli version 0.2.0

Deflate

15

Deflate algorithm from zlib 1.2.8

Zopfli

15

Zopfli version from github 20150901

LZMA

22

LZMA implementation in 7zip 9.20.1

LZHAM

22

LZHAM 1.0 stable 1

Bzip2

NA

Bzip2 1.0.0 20100906

测试结果

Canterbury compression corpus

算法:级别

压缩比

压缩速度(MB/s)

解压缩速度(MB/s)

Brotli:1

3.381

98.3

334

Brotli:9

3.965

17

354.5

Brotli:11

4.347

0.5

289.5

Deflate:1

2.913

93.5

323

Deflate:9

3.371

15.5

347.3

Zopfli

3.58

0.2

342.1

Lzma:1

3.847

10.2

70

Lzma:9

4.24

3.9

71.7

Lzham:1

3.836

3.9

116

Lzham:9

3.952

0.5

117.7

Bzip2:1

3.757

11.8

40.4

Bzip2:9

3.869

12

40.2

A web content, 1285 files and 70611753 bytes

算法:级别

压缩比

压缩速度(MB/s)

解压缩速度(MB/s)

Brotli:1

5.217

145.2

508.4

Brotli:9

6.253

30.1

508.7

Brotli:11

6.938

0.6

441.8

Deflate:1

4.666

146.9

434.8

Deflate:9

5.528

32.9

484.1

Zopfli

5.77

0.2

460.1

Lzma:1

5.825

7.9

100.5

Lzma:9

6.231

4.4

102.2

Lzham:1

5.58

4.7

168.7

Lzham:9

5.768

0.2

172.7

Bzip2:1

5.71

11

52.3

Bzip2:9

5.867

11.1

52.3

Ebwik8 single file 100M

算法:级别

压缩比

压缩速度(MB/s)

解压缩速度(MB/s)

Brotli:1

2.711

78.3

228.6

Brotli:9

3.308

5.6

279.4

Brotli:11

3.607

0.4

257.4

Deflate:1

2.364

70.8

211.7

Deflate:9

2.742

18.1

217.4

Zopfli

2.857

0.6

227.7

Lzma:1

3.106

9.8

60.6

Lzma:9

3.696

3.44

71.8

Lzham:1

3.335

2.4

177.9

Lzham:9

3.643

0.4

192.2

Bzip2:1

3.007

12.3

30.8

Bzip2:9

3.447

12.4

30.3

  • 参考文献:

1. https://zopfli.googlecode.com/files/Data_compression_using_Zopfli.pdf
2. https://github.com/google/brotli/releases/tag/v0.2.0
3. http://www.zlib.net/
4. https://github.com/google/zopfli/commit/89cf773beef75d7f4d6d378debdf299378c3314e
5. http://www.7­zip.org/history.txt
6. https://github.com/richgel999/lzham_codec/releases/tag/v1_0_stable1
7. http://www.bzip.org/
8. http://corpus.canterbury.ac.nz/
9. http://prize.hutter1.net/
10.https://cran.r-project.org/web/packages/brotli/vignettes/brotli-2015-09-22.pdf

Brotli、Deflate、Zopfli、LZMA、LZHAM、Bzip2六种无损数据压缩性能比较的更多相关文章

  1. 基于LZO的高性能无损数据解压缩IP

    LZOAccel-D LZO Data Decompression Core/无损数据解压缩IP Core LZOAccel-D是一个无损数据解压缩引擎的FPGA硬件实现,兼容LZO 2.10标准. ...

  2. redis无损数据迁移

    在dba眼中,redis仅仅是一个缓存,不适合作为存储来使用,不管是redis-sentinel集群还是cluster集群,在redis主节点发生意外宕机时没有机制来保证主从节点数据的一致性.但是,很 ...

  3. 在ASP.NET Core中使用brotli压缩

    Brotli是一种全新的数据格式,可以提供比Zopfli高20-26%的压缩比.据谷歌研究,Brotli压缩速度同zlib的Deflate实现大致相同,而在Canterbury语料库上的压缩密度比LZ ...

  4. brotli压缩

    brotli压缩 https://www.cnblogs.com/shanyou/p/9154816.html Brotli是一种全新的数据格式,可以提供比Zopfli高20-26%的压缩比.据谷歌研 ...

  5. 让 CDN 更省流量的 Brotli 算法详解

    早年,我还是学生的时候,时常会鼓捣自己的个人网站,其中最困扰我的问题就是源站服务器易崩溃.作为学生,一方面我没有足够的钱购买高质量的服务器,另一方面一年的流量费用算下来也挺贵的,要花掉我不少的生活费. ...

  6. Web服务器处理HTTP压缩之gzip、deflate压缩

    现如今在处理http请求的时候,由于请求的资源较多,如果不启用压缩的话,那么页面请求的流量将会非常大.启用gzip压缩,在一定程度上会大大的提高页面性能.   目录 一.什么是gzip 二.什么是de ...

  7. 十步叫你如何无损修复硬盘锁(mbr病毒)

    经常看见有人被锁硬盘  开机以后出现一行红字 FUCK  YOU POJIEZHE  等等云云的 这个问题主要还是病毒对Mbr分区的修改造成的 下面我教给大家一个无损数据   无损硬盘  无需重装系统 ...

  8. zstd c++ string 压缩&解压

    zstd 简介 维基百科定义: Zstandard(或Zstd)是由Facebook的Yann Collet开发的一个无损数据压缩算法.该名称也指其C语言的参考实现.第1版的实现于2016年8月31日 ...

  9. 『言善信』Fiddler工具 — 8、Fiddler检查器(Inspectors)详解

    目录 1.请求报文内容 2.响应报文内容 3.响应报文中Transformer选项说明 Inspectors意思是检查器.Inspectors可以使用多种方式,查看请求的请求报文和响应报文相关信息. ...

随机推荐

  1. python--爬虫--利用cookie登录网络教学中心刷评论

    声明:本文仅供学习参考 这个功能终于实现了,如果请求太快,很容易被系统发现(输入验证码)所以没用多线程 对于cookie的获取采取手动方式,也可以尝试从浏览器获取cookie,cookie需要转化为字 ...

  2. git入门大全

    前言 以前写个一个git小结,但是实际上并不够用.于是结合实际工作上碰到的一些情况,参考了一些资料,重新总结了一下.目标是在日常工作中不用再去查阅其他的资料了,如果有什么遗漏或者错误的地方,请评论指出 ...

  3. ArrayList 和 LinkedList的执行效率比较

    一.概念: 一般我们都知道ArrayList* 由一个数组后推得到的 List.作为一个常规用途的对象容器使用,用于替换原先的 Vector.允许我们快速访问元素,但在从列表中部插入和删除元素时,速度 ...

  4. JavaScript闭包,只学这篇就够了

    # 闭包不是魔法 这篇文章使用一些简单的代码例子来解释JavaScript闭包的概念,即使新手也可以轻松参透闭包的含义. 其实只要理解了核心概念,闭包并不是那么的难于理解.但是,网上充斥了太多学术性的 ...

  5. 每日Linux命令(1)-date

    显示日期指令:date 1.如果想知道Linux系统的时间,那么可以在shell终端直接输入date命令,时间就会反白显示在终端. ysxy@ubuntu:~$ date Tue Aug :: CST ...

  6. Xen创建新虚拟机

    一.添加一个ISO存储: 右键选择"New Storage Repository-" 选择"ISO Library"中的"Windows File S ...

  7. python标准数据类型

    Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Sets(集合) Dictionary(字典) Python 中的变量不需 ...

  8. 程序设计中的数学思维函数总结(代码以C#为例)

    最近以C#为例,学习了程序设计基础,其中涉及到一些数学思维,我们可以巧妙的将这些逻辑问题转换为代码,交给计算机运算. 现将经常会使用到的基础函数做一总结,供大家分享.自己备用. 1.判断一个数是否为奇 ...

  9. servlet实现登陆注册

    拿到信息必须进行非空验证用servlet做注册登陆时,在form表单的action中不用加后缀.java,jsp文件需要加 public boolean CheckParm(String...args ...

  10. a标签链接到当前页内指定位置

    <a name="me">hello</a><br/><br/><br/><br/><br/>& ...