Snappy 快速压缩工具

发布时间: 更新时间: 总字数:809 阅读时间:2m 作者:IP:上海 网址

Snappy(也称Zippy)是Google基于LZ77的思路用C++语言编写的快速数据压缩与解压程序库,在2011年开源

介绍

  • Snappy 的特点是非常高的速度和合理的压缩率
    • 使用一个运行在64位酷睿i7处理器的单个核心,压缩速度250 MB/s,解压速度500 MB/s
    • 压缩率比gzip低20-100%
  • Stream format
  • 应用
    • Google 内部的 BigTable、MapReduce 等
    • 开源数据库,如 Cassandra、Couchbase、Hadoop、LevelDB、MongoDB、RocksDB、Lucene、Spark 和 InfluxDB
  • 源码
  • lib 库实现

安装

snappy lib

apt update
apt install cmake gcc build-essential -y

# wget https://github.com/google/snappy/archive/refs/tags/1.1.10.tar.gz
# tar -zxvf snappy-1.1.10.tar.gz
# cd snappy-1.1.10

git clone https://github.com/google/snappy.git -b 1.1.10
cd snappy
git submodule update --init

mkdir build
cd build
cmake ../
make
make install

# cmake -S $(pwd) -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo
# cmake --build build --target install --config "RelWithDebInfo"

# 安装在如下目录
-- Up-to-date: /usr/local/lib/libsnappy.a
-- Up-to-date: /usr/local/include/snappy-c.h
-- Up-to-date: /usr/local/include/snappy-sinksource.h
-- Up-to-date: /usr/local/include/snappy.h
-- Up-to-date: /usr/local/include/snappy-stubs-public.h

说明:

  • libsnappy.a 是 snappy 的静态库
  • snappy-stubs-public.h 是 snappy 头文件

验证 snappy lib

可跳过该步骤

  • test.cc
#include "snappy.h"
#include <string>
#include <iostream>
int main() {
    std::string s = "abc";
    std::string d;
    std::cout<<"original:"<<s<<std::endl;
    snappy::Compress(s.data(), s.size(), &d);
    std::cout<<"result:"<<d<<std::endl;
    std::cout<<"original-size:"<<s.size()<<" result-size:"<<d.size()<<std::endl;
    return 0;
}
$ g++ -o example test.cc -lsnappy
$ ./example
original:abc
resultabc
original-size:3 result-size:5

snzip

  • snzip 基于snappy的压缩/解压缩命令行工具
# 由于官方的包仅能编译出 libsnappy.a,安装 libsnappy-dev,参考 https://packages.ubuntu.com/search?keywords=libsnappy-dev
apt install libsnappy-dev

wget https://github.com/kubo/snzip/releases/download/v1.0.5/snzip-1.0.5.tar.gz
tar xvfz snzip-1.0.5.tar.gz
cd snzip-1.0.5
./configure --with-default-format=snzip
make
make install
  • ps 基于 snappy 1.1.10 构建,需要为 Makefile 打补丁,参考 的 snappy_1.1.10-1.debian.tar.xz,如下:
build_static_lib.patch ...

help

snzip -h ...

使用示例

# 压缩
$ snzip snzip-1.0.5.tar.gz

# 解压
$ snzip -d snzip-1.0.5.tar.gz.snz

lib

Python

  • 安装
pip install python-snappy
  • 使用
# python2
import snappy
compressed = open('/tmp/temp.snappy').read()
snappy.uncompress(compressed)

# python3
import snappy
compressed = open('/tmp/temp.snappy','rb').read()
print(snappy.uncompress(compressed).decode(encoding='utf-8',errors="ignore"))
本文总阅读量 次 本站总访问量 次 本站总访客数