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 文件系统

Download history 20/week @ 2024-04-02 197/week @ 2024-04-23

每月下载量 815

Apache-2.0

80KB
1.5K SLoC

WNFS Logo

wnfs-namefilter

Docs Code Coverage Build Status License Docs Discord

⚠️ 进行中 ⚠️

名称过滤器是 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