Go语言Bloom过滤器md说明

Bloom filters

Bloom过滤器是集合的简明/压缩表示,其中主要要求是进行成员资格查询;i、 例如,项目是否为集合的成员。当元素确实存在时,布卢姆过滤器将始终正确报告集合中元素的存在。Bloom过滤器可以使用比原始集少得多的存储空间,但它允许一些“误报”:有时它可能报告某个元素在该集中,而它不在该集中。

当你构建时,你需要知道你有多少元素(期望的容量),以及你愿意容忍的期望假阳性率是多少。常见的假阳性率为1%。假阳性率越低,需要的内存就越多。同样,容量越大,使用的内存就越多。您可以按以下方式构造能够接收100万个元素、误报率为1%的Bloom过滤器。

    filter := bloom.NewWithEstimates(1000000, 0.01) 

您应该保守地调用“NewWithEstimates”:如果您指定了许多元素,那么它就是
如果太小,可能会超过假阳性界限。Bloom过滤器不是动态数据结构:
你必须提前知道你想要的能力是什么。
我们的实现接受用于设置和测试的键作为“[]字节”。因此
添加字符串项Love

    filter.Add([]byte("Love"))

同样的, 我们测试 "Love" 在Bloom过滤器中:

    if filter.Test([]byte("Love"))

对于数值数据,我们建议您查看编码/二进制库。但是,例如,在过滤器中添加uint32

    i := uint32(100)
    n1 := make([]byte, 4)
    binary.BigEndian.PutUint32(n1, i)
    filter.Add(n1)

安装

go get -u github.com/bits-and-blooms/bloom/v3

贡献

如果您想为该项目做出贡献,请分支并向Master发出拉动请求 (“GitHub Flow”)

该项目包括一个允许您使用简单命令测试和构建项目的Makefile。

查看所有可用选项:

make help

运行测试

在进行代码之前,请检查是否使用所有测试(注意:这将安装一些依赖项):

make deps
make qa

构思设计

Bloom过滤器具有两个参数:M,存储中使用的位数和K,在集合元素上的哈希功能数量。(实际的哈希功能也很重要,但这不是此实现的参数)。Bloom过滤器由BITSet支持;通过在哈希函数的每个值(Modulo M)处设置位,在滤波器中表示一个键。设置成员资格是通过测试是否设置了哈希函数的每个值(再次,modulo m)来完成的。如果是这样,则该项目在集合中。如果该项目实际上在集合中,则Bloom过滤器将永远不会失败(真正的正率为1.0);但是它容易受到误报的影响。艺术是正确选择k和m。

在此实现中,使用的哈希功能是Murmurhash,这是一种非晶状体哈希功能。

鉴于特定的散列计划,最好对此进行经验。笔记

估计FP速率将清除BLOOM过滤器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值