这里比较了六种数据压缩算法,结果表明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. nopCommerce 3.9 大波浪系列 之 外部授权登录插件的开发实现

    一.简介 nop支持第三方外部授权登录的扩展,本篇通过编写微信公众平台登录插件进一步了解nop授权登录的开发过程. 微信公众平台.微信开放平台使用场景不一样,前者通过微信客户端进行开发如公众号,后者基 ...

  2. trie从入门到入殓

    trie是什么?1. 字典树 2.集合 (其实两个都对啊喂) 一颗普通的trie树一般类似于这样(图片来源于http://dongxicheng.org/structure/trietree/): 绿 ...

  3. js判断移动终端(手机浏览器)

    方法1: <script type="text/javascript">         var browser = {             versions: f ...

  4. android四大组件学习总结以及各个组件示例(1)

    android四大组件分别为activity.service.content provider.broadcast receiver. 一.android四大组件详解 1.activity (1)一个 ...

  5. Java中StringBuffer类append方法的使用

    public static void testAppend() { StringBuffer sb = new StringBuffer("This is a StringBuffer!&q ...

  6. windows 注入 之 CreateRemoteThread

    钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到达后,在目标窗口处理函数之前处理它.钩子机 ...

  7. 集合-TreeSet-Comparator

    package com.bjpowernode.tree2; public class Student { private String name; private int age; public S ...

  8. Promise与异步

    不知道promise,大家现在用了吗?如果还不了解的话,今天就来对了-基础的了解起来- 正文从这开始- 接触过promise的的都知道它的应用场景和用途,Promise可以用来避免异步操作函数里的嵌套 ...

  9. 深入解析Javascript异步编程

    这里深入探讨下Javascript的异步编程技术.(P.S. 本文较长,请准备好瓜子可乐 :D) 一. Javascript异步编程简介 至少在语言级别上,Javascript是单线程的,因此异步编程 ...

  10. mysql 5.7 怎么修改默认密码、随机密码

    当你使用 mysql -u root -p 登陆mysql的时候,提示下方要输入密码.而这个密码不是我们刚刚安装mysql时设置的那个密码.而且安装完mysql 生成的随机密码 那么我们在哪里找到这个 ...