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
Brotli、Deflate、Zopfli、LZMA、LZHAM、Bzip2六种无损数据压缩性能比较的更多相关文章
- 基于LZO的高性能无损数据解压缩IP
		LZOAccel-D LZO Data Decompression Core/无损数据解压缩IP Core LZOAccel-D是一个无损数据解压缩引擎的FPGA硬件实现,兼容LZO 2.10标准. ... 
- redis无损数据迁移
		在dba眼中,redis仅仅是一个缓存,不适合作为存储来使用,不管是redis-sentinel集群还是cluster集群,在redis主节点发生意外宕机时没有机制来保证主从节点数据的一致性.但是,很 ... 
- 在ASP.NET Core中使用brotli压缩
		Brotli是一种全新的数据格式,可以提供比Zopfli高20-26%的压缩比.据谷歌研究,Brotli压缩速度同zlib的Deflate实现大致相同,而在Canterbury语料库上的压缩密度比LZ ... 
- brotli压缩
		brotli压缩 https://www.cnblogs.com/shanyou/p/9154816.html Brotli是一种全新的数据格式,可以提供比Zopfli高20-26%的压缩比.据谷歌研 ... 
- 让 CDN 更省流量的 Brotli 算法详解
		早年,我还是学生的时候,时常会鼓捣自己的个人网站,其中最困扰我的问题就是源站服务器易崩溃.作为学生,一方面我没有足够的钱购买高质量的服务器,另一方面一年的流量费用算下来也挺贵的,要花掉我不少的生活费. ... 
- Web服务器处理HTTP压缩之gzip、deflate压缩
		现如今在处理http请求的时候,由于请求的资源较多,如果不启用压缩的话,那么页面请求的流量将会非常大.启用gzip压缩,在一定程度上会大大的提高页面性能. 目录 一.什么是gzip 二.什么是de ... 
- 十步叫你如何无损修复硬盘锁(mbr病毒)
		经常看见有人被锁硬盘 开机以后出现一行红字 FUCK YOU POJIEZHE 等等云云的 这个问题主要还是病毒对Mbr分区的修改造成的 下面我教给大家一个无损数据 无损硬盘 无需重装系统 ... 
- zstd c++ string 压缩&解压
		zstd 简介 维基百科定义: Zstandard(或Zstd)是由Facebook的Yann Collet开发的一个无损数据压缩算法.该名称也指其C语言的参考实现.第1版的实现于2016年8月31日 ... 
- 『言善信』Fiddler工具 — 8、Fiddler检查器(Inspectors)详解
		目录 1.请求报文内容 2.响应报文内容 3.响应报文中Transformer选项说明 Inspectors意思是检查器.Inspectors可以使用多种方式,查看请求的请求报文和响应报文相关信息. ... 
随机推荐
- js验证15位或18位身份证
			本篇文章是本人在网上搜集了一些验证,然后又个人进行一定修改的关于身份证的验证,欢迎修改指正..... function IdCardValidateRule(idCard) { var tip; ... 
- 【转】Hdu--4135  Co-prime
			Problem Description Given a number N, you are asked to count the number of integers between A and B ... 
- 异步加载回来的数据不受JS控制了
			写成下面这种方式时,异步加载回来的数据不受JS控制 $(."orderdiv").click(function(){ $(this).find(".orderinfo&q ... 
- 特殊的ip地址
			特殊IP地址 一.0.0.0.0 严格说来,0.0.0.0已经不是一个真正意义上的IP地址了.它表示的是这样一个集合:所有不清楚的主机和目的网络.这里的“不清楚”是指在本机的路由表里没有特定条目指明如 ... 
- IDE eclipse PyDev插件安装
			Python安装成功后,即要配置开发环境,这里选用Eclipse, 在Eclipse中安装PyDev插件,有多种方法,这里介绍最最常用的两种. 1)使用Eclipse安装插件,打开eclipse,进入 ... 
- Python pyspider 安装与开发
			PySpider 简介 PySpider是一个国人编写的强大的网络爬虫系统并带有强大的WebUI.采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器.任务监视器, ... 
- 使用pg_upgrade工具为PostgreSQL进行版本升级
			公司的测试环境和生产环境都是9.2.4版本,而开发环境是9.0.18版本. PS: 不知道公司里的其它同事,是如何做数据库迁移的,利用第三方可视化工具备份数据库,然后恢复到其它高版本的环境?反正我没成 ... 
- linux守护进程、SIGHUP与nohup详解
			前端时间帮忙定位个问题.docker容器故障恢复后,其中的keepalived进程始终无法启动,也看不到Keepalived的日志. strace 查看系统调用之后,发现了原因所在 socket(PF ... 
- 巧妙利用JS中的自定义函数——化繁为简,提高效率
			利用自定义函数编写年月日时间表: (复杂写法)如下: <body> <select id="year" size="1&q ... 
- 使用TensorFlow创建第变量定义和运行方式
			import tensorflow as tf# 熟悉tensorflow的变量定义和运行方式v1 = tf.Variable(2) #定义变量并给变量赋值v2 = tf.Variable(48) c ... 
