1 个不稳定版本

使用旧Rust 2015

0.1.0 2018年5月5日

#20 in #bincode

MIT许可证

10KB
201

IBLT

在Rust中实现的可逆布隆查找表。

IBLT使用bincode进行键和值的序列化/反序列化,因此键和值类型必须实现SerializeDeserialize。如果两个序列化值长度不同,则在较短的值末尾添加零填充以进行异或操作。

可以通过使用IBLTwith_hasher函数指定哈希函数。对hash_sum的哈希值计算为hash(val),索引计算为hash(hash(val)), hash(hash(hash(val))), ...。如果没有指定hasher,则使用DefaultHasherstd::collections::hash_map

示例

  /// encoding
  let mut iblt = IBLT::new(10, 3);
  target.insert("378b8bc3".to_string(), "4725a63a".to_string());
  target.insert("3f84ef5a".to_string(), "fbfc32d3".to_string());
  target.insert("8afb596f".to_string(), "40abfd05".to_string());
  target.insert("ec276396".to_string(), "a866db2e".to_string());
  target.insert("e785c851".to_string(), "0603063c".to_string());

  /// decoding
  match iblt.decode() {
    Ok((left, right)) => { ... },
    Err(e) => { ... },
  }

待办

  • 减法和集合协调
  • 使用std的不安全序列化/反序列化

依赖项

~340–590KB
~14K SLoC