SBF在如下三种情况将出现问题。
①对于单机应用且集合为KUB时,SBF需要分配很大的空间来保证元素个数达到上限时依然有效,即假阳率不超过上限。由于需要预先分配较大空间,这种方法降低了SBF的空间效率,尤其是当这个动态集合在大部分时间元素个数都保持在一个较低的层次时,SBF空间利用率极低。因此,考虑设计一种随着集合规模改变而改变自身大小的布隆滤波,对于提高布隆滤波的空间利用率非常有意义。
②对于单机应用且集合为NKUB时,一般很难估计集合大小的上限,因此无法确定SBF的相关参数。当元素个数超过估计值时,SBT将会因为误判率超过阈值而变得不可用。
③对于分布式应用来说,所有的结点需要对SBF采用相同的配置来保证互操作性。在这种情况下,当某一个结点的SBF、误判率达到上限需要修改配置重新构建布隆滤波时,其他所有结点也需要修改成相同的配置并重新构建布隆滤波,这将不可避免地产生大量的开销。此外,一些结点上集合个数很小,但是为了保证相同的配置,其SBF占用的空间需要和其他结点上集合个数很大的SBF、的空间保持一致,这也降低了空间效率。
为了解决以上SBF的三个问题,Guo等[10]提出了动态布隆滤波的思想,在动态集合元素个数改变时可以动态地调整DBF的长度而不用像SBF需要重新构建。DBF的主要优势在于如下三个方面。
①在单机应用中,DBF可以扩充其容量,并且在元素个数增长时将其假阳率控制在某个指定范围内。此外,DBF可以支持数据删除与合并。
②在分布式应用中,DBF总能够满足结点问配置的一致性,同时避免SBF产生的空间浪费和通信开销。
③无论在单机应用还是分布式应用中,对于KUB的集合,DBF相对于SBF总能使用较少的存储空间;对于NKUB的集合,DBF、相对于SBF、表现得更加稳定即布隆滤波重构的次数更少。
下面对动态布隆滤波进行详细的理论分析。
(1)动态布隆滤波的定义DBF是由s个同构的SBF组成的。所谓同构是指这些SBF使用相同的哈希空间大小m和和k个哈希函数。由于DBF要支持元素的删除操作,因此这里每一个SBF都是计数布隆滤波。
展开