關(guān)于 lzo
LZO is a portable lossless data compression library written in ANSI C.
LZO是一個(gè)超級(jí)強(qiáng)大的壓縮庫,最大的特點(diǎn)就是壓縮/解壓速度極快。LZO 除了極快的壓縮和解壓速度以外,最重要的特性就是就地解壓,即不使用臨時(shí)文件,這對(duì)于體積較大的文件來說,例如光盤映像,是非常合適的。另外,解壓無需內(nèi)存,解壓速度與壓縮率無關(guān),這兩個(gè)也是特別棒的特性,相比較小的壓縮率(現(xiàn)在隨著大硬盤的普及,壓縮率與壓縮時(shí)間相比,前者顯得不再那么重要了),速度上的提高帶來的優(yōu)勢無疑太巨大了!
關(guān)于 lzop
lzop is a file compressor which is very similar to [gzip](http://www.gzip.org/). lzop uses the [LZO data
compression library](http://www.oberhumer.com/opensource/lzo/) for compression services, and its main
advantages over gzip are much higher compression and decompression speed (at the cost of some compression
ratio).
直接yum安裝
> yum install -y lzop
或者編譯安裝
先要安裝LZO庫
> cd /usr/local
> wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz
> tar -xzf lzo-2.10.tar.gz
> cd /usr/local/lzo-2.10
> ./configure --enable-shared
> make && make install
從輸出的信息看,lzo庫被安裝在了 /usr/local/lib
將庫文件復(fù)制至/usr/lib,如果是64位系統(tǒng)則是 /usr/lib64
> cp /usr/local/lib/*lzo* /usr/lib64/
否則會(huì)在后續(xù)執(zhí)行l(wèi)zop命令時(shí)出現(xiàn)類似如下的提示 lzop: error while loading shared libraries: liblzo2.so.2: cannot open shared object file: No such file or directory
> ls /usr/lib64/*lzo*
/usr/lib64/liblzo2.a /usr/lib64/liblzo2.la /usr/lib64/liblzo2.so /usr/lib64/liblzo2.so.2 /usr/lib64/liblzo2.so.2.0.0
編譯安裝 lzop工具
> cd /usr/local
> wget http://www.lzop.org/download/lzop-1.04.tar.gz
> tar -xzf lzop-1.04.tar.gz
> cd lzop-1.04
> ./configure
> make && make install
> lzop -V
Lempel-Ziv-Oberhumer Packer
Copyright (C) 1996 - 2017
lzop v1.04 Markus Franz Xaver Johannes Oberhumer Aug 10th 2017
lzop version: v1.04, Aug 10th 2017
lzop build date: Feb 23 2023 11:18:26
使用
> lzop --help
Lempel-Ziv-Oberhumer Packer
Copyright (C) 1996 - 2010
lzop v1.03 Markus Franz Xaver Johannes Oberhumer Nov 1st 2010
Usage: lzop [-dxlthIVL19] [-qvcfFnNPkUp] [-o file] [-S suffix] [file..]
Commands:
-1 compress faster -9 compress better
-d decompress -x extract (same as -dPp)
-l list compressed file -I display system information
-t test compressed file -V display version number
-h give this help -L display software license
Options:
-q be quiet -v be verbose
-c write on standard output -oFILE write output to 'FILE'
-p write output to current dir -pDIR write to path 'DIR'
-f force overwrite of output files
-n do not restore the original file name (default)
-N restore the original file name
-P restore or save the original path and file name
-S.suf use suffix .suf on compressed files
-U delete input files after successful operation (like gzip and bzip2)
file.. files to (de)compress. If none given, try standard input.
lzop -v test # 創(chuàng)建test.lzo壓縮文件,輸出詳細(xì)信息,保留test文件不變
lzop -Uv test # 創(chuàng)建test.lzo壓縮文件,輸出詳細(xì)信息,刪除test文件
lzop -t test.lzo # 測試test.lzo壓縮文件的完整性
lzop –info test.lzo # 列出test.lzo中各個(gè)文件的文件頭
lzop -l test.lzo # 列出test.lzo中各個(gè)文件的壓縮信息
lzop –ls test.lzo # 列出test.lzo文件的內(nèi)容,同ls -l功能
cat test | lzop > t.lzo # 壓縮標(biāo)準(zhǔn)輸入并定向到標(biāo)準(zhǔn)輸出
lzop -dv test.lzo # 解壓test.lzo得到test文件,輸出詳細(xì)信息,保留test.lzo不變
lzop -d test.lzo # 解壓,每個(gè)文件將與壓縮文件放在同一個(gè)目錄中
lzop -x test.lzo # 將壓縮文件解壓縮到當(dāng)前工作目錄。這和 -dPp 一樣。
壓縮級(jí)別:從 1 到 9,1表示壓縮的最快,9表示壓縮的最多,默認(rèn)是3,數(shù)值越大壓縮比例越大同時(shí)越慢。解壓縮速度不受壓縮級(jí)別的影響。
壓縮與解壓
生成一個(gè)文件 pg135.txt
,大小3.16M
> time gzip -3 pg135.txt
real 0m0.097s
user 0m0.078s
sys 0m0.031s
> time lzop pg135.txt
real 0m0.030s
user 0m0.016s
sys 0m0.016s
> time gzip -d pg135.txt.gz
real 0m0.036s
user 0m0.031s
sys 0m0.000s
> time lzop -d pg135.txt.lzo
real 0m0.026s
user 0m0.000s
sys 0m0.031s
壓縮格式 | 文件 | 大小 | 壓縮時(shí)間 | 解壓時(shí)間 |
---|---|---|---|---|
None | pg135.txt | 3.16M | ||
GZIP | pg135.txt.gz | 1.32M | 0.097s | 0.036s |
LZO | pg135.txt.lzo | 1.96M | 0.030s | 0.026s |
總結(jié):gzip 的壓縮率高一些,但是壓縮和解壓時(shí)間比較長。
gzip 參數(shù)。
選項(xiàng) | 含義 |
---|---|
-c | 將壓縮數(shù)據(jù)輸出到標(biāo)準(zhǔn)輸出中,并保留源文件。 |
-d | 對(duì)壓縮文件進(jìn)行解壓縮。 |
-r | 遞歸壓縮指定目錄下以及子目錄下的所有文件。 |
-v | 對(duì)于每個(gè)壓縮和解壓縮的文件,顯示相應(yīng)的文件名和壓縮比。 |
-l | 對(duì)每一個(gè)壓縮文件,顯示以下字段:壓縮文件的大小;未壓縮文件的大??;壓縮比;未壓縮文件的名稱。 |
-數(shù)字 | 用于指定壓縮等級(jí),-1 壓縮等級(jí)最低,壓縮比最差;-9 壓縮比最高。默認(rèn)壓縮比是 -6。 |
gzip壓縮默認(rèn)會(huì)刪掉源文件,不過也可以通過參數(shù)保留源文件。
gzip -c big_data.log > big_data.log.gz
無論是 gzip 還是 lzop 都是壓縮工具,目標(biāo)是文件,因此不會(huì)作用于目錄上,通常的做法是先使用 tar 命令將目錄打包為 .tar
文件,然后執(zhí)行壓縮,最終得到 .tar.gz
文件。
分塊與并行處理
lzo 是基于block分塊的(約256K),這樣他就允許數(shù)據(jù)被分解成chunk,可以使用并行處理,流式處理。
gzip 壓縮方式不能被分塊,因此無法并行處理。
bzip2 壓縮非常的快,也可以被分塊,但是其解壓過程非常非常的緩慢。
所謂分塊并并行處理,就是先將大文件分塊,然后由多個(gè)下游程序并行來處理,也就是 mapreduce,那么并行處理的結(jié)果需要能夠按照正確的順序合并到一起。
綜合考慮
如果要求并行處理,壓縮和解押壓速度快,那么就選 lzo;如果單純的追求壓縮比,那么選 gzip。
其他
golang封裝lzo:https://github.com/cyberdelia/lzo
lzo 壓縮算法原理 https://blog.csdn.net/wo6694458/article/details/76099768
gzip 壓縮算法原理 https://www.jianshu.com/p/4033028e5570
參考文章來源:http://www.zghlxwxcb.cn/news/detail-435423.html
https://blog.thinkeridea.com/201906/go/compress_file_io_optimization1.html文章來源地址http://www.zghlxwxcb.cn/news/detail-435423.html
到了這里,關(guān)于文件壓縮與解壓性能對(duì)比 lzop, gzip的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!