lz4/lz4
GitHub: lz4/lz4
LZ4是一款追求极致速度的无损压缩算法,以极小压缩率代价换取每核500MB/s以上的压缩速度和数GB/s的解压速度,适合对实时性要求高的数据处理场景。
Stars: 11679 | Forks: 1522
# LZ4 - 极速压缩
LZ4 是无损压缩算法,
提供每核 > 500 MB/s 的压缩速度,
可随多核 CPU 扩展。
它具有极快的解码器,
速度可达每核数 GB/s,
通常在多核系统上达到 RAM 速度极限。
速度可以动态调整,通过选择“acceleration”因子
以牺牲压缩比换取更快的速度。
另一方面,也提供了高压缩比的衍生版本 LZ4_HC,
以消耗更多 CPU 时间换取更高的压缩比。
所有版本都具有相同的解压速度。
LZ4 也兼容 [字典压缩](https://github.com/facebook/zstd#the-case-for-small-data-compression),
在 [API](https://github.com/lz4/lz4/blob/v1.8.3/lib/lz4frame.h#L481) 和 [CLI](https://github.com/lz4/lz4/blob/v1.8.3/programs/lz4.1.md#operation-modifiers) 层面均支持。
它可以接收任何输入文件作为字典,但仅使用最后的 64KB。
此功能可与 [Zstandard Dictionary Builder](https://github.com/facebook/zstd/blob/v1.3.5/programs/zstd.1.md#dictionary-builder) 结合使用,
以大幅提升小文件的压缩性能。
LZ4 库作为开源软件提供,使用 BSD 2-Clause 许可证。
## 基准测试
基准测试使用 @inikep 的 [lzbench]
在 Linux 64位 (Ubuntu 4.18.0-17) 上使用 GCC v8.2.0 编译。
参考系统使用 Core i7-9700K CPU @ 4.9GHz (w/ turbo boost)。
基准测试评估单线程模式下参考 [Silesia Corpus] 的压缩。
| 压缩器 | 因子 | 压缩 | 解压 |
| ---------- | ----- | ----------- | ------------- |
| memcpy | 1.000 | 13700 MB/s | 13700 MB/s |
|**LZ4 default (v1.9.0)** |**2.101**| **780 MB/s**| **4970 MB/s** |
| LZO 2.09 | 2.108 | 670 MB/s | 860 MB/s |
| QuickLZ 1.5.0 | 2.238 | 575 MB/s | 780 MB/s |
| Snappy 1.1.4 | 2.091 | 565 MB/s | 1950 MB/s |
| [Zstandard] 1.4.0 -1 | 2.883 | 515 MB/s | 1380 MB/s |
| LZF v3.6 | 2.073 | 415 MB/s | 910 MB/s |
| [zlib] deflate 1.2.11 -1| 2.730 | 100 MB/s | 415 MB/s |
|**LZ4 HC -9 (v1.9.0)** |**2.721**| 41 MB/s | **4900 MB/s** |
| [zlib] deflate 1.2.11 -6| 3.099 | 36 MB/s | 445 MB/s |
## 安装
```
make
make install # this command may require root permissions
```
LZ4 的 `Makefile` 支持标准的 [Makefile conventions],
包括 [staged installs], [redirection], 或 [command redefinition].
它兼容并行构建 (`-j#`)。
### 构建 LZ4 - 使用 vcpkg
您可以使用 [vcpkg](https://github.com/Microsoft/vcpkg) 依赖管理器下载并安装 LZ4:
```
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg.exe install lz4
```
vcpkg 中的 LZ4 移植版本由 Microsoft 团队成员和社区贡献者保持最新。如果版本过时,请在 vcpkg 仓库中 [创建 issue 或 pull request](https://github.com/Microsoft/vcpkg)。
## 文档
原始 LZ4 块压缩格式在 [lz4_Block_format] 中详细说明。
任意长度的文件或数据流使用多个块进行压缩,
以满足流式传输需求。这些块被组织成一个帧,
定义在 [lz4_Frame_format] 中。
LZ4 的互操作版本也必须遵守帧格式。
## 其他源代码版本
除了 C 参考源代码外,
许多贡献者已经创建了多种语言版本的 lz4
(Java, C#, Python, Perl, Ruby 等)。
已知源代码移植列表在 [LZ4 Homepage] 上维护。
### 打包状态
大多数发行版都捆绑了包管理器
允许轻松安装 `liblz4` 库
和 `lz4` 命令行界面。
[](https://repology.org/project/lz4/versions)
### 特别感谢
- Takayuki Matsuoka, aka @t-mat,感谢其在项目生命周期内提供的卓越的一流支持
标签:BSD许可, LZ4, LZ4_HC, 压缩算法, 基础架构, 大数据, 字典压缩, 实时压缩, 客户端加密, 开源库, 搜索引擎爬虫, 文件压缩, 无损压缩, 目录扫描, 系统工具, 编解码器