#varint #numbers #stream #simd #variable-length #port

stream-vbyte

在 Stream VByte 编码中高效地压缩和解压缩数字

7 个不稳定版本

0.4.1 2023年5月23日
0.4.0 2021年11月27日
0.3.2 2017年10月12日
0.2.0 2017年10月4日
0.1.0 2017年9月30日

#60 in 压缩

Download history 3515/week @ 2024-04-23 1862/week @ 2024-04-30 1346/week @ 2024-05-07 2194/week @ 2024-05-14 1665/week @ 2024-05-21 2182/week @ 2024-05-28 2411/week @ 2024-06-04 2206/week @ 2024-06-11 1529/week @ 2024-06-18 947/week @ 2024-06-25 1277/week @ 2024-07-02 1221/week @ 2024-07-09 1145/week @ 2024-07-16 2167/week @ 2024-07-23 2848/week @ 2024-07-30 2693/week @ 2024-08-06

8,924 每月下载量
用于 granne

自定义许可证

155KB
2K SLoC

Build Status

将 Stream VByte 移植到 Rust 的库。

Stream VByte 是一种变长无符号整数编码,旨在提高 SIMD 处理的效率。

有关格式的详细信息,请参阅 https://lemire.me/blog/2017/09/27/stream-vbyte-breaking-new-speed-records-for-integer-compression/https://arxiv.org/pdf/1709.08990.pdf。参考 C 实现为 https://github.com/lemire/streamvbyte

用法

请参阅文档

使用 CLI 示例进行尝试

提供了一个 cli.rs 示例,演示了编码和解码。

要编码一些数字,请将数字(每行一个)提供给 stdin,编码结果将被写入 stdout。

使用 jot 生成数字 1100 的示例:jot 100 | cargo run --example cli -- enc | base64

输出,已移除 cargo build 输出("Encoded ..." 在 stderr 上,便于人类阅读)

Encoded 100 numbers
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8g
ISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ
WltcXV5fYGFiY2Q=

存在相应的解码模式,它从 stdin 读取编码格式并输出内容,每行一个数字。在这里,我们先编码一些数字,然后再解码它们:jot 10 | cargo run --example cli -- enc | cargo run --example cli -- dec -c 10

Encoded 10 numbers
1
2
3
4
5
6
7
8
9
10
Decoded 10 numbers

维护者

生成查找表

cargo run --example generate_decode_table > tmp/tables.rs && mv tmp/tables.rs src/tables.rs

运行测试(在最近的 Intel 处理器上)

RUSTFLAGS='-C target-feature=+ssse3,+sse4.1' cargo +nightly test --all-features

运行基准测试

RUSTFLAGS='-C target-feature=+ssse3,+sse4.1' cargo +nightly bench --all-features

无运行时依赖