简单的Bloom Filter中,如果集合中的元素个数不断增加,那么位数组价格无法保持最初的设计目标,会致使查找误差不断加大,最终导致Bloom Filter的算法不可用,在实际应用中的Hash函数个数k,以及采用的位数组大小m往往是固定的,尤其在分布式的环境下,往往希望维护全局一直的m和k,这种情况下的元素增加势必导致很多混乱。
Split bloom filter的基本思想是使用s个位串向量表达数据集合。在插入元素时,一旦集合中元素个数达到一定程度影响了最初设计的误差率指标,那么就计算出采用多个位串向量表达数据集合才能保持想要的误差率,然后按照新的位串向量数目更新位串向量集。如果元素的增加没有达到集合数目允许的最大向量数目,则在现有位串向量中随机选择一个来表达新的元素。在查询元素x时,只要s个位串向量中有一个向量的k个相关位同时被置为1,那么x属于该集合。
拆分Bloom Filter使用l*m的位串矩阵表达集合S = {s1,s2,...,sn},设有k个具有均匀分布特性的hash函数hi,则