#数据 #记录 #扁平数据 #增加 #固定大小 #压缩性

bin+lib shuffly

通过固定大小的记录增加数据的压缩性

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 压缩

Download history 13/week @ 2024-04-06 5/week @ 2024-04-13 10/week @ 2024-04-20 6/week @ 2024-04-27 1/week @ 2024-05-04 6/week @ 2024-05-11 10/week @ 2024-05-18 16/week @ 2024-05-25 31/week @ 2024-06-01 22/week @ 2024-06-08 13/week @ 2024-06-15 12/week @ 2024-06-22 12/week @ 2024-06-29 16/week @ 2024-07-06 11/week @ 2024-07-13 14/week @ 2024-07-20

每月 54 次下载

MIT 许可证

22KB
448

Shuffly

build docs package

通过固定大小的记录增加数据的压缩性。

使用示例

使用 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