4 个版本
0.1.3 | 2022年2月8日 |
---|---|
0.1.2 | 2022年2月7日 |
0.1.1 | 2022年2月7日 |
0.1.0 | 2022年2月4日 |
#372 in 压缩
每月 54 次下载
22KB
448 行
Shuffly
通过固定大小的记录增加数据的压缩性。
使用示例
使用 shuffly 和 zstd 压缩单个文件
# Compress
cat my_file | shuffly -e | pzstd -o my_file.shuffly.pzstd
# Extract
cat my_file.shuffly.pzstd | pzstd -d | shuffly -d --output my_file
使用 tar、shuffly 和 zstd 压缩文件夹
# Compress
tar -cf - my_folder | shuffly -e | pzstd -o my_folder.tar.shuffly.pzstd
# Extract
cat my_folder.tar.shuffly.pzstd | pzstd -d | shuffly -d | tar -xvf -
安装
可以使用 Cargo 安装 CLI 应用
cargo install shuffly
示例
压缩以 osmflat 格式存储的 OpenStreetMap 数据是 shuffly
可以显著提高压缩比率的一个很好的例子。
以下表格显示了原始数据使用 zstd 与 shuffly 结合使用 zstd 压缩的情况。
使用 pzstd -4
在将 planet 数据集转换为 osmflat 后进行压缩。下表列出了所有大于 1 GB 的文件。
文件 | 原始大小 | 压缩 (zstd) | 压缩 (shuffly + zstd) |
---|---|---|---|
nodes | 103.62 GB | 45.69% | 29.79% |
nodes_index | 40.97 GB | 50.17% | 25.27% |
ids/nodes | 34.54 GB | 51.99% | 1.44% |
tags_index | 11.95 GB | 18.99% | 19.73% |
ways | 7.70 GB | 33.71% | 7.95% |
ids/ways | 3.85 GB | 53.68% | 1.78% |
stringtable | 1.92 GB | 40.51% | 40.78% |
tags | 1.20 GB | 28.36% | 24.45% |
relation_members | 1.09 GB | 24.53% | 27.12% |
工作原理
Shuffly
通过尝试 1 到 64 字节之间不同大小的模式来检测固定大小的数据模式。对于每个模式,它重新排列字节,使得每个记录的 X 字节分组在一起,并存储这些字节的增量而不是原始数据。
结果数据流对于基于模式的压缩算法(如 deflate /gz、zip 等)、zstd 或 lzma 等来说具有更高的压缩性。
依赖项
~6MB
~106K SLoC