# snappy **Repository Path**: kunpengcompute/snappy ## Basic Information - **Project Name**: snappy - **Description**: No description available - **Primary Language**: Unknown - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-03-09 - **Last Updated**: 2025-06-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Snappy - 高速压缩器/解压缩器 ## 简介 Snappy 是一个快速压缩/解压缩库。它**不追求最大压缩率**,也不追求与其他压缩库的兼容性,而是专注于**极致的速度和合理的压缩率**。与 zlib 的最快模式相比,Snappy 在大多数输入上快一个数量级,但压缩文件会大 20%-100%(详见下方“性能”部分)。 核心特性: - **极速**:压缩速度超 250 MB/秒,解压超 500 MB/秒(无汇编代码) - **稳定**:在 Google 生产环境中处理过 PB 级数据,比特流格式永不变更 - **健壮**:解压器可安全处理损坏或恶意输入 - **开源**:采用 BSD 许可证(详见 COPYING 文件) > 注:Snappy 曾用名 "Zippy" ## 性能表现 在 64 位 Core i7 单核上: - 压缩速度:≥ 250 MB/秒 - 解压速度:≥ 500 MB/秒 (基准测试中最慢输入的数据,其他场景更快) 典型压缩率对比: | 数据类型 | Snappy 压缩率 | zlib (最快模式) | |------------|---------------|-----------------| | 纯文本 | 1.5-1.7x | 2.6-2.8x | | HTML | 2-4x | 3-7x | | JPEG/PNG | 1.0x | 1.0x | 平台优化说明: - 主要优化 64 位 x86 架构 - 利用 64 位操作批量处理数据 - 依赖非对齐 32/64 位读写(大端平台需转换) - 全流程小端序设计 ## 安装构建 ### 基础编译 ```bash # 需 CMake (版本见 CMakeLists.txt) mkdir build cd build cmake ../ make ``` ### 鲲鹏平台优化 (Gitee) ```bash # 使用华为鲲鹏优化参数 cmake -DCMAKE_CXX_FLAGS="-O3 -mcpu=tsv110" -DSNAPPY_BUILD_TESTS=ON .. make ``` ## 使用指南 ### C++基础用法 ```c++ #include "snappy-c.h" char* input; size_t input_length; char* output; size_t output_length; // 压缩 snappy_compress(input, input_length, &output, &output_length); // 解压 snappy_uncompress(output, output_length, &input, &input_length); ``` ### C语言绑定 (snappy-c.h) ```c #include "snappy-c.h" char* input; size_t input_length; char* output; size_t output_length; // 压缩 snappy_compress(input, input_length, &output, &output_length); // 解压 snappy_uncompress(output, output_length, &input, &input_length); ``` ### 高级用法(Gitee扩展) ```c++ // 1. 字符串直接压缩 snappy::Compress("Hello Snappy!", &compressed); // 2. 缓冲区校验解压 if (snappy::IsValidCompressedBuffer(data, length)) { snappy::Uncompress(data, length, &uncompressed); } // 3. 获取解压后长度 size_t uncompressed_length; snappy::GetUncompressedLength(compressed.data(), compressed.size(), &uncompressed_length); ``` ## 测试与基准 ### 编译测试套件 ```bash # 启用测试 (默认关闭) cmake -DSNAPPY_BUILD_TESTS=ON .. make snappy_unittest ``` ### 关键组件 #### 1、单元测试 验证正确性(推荐安装 Google Test) #### 2、微基准测试 ```bash ./snappy_unittest --run_microbenchmarks=true ``` #### 3、多库对比测试 ```bash # 对比zlib (需预先安装) ./snappy_unittest --zlib testdata/html ``` ## 应用场景 根据 Gitee 案例,Snappy 常用于: - 分布式系统(Hadoop, Spark) - 实时日志处理 - 数据库压缩(LevelDB/RocksDB) - 网络传输优化 - 不适合冷存储/高压缩率场景 ## 故障排查 ```bash # 1. 编译失败时清除缓存 rm CMakeCache.txt # 2. 大端平台支持 cmake -DSNAPPY_REQUIRE_AVX=OFF .. # 3. 测试依赖缺失 sudo apt install libgtest-dev libgflags-dev ``` ## 项目资源 - GitHub 主仓库:https://github.com/google/snappy - Gitee 镜像站:https://gitee.com/kunpengcompute/snappy - 问题追踪:GitHub Issues ## 参与贡献 ```bash 如果您想为本仓库贡献代码,请向本仓库任意maintainer发送邮件 如果您找到产品中的任何Bug,欢迎您提出ISSUE ```