GZIP、LZO、Zippy/Snappy是常用的几种压缩算法,各自有其特点,因此适用的应用场景也不尽相同。这里结合相关工程实践的情况,做一次小结。
压缩算法的比较
以下是Google几年前发布的一组测试数据(数据有些老了,有人近期做过测试的话希望能共享出来):
Algorithm % remaining Encoding Decoding
GZIP 13.4% 21 MB/s 118 MB/s
LZO 20.5% 135 MB/s 410 MB/s
Zippy/Snappy 22.2% 172 MB/s 409 MB/s
注:来自《HBase: The Definitive Guide》
其中:
1)GZIP的压缩率最高,但是其实CPU密集型的,对CPU的消耗比其他算法要多,压缩和解压速度也慢;
2)LZO的压缩率居中,比GZIP要低一些,但是压缩和解压速度明显要比GZIP快很多,其中解压速度快的更多;
3)Zippy/Snappy的压缩率最低,而压缩和解压速度要稍微比LZO要快一些。
BigTable和HBase中压缩算法的选择
BigTable中采用的是Zippy算法,目标是达到尽可能快的压缩和解压速度,同时减少对CPU的消耗。
HBase中,在Snappy发布之前(Google 2011年对外发布Snappy),采用的LZO算法,目标和BigTable类似;在Snappy发布之后,建议采用Snappy算法(参考《HBase: The Definitive Guide》),具体可以根据实际情况对LZO和Snappy做过更详细的对比测试后再做选择。
实际项目中的实践经验
项目中使用clearspring公司开源的基数估计的概率算法:stream-lib,用于解决去重计算问题,如UV计算等,它的特点在于:
1)一个UV的计算,可以限制在一个固定大小的位图空间内完成(不同大小,对应不同的误差率),如8K,64K;
2)不同的位图可以进行合并操作,得到合并后的UV。
当系统中维护的位图越多的时候,不管是在内存中,还是在存储系统(MySQL、HBase等)中,都会占用相当大的存储空间。因此,需要考虑采取合适的算法来压缩位图。这里分为以下两类情况:
1)当位图在内存中时,此时压缩算法的选择,必须有尽可能快的压缩和解压速度,同时不能消耗过多CPU资源,因此,适合使用LZO或Snappy这样的压缩算法,做到快速的压缩和解压;
2)当位图存储到DB中时,更关注的是存储空间的节省,要有尽可能高的压缩率,因此,适合使用GZIP这样的压缩算法,同时在从内存Dump到DB的过程也可以减少网络IO的传输开销。
引自:http://www.cnblogs.com/panfeng412/archive/2012/12/24/applications-scenario-summary-of-compression-algorithms.html
总结的话
以上是对GZIP、LZO、Zippy/Snappy压缩算法特点的概括比较,以及一些实践上的方法。如有不对之处,欢迎大家指正,讨论。
分享到:
相关推荐
GZIP、LZO、Zippy/Snappy是三种广泛使用的数据压缩算法,每种算法都有其特定的应用场景和性能特点,合理选择压缩算法对于提升系统性能和节约资源至关重要。 首先,GZIP是一种广泛使用的文件压缩工具,它基于DEFLATE...
总结来说,MapReduce支持多种压缩算法,包括Gzip、Snappy和Lzo,以适应不同场景的需求。在处理大规模数据时,合理选择和使用压缩算法可以显著优化存储和计算效率。同时,了解各种压缩算法的特点和性能,对于优化...
**Lzo压缩算法详解与VS2005实践** ...然而,LZO的压缩比通常低于其他更复杂的压缩算法,如DEFLATE(gzip/zlib所使用)或LZ4。因此,在考虑使用LZO时,应权衡速度、内存占用和压缩比之间的关系,以满足特定项目的需求。
LZO的特点在于其简单性和速度,但相比其他压缩算法(如DEFLATE,用于gzip和zip),它的压缩比通常较低。 在"lzo-2.02"这个压缩包中,我们可以找到LZO压缩库的源代码版本2.02。这个版本包含了LZO算法的核心实现,...
LZO(Lempel-Ziv-Oberhumer)压缩算法是一种快速、轻量级的数据压缩算法,由V. Lempel、A. Ziv和P. Oberhumer在1986年提出。这种算法主要适用于实时数据压缩,因为它的速度非常快,但压缩率相对较低,通常用于内存...
STM32移植MINI LZO 2.09压缩算法是一项在...然而,需要注意的是,虽然LZO速度快,但其压缩比可能不如其他更复杂的压缩算法(如DEFLATE,用于gzip和zip),因此在选择算法时应根据具体应用场景权衡速度和压缩效果。
DELPHI ZLO压缩算法是一种在编程领域中用于数据压缩的技术,特别在游戏资源压缩方面广泛应用。该算法以其快速的解压速度和低内存占用而受到青睐。在本文中,我们将深入探讨ZLO压缩算法的基本原理、优势以及如何在...
Snappy相较于其他常见的压缩算法(如bzip2、gzip、lzo等)具有以下优势: 1. **速度快**:Snappy的设计重点在于快速压缩和解压缩速度,这对于大量数据的实时处理非常重要。 2. **较低的CPU消耗**:与其他高压缩比的...
LZO(Lempel-Ziv-Oberhumer)是一种快速但压缩率较低的压缩算法,适用于需要快速解压的应用场景。LZ(Lempel-Ziv)是广泛使用的压缩算法家族,包括多种变体,如LZ77和LZ78。Snappy是由Google开发的压缩算法,它强调...
尽管Snappy的压缩比可能不如其他算法如Gzip或LZO,但它的速度优势使得在处理海量数据时,总体性能得到了提升。 Hadoop中使用Snappy的具体方式包括: 1. **HDFS配置**:用户可以在HDFS配置文件中(hdfs-site.xml)...
Snappy以其较高的解压速度和较低的压缩率著称,尤其适用于需要快速读取大量数据的场景。 在HBase中,数据是以表的形式存储的,每个表被分割成多个Region,每个Region又由多个StoreFile组成。为了减少存储空间并优化...
LZO(Lempel-Ziv-Oberhumer)压缩算法是一种高效的无损数据压缩算法,由Martin Lempel、Abraham Ziv和Jürgen Oberhumer在1985年提出。它以其快速的压缩和解压缩速度而著名,尤其适用于内存受限的系统。在纯Pascal...
lzo压缩算法,windows 32位。lzop is a file compressor which is very similar to gzip. lzop uses the LZO data compression library for compression services, and its main advantages over gzip are much ...
Snappy是由Google开发的,旨在提供高速的压缩和解压缩速度,尽管它的压缩率相比其他压缩算法(如Gzip或LZO)较低,但其快速的性能在大数据处理中具有显著优势。在Hadoop生态系统中,数据压缩对于降低存储成本、提高...
总的来说,LZO算法及其minilzo实现,为我们提供了一种快速、轻便的数据压缩解决方案,特别适合那些对实时性有较高要求的应用。通过理解其工作原理和使用方法,我们可以更好地利用这些工具,优化我们的数据处理流程。
Snappy在压缩率上可能略逊于Gzip,但其压缩和解压缩速度更快,更适合大数据实时处理场景。因此,根据具体应用的需求,选择合适的压缩算法至关重要。 总的来说,hadoop-snappy的java包简化了Hadoop中使用Snappy压缩...