更高、更快、更强,奥运精神的多线程压缩方式测试
本文最后更新于 2778 天前,其中的信息可能已经有所发展或是发生改变。

前言

网站搬家尤其是对那些大网站,动辄几百个 G 的文件真的是整个人都不好了。而且数据传输和解压缩都比较费时。这里就来讲一下,我觉得比较好的搬家压缩、解压方案。

所以说呢,压缩方式这种东西,只有效率更高,压缩更快,支持率更强才是好的压缩,话说还挺符合奥运精神的呢,还好写这篇文字的时候至少残奥会还没有闭幕,不然就 TM 尴尬了。

压缩方式

一般来说,我们可能会使用 gzip 或者 zip 压缩网站目录,但其实压缩率是比较低的。这样我们在输入传输的时候,如果旧的服务器上行带宽非常小的话,真的是能等死人了。

不知道大家有没有体验过,在自己的电脑上,用 Windows 原生的文件浏览器解压 zip 文件慢的可以,但是用某些压缩软件,几乎是秒解压。就是因为专业的压缩软件对多核心、多线程做了优化。

这里推荐 xz 和 bzip2 压缩方案,两者的压缩率都比 gzip 高,前者压缩率最高。但是压缩的耗时就和压缩率完全反一下了。不过,我们可以利用多线程技术进行优化。

介绍

pbzip2

bzip2 有一个多核心支持版本,就是 pbzip2,基于 GNU Parallel 并行计算项目,让 bzip2 可以进行多线程的压缩和解压缩。缩短压缩时间,但是压缩率并没有明显变化。

pbzip2 在各大系统上都有很好的兼容性,这就是为什么压缩率明明比 xz 方式低,却依然要介绍的原因。

安装

Debian/Ubuntu: apt-get install pbzip2'
RHEL/CentOS: yum install pbzip2

XZ Utils

XZ Utils 是为 POSIX 平台开发具有高压缩率的工具。它使用 LZMA2 压缩算法,生成的压缩文件比 POSIX 平台传统使用的 gzip、bzip2 生成的压缩文件更小,而且解压缩速度也很快。已在 Linux 各发行版中广泛使用。最典型的就是 Linux Kernel 内核,4.7.2 版本的 xz 压缩包仅 90.4 MB,解压后能达到 633.0 MB。

但是,XZ 的压缩耗时极其长,且支持多线程压缩的 5.2 版本在各大 Linux 发行版中并没有获得广泛的支持,所以如果想获得更加积极的压缩耗时,就必须自己编译。

安装

 wget http://tukaani.org/xz/xz-5.2.2.tar.xz
 tar -Jxf xz-5.2.2.tar.xz
 cd xz-5.2.2
 
 ./configure --prefix=/usr --docdir=/usr/share/doc/xz-5.2.2
 make && make install
 mv -v   /usr/bin/{lzma,unlzma,lzcat,xz,unxz,xzcat} /bin
 mv -v /usr/lib/liblzma.so.* /lib
 ln -svf ../../lib/$(readlink /usr/lib/liblzma.so) /usr/lib/liblzma.so

对比

这里使用 Pbzip2、Pigz(gzip 的多线程支持版)和 XZ Utils 做对比。
压缩一个 395.1 M 的 PHPCMS 门户网站。

压缩命令

tar zcvf mf8-test1.tar.gz mf8.biz-test   #单线程 gzip 压缩
tar jcvf mf8-test2.tar.bz2 mf8.biz-test  #单线程 bzip2 压缩
tar -c -I pigz -f mf8-test3.tar.gz mf8.biz-test #多线程 gzip 压缩
tar -c -I pbzip2 -f mf8-test4.tar.bz2 mf8.biz-test #多线程 bzip2 压缩
tar -cJf mf8-test5.tar.xz mf8.biz-test -T0 #使用 T0 自动判断多线程 xz 压缩

压缩结果

rice8@mf8-biz-test-Platform:~/test$ ls -lh
总用量 1.7G
drwxrwxr-x 58 ivmm ivmm 4.0K 9月   4 17:06 mf8.biz-test # 395.1 M 的 PHPCMS 目录
-rw-rw-r--  1 ivmm ivmm 306M 9月   4 17:07 mf8-test1.tar.gz #单线程 gzip 压缩结果
-rw-rw-r--  1 ivmm ivmm 286M 9月   4 17:09 mf8-test2.tar.bz2 #单线程 bzip2 压缩结果
-rw-rw-r--  1 ivmm ivmm 293M 9月   4 17:20 mf8-test3.tar.gz #多线程 gzip 压缩结果
-rw-rw-r--  1 ivmm ivmm 286M 9月   4 17:23 mf8-test4.tar.bz2 #多线程 bzip2 压缩结果
-rw-rw-r--  1 ivmm ivmm 238M 9月   5 10:11 mf8-test5.tar.xz #多线程 xz 压缩结果

结果

可见,xz 的压缩率达到 40%,确实是不错的压缩方式,pbzip2 的压缩效果也非常不错。

引用

这是知乎上的一篇文章的图片结果,可能更加直观一点。

图片来自:https://zhuanlan.zhihu.com/p/20926080

上一篇
下一篇