阿里云
阿里云多端小程序中小企业获客首选
发表主题 回复主题
  • 5412阅读
  • 3回复

[解决方案]更高、更快、更强,奥运精神的多线程压缩方式

级别: 论坛版主
发帖
9349
云币
14165
— 本帖被 不靠谱贝贝 设置为精华(2016-12-06) —
yuND0,e  
u{si  
n[<Vj1n  
前言 pl%ag~i5  
E 0YXgQa  
送给 https://bbs.aliyun.com/read/301503.html 的帖子 )Aj~ xA  
bz@4obRqf  
PffRV7qU0  
网站搬家尤其是对那些大网站,动辄几百个 G 的文件真的是整个人都不好了。而且数据传输和解压缩都比较费时。这里就来讲一下,我觉得比较好的搬家压缩、解压方案。 Cu}Rq!9i  
所以说,压缩方式这种东西,只有效率更高,压缩更快,支持率更强才是好的压缩,话说还挺符合奥运精神的呢,还好写这篇文字的时候至少残奥会还没有闭幕,不然就 TM 尴尬了。 A2xORG&FD  
JI.ad_IR  
压缩方式 b747eR 7E  
2D "mq~ V  
JV@>dK8  
djk   
一般来说,我们可能会使用 gzip 或者 zip 压缩网站目录,但其实压缩率是比较低的。这样我们在输入传输的时候,如果旧的服务上行带宽非常小的话,真的是能等死人了。 h5F1mr1Sa  
不知道大家有没有体验过,在己的电脑上,用 Windows 原生的文件浏览器解压 zip 文件慢的可以,但是用某些压缩软件,几乎是秒解压。就是因为专业的压缩软件对多核心、多线程做了优化。 ;yH/GN#O  
这里推荐 xz 和 bzip2 压缩方案,两者的压缩率都比 gzip 高,前者压缩率最高。但是压缩的耗时就和压缩率完全反一下了。不过,我们可以利用多线程技术进行优化。 L./UgeZ  
Zf|f $1-  
介绍 ^NP" m  
 +&|WC2#  
hF6EOCY6D  
pbzip2 &DgIykqN  
^58'*13ZL  
bzip2 有一个多核心支持版本,就是 pbzip2,基于 GNU Parallel 并行计算项目,让 bzip2 可以进行多线程的压缩和解压缩。缩短压缩时间,但是压缩率并没有明显变化。 GX\/2P7CZ  
pbzip2 在各大系统上都有很好的兼容性,这就是为什么压缩率明明比 xz 方式低,却依然要介绍的原因。 4rv3D@E  
zc(- dMlK  
安装 Nhs]U`s(g  
DI+kO(S  
Debian/Ubuntu:
  1. apt-get install pbzip2
P\SE_*&  
)PZ'{S  
RHEL/CentOS:
  1. yum install pbzip2
]U]{5AA6  
2uz<n}IV  
XZ Utils HdLVXaD/  
&AC-?R|Dp  
XZ Utils 是为 POSIX 平台开发具有高压缩率的工具。它使用 LZMA2 压缩算法,生成的压缩文件比 POSIX 平台传统使用的 gzip、bzip2 生成的压缩文件更小,而且解压缩速度也很快。已在 Linux 各发行版中广泛使用。最典型的就是 Linux Kernel 内核,4.7.2 版本的 xz 压缩包仅 90.4 MB,解压后能达到 633.0 MB。 w+ bMDp  
.I[uXd  
Z|E( !"zE9  
但是,XZ 的压缩耗时极其长,且支持多线程压缩的 5.2 版本在各大 Linux 发行版中并没有获得广泛的支持,所以如果想获得更加积极的压缩耗时,就必须自己编译。 iz>a0~(K  
IeE+h-3p  
安装 (1*?2u*j  
  1. wget http://tukaani.org/xz/xz-5.2.2.tar.xz
  2. tar -Jxf xz-5.2.2.tar.xz
  3. cd xz-5.2.2
  4. ./configure --prefix=/usr --docdir=/usr/share/doc/xz-5.2.2
  5. make && make install
  6. mv -v   /usr/bin/{lzma,unlzma,lzcat,xz,unxz,xzcat} /bin
  7. mv -v /usr/lib/liblzma.so.* /lib
  8. ln -svf ../../lib/$(readlink /usr/lib/liblzma.so) /usr/lib/liblzma.so
TR| G4l?  
W%) foJ  
R:zjEhH )  
对比 .BuY[,I+  
anHP5gD  
dX` _Y  
这里使用 Pbzip2、Pigz(gzip 的多线程支持版)和 XZ Utils 做对比。 $}N'm  
压缩一个 395.1 M 的 PHPCMS 门户网站。 19h8p>Sx0  
KR#Bj?fz-H  
+ ,0RrD )  
压缩命令 n~k;9`  
  1. tar zcvf mf8-test1.tar.gz mf8.biz-test   #单线程 gzip 压缩
  2. tar jcvf mf8-test2.tar.bz2 mf8.biz-test  #单线程 bzip2 压缩
  3. tar -c -I pigz -f mf8-test3.tar.gz mf8.biz-test #多线程 gzip 压缩
  4. tar -c -I pbzip2 -f mf8-test4.tar.bz2 mf8.biz-test #多线程 bzip2 压缩
  5. tar -cJf mf8-test5.tar.xz mf8.biz-test -T0 #使用 T0 自动判断多线程 xz 压缩
H;%a1  
D:M0_4S  
压缩结果 4, 8gf2  
8g^OXZ   
=2# C{u.  
  1. rice8@mf8-biz-test-Platform:~/test$ ls -lh
  2. 总用量 1.7G
  3. drwxrwxr-x 58 ivmm ivmm 4.0K 9月   4 17:06 mf8.biz-test # 395.1 M 的 PHPCMS 目录
  4. -rw-rw-r--  1 ivmm ivmm 306M 9月   4 17:07 mf8-test1.tar.gz #单线程 gzip 压缩结果
  5. -rw-rw-r--  1 ivmm ivmm 286M 9月   4 17:09 mf8-test2.tar.bz2 #单线程 bzip2 压缩结果
  6. -rw-rw-r--  1 ivmm ivmm 293M 9月   4 17:20 mf8-test3.tar.gz #多线程 gzip 压缩结果
  7. -rw-rw-r--  1 ivmm ivmm 286M 9月   4 17:23 mf8-test4.tar.bz2 #多线程 bzip2 压缩结果
  8. -rw-rw-r--  1 ivmm ivmm 238M 9月   5 10:11 mf8-test5.tar.xz #多线程 xz 压缩结果
UPA))Iv>  
BB>3Kj:|  
结果 "EDn;l-Q  
Q];+?Pu.  
/EA4-#uw  
可见,xz 的压缩率达到 40%,确实是不错的压缩方式,pbzip2 的压缩效果也非常不错。 8tY],  
esWgYAc3{  
x/R|i%u-s  
引用 52,pCyU  
P10`X&  
级别: 论坛版主
发帖
3606
云币
2556
只看该作者 沙发  发表于: 2016-12-06
安装个试试效果
我的中国 教程整理:https://bbs.aliyun.com/read/317306.html
级别: 论坛版主
发帖
9349
云币
14165
只看该作者 板凳  发表于: 2016-12-06
回 1楼(我的中国) 的帖子
去high吧~
级别: 架构狮
发帖
1217
云币
1946
只看该作者 地板  发表于: 2018-01-23
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: 59 + 22 = ?
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)