标签:res and 数组 内容 就会 font 评估 dynamic stand
布隆过滤器是一个高效的数据结构,用于集合成员查询,具有非常低的空间复杂度。 |
基本情况 布隆过滤器是一个含有 m 个元素的位数组(元素为0或1),在刚开始的时候,它的每一位都被设为0。同时还有 k 个独立的哈希函数 h1, h2,..., hk 。需要将集合中的元素加入到布隆过滤器中,然后就可以支持查询了。说明如下:
|
假阳性率评估
最后得出:
|
最佳的哈希函数数量
|
部分布隆过滤器(partial bloom filters)
|
标准的布隆过滤器有一个致命的缺点:不支持删除元素。CBF协议解决的这个问题。 |
|
在网络应用中,布隆过滤器通常被作为信息在各节点间传送,为了节约资源,自然而然就想能不能压缩布隆过滤器后再传送。 |
|
上面提到的计算布隆过滤器存在这样的缺点:存储空间是标准布隆过滤器的数倍(取决于计数值的位数)和计数值的不均匀(有些始终为0,有些则可能溢出)。下面看看 D-left Counting Bloom Filters 的特点。D-left Counting Bloom Filters 基于 D-left Hashing。 |
D-left Hashing 基本结构
插入操作
假设有 d 个子表,元素为 x,哈希函数为 f
|
D-left Counting Bloom Filters 由上可知,d-left Hashing 的计数值最大为零,不支持删除操作,为了将它变成可 Counting,可以让它的计数值变成由多位组成。但这样依然会出现问题,如下:
|
为什么会出现上面的情况?由三个因素促成
|
如何解决? 说实话,没看懂英文描述的内容。。。。大致是做了排列置换等操作 性能分析 比普通的计算布隆过滤器空间少了一半甚至更多,而且效率也有提升(假阳性更低) |
Counting Bloom Filters 可以进行元素的删除操作,然而却不能记录一个元素被映射的频率,而且很多应用中元素出现的频率相差很大,也就是说,CBF中每个计数值的位数一样,那么有些计数值很快就会溢出,而另一些则一直都很小。这些问题可以被 Spectral Bloom Filters 解决。 |
在SBF中,每一个计数值的位数都是动态改变的。它的构造我没看懂,先留着吧 |
Spectral bloom filter 被提出来解决元素频率查询问题,但是,它构造了一个复杂的索引数据结构去解决动态计算器的存储问题。Dynamic counting bloom filter(比SBF好理解多了) 是一个空间时间都很高效的数据结构,支持元素频率查询。相比于SBF,在实际应用中(计数器不是很大,改变不是很频繁时)它有更快的访问时间和更小的内存消耗。 |
构成部分
|
特点
|
Summary Cache 在网络中有极大的资源请求,如果所有的请求都由服务器来处理,网络就会出现拥堵,性能就会下降。所以网络中有大量的中间代理节点。这些代理会把一部分资源放在自己的本地缓存,当用户向服务器请求资源时,该代理先会检查该资源是否在自己的缓存中,如果在就直接发送给用户,否则再向服务器请求。一个代理能够存储的资源是非常有限的,为了进一步减轻服务器的负载,网络中相邻的代理都可以共享自己的缓存。这样,当代理 A 本地缓存没有时,就会向相邻代理广播请求,查询他们是否有该缓存。 然而,这样依旧有很大问题,假设,这里有 N 个代理,每个代理的命中率为 H,一个代理平均请求 R 次,那么广播中,一个代理收到的查询信息共有 (N-1) * (1-H) * R 条,总共的请求也就是 N * (N-1) * (1-H) * R。这是非常低效的。 再次改进,各个代理之间交换自己缓存的摘要信息。这样,当代理 A 失败后,会先查询各个代理的摘要信息,然后决定是定向向某个代理请求,还是向服务器请求资源。这就大大的减少了网络通信量。为了满足快速查询、更新摘要信息,一个非常好的选择就是计算布隆过滤器(Counting bloom filters)。 |
IP Traceback 网络中存在许多攻击,有时候需要根据一些数据包去还原IP路径,找到攻击者。一个可行的办法是在路由器中存储数据包信息。然而,有些网络中通信量巨大,存储所有的包是不现实的,因此可以存储这些包的摘要信息。这时,选用布隆过滤器可以极大的节省空间,而且具有非常快的查询。 |
布隆过滤器(Bloom Filters)的原理及实现(Python + Java)
标签:res and 数组 内容 就会 font 评估 dynamic stand
原文地址:https://www.cnblogs.com/Gouhongshen/p/13519717.html