5 个版本
0.1.23 | 2023年9月5日 |
---|---|
0.1.21 | 2023年6月14日 |
0.1.20 | 2023年3月30日 |
0.1.19 | 2023年3月23日 |
0.1.18 | 2023年3月23日 |
#1037 in 文件系统
每月下载量 815
80KB
1.5K SLoC
⚠️ 进行中 ⚠️
名称过滤器是 2048 位 Bloom 过滤器。它们可以使用 30 个哈希值以十亿分之一错误的概率存储 47 个路径段。
许多 Bloom 过滤器实现优化了速度,而不是一致性。我们选择了 XXH32(即 32 位)算法。对于 256 位(即小)数据,它几乎与 XXH64 一样快。XXH32 非常便携。它可以在 JavaScript 的数字系统中实现(截至撰写时间,ES2021 及更早版本)。它还可以在任意 32 位机器上本地实现,或者在具有 32 位兼容模式的常见 64 位机器上,例如 AMD64。然而,对于每个插入到 Bloom 过滤器的元素,我们都需要 k = 30 个不同的哈希函数。
我们从第一次使用种子 0 和 1 的 XXH32 调用以及增强的双哈希方案(§5.2,算法 2)中获得这些哈希函数,以从前两个生成更多的哈希函数。在我们的情况下,增强的双哈希方案在 32 位无符号整数算术上操作。结果哈希值取模 m = 2048,将这些哈希值转换为累加器的索引。
用法
use wnfs_namefilter::Namefilter;
let mut filter = Namefilter::default();
filter.add(&[0xF5u8; 32]);
filter.saturate();
assert!(filter.contains(&[0xF5u8; 32]));
依赖项
~5–12MB
~126K SLoC