Brotli、Deflate、Zopfli、LZMA、LZHAM、Bzip2六种无损数据压缩性能比较
这里比较了六种数据压缩算法,结果表明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.7zip.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
最新文章
- 关于一个新的DOM选择器querySelector
- 迅为4412开发板支持AVIN视频输入/AV监控摄像头输入模块
- Quartz.Net在windows服务中的使用
- hashMap底层put和get方法逻辑
- 负margin居中
- linux系统下将php和mysql命令加入到环境变量中的方法
- Cummins INSITE locked and ask for verification code
- 脱机BT transmission
- Java日志工具之SLF4J
- Pytest高级进阶之Fixture
- canvas一些属性
- 关于NETCORE中的捆绑与最小化 以及与CDN连用
- 生成表结构数据库文档sql语句
- 关于linux中SSH爆破总结
- [题目] Luogu P1312 Mayan游戏
- 对微软Microsoft Dynamics CRM 的认识
- vux组件简单使用请大佬指点
- 用C++编写发布器和订阅器节点
- python3 tkinter 桌面软件教程
- springboot多数据源动态切换和自定义mybatis分页插件
热门文章
- Head First 设计模式 第3章 装饰者模式
- [BZOJ 3629][ JLOI2014 ]聪明的燕姿
- webdriver
- github的基本使用
- Android studio 使用问题汇总
- Oracle12c 在windonServer2012中安装的步骤
- js面试题知识点全解(一原型和原型链1)
- 【秒懂】号称最为简明实用的Django上手教程
- 【转】深入探讨 Java 类加载器
- C#使用Xamarin开发可移植移动应用进阶篇(6.使用渲染器针对单个平台自定义控件..很很很很重要..),附源码