文件压缩与解压性能对比 lzop, gzip

关于 lzo

LZO is a portable lossless data compression library written in ANSI C.

LZO是一个超级强大的压缩库,最大的特点就是压缩/解压速度极快。LZO 除了极快的压缩和解压速度以外,最重要的特性就是就地解压,即不使用临时文件,这对于体积较大的文件来说,例如光盘映像,是非常合适的。另外,解压无需内存,解压速度与压缩率无关,这两个也是特别棒的特性,相比较小的压缩率(现在随着大硬盘的普及,压缩率与压缩时间相比,前者显得不再那么重要了),速度上的提高带来的优势无疑太巨大了!

关于 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

将库文件复制至/usr/lib,如果是64位系统则是 /usr/lib64
> cp /usr/local/lib/*lzo* /usr/lib64/

否则会在后续执行lzop命令时出现类似如下的提示 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 # 创建test.lzo压缩文件,输出详细信息,保留test文件不变
lzop -Uv test # 创建test.lzo压缩文件,输出详细信息,删除test文件
lzop -t test.lzo # 测试test.lzo压缩文件的完整性
lzop –info test.lzo # 列出test.lzo中各个文件的文件头
lzop -l test.lzo # 列出test.lzo中各个文件的压缩信息
lzop –ls test.lzo # 列出test.lzo文件的内容,同ls -l功能
cat test | lzop > t.lzo # 压缩标准输入并定向到标准输出
lzop -dv test.lzo # 解压test.lzo得到test文件,输出详细信息,保留test.lzo不变
lzop -d test.lzo # 解压,每个文件将与压缩文件放在同一个目录中
lzop -x test.lzo # 将压缩文件解压缩到当前工作目录。这和 -dPp 一样。

压缩级别:从 1 到 9,1表示压缩的最快,9表示压缩的最多,默认是3,数值越大压缩比例越大同时越慢。解压缩速度不受压缩级别的影响。

压缩与解压

生成一个文件 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
压缩格式文件大小压缩时间解压时间
Nonepg135.txt3.16M
GZIPpg135.txt.gz1.32M0.097s0.036s
LZOpg135.txt.lzo1.96M0.030s0.026s

总结:gzip 的压缩率高一些,但是压缩和解压时间比较长。

gzip 参数。

选项含义
-c将压缩数据输出到标准输出中,并保留源文件。
-d对压缩文件进行解压缩。
-r递归压缩指定目录下以及子目录下的所有文件。
-v对于每个压缩和解压缩的文件,显示相应的文件名和压缩比。
-l对每一个压缩文件,显示以下字段:压缩文件的大小;未压缩文件的大小;压缩比;未压缩文件的名称。
-数字用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高。默认压缩比是 -6。

gzip压缩默认会删掉源文件,不过也可以通过参数保留源文件。

gzip -c big_data.log > big_data.log.gz

无论是 gzip 还是 lzop 都是压缩工具,目标是文件,因此不会作用于目录上,通常的做法是先使用 tar 命令将目录打包为 .tar 文件,然后执行压缩,最终得到 .tar.gz文件。

分块与并行处理

lzo 是基于block分块的(约256K),这样他就允许数据被分解成chunk,可以使用并行处理,流式处理。

gzip 压缩方式不能被分块,因此无法并行处理。

bzip2 压缩非常的快,也可以被分块,但是其解压过程非常非常的缓慢。

所谓分块并并行处理,就是先将大文件分块,然后由多个下游程序并行来处理,也就是 mapreduce,那么并行处理的结果需要能够按照正确的顺序合并到一起。

综合考虑

如果要求并行处理,压缩和解押压速度快,那么就选 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

参考

https://blog.thinkeridea.com/201906/go/compress_file_io_optimization1.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值