#bloom-filter #filter #bloom #scalable #serde #deserialize

可扩展布隆过滤器

支持serde的 scalable Bloom Filters

12个版本 (6个稳定版)

2.1.0 2024年1月4日
2.0.1 2021年6月26日
2.0.0 2021年4月27日
1.0.3 2021年4月3日
0.2.1 2019年11月3日

#76 in 数据结构

Download history 12629/week @ 2024-03-14 12401/week @ 2024-03-21 8221/week @ 2024-03-28 12849/week @ 2024-04-04 12388/week @ 2024-04-11 16424/week @ 2024-04-18 18020/week @ 2024-04-25 13509/week @ 2024-05-02 15702/week @ 2024-05-09 18085/week @ 2024-05-16 19308/week @ 2024-05-23 21821/week @ 2024-05-30 16082/week @ 2024-06-06 16004/week @ 2024-06-13 19823/week @ 2024-06-20 17381/week @ 2024-06-27

73,660 每月下载量
用于 12 个crate (4个直接使用)

MIT 协议

38KB
538

img

可扩展布隆过滤器

CRATES.IO | 文档

概述

Scalable Bloom Filters的实现,同时提供serde序列化和反序列化。

布隆过滤器允许你使用insert插入项,然后使用contains测试关联。它空间和时间效率高,但以假阳性为代价。特别是,如果contains返回true,它可能在过滤器中。但如果contains返回false,它肯定不在布隆过滤器中。

你可以通过适当地设置desired_error_probest_insertions来控制失败率。

use growable_bloom_filter::GrowableBloom;

// Create and insert into the bloom filter
let mut gbloom = GrowableBloom::new(0.05, 1000);
gbloom.insert(&0);
assert!(gbloom.contains(&0));

// Serialize and Deserialize the bloom filter
use serde_json;

let s = serde_json::to_string(&gbloom).unwrap();
let des_gbloom: GrowableBloom = serde_json::from_str(&s).unwrap();
assert!(des_gbloom.contains(&0));

// Builder API
use growable_bloom_filter::GrowableBloomBuilder;
let mut gbloom = GrowableBloomBuilder::new()
    .estimated_insertions(100)
    .desired_error_ratio(0.05)
    .build();
gbloom.insert(&0);
assert!(gbloom.contains(&0));

应用

布隆过滤器通常用作预缓存以避免昂贵的操作。例如,如果你需要询问一万个服务器是否有数据XYZ,你可以使用GrowableBloom来确定哪些服务器没有XYZ。

稳定性

序列化和反序列化的布隆过滤器可以在不同的平台上传输和使用,不受端序、架构或字大小的限制。

请注意,稳定性仅保证在同一主要版本内。

从1.x升级到2.x

  • 任何1.x序列化的布隆过滤器将无法在2.x中加载。
  • 其他API更改不大。

依赖项

~0.5–1.1MB
~26K SLoC