数据库常用压缩算法比较

比较不同压缩算法trade off

压缩的本质是减少IO操作,从而带来更快的读写操作。需要用CPU周期来对IO性能进行tradeoff。

但是同时还要考虑到实际应用的性能需求,如实时性、吞吐等。不同压缩算法的cost不同,因此需要综合考虑。

评估压缩算法的指标

  • 压缩比 compression ratio
  • 吞吐 throughput
  • 压缩速度 compression speed
  • 解压速度 decompression speed
  • 内存 memory

图中给出的是java-based benchmarking,重点比较gzip和snappy两种最通用的算法。

绿色的指标是compression ratio,越小越好;黄色的指标是throughput,越大越好。

gzip的压缩比例优于snappy,但snappy的吞吐高于gzip。

如何选择适合的压缩算法

  • 选择的压缩算法需要能够支持配置的big data environment(Spark、HIVE、presto、parquet、hadoop、S3、kafka等)
  • 能够支持serialization format
  • 考虑数据的生命周期以及访问模式!
    (对于声明周期长但访问不频繁的cold data可以选择gzip压缩算法,频繁访问的hot data可以选择snappy压缩算法)
  • key wordload&split-ability
    (比如gzip就是不能支持split的数据,所以如果使用hadoop这种map reduce的应用,不选用gzip压缩算法)

Snappy压缩算法原理

snappy(又称zippy)是google开源的压缩算法,目标不是最大化压缩比例或者与其他压缩库的兼容性,而是压缩速度和合理的压缩比例。例如与zlib的最快模式相比,Snappy对于大多数输入都会快一个量级,但生成的压缩文件会大20%到100%。

snappy算法基于LZ77进行优化,因为LZ77的匹配过程时间复杂度太高。

具体可以参考 https://zzjw.cc/post/snappy/#snappy

Gzip压缩算法原理


数据库常用压缩算法比较
http://example.com/2022/11/08/数据库常用压缩算法比较/
作者
Jiayi Guo
发布于
2022年11月8日
许可协议