6 个版本 (重大变更)
0.5.1 | 2021年9月8日 |
---|---|
0.5.0 | 2021年8月29日 |
0.4.0 | 2021年3月13日 |
0.3.0 | 2021年3月10日 |
0.1.0 | 2020年3月18日 |
#688 在 算法 类别中
每月下载量 2,790 次
在 8 个crate中 使用(直接使用3个)
83KB
2K SLoC
Rust 实现的异或过滤器库
在 rust-lang 中实现了 Xor Filters: Faster and Smaller Than Bloom and Cuckoo Filters,发表于《实验算法杂志》(待发表)。
此包是从其 golang 实现版本 转换而来。
如何在 Rust 项目中使用 xorfilter?
在项目的 Cargo.toml
中添加以下内容
[dependencies]
xorfilter-rs = "0.2.0"
或
[dependencies]
xorfilter-rs = { git = "https://github.com/bnclabs/xorfilter" }
use xorfilter::Xor8;
let mut keys: Vec<u64> = vec![];
for _ in 0..num_keys {
keys.push(rng.gen());
}
let mut filter = Xor8::new(); // new filter.
filter.populate_keys(&keys); // populate keys.
filter.build(); // build bitmap.
for key in 0..lookup {
// there can be false positives, but no false negatives.
filter.contains_key(key);
}
打开问题
- 序列化/反序列化 Xor8 类型。
- 向预先构建的 Xor8 实例逐步添加密钥。
- 收集其他实现(Go、C、C++、Erlang、Java、Python)的基准测试结果。
基准测试
以下是针对 1000 万个 u64
密钥的测试结果
构建 10M 密钥 | 成员资格 | 假阳性率 | 每条记录的位数 | |
---|---|---|---|---|
Xor8-C | 1.206 秒 | NA | 0.389 % | 9.84 位 |
Xor8-rust | 1.809 秒 | 61.716 纳秒 | 0.392 % | 9.84 位 |
Fuse8-C | 0.508 秒 | NA | 0.390 % | 9.02 位 |
Fuse8-rust | 0.577 秒 | 42.657 纳秒 | 0.392 % | 9.02 位 |
Fuse16-C | 0.515 秒 | NA | 0.001 % | 18.04 位 |
Fuse16-rust | 0.621 秒 | 54.657 纳秒 | 0.001 % | 18.03 位 |
- 构建时间 以秒为单位,针对 1000 万条记录。
- 成员资格 以纳秒为单位,针对 1000 万条记录中的一个查找。
- 假阳性率 以百分比表示