布隆过滤器的元素增加、删除方法以及布隆过滤器的制作方法

文档序号:6605287阅读:325来源:国知局
专利名称:布隆过滤器的元素增加、删除方法以及布隆过滤器的制作方法
技术领域
本发明涉及元素查询匹配的算法领域,尤其涉及一种布隆过滤器的元素增加、删 除方法以及布隆过滤器。
背景技术
在设计计算机软件时,经常需要判断一个元素是否在一个集合中。判断元素是否 在集合中最直接的方法就是将集合中的全部元素存储在计算机中,遇到一个新元素时,将 它和集合中的元素直接进行比较。但是为了提高查找的速度,通常使用散列表来存储集合。 散列表是一种根据元素的关键码值来快速映射其存储位置的数据结构,其优点在于能够快 速准确的判断元素是否在集合中,而缺点则在于需要较大的存储空间。当集合中存储的元 素较少时,该缺点并不显著,但是随着集合中元素的增多,当集合元素很庞大时,散列表存 储空间的问题就显现出来了。布隆过滤器应用而生,布隆过滤器由巴顿布隆于一九七零年提出,其原理如下一
个布隆过滤器由k个相互独立的散列函数hl,h2,......,hk和一个长度为m的位向量组
成,其中,每个散列函数的值域均为{1,......,m},且位向量的所有的位均初始化为0。假
设集合S中包含n个元素,用k个散列函数对集合S中的每一个元素都计算一个散列序列
值(hl(s), h2(s),......,hk(s)),然后将位向量中与该散列序列值对应的位均设为1,则
称该布隆过滤器装入了数据元素集合S,或者说该布隆过滤器表示了数据元素集合S。例如 若hi (si) = 5,则将位向量的第5位设为l,h2(sl) =10,则将位向量的第10位设为1,直 到hk(sl) = n,将位向量的第n位设为1,则称布隆过滤器中装入了数据元素sl,当集合S 中的每一个数据元素均装入布隆过滤器中,则称布隆过滤器表示了数据元素集合S。当查询 某个数据元素是否在集合S中时,用同样的k个散列函数对数据元素计算一个散列序列,如 果散列序列所对应的位向量上的每一位均为1,则认为该数据元素属于S,否则不属于S。与完全存储数据相比,采用布隆过滤器,能够节省存储空间,而且使用布隆过滤器 最大的优点在于绝不会漏掉任何一个属于集合中的元素。但是在实际应用中,由于一个布 隆过滤器同时表示集合中的多个元素,即位向量的同一位可能同时被多个不同的元素多次 置1,因此在通过布隆过滤器进行元素查询时,可能会出现“假通过”的现象,即将不属于集 合中的元素误判为属于布隆过滤器的集合中。而且布隆过滤器所表示的元素越多,假通过 率将会越大。但是在实际应用中,只要这种假通过的概率是使用者可以接受的,使用布隆过 滤器来进行元素查找便不会出现任何问题。因而在假通过率可接受的前提下,布隆过滤器 能够很好的解决存储空间的问题,不失为一种很好的进行元素查询的方法。但是传统的布隆过滤器还是会存在一些不足之处,例如当布隆过滤器表示的集合 中的元素需要动态地增加或删除时,传统的布隆过滤器便会无法较好的适应。具体地,当需 要删除布隆过滤器表示的集合中的某个元素时,位向量的每一位将无法确定具体的值,因 而必须要对整个布隆过滤器的位向量进行重建;而当需要在集合中增加元素时,随着集合 元素的增加,布隆过滤器的假通过率会不断攀升,因而可能最终会导致假通过率超出使用者可接受的范围。因此在这种情况下,若要使假通过率仍然在可接受的范围内时,则需要在 集合元素增加时,也重建整个布隆过滤器的位向量。当集合中的元素较少时,重建整个布隆 过滤器的问题可能并不显著,但当集合元素很庞大的时候,重建布隆过滤器所带来的时间 开销是不容忽视的。

发明内容
本发明提供一种布隆过滤器的元素增加、删除方法以及布隆过滤器,用以克服现 有的布隆过滤器在增加集合元素时,容易导致布隆过滤器的假通过率不断上升,而超出该 布隆过滤器的可接受范围,从而导致布隆过滤器需要重建,以及在删除集合中的元素时,需 要对整个布隆过滤器进行重建的缺陷。为实现上述目的,本发明提供一种布隆过滤器的元素增加方法,应用于包含至少 一组拆分型布隆过滤器和计数型布隆过滤器的布隆过滤器中,每组所述拆分型布隆过滤器 和计数型布隆过滤器对应所述布隆过滤器表示的集合中的一个子集,每个所述计数型布隆 过滤器的位向量记录对应的所述子集包含的所有元素通过所述布隆过滤器的散列函数组 计算得到的所有散列序列值标识在每一位的计数值,所述方法包括当需在所述布隆过滤器所表示的集合中增加元素时,检测当前子集包含的元素个 数是否达到了预设的元素容量阈值;若所述当前子集包含的元素个数达到了预设的元素容量阈值,则在所述集合中创 建一个新的子集,以及为所述新的子集对应的创建一组新的拆分型布隆过滤器和计数型布 隆过滤器,并选取所述新的子集为所述当前子集;将待增加的元素添加至所述当前子集中;根据所述布隆过滤器对应的散列函数组,将所述待增加的元素分别表示至与所述 当前子集对应的拆分型布隆过滤器和计数型布隆过滤器中。为实现上述目的,本发明还提供一种布隆过滤器的元素删除方法,应用于包含至 少一组拆分型布隆过滤器和计数型布隆过滤器的布隆过滤器中,每组所述拆分型布隆过滤 器和计数型布隆过滤器对应所述布隆过滤器表示的集合中的一个子集,每个所述计数型布 隆过滤器的位向量记录对应的所述子集包含的所有元素通过所述布隆过滤器的散列函数 组计算得到的所有散列序列值标识在每一位的计数值,所述方法包括当需在所述布隆过滤器所表示的集合中删除元素时,根据所述布隆过滤器对应的 散列函数组,查询待删除的元素所对应的子集;在查询到的子集中删除所述待删除的元素;根据所述布隆过滤器对应的散列函数组,将所述待删除的元素分别从与查询到的 子集对应的拆分型布隆过滤器和计数型布隆过滤器中删除。为实现上述目的,本发明还提供一种布隆过滤器,包括至少一组拆分型布隆过滤器和计数型布隆过滤器、元素增加模块以及元素删除模 块,其中,每组所述拆分型布隆过滤器和计数型布隆过滤器对应所述布隆过滤器所表示的 集合中的一个子集,每个所述计数型布隆过滤器的位向量均记录对应的所述子集包含的 所有元素通过所述布隆过滤器的散列函数组计算得到的所有散列序列值标识在每一位的计数值;所述元素增加模块至少包括元素检测单元,用于当需在所述布隆过滤器所表示的集合中增加元素时,检测当 前子集包含的元素个数是否达到了预设的元素容量阈值;子集创建单元,用于若所述当前子集包含的元素个数达到了预设的元素容量阈 值,则在所述集合中创建一个新的子集,以及为所述新的子集对应的创建一组新的拆分型 布隆过滤器和计数型布隆过滤器,并选取所述新的子集为所述当前子集;元素增加单元,用于将待增加的元素添加至所述当前子集中;元素表示单元,用于根据所述布隆过滤器对应的散列函数组,将所述待增加的元 素分别表示至与所述当前子集对应的拆分型布隆过滤器和计数型布隆过滤器中;所述元素删除模块至少包括元素查询单元,用于当需在所述集合中删除元素时,根据所述散列函数组,查询待 删除的元素所对应的子集;子集删除单元,用于在查询到的子集中删除所述待删除的元素;元素删除单元,用于根据所述散列函数组,将所述待删除的元素分别从与查询到 的子集对应的拆分型布隆过滤器和计数型布隆过滤器中删除。本发明提供的布隆过滤器的元素增加、删除方法以及布隆过滤器,通过采用拆分 型布隆过滤器和计数型过滤器相结合的方法,在系统中设置至少一组对应的计数型过滤器 以及拆分型过滤器,每一组计数型过滤器以及拆分型过滤器均表示集合中一个子集的所有 元素,其中,计数型过滤器用于通过位向量的位扩展,解决集合元素动态删除的问题,而拆 分型过滤器则用于集合元素的匹配查询,对传统布隆过滤器快速查找的优点予以继承;在 需要对元素进行动态增加,且检测到当前子集容量已满时,通过在集合中新增一个子集,以 及对应地新增一组与该子集对应的计数型过滤器和拆分型过滤器,以容纳并表示该新增元 素,由于子集中可容纳的元素个数已优先设置,因而元素的增加不会导致假通过率的上升, 从而同时很好的解决了布隆过滤器中集合元素的动态增加所带来的需重建位向量的问题。


为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术 描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一 些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这 些附图获得其他的附图。图1为本发明布隆过滤器的元素增加方法实施例一的流程图;图2为本发明布隆过滤器的元素增加方法实施例二的流程图;图3为本发明布隆过滤器中用于表示计数型布隆过滤器位向量的位计数器溢出 情况的映射表的结构示意图;图4为本发明布隆过滤器的一种位计数值映射表的结构示意图;图5为本发明布隆过滤器的元素删除方法实施例一的流程图;图6为本发明布隆过滤器的元素删除方法实施例二的流程图;图7为本发明布隆过滤器实施例一的结构示意图8为本发明布隆过滤器实施例二的结构示意图。
具体实施例方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例 中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是 本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员 在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明的布隆过滤器主要用于克服现有技术中传统的布隆过滤器在动态增加集 合元素或者动态删除集合元素时,需要对布隆过滤器的位向量进行重建的缺陷,提供了一 种能够很好地解决该问题的改进的布隆过滤器,在该改进的布隆过滤器中,当进行集合元 素的增加操作时,不会导致假通过率的升高,从而无需对位向量进行重建,而在进行集合元 素的删除操作时,位向量依然能够准确表示各元素是否存在于集合中,从而也无需对位向 量进行重建。具体地,本发明的改进的布隆过滤器通过采用拆分型布隆过滤器和计数型布隆过 滤器相结合的方法,来解决上述提到的集合元素动态增加与删除的问题。具体指在一个布 隆过滤器中,同时设置对应的拆分型布隆过滤器和计数型布隆过滤器,等价地表示集合中 的所有元素,其中拆分型布隆过滤器可以设置在系统内存中,以保证元素查询的速度,而计 数型布隆过滤器则可以设置在系统硬盘中,以借助于硬盘的海量存储空间来存储计数型布 隆过滤器的位相量长度。每一组对应的拆分型布隆过滤器和计数型布隆过滤器等价地表示 集合中的一个子集,根据使用者所能容忍的假通过率的大小,设置单个子集中能容纳元素 的最大数目,从而当集合中元素不断增多时,本发明的双布隆过滤器可以通过相应地增加 子集的个数、以及增加对应的拆分型布隆过滤器和计数型布隆过滤器的个数,来解决需要 对位向量进行重建的问题。由于本发明的双布隆过滤器中,每个计数型布隆过滤器的位向量均能够记录对 应的子集中的所有元素通过散列函数组计算得到的所有散列序列值分布在各个位的计数 值,即计数型布隆过滤器中对位向量的每一个单元位进行了扩展,使得每一个单元位不再 只是记录“0”或“1”,而是具有记录“1”的数目的功能。从而在对集合中的元素进行删除 时,即使根据该待删除元素对应的散列序列值,在位向量中对应的位置将计数值减“1”,对 应的计数值在减“ 1,,之后,仍然能够正确地反映对应的子集中的剩余元素所对应的散列序 列值在对应位置的映射状况,从而仍然无需进行位向量的重建,即通过计数型布隆过滤器 的设置,很好地解决了元素动态删除时的问题。具体地,基于上述对布隆过滤器的组成及功能的介绍,下面将对本发明的布隆过 滤器进行元素动态增加以及元素动态删除时的具体过程进行详细的描述。由于本发明的布 隆过滤器采用拆分型布隆过滤器和计数型布隆过滤器相结合的方法,因而在本发明中,可 以对应地将本发明的布隆过滤器称为双布隆过滤器。图1为本发明布隆过滤器的元素增加方法实施例一的流程图。本发明的布隆过滤 器的元素增加方法应用于上述的双布隆过滤器中,即应用于包含至少一组拆分型布隆过滤 器和计数型布隆过滤器的布隆过滤器中,其中,拆分型布隆过滤器用以在集合元素的匹配 查询时,通过内存对元素快速查找的优点予以继承,而计数型布隆过滤器则用以借助于位向量的位扩展机制,以解决集合元素动态删除的问题。每组拆分型布隆过滤器和计数型布 隆过滤器对应于该布隆过滤器表示的集合中的一个子集,每个计数型布隆过滤器的位向量 均记录对应的子集包含的所有元素通过该双布隆过滤器的散列函数组计算得到的所有散 列序列值标识在每一位的数目。如图1所示,本实施例的方法具体包括如下步骤步骤100,当需在布隆过滤器所表示的集合中增加元素时,检测当前子集包含的元 素个数是否达到了预设的容量阈值;本发明中,在初始状态时,可以根据使用者能容忍的假通过率的大小,设置双布隆 过滤器的单个子集中所能容纳元素的最大数目,而且在初始状态时,可以仅在双布隆过滤 器的集合中设置一个子集,对应地仅设置一组拆分型布隆过滤器和计数型布隆过滤器,该 拆分型布隆过滤器和计数型布隆过滤器等价地表示对应的子集中的所有元素。在当需要在 双布隆过滤器所表示的集合中进行元素增加时,本发明中,该双布隆过滤器首先将检测集 合的当前子集所包含的元素个数是否达到了本发明为每个子集预设的容量阈值,以判断该 当前子集中是否还能够增加一新的元素。步骤101,若当前子集包含的元素个数达到了预设的容量阈值,则在集合中创建一 个新的子集,以及为该新的子集对应的创建一组新的拆分型布隆过滤器和计数型布隆过滤 器,并选取该新的子集为当前子集;若经过上述步骤的检测,该双布隆过滤器检测到当前子集中包含的元素个数已经 达到了子集预设的元素容量阈值,即已经达到了子集能容纳的最大元素个数时,由于本发 明中,单个子集所能容置的元素的最大个数是根据使用者可容忍的假通过率大小而对应设 置的,其次布隆过滤器中所表示元素个数的增多,必然会引起该布隆过滤器的假通过率的 上升,因而若仍然在该当前子集中增加元素,很有可能会导致对应的拆分型布隆过滤器和 计数型布隆过滤器的假通过率由于继续上升,而超过使用者的可接受范围。因此,为了避免出现在此种情况下需要对拆分型布隆过滤器和计数型布隆过滤器 的位向量进行重建的现象,本发明中,当当前子集的容纳元素已满时,为了容置该新的元 素,在双布隆过滤器所表示的集合中为该新增的元素创建了一个新的子集,该创建的新的 子集的元素容量符合本发明的双布隆过滤器为子集预设的元素容量阈值,即与当前子集预 设的元素容量阈值相等。同时对应地,本发明中,在创建了新的子集之后,为创建的新的子 集对应的分别创建了一个新的拆分型布隆过滤器和计数型布隆过滤器,该新的拆分型布隆 过滤器和计数型布隆过滤器用于等价地表示新的子集中所容纳的所有元素。与此同时,在 创建了新的子集之后,双布隆过滤器将该创建的新的子集选取作为新的当前子集,以代替 之前的当前子集。需要说明的是,若在上述步骤100中,双布隆过滤器通过检测判断得知当前子集 中包含的元素个数还未达到该子集预设的容量阈值,即该当前子集中还能够容置新的元 素,双布隆过滤器将无需执行上述的操作,而是仍然在该当前子集中进行元素的增加操作 即可。步骤102,将待增加的元素添加至当前子集中;步骤103,根据布隆过滤器对应的散列函数组,将待增加的元素分别表示至与当前 子集对应的拆分型布隆过滤器和计数型布隆过滤器中。根据检测的不同结果,在为新增的元素创建了新的子集,或者仍然选择容量未满的当前子集作为容置该新元素的当前子集后,双布隆过滤器将该待增加的新元素添加至当 前子集中,同时,为了将该待增加的新元素表示至双布隆过滤器中,本发明中,双布隆过滤 器还将根据其对应的散列函数组,将待增加的元素分别表示至与当前子集对应的一组拆分 型布隆过滤器和计数型布隆过滤器中,从而完成了对元素的动态增加。本实施例的布隆过滤器的元素增加方法,通过采用拆分型布隆过滤器和计数型过 滤器相结合的方法,在系统中设置至少一组对应的计数型过滤器以及拆分型过滤器,每一 组计数型过滤器以及拆分型过滤器均表示集合中一个子集的所有元素,在需要对元素进行 动态增加,且检测到当前子集容量已满时,通过在集合中新增一个子集,以及对应地新增一 组与该子集对应的计数型过滤器和拆分型过滤器,以容纳并表示该新增元素,由于子集中 可容纳的元素个数已优先设置,因而元素的增加不会导致假通过率的上升,从而同时很好 的解决了布隆过滤器中集合元素的动态增加所带来的需重建位向量的问题。图2为本发明隆过滤器的元素增加方法实施例二的流程图。如图2所示,在上述 实施例的基础上,本实施例的方法具体包括如下步骤步骤200,设置子集的元素容量阈值、布隆过滤器的位向量长度、以及散列函数组 中包含的散列函数的个数;在应用本发明的双布隆过滤器进行元素动态增加、元素动态删除甚至元素查询之 前,首先需要为该双布隆过滤器所表示的集合中的每个子集设置一个元素容量阈值,该元 素容置阈值表示每个子集最大可容置元素的个数,同时还需要为布隆过滤器的位向量设置 合适的长度,以及设置散列函数组中包含的散列函数的数目。具体地,双布隆过滤器可以根据使用该双布隆过滤器过滤元素时设定的最高假通 过率,以及根据假通过率的计算公式P = [l-(l-l/m)to]k,设置双布隆过滤器的上述这些参 数值。在假通过率的计算公式P= [l-(l_l/m)kn]k中,p代表对应的布隆过滤器的假通过 率,m代表该布隆过滤器的位向量的位长度,k代表该布隆过滤器所采用的散列函数组中包 含的散列函数的个数,而n则代表则该布隆过滤器所表示的集合或子集中包含的最大元素 个数,即元素容量阈值。基于上述假通过率的计算公式,在双布隆过滤器的最高假通过率 已设定的前提下,只要能够满足使该双布隆过滤器的假通过率不超出该最高假通过率的条 件,根据上述公式,可以设置出一组较为合适的k、n、m的数值。实际应用中,在上述参数的设置过程中,每个子集中所包含的最大元素个数,即子 集的元素容量阈值n,可以根据该双布隆过滤器所需容置的所有元素的个数,以及根据实际 需要而设置。而在设置了该子集的元素容量阈值n之后,对布隆过滤器的位向量长度m以 及散列函数组中包含的散列函数的个数k的取值的设置,则可以通过下述两种方法实现第一种方法为结合上文的假通过率的计算公式,由于m和k 一定为一个自然数,因 此,在设置m及k的具体数值时,可以采用逐个代入计算的方式,比如将k= 1以及该双布 隆过滤器设定的最高假通过率代入上述计算公式中,在假通过率P、散列函数的个数k以及 子集的元素个数n已知的前提下,通过求解方程即可求得当k = 1时对应的m的值。同理, 当k = 2,3,...时都可以计算出一个对应的m值。最终取哪一组值,可以根据实际情况选 取最合适的m和k的数值。第二种方法为测试的方法;具体地,在测试过程中,可以首先将一个子集中的所有 元素都装入对应的拆分型布隆过滤器的位向量中,然后用一个测试元素集(该测试集中的元素都不属于集合S)来对拆分型布隆过滤器进行测试。通过不断地调整m的值以及散列 函数的个数k的数值,使得测试元素集的假通过率在可接受的范围内即可。需要说明的是,实际实施的过程中,为了适应集合元素的动态增加,在设置位向量 的长度m时,实际上可以在保证双布隆过滤器的假通过率不超过设定的最高假通过率的最 小的m值的基础上,为位向量预留一定的存储空间。即在实际设置时,可以设置的m的数值 比能够保证双布隆过滤器的假通过率不超过设定的最高假通过率的最小m值稍大一点,使 得当增加的元素个数在预留空间额度内时,无需进行子集及布隆过滤器的新建,只需将新 增元素增加至当前子集即可。此外还需要说明的是,实际应用时,在本实施例中,对应设置的拆分型布隆过滤器 和计数型布隆过滤器可以分别设置在系统内存和系统硬盘中,其中,拆分型布隆过滤器设 置在系统内存中,可以保证元素查询的速度,而计数型布隆过滤器设置在系统硬盘中,则可 以借助于系统硬盘的海量存储空间,以存储计数型布隆过滤器扩展的位相量长度。具体地, 对于设置在系统硬盘中的计数型布隆过滤器而言,由于计数型布隆过滤器的位相量中对每 一位进行了扩展,使得每一位具有对其表示的所有元素在散列函数组的计算下在该位为 “ 1 ”的数目的计数功能,而在本实施例中,每组拆分型布隆过滤器和计数型布隆过滤器均等 价地表示一个子集。因而在本实施例中所谓设置双布隆过滤器的位相量长度为m事实上是 指设置每个拆分型布隆过滤器的位相量为m,以及设置每个计数型布隆过滤器的位计数 器个数为m。进一步地,在设置计数型布隆过滤器的位相量长度时,还有一个参数需要考虑,即 计数型布隆过滤器的位相量中每一个计数器的位数,若设置的位数过小,则在实际应用中 进行计数时很容易发生溢出的现象,一旦发生溢出计数便会发生错误,另一方面,若设置的 位数过大,又会引起存储空间的浪费,尤其是当位计数器的个数m较大时,这种存储空间浪 费的情况将更加严重。因而,在本实施例中,在设置了该上述双布隆过滤器的位相量长度m 之后,对于计数型布隆过滤器而言,还需为计数型布隆过滤器的每个位计数器设置合适长 度的位数。结合目前计数型布隆过滤器的算法,4位的计数器已经拥有非常小的溢出概率, 因而本实施例中,取每个位计数器的位数为4,即计数的最大值为15。步骤201,当需在布隆过滤器所表示的集合中增加元素时,检测当前子集包含的元 素个数是否达到了预设的容量阈值,若是执行步骤202,若否执行步骤203 ;在对双布隆过滤器进行上述初始化参数设置完成之后,拆分型布隆过滤器和计数 型布隆过滤器可以等价地表示集合中的所有元素。根据该双布隆过滤器的集合中包含的所 有元素个数,以及上述步骤中为每个子集设置的最大可容置数目,在双布隆过滤器中可以 包含一组或多组的拆分型布隆过滤器和计数型布隆过滤器,对应地,双布隆过滤器所表示 的集合中也可以包含一个或多个子集。图3为本发明布隆过滤器中用于表示计数型布隆过 滤器位向量的位计数器溢出情况的映射表的结构示意图。如图3所示,假设双布隆过滤器
所表示的集合S中包含的子集个数为i (Si,S2,......,Si),对应地,在系统内存和系统硬
盘中对应地设置了 i个拆分型布隆过滤器(VI,V2,......,Vi)和i个计数型布隆过滤器
(Jl,J2,......,Ji) 。因而,在当需要在集合S中进行元素增加时,该双布隆过滤器首先将对集合S中的 当前子集(通常为Si)进行检测,以检测子集Si中所包含的元素个数是否达到了预设的元素容量阈值n,即判断该当前子集中是否还能够增加一新的元素。若当前子集的容置空间还 未满,即还能容置新的元素,双布隆过滤器将仍然将该当前子集作为这一轮元素增加时的 当前子集,即仍然在该子集中进行元素增加的操作。步骤202,在集合中创建一个新的子集,以及为该新的子集对应的创建一组新的拆 分型布隆过滤器和计数型布隆过滤器,并选取该新的子集为当前子集;而反之,若经过上述步骤的检测,双布隆过滤器检测到当前子集中包含的元素个 数已经达到了预设的元素容量阈值,即已经达到了子集能容纳的最大元素个数,为了避免 出现新的元素的增加引起的需要对布隆过滤器的位向量进行重建的现象,以及为了容置该 新增加的元素,双布隆过滤器将在集合S中为该新增的元素新创建一个子集Si+Ι,并对应 地分别在系统内存和系统硬盘中创建一个新的拆分型布隆过滤器Vi+ι和一个新的计数型 布隆过滤器Ji+Ι,以与该新的子集Si+Ι相对应。与此同时,在创建了新的子集之后,双布隆 过滤器还将该创建的新的子集选取作为新的当前子集,以代替之前的当前子集,以在该新 创建的子集中进行元素增加的操作。步骤203,将待增加的元素添加至当前子集中;步骤204,根据布隆过滤器对应的散列函数组,将待增加的元素分别表示至与当前 子集对应的拆分型布隆过滤器和计数型布隆过滤器中;在为新增的元素创建了新的子集,或者仍然选择容量未满的当前子集作为容置该 新元素的当前子集之后,双布隆过滤器可以将该待增加的新元素添加至当前子集中。同时, 为了将该待增加的新元素在双布隆过滤器中进行表示,本实施例中,双布隆过滤器还将根
据其对应的散列函数组(Hl,H2,......,Hk),将待增加的元素分别表示至与该当前子集对
应的一组拆分型布隆过滤器和计数型布隆过滤器中,以完成对元素的动态增加。具体地,本实施例中,将待增加的元素分别表示至与当前子集对应的拆分型布隆 过滤器和计数型布隆过滤器中还可以进一步地包含下述几个子步骤步骤2040,根据散列函数组,计算待增加的元素对应的一组散列序列值;针对待增加的元素,为了将该待增加元素表示至与当前子集对应的拆分型布隆过
滤器和计数型布隆过滤器中,双布隆过滤器首先将采用预设的散列函数组(H1,H2,......,
Hk),对待增加元素对应的散列序列值(Hl(s),H2(s),......,Hk(S))进行计算。步骤2041,在与当前子集对应的拆分型布隆过滤器的位相量中,将计算得到的散 列序列值所对应的各个位的数值进行标识;计算得到与待增加元素对应的散列序列值之后,针对与当前子集对应的拆分型
布隆过滤器,双布隆过滤器可以根据计算得到的该散列序列值(Hl(s),H2(s),......,
Hk(s)),在对应的拆分型布隆过滤器的位向量中,对与散列序列值(Hl(s), H2(s),......,
Hk(S))对应的位的数值进行标识。即若计算得到的Hl (s) =6,则将位向量的第6位设为 1,当H2(sl) = 11,则将位向量的第11位设为1,直至标识完与Hk(S)对应的位为止。在将 计算得到的散列序列值均标识至对应的拆分型布隆过滤器的位向量中之后,则称将该待增 加的元素装入了对应的拆分型布隆过滤器中,此装入过程与传统布隆过滤器的元素装入过 程是一致的。步骤2042,在与当前子集对应的计数型布隆过滤器的位相量中,将计算得到的散 列序列值所对应的各个位计数值加1。
而针对与当前子集对应的计数型布隆过滤器而言,由于计数型布隆过滤器的位 向量的表示机制与拆分型布隆过滤器不同,因而在将待增加的元素装入至对应的计数型 布隆过滤器时,本实施例中,双布隆过滤器需要根据计算得到的该散列序列值(HI (s),
H2(s),......,Hk(s)),在对应的计数型布隆过滤器的位向量中,将与该散列序列值
(Hl(s), H2(s),......,Hk(S))对应的位的各个位计数值进行加1。例如若计算得到的
Hl(S) = 6时,则将对应的计数型布隆过滤器的位向量的第6位的位计数值加1,当H2(sl) =11时,则将位向量的第11位的位计数值加1,直至将与Hk(S)对应的位的位计数值加1 完毕为止。同样地,在将与计算得到的散列序列值对应的计数型布隆过滤器的位向量中的位 计数值均加1之后,则称将该待增加的元素装入了对应的计数型布隆过滤器中。此外在本步骤中还需要说明的是,由于对于计数型布隆过滤器而言,在上述步骤 200的设置过程中,设置了计数型过滤器的每个位计数器的位数为4,即设置每个位计数器 的最大可计数值为15。虽然结合目前计数型布隆过滤器的算法,4位的计数器已经拥有非 常小的溢出概率,但是不可避免的,当子集中容置的元素较多,且对应某一位的散列序列值 为1的元素也较多时,将很有可能会出现位向量中某一位的位计数值发生溢出的现象。因 而在本实施例中,为了避免当位向量的位计数值发生溢出时,位计数器在位向量中的计数 值发生错误的现象,对应于每一个计数型布隆过滤器的位向量,还设置了一个对应的位计 数值映射表。该位计数值映射表用于记录对应的计数型布隆过滤器的位相量中,每一位的 位计数值在发生溢出后超出最大值部分的溢出计数值。例如,若每个位计数器的最大可计 数值为15,那么位计数值映射表中记录的便为每个位计数器的实际计数值在超出15后,溢 出的那部分的溢出计数值。因而,基于该设置的位计数值映射表,将计算得到的散列序列值所对应的各个位 计数值加1还应具体包括如下子步骤首先,双布隆过滤器根据对应的计数型布隆过滤的
位向量的各个位计数值,查询计算得到的散列序列值(Hl(s),H2(s),......,Hk(S))对应
的各位计数值是否发生溢出的现象,即对应的计数型布隆过滤的位向量中,与散列序列值
(Hl(s),H2(s),......,Hk(S))对应的任一位计数值是否已经达到了最大值15。若双布隆
过滤器查询到计数型布隆过滤的位向量中,与散列序列值(HI (s),H2(s),......,Hk(S))
对应的某个位计数值已经达到了最大值,代表该位计数器即将发生溢出的现象,因而此时 若仍然在位计数值的基础上加1,将导致对应的位计数器出现计数值不正确的情况。因而为 了使发生溢出的实质位计数值能够在对应的计数型布隆过滤器中予以记录,双布隆过滤器 还将使位向量中相应的位计数值的最大值保持不变,并在对应的位计数值映射表中,将查 询到的达到最大值的位计数器对应的溢出计数值加1,以在位计数值映射表记录位向量的 对应位的溢出计数值,该溢出计数值与位向量中对应的位计数值相加,便是位向量中该对 应位的实质计数值。从而,通过为每个计数型布隆过滤器设置一个对应的位计数值映射表,本实施例 的双布隆过滤器可以在计数型布隆过滤器的位向量发生溢出的情况下,仍然能够准确地记 录溢出后的溢出位计数值,从而很好地解决了计数型过滤器的位计数值在过小容易溢出、 在过大时又浪费存储空间两者之间的矛盾,保证了计数型布隆过滤器的位向量的准确性。需要说明的是,由于在设置了计数型过滤器的每个位计数器的位数为4的前提下,溢出的概率是非常低的,因此在位计数值映射表中记录的“成员”应该是非常少的,而为 了快速查找映射表是否有某个位计数器,在本实施例中,还可以通过散列表(散列的键值 即为位计数器)的方式来组织该位计数值映射表。具体地,位计数值映射表的结构可以如 图4所示,图4为本发明布隆过滤器的一种位计数值映射表的结构示意图。此外还需要说明的是,虽然本发明的双布隆过滤器相对于现有技术中布隆过滤器 的优点在于能够很好地解决布隆过滤器中集合元素的动态增加以及动态删除所带来的 位向量需重建的问题,但是由于在本发明的双布隆过滤器中,对应的拆分型布隆过滤器和 计数型过滤器均等价地表示了集合中的每一个元素,且拆分型布隆过滤器设置于系统内存 中,具有很好的查询响应速度性能,因而在进行元素查询时,本发明中只需在拆分型布隆过 滤器中,对待查询的元素进行查询即可,以此能够保证元素查询的速度。而由于该元素查询 的方法与现有技术中在传统布隆过滤器中进行元素查询的方法相同,因而在本发明中并不 对此进行赘述。本实施例的布隆过滤器的元素增加方法,通过采用拆分型布隆过滤器和计数型过 滤器相结合的方法,分别在系统硬盘及系统内存中对应设置计数型过滤器以及拆分型过滤 器,每一组计数型过滤器以及拆分型过滤器均表示集合中一个子集的所有元素,在需要对 元素进行动态增加,且检测到当前子集容量已满时,通过在集合中新增一个子集,以及对应 地新增一组与该子集对应的计数型过滤器和拆分型过滤器,以容纳并表示该新增元素,由 于子集中可容纳的元素个数已优先设置,因而元素的增加不会导致假通过率的上升,从而 同时很好的解决了布隆过滤器中集合元素的动态增加所带来的需重建位向量的问题。进一步地,本实施例中,还通过为每个计数型过滤器设置合适的位计数器的位数, 以及设置位计数值映射表,用于存储发生溢出的位计数值以及溢出后的溢出计数值,从而 很好地解决了计数型过滤器的位计数值在过小容易溢出、在过大时又浪费存储空间两者之 间的矛盾。图5为本发明布隆过滤器的元素删除方法实施例一的流程图,本实施例主要描述 在应用上述双布隆过滤器进行元素删除时的具体处理流程。与上述元素增加的方式实施例 一样,本实施例的布隆过滤器的元素删除方法同样应用于上述的双布隆过滤器中,即应用 于包含至少一组拆分型布隆过滤器和计数型布隆过滤器的双布隆过滤器中,其中每组对应 的拆分型布隆过滤器和计数型布隆过滤器均与集合中的一个子集相对应,每个计数型布隆 过滤器的位向量均记录对应的子集包含的所有元素通过该双布隆过滤器的散列函数组计 算得到的所有散列序列值标识在每一位的计数值。如图5所示,本实施例的方法具体包括如下步骤步骤300,当需在布隆过滤器所表示的集合中删除元素时,根据布隆过滤器对应的 散列函数组,查询待删除的元素所对应的子集;在本实施例中,当需要在双布隆过滤器所表示的集合中删除某一个元素时,为了 了解需要在哪一个子集中对该元素进行删除的操作,双布隆过滤器首先将根据该布隆过滤 器的散列函数组,查询该待删除的元素所对应的子集。步骤301,在查询到的子集中删除待删除的元素;步骤302,根据布隆过滤器的散列函数组,将待删除的元素分别从与查询到的子集 对应的拆分型布隆过滤器和计数型布隆过滤器中删除。
在查询到与待删除的元素对应子集之后,双布隆过滤器首先将在查询到的子集中 删除该待删除的元素,进一步地,为了将该待删除元素从装入该待删除元素的拆分型布隆 过滤器和计数型布隆过滤器中删除,本实施例中,在从对应的子集中删除该待删除的元素 之后,双布隆过滤器还将根据布隆过滤器的散列函数组,将待删除的元素分别从对应的拆 分型布隆过滤器和计数型布隆过滤器中删除。由于在本实施例中,每个计数型布隆过滤器的位向量均能够记录对应的子集中 的所有元素通过散列函数组计算得到的所有散列序列值分布在各个位的计数值,即计数型 布隆过滤器中对位向量的每一个单元位进行了扩展,使得每一个单元位不再只是记录“0” 或“ 1 ”,而是具有记录“ 1,,的数目的功能,即具有对每一位进行计数的功能。从而在对某一 子集中的元素进行删除时,即使根据双布隆过滤器的散列函数组,在对应的计数型布隆过 滤器的位向量中,将该待删除的元素进行了删除,该位相量对应的位的计数值在减“1”之 后,仍然能够正确地反映对应的子集中的剩余元素所对应的散列序列值在对应位置的映射 状况,从而仍然无需进行位向量的重建,即通过计数型布隆过滤器的设置,很好地解决了元 素动态删除时的问题。本实施例的布隆过滤器的元素删除方法,通过采用拆分型布隆过滤器和计数型过 滤器相结合的方法,在系统中设置至少一组对应的计数型过滤器以及拆分型过滤器,每一 组计数型过滤器以及拆分型过滤器均表示集合中一个子集的所有元素,其中,由于计数型 过滤器能够对位向量的每一位进行扩展,使得位相量能够记录每一位为“ 1”的计数值,从而 即使将该待删除的元素从布隆过滤器中进行了删除之后,计数型过滤器的位相量仍然能够 正确地反映对应的子集中的剩余元素所对应的散列序列值在对应位的映射状况,从而无需 进行位向量的重建,仅通过计数型布隆过滤器的设置,同样能够很好地解决了元素动态删 除时的问题,而拆分型过滤器则用于集合元素的匹配查询,对传统布隆过滤器快速查找的 优点予以继承。图6为本发明布隆过滤器的元素删除方法实施例二的流程图,在上述实施例的基 础上,本实施例的布隆过滤器的元素删除方法具体可以包括如下步骤步骤400,设置子集的元素容量阈值、布隆过滤器的位向量长度、以及散列函数组 中包含的散列函数的个数;与上述在双布隆过滤器中进行元素增加时的流程一样,在本实施例中,在应用本 发明的双布隆过滤器进行元素动态删除之前,首先需要该双布隆过滤器所表示的集合中的 每个子集设置一个元素容量阈值n,该元素容置阈值表示每个子集最大可容置元素的个数, 同时还需要为布隆过滤器的位向量设置合适的长度m,以及设置散列函数组中包含的散列 函数的数目k。具体地,本实施例中对布隆过滤器的初始参数进行设置的方法与上述双布隆 过滤器的元素增加方法中的参数设置方法一致,具体可以参见上述步骤200,因而在本实施 例中对于本步骤并不再赘述。需要说明的是,同样地在本实施例中,对应设置的至少一组拆分型布隆过滤器和 计数型布隆过滤器可以分别设置在系统内存和系统硬盘中,其中,拆分型布隆过滤器设置 在系统内存中,可以保证元素查询的速度,而计数型布隆过滤器设置在系统硬盘中,则可以 借助于系统硬盘的海量存储空间,以存储计数型布隆过滤器扩展的位相量长度。步骤401,当需在布隆过滤器所表示的集合中删除元素时,根据布隆过滤器的散列函数组,查询待删除的元素所对应的子集;在对双布隆过滤器进行上述初始化参数设置完成之后,当需要在集合S中进行元 素删除时,为了了解需要在哪一个子集中对该元素进行删除的操作,双布隆过滤器首先将 根据该布隆过滤器的散列函数组(H1,H2,......,Hk),查询该待删除的元素所对应的子集。具体地,本步骤的对待删除元素从属的集合进行查询的过程可以为双布隆过滤
器可以首先根据该布隆过滤器的散列函数组(Hl,H2,......,Hk),计算得到与待删除的元
素对应的一组散列序列值(Hl(s),H2(s),......,Hk(s))。在计算得到对应的散列序列值
后,双布隆过滤器可以根据该计算得到的散列序列值,在与各个子集对应的各个拆分型布
隆过滤器的各个位相量中,查询该散列序列值(Hl(s), H2(s),......,Hk(s))在各位相量
中对应的各个位的数值是否均标识为1。若在某一拆分型布隆过滤器的位相量中,双布隆过
滤器查询到该位相量中与散列序列值(Hl(s),H2(s),......,Hk(s))对应的所有位的数值
均标识为1,这代表该拆分型布隆过滤器装入了该待删除的元素,因而可以判定,该待删除 的元素一定存储于与该拆分型布隆过滤器对应的子集中。步骤402,在查询到的子集中删除待删除的元素;步骤403,根据布隆过滤器的散列函数组,将待删除的元素分别从与查询到的子集 对应的拆分型布隆过滤器和计数型布隆过滤器中删除;在查询到待删除的元素对应的子集后,双布隆过滤器可以将该待删除的新元素从 查询到的子集中删除。同时,为了将该待删除的元素从装入该元素的布隆过滤器中进行删
除,本实施例中,双布隆过滤器还将根据自身对应的散列函数组(Hl,H2,......,Hk),将待
删除元素分别从与查询到的子集对应的一组拆分型布隆过滤器和计数型布隆过滤器中进 行删除,以完成对元素的动态删除操作。具体地,本实施例中,将待删除的元素分别从与查询到的子集对应的一组拆分型 布隆过滤器和计数型布隆过滤器中删除还可以进一步地包括下述几个子步骤步骤4030,通过散列函数组,计算待删除的元素对应的一组散列序列值;针对待删除的元素,为了将该待删除元素从与查询到的子集对应的拆分型布隆 过滤器和计数型布隆过滤器中删除,双布隆过滤器首先将采用预设的散列函数组(H1,H2,......,Hk),对待删除元素对应的散列序列值(Hl(s),H2(s),......,Hk(s))进行计算。步骤4031,在与查询到的子集对应的计数型布隆过滤器的位相量中,将计算得到 的散列序列值所对应的各个位计数值减1 ;计算得到与待删除元素对应的散列序列值之后,针对与查询到的子集对应 的计数型布隆过滤器,双布隆过滤器首先应当根据计算得到的该散列序列值(H1(S),
H2(s),......,Hk(s)),在对应的计数型布隆过滤器的位向量中,将与该散列序列值
(Hl(s),H2(s),......,Hk(s))对应的位的位计数值进行减1。例如若计算得到的HI (s)=
6时,则将对应的计数型布隆过滤器的位向量的第6位的位计数值减1,当H2 (si) = 11时, 则将位向量的第11位的位计数值减1,直至将与Hk(s)对应的位的位计数值减1完毕为止。此外当本实施例中,若计数型布隆过滤器的位向量对应设置了用于记录该位相量 每一位的位计数值是否发生溢出、以及发生溢出后的溢出计数值的位计数值映射表时,本 步骤的将计算得到的散列序列值所对应的各个位计数值减1的过程具体应该为
首先,双布隆过滤器根据包含待删除元素的子集对应的计数型布隆过滤器的 位计数值映射表中记录的各个位的溢出计数值,查询与计算得到的散列序列值(HI (S),
H2(s),......,Hk(S))所对应的各个位计数值是否发生溢出,具体指查询该对应的位计数
值映射表中是否记录有与计算得到的散列序列值(Hl(s),H2(s),......,Hk(S))的任一位
对应的溢出计数值。若双布隆过滤器查询到某一对应的位计数值已经发生溢出现象,即查 询到计数值映射表中已经记录了与某一位对应的溢出计数器时,为了使溢出后的实际位计 数值能够在对应的计数型布隆过滤器中予以记录,双布隆过滤器还将在对应的位计数值映 射表中,将与发生溢出的位计数值的超出最大值部分的溢出计数值进行减1,以在位计数值 映射表以及位向量中记录位向量的对应位的实际计数值,该实际计数值便为位向量的位计 数值与位计数值映射表中对应的溢出计数值的相加值。进一步地,若位计数值映射表中,减 1后的位计数器的溢出计数值为零时,代表此时该位计数器在减1之后,不存在位溢出的现 象,因而相对应地,双布隆过滤器可以将该溢出计数值为零的位计数器从位计数值映射表 中删除,以保持位计数值映射表记录的正确性。步骤4032,检测位相量中减1后的任一位的位计数值是否为零,若是则执行步骤 4033,若否则执行步骤404 ;步骤4033,在与查询到的子集对应的拆分型布隆过滤器的位相量中,将位计数值 为零的位所对应的数值标识为零;在对待删除元素在对应的计数型布隆过滤器的位相量中进行减1操作之后,为了 能够得知是否应该在对应的拆分型布隆过滤器的位相量中,将与计算得到的散列序列值对 应的位的数值标识为零,即为了了解对于位相量中的某一位,子集中的所有元素在该位的 散列值是否全都为“0”,双布隆过滤器需要对对应的计数型布隆过滤器的位相量中减1后 的所有位的位计数值进行检测。若双布隆过滤器检测到某一位的位计数值为零时,代表对 应的子集中的所有元素在该位的散列值全都为“0”,因而,双布隆过滤器可以在对应的拆分 型布隆过滤器的位相量中,将检测到的计数值为零的所有位所对应的数值均标识为零,从 而完成了将待删除的元素在对应的拆分型布隆过滤器进行删除的操作。由于本实施例中,设置于系统硬盘中的计数型过滤器能够对位向量的每一位进行 扩展,使得位相量能够记录每一位为“ 1”的计数值,从而即使将该待删除的元素从布隆过滤 器中进行了删除之后,计数型过滤器的位相量仍然能够正确地反映对应的子集中的剩余元 素所对应的散列序列值在对应位的映射状况,在此基础上在拆分型布隆过滤器的位相量中 进行的对应位的标识也能够准确地反映对应子集中的剩余元素的散列序列值在对应位的 映射状况,而不会出现错误。步骤404,检测集合中的任意两个子集所包含的元素之和是否小于或等于子集预 设的元素容量阈值,若是执行步骤405,若否则结束本流程;步骤405,将两个子集合并为一个子集,将两个子集对应的两组拆分型布隆过滤器 和计数型布隆过滤器合并为一组拆分型布隆过滤器和计数型布隆过滤器。此外还需要说明的是,在本实施例中,在将待删除元素从双布隆过滤器中进行上 述删除操作之后,基于节约布隆过滤器所占用的资源,以及避免造成位相量的存储空间的 浪费的角度考虑,在实施例中,还可以通过对集合中的任意两个子集所包含的元素之和是 否小于一个子集预设的元素容量阈值的检测,检测集合中两个容量未满的子集是否能够进行合并。若通过检测,双布隆过滤器得知两个子集所包含的元素之和已经小于或等于一个 子集所能容置的最大元素个数时,双布隆过滤器可以将该两个容量未满的子集合并为一个 子集,同时将该两个子集对应的两组拆分型布隆过滤器和计数型布隆过滤器合并为一组拆 分型布隆过滤器和计数型布隆过滤器。具体地,在上述将两个子集对应的两组拆分型布隆过滤器和计数型布隆过滤器合 并为一组拆分型布隆过滤器和计数型布隆过滤器的具体过程可以为将两个拆分型布隆过 滤器的位相量进行“或”的操作,而将两个计数型布隆过滤器的位相量对应的各个位计数值 进行相加的操作。若计数型布隆过滤器的位相量存在对应的位计数值映射表时,本实施例 中,在将两个计数型布隆过滤器的位相量对应的各个位计数值进行相加的操作之后,在合 并后的计数型布隆过滤器的位相量对应的位计数值映射表中,还应根据每一位的实际计数 值的相加结果以及是否发生溢出的结果,在位计数值映射表中,对记录的位计数器以及对 应的溢出计数值进行相应的更新。此外还需要说明的是,虽然本发明的双布隆过滤器相对于现有技术中布隆过滤器 的优点在于能够很好地解决布隆过滤器中集合元素的动态增加以及动态删除所带来的 位向量需重建的问题,但是由于在本发明的双布隆过滤器中,对应的拆分型布隆过滤器和 计数型过滤器均等价地表示了集合中的每一个元素,且拆分型布隆过滤器设置于系统内存 中,具有很好的查询响应速度性能,因而在进行元素查询时,本发明中只需在拆分型布隆过 滤器对待查询的元素进行查询即可,能够以此保证元素查询的速度。而由于该元素查询的 方法与现有技术中在传统布隆过滤器中进行元素查询的方法相同,因而在本发明中并不对 此进行赘述。本实施例的布隆过滤器的元素删除方法,通过采用拆分型布隆过滤器和计数型过 滤器相结合的方法,分别在系统硬盘及系统内存中对应设置计数型过滤器以及拆分型过滤 器,每一组计数型过滤器以及拆分型过滤器均表示集合中一个子集的所有元素,其中,由于 设置于系统硬盘中的计数型过滤器能够对位向量的每一位进行扩展,使得位相量能够记录 每一位为“ 1”的计数值,从而即使将该待删除的元素从布隆过滤器中进行了删除之后,计数 型过滤器的位相量仍然能够正确地反映对应的子集中的剩余元素所对应的散列序列值在 对应位的映射状况,从而无需进行位向量的重建,仅通过计数型布隆过滤器的设置,以及借 助于硬盘的大容量存储,同样能够很好地解决了元素动态删除时的问题,而设置于内存中 拆分型过滤器则用于集合元素的匹配查询,对传统布隆过滤器快速查找的优点予以继承。进一步地,本实施例中,还通过为每个计数型过滤器设置合适的位计数器的位数, 以及设置位计数值映射表,用于存储发生溢出的位计数器以及溢出后的溢出计数值,从而 很好地解决了计数型过滤器的位计数值在过小容易溢出、在过大时又浪费存储空间两者之 间的矛盾;同时还通过在检测到两个子集的容量均未满且能够合并为一个子集时,将两个 子集予以合并,且将对应的两组拆分型布隆过滤器和计数型布隆过滤器予以合并,还同时 达到了节约布隆过滤器所占用的资源,以及避免造成位相量的存储空间的浪费的效果。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过 程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序 在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者 光盘等各种可以存储程序代码的介质。
图7为本发明布隆过滤器实施例一的结构示意图,如图7所示,本实施例的布隆过 滤器包括至少一组拆分型布隆过滤器1和计数型布隆过滤器2 (图中仅示出一组)、元素 增加模块3以及元素删除模块4。其中,每组拆分型布隆过滤器和计数型布隆过滤器均对应 布隆过滤器所表示的集合中的一个子集,每个计数型布隆过滤器的位向量均记录对应的 子集包含的所有元素通过布隆过滤器的散列函数组计算得到的所有散列序列值标识在每 一位的计数值。具体地,元素增加模块3至少包括元素检测单元31、子集创建单元32、元素增加 单元33和元素表示单元34四个单元。其中,元素检测单元31用于当需在布隆过滤器所表 示的集合中增加元素时,检测当前子集包含的元素个数是否达到了预设的元素容量阈值; 子集创建单元32用于元素检测单元31检测到当前子集包含的元素个数达到了预设的元素 容量阈值,则在集合中创建一个新的子集,以及为该新的子集对应的创建一组新的拆分型 布隆过滤器和计数型布隆过滤器,并选取新的子集为当前子集;元素增加单元33用于将待 增加的元素添加至当前子集中;元素表示单元34则用于根据布隆过滤器对应的散列函数 组,将待增加的元素分别表示至与当前子集对应的拆分型布隆过滤器和计数型布隆过滤器 中。具体地,元素删除模块4至少包括元素查询单元41、子集删除单元42以及元素 删除单元43三个单元。其中元素查询单元41用于当需在集合中删除元素时,根据散列函 数组,查询待删除的元素所对应的子集;子集删除单元42用于在元素查询单元41查询到的 子集中删除待删除的元素;而元素删除单元43则用于根据散列函数组,将待删除的元素分 别从与查询到的子集对应的拆分型布隆过滤器和计数型布隆过滤器中删除。具体地,本实施例布隆过滤器中的所有模块所涉及的具体工作过程,可以参考上 述布隆过滤器的元素增加方法以及布隆过滤器的元素删除方法、所涉及的相关实施例揭露 的相关内容,在此不再赘述。本实施例的布隆过滤器,通过采用拆分型布隆过滤器和计数型过滤器相结合的方 法,在系统中设置至少一组对应的计数型过滤器以及拆分型过滤器,每一组计数型过滤器 以及拆分型过滤器均表示集合中一个子集的所有元素,其中,计数型过滤器用于通过位向 量的位扩展,解决集合元素动态删除的问题,而拆分型过滤器则用于集合元素的匹配查询, 对传统布隆过滤器快速查找的优点予以继承;在需要对元素进行动态增加,且检测到当前 子集容量已满时,通过在集合中新增一个子集,以及对应地新增一组与该子集对应的计数 型过滤器和拆分型过滤器,以容纳并表示该新增元素,由于子集中可容纳的元素个数已优 先设置,因而元素的增加不会导致假通过率的上升,从而同时很好的解决了布隆过滤器中 集合元素的动态增加所带来的需重建位向量的问题。图8为本发明布隆过滤器实施例二的结构示意图,如图8所示,在上述布隆过滤器 实施例一的基础上,本实施例的布隆过滤器中,拆分型布隆过滤器1和计数型布隆过滤器2 可以分别设置在系统内存和系统硬盘中,其中,拆分型布隆过滤器1设置在系统内存中,可 以保证元素查询时具有较快的查询速度,而计数型布隆过滤器2设置在系统硬盘中,则可 以借助于系统硬盘的海量存储空间,以存储计数型布隆过滤器扩展的位相量长度。进一步地,在实施例的布隆过滤器中,元素表示单元34还可以包括第一计算子 单元341、第一数值标识子单元342以及计数值增加子单元343。其中,第一计算子单元增加的元素对应的一组散列序列值;第一数值标识子单 元342用于在与当前子集对应的拆分型布隆过滤器的位相量中,将第一计算子单元341计 算得到的散列序列值所对应的各个位的数值进行标识;而计数值增加子单元343用于在与 当前子集对应的计数型布隆过滤器的位相量中,将第一计算子单元341计算得到的散列序 列值所对应的各个位计数值加1。具体地,若计数型布隆过滤器2的位向量对应设置了用于记录该位相量每一位的 位计数值是否发生溢出、以及每一位的位计数值在发生溢出后超出最大值的溢出计数值的 位计数值映射表时,上述计数值增加子单元343还具体用于若计算得到的散列序列值所 对应的任一位计数值达到最大值时,在与该对应的计数型布隆过滤器的位计数值映射表 中,将达到最大值的位计数值所对应的位计数器的溢出计数值加1,并在在计算得到的散列 序列值所对应的任一位计数值未达到最大值时,便在与当前子集对应的计数型布隆过滤器 的位相量中,将未达到最大值的、计算得到的散列序列值所对应的位计数值加1。进一步地,在上述布隆过滤器实施例一的基础上,本实施例的布隆过滤器中,元素 删除单元43还可以包括第二计算子单元431、计数值删减子单元432以及第二数值标识 子单元433。其中第二计算子单元431用于通过散列函数组,计算待删除的元素对应的一组 散列序列值;计数值删减子单元432用于在与元素查询单元41查询到的子集对应的计数型 布隆过滤器的位相量中,将第二计算子单元431计算得到的散列序列值所对应的各个位计 数值减1 ;而第二数值标识子单元433则用于若计数值删减子单元432减1后的任一位计 数值为零时,则在与元素查询单元41查询到的子集对应的拆分型布隆过滤器的位相量中, 将位计数值为零所对应的位的数值标识为零。具体地,若计数型布隆过滤器2的位向量对应设置了用于记录该位相量每一位的 位计数值是否发生溢出、以及每一位的位计数值在溢出后超出最大值的溢出计数值的位计 数值映射表时,上述计数值删减子单元432还具体用于若在与对应的计数型布隆过滤器 的位计数值映射表中,记录有与第二计算子单元431计算得到的散列序列值所对应的任一 位的溢出计数值时,即第二计算子单元431计算得到的散列序列值对应的任一位计数值发 生溢出时,在对应的位计数值映射表中,将与发生溢出的位计数值对应的位计数器的溢出 计数值减1,并在若减1后的位计数器的溢出计数值为零时,将溢出计数值为零的位计数 器从对应的位计数值映射表中删除;以及在与当前子集对应的计数型布隆过滤器的位相量 中,将未发生溢出的、与第二计算子单元431计算得到的散列序列值对应的位计数值减1。更进一步地,本实施例的布隆过滤器中,元素删除模块4还可以包括子集合并单 元44。该子集合并单元44用于在元素删除单元43将待删除的元素分别从与元素查询单元 41查询到的子集对应的拆分型布隆过滤器和计数型布隆过滤器中删除之后,若检测到集合 中的任意两个子集所包含的元素之和小于所述子集预设的元素容量阈值时,将该两个子集 合并为一个子集,并将该两个子集对应的两组拆分型布隆过滤器和计数型布隆过滤器合并 为一组拆分型布隆过滤器和计数型布隆过滤器。更进一步地,在本实施例的布隆过滤器中,还可以包括参数设置模块5,用于根 据使用布隆过滤器过滤元素时设定的最高假通过率,以及根据假通过率的计算公式P = [l-a-l/m)to]k,设置每个子集的元素容量阈值η、位向量长度m、以及散列函数组中包含的 散列函数的个数k、以使布隆过滤器的假通过率ρ小于所述最高假通过率。
22
其中,该参数设置模块5中至少包括位相量长度设置单元。该相量长度设置单元 用于设置拆分型布隆过滤器的位相量长度为m,以及设置计数型过滤器的位计数器个数为 m,并设置计数型过滤器的每个位计数器的位数为4。更进一步地,在本实施例的布隆过滤器中,还可以包括元素查询模块6。该元素查 询模块6用于在对集合中的元素进行查询时,根据布隆过滤器的散列函数组,在各拆分型 布隆过滤器中查询待查询的元素是否存在于布隆过滤器表示的集合中。具体地,由于该元 素查询的方法与现有技术中在传统布隆过滤器中进行元素查询的方法,以及与上述元素删 除模块4中的元素查询单元41的元素查询方法相同,因而在本发明中并不对此进行赘述。具体地,本实施例布隆过滤器中的所有模块所涉及的具体工作过程,可以参考上 述布隆过滤器的元素增加方法以及布隆过滤器的元素删除方法、所涉及的相关实施例揭露 的相关内容,在此不再赘述。本实施例的布隆过滤器,通过采用拆分型布隆过滤器和计数型过滤器相结合的方 法,分别在系统硬盘及系统内存中对应设置计数型过滤器以及拆分型过滤器,每一组计数 型过滤器以及拆分型过滤器均表示集合中一个子集的所有元素,其中,设置于系统硬盘的 计数型过滤器用于通过位向量的位扩展,以及借助于硬盘的大容量存储,解决集合元素动 态删除以及存储空间的问题,而设置于内存中的拆分型过滤器则用于集合元素的匹配查 询,对传统布隆过滤器快速查找的优点予以继承;在需要对元素进行动态增加,且检测到当 前子集容量已满时,通过在集合中新增一个子集,以及对应地新增一组与该子集对应的计 数型过滤器和拆分型过滤器,以容纳并表示该新增元素,由于子集中可容纳的元素个数已 优先设置,因而元素的增加不会导致假通过率的上升,从而同时很好的解决了布隆过滤器 中集合元素的动态增加所带来的需重建位向量的问题。进一步地,本实施例中,还通过为每个计数型过滤器设置合适的位计数器的位数, 以及设置位计数值映射表,用于存储发生溢出的位计数值以及溢出后的实际计数值,从而 很好地解决了计数型过滤器的位计数值在过小容易溢出、在过大时又浪费存储空间两者之 间的矛盾;同时还通过在检测到两个子集的容量均未满且能够合并为一个子集时,将两个 子集予以合并,且将对应的两组拆分型布隆过滤器和计数型布隆过滤器予以合并,还同时 达到了节约布隆过滤器所占用的资源,以及避免造成位相量的存储空间的浪费的效果。最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽 管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然 可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替 换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精 神和范围。
2权利要求
一种布隆过滤器的元素增加方法,其特征在于,应用于包含至少一组拆分型布隆过滤器和计数型布隆过滤器的布隆过滤器中,每组所述拆分型布隆过滤器和计数型布隆过滤器对应所述布隆过滤器表示的集合中的一个子集,每个所述计数型布隆过滤器的位向量记录对应的所述子集包含的所有元素通过所述布隆过滤器的散列函数组计算得到的所有散列序列值标识在每一位的计数值,所述方法包括当需在所述布隆过滤器所表示的集合中增加元素时,检测当前子集包含的元素个数是否达到了预设的元素容量阈值;若所述当前子集包含的元素个数达到了预设的元素容量阈值,则在所述集合中创建一个新的子集,以及为所述新的子集对应的创建一组新的拆分型布隆过滤器和计数型布隆过滤器,并选取所述新的子集为所述当前子集;将待增加的元素添加至所述当前子集中;根据所述布隆过滤器对应的散列函数组,将所述待增加的元素分别表示至与所述当前子集对应的拆分型布隆过滤器和计数型布隆过滤器中。
2.根据权利要求1所述的布隆过滤器的元素增加方法,其特征在于,所述将所述待增 加的元素分别表示至与所述当前子集对应的拆分型布隆过滤器和计数型布隆过滤器中具 体包括根据所述散列函数组,计算所述待增加的元素对应的一组散列序列值;在与所述当前子集对应的所述拆分型布隆过滤器的位相量中,将计算得到的散列序列 值所对应的各个位的数值标识为1 ;在与所述当前子集对应的所述计数型布隆过滤器的位相量中,将计算得到的散列序列 值所对应的各个位的位计数值加1。
3.根据权利要求2所述的布隆过滤器的元素增加方法,其特征在于,所述在与所述当 前子集对应的所述计数型布隆过滤器的位相量中,将计算得到的散列序列值所对应的各个 位的位计数值加1具体包括若计算得到的散列序列值所对应的任一位计数值达到最大值时,在与对应的所述计数 型布隆过滤器的位计数值映射表中,将达到最大值的位计数值所对应的位计数器的溢出计 数值加1 ;在与所述当前子集对应的所述计数型布隆过滤器的位相量中,将未达到最大值的、所 述计算得到的散列序列值所对应的位计数值加1 ;所述位计数值映射表用于记录对应的计数型布隆过滤器的位相量中、每一位的位计数 值在发生溢出后超出所述最大值的的溢出计数值。
4.根据权利要求1或2或3所述的布隆过滤器的元素增加方法,其特征在于,所述检测 当前子集包含的元素个数是否达到了预设的元素容量阈值之前,所述方法还包括根据使用所述布隆过滤器过滤元素时设定的最高假通过率,以及根据假通过率的计算 公式p = [l-(l_l/m)kn]k,设置所述子集的所述元素容量阈值n、所述布隆过滤器的位向量 长度m、以及所述散列函数组中包含的散列函数的个数k、以使所述布隆过滤器的假通过率 P小于所述最高假通过率。
5.根据权利要求4所述的布隆过滤器的元素增加方法,其特征在于,所述设置所述过 滤器的位向量长度m具体包括设置所述拆分型布隆过滤器的位相量长度为m,以及设置所述计数型过滤器的位计数 器个数为m ;设置所述计数型过滤器的每个位计数器的位数为4。
6.一种布隆过滤器的元素删除方法,其特征在于,应用于包含至少一组拆分型布隆过 滤器和计数型布隆过滤器的布隆过滤器中,每组所述拆分型布隆过滤器和计数型布隆过滤 器对应所述布隆过滤器表示的集合中的一个子集,每个所述计数型布隆过滤器的位向量记 录对应的所述子集包含的所有元素通过所述布隆过滤器的散列函数组计算得到的所有散 列序列值标识在每一位的计数值,所述方法包括当需在所述布隆过滤器所表示的集合中删除元素时,根据所述布隆过滤器对应的散列 函数组,查询待删除的元素所对应的子集;在查询到的子集中删除所述待删除的元素;根据所述布隆过滤器对应的散列函数组,将所述待删除的元素分别从与查询到的子集 对应的拆分型布隆过滤器和计数型布隆过滤器中删除。
7.根据权利要求6所述的布隆过滤器的元素删除方法,其特征在于,所述将所述待删 除的元素分别从与查询到的子集对应的拆分型布隆过滤器和计数型布隆过滤器中删除具 体包括通过所述散列函数组,计算所述待删除的元素对应的一组散列序列值;在与查询到的子集对应的所述计数型布隆过滤器的位相量中,将计算得到的散列序列 值所对应的各个位的位计数值减1 ;若减1后的任一位计数值为零时,则在与查询到的子集对应的所述拆分型布隆过滤器 的位相量中,将位计数值为零的位所对应的数值标识为零。
8.据权利要求7所述的布隆过滤器的元素删除方法,其特征在于,所述在与查询到的 子集对应的所述计数型布隆过滤器的位相量中,将计算得到的散列序列值所对应的各个位 的位计数值减1具体包括若在与对应的所述计数型布隆过滤器的位计数值映射表中,记录有与计算得到的散列 序列值对应的任一位的溢出计数值时,在所述位计数值映射表中,将对应的溢出计数值减 1 ;若减1后的位计数器的溢出计数值为零,则将溢出计数值为零的位计数器从所述位计 数值映射表中删除;在与所述当前子集对应的所述计数型布隆过滤器的位相量中,将未记录有溢出计数值 的、所述计算得到的散列序列值所对应的位计数值减1 ;所述位计数值映射表用于记录对应的计数型布隆过滤器的位相量中、每一位的位计数 值在发生溢出后超出所述最大值的溢出计数值。
9.据权利要求6 8任一所述的布隆过滤器的元素删除方法,其特征在于,所述将所述 待删除的元素分别从与查询到的子集对应的拆分型布隆过滤器和计数型布隆过滤器中删 除之后,所述方法还包括若检测到所述集合中任意两个子集所包含的元素之和小于所述子集预设的元素容量 阈值时,将所述两个子集合并为一个子集,将所述两个子集对应的两组拆分型布隆过滤器 和计数型布隆过滤器合并为一组拆分型布隆过滤器和计数型布隆过滤器。
10.根据权利要求6所述的布隆过滤器的元素删除方法,其特征在于,所述根据所述布 隆过滤器对应的散列函数组,查询待删除的元素所对应的子集之前,所述方法还包括根据使用所述布隆过滤器过滤元素时设定的最高假通过率,以及根据假通过率的计算 公式p = [l-(l_l/m)kn]k,设置所述子集的所述元素容量阈值n、所述布隆过滤器的位向量 长度m、以及所述散列函数组中包含的散列函数的个数k、以使所述布隆过滤器的假通过率 P小于所述最高假通过率。
11.根据权利要求10所述的布隆过滤器的元素删除方法,其特征在于,所述设置所述 过滤器的位向量长度m具体包括设置所述拆分型布隆过滤器的位相量长度为m,以及设置所述计数型过滤器的位计数 器个数为m ;设置所述计数型过滤器的每个位计数器的位数为4。
12.—种布隆过滤器,其特征在于,包括至少一组拆分型布隆过滤器和计数型布隆过 滤器、元素增加模块以及元素删除模块,其中,每组所述拆分型布隆过滤器和计数型布隆过滤器对应所述布隆过滤器所表示的集合 中的一个子集,每个所述计数型布隆过滤器的位向量均记录对应的所述子集包含的所有 元素通过所述布隆过滤器的散列函数组计算得到的所有散列序列值标识在每一位的计数 值;所述元素增加模块至少包括元素检测单元,用于当需在所述布隆过滤器所表示的集合中增加元素时,检测当前子 集包含的元素个数是否达到了预设的元素容量阈值;子集创建单元,用于若所述当前子集包含的元素个数达到了预设的元素容量阈值,则 在所述集合中创建一个新的子集,以及为所述新的子集对应的创建一组新的拆分型布隆过 滤器和计数型布隆过滤器,并选取所述新的子集为所述当前子集;元素增加单元,用于将待增加的元素添加至所述当前子集中;元素表示单元,用于根据所述布隆过滤器对应的散列函数组,将所述待增加的元素分 别表示至与所述当前子集对应的拆分型布隆过滤器和计数型布隆过滤器中;所述元素删除模块至少包括元素查询单元,用于当需在所述集合中删除元素时,根据所述散列函数组,查询待删除 的元素所对应的子集;子集删除单元,用于在查询到的子集中删除所述待删除的元素;元素删除单元,用于根据所述散列函数组,将所述待删除的元素分别从与查询到的子 集对应的拆分型布隆过滤器和计数型布隆过滤器中删除。
13.根据权利要求12所述的布隆过滤器,其特征在于,所述拆分型布隆过滤器设置于 系统内存中,所述计数型布隆过滤器设置于系统硬盘中。
14.根据权利要求12或13所述的布隆过滤器,其特征在于,所述元素表示单元具体包括第一计算子单元,用于根据所述散列函数组,计算所述待增加的元素对应的一组散列 序列值;第一数值标识子单元,用于在与所述当前子集对应的所述拆分型布隆过滤器的位相量中,将计算得到的散列序列值所对应的各个位的数值标识为1 ;计数值增加子单元,用于在与所述当前子集对应的所述计数型布隆过滤器的位相量 中,将计算得到的散列序列值所对应的各个位的位计数值加1。
15.根据权利要求14所述的布隆过滤器,其特征在于,所述计数值增加子单元具体用于若计算得到的散列序列值所对应的任一位计数值达到最大值时,在与对应的所述计数 型布隆过滤器的位计数值映射表中,将达到最大值的位计数值所对应的位计数器的溢出计 数值加1,并在与所述当前子集对应的所述计数型布隆过滤器的位相量中,将未达到最大值 的、所述计算得到的散列序列值所对应的位计数值加1 ;所述位计数值映射表用于记录对应的计数型布隆过滤器的位相量中、每一位的位计数 值在发生溢出后超出所述最大值的溢出计数值。
16.根据权利要求12或13所述的布隆过滤器,其特征在于,所述元素删除单元具体包括第二计算子单元,用于通过所述散列函数组,计算所述待删除的元素对应的一组散列 序列值;计数值删减子单元,用于在与查询到的子集对应的所述计数型布隆过滤器的位相量 中,将计算得到的散列序列值所对应的各个位的位计数值减1 ;第二数值标识子单元,用于若减1后的任一位计数值为零时,则在与查询到的子集对 应的所述拆分型布隆过滤器的位相量中,将位计数值为零所对应的位的数值标识为零。
17.根据权利要求16所述的布隆过滤器,其特征在于,所述计数值删减子单元具体用于若在与对应的所述计数型布隆过滤器的位计数值映射表中,记录有与计算得到的散列 序列值对应的任一位的溢出计数值时,在所述位计数值映射表中,将对应的位计数器的溢 出计数值减1,并在若减1后的位计数器的溢出计数值为零时,将溢出计数值为零的位计数 器从所述位计数值映射表中删除,以及在与所述当前子集对应的所述计数型布隆过滤器的 位相量中,将未记录有溢出计数值的、所述计算得到的散列序列值所对应的位计数值减1 ; 所述位计数值映射表用于记录对应的计数型布隆过滤器的位相量中、每一位的位计数 值在发生溢出后超出所述最大值的溢出计数值。
18.根据权利12或13所述的布隆过滤器,其特征在于,元素删除模块还包括子集合并单元,用于在所述元素删除单元将所述待删除的元素分别从与查询到的子集 对应的拆分型布隆过滤器和计数型布隆过滤器中删除之后,若检测到所述集合中任意两个 子集所包含的元素之和小于所述子集预设的元素容量阈值时,将所述两个子集合并为一个 子集,将所述两个子集对应的两组拆分型布隆过滤器和计数型布隆过滤器合并为一组拆分 型布隆过滤器和计数型布隆过滤器。
19.根据权利要求12或13所述的布隆过滤器,其特征在于,所述布隆过滤器还包括 参数设置模块,用于根据使用所述布隆过滤器过滤元素时设定的最高假通过率,以及根据假通过率的计算公式P = [l-(l-l/m)to]k,设置所述子集的所述元素容量阈值n、所述 布隆过滤器的位向量长度m、以及所述散列函数组中包含的散列函数的个数k、以使所述布 隆过滤器的假通过率P小于所述最高假通过率。
20.根据权利要求19所述的布隆过滤器,其特征在于,所述参数设置模块至少包括 位相量长度设置单元,用于设置所述拆分型布隆过滤器的位相量长度为m,以及设置所 述计数型过滤器的位计数器个数为m,并设置所述计数型过滤器的每个位计数器的位数为4。
全文摘要
本发明提供一种布隆过滤器的元素增加、删除方法以及布隆过滤器,包括至少一组拆分型布隆过滤器和计数型布隆过滤器、元素增加模块及元素删除模块,每组拆分型布隆过滤器和计数型布隆过滤器对应一个子集,元素增加模块用于在增加元素时,将待增加元素添加至当前子集中,并将待增加元素表示至与当前子集对应的拆分型布隆过滤器和计数型布隆过滤器中;而元素删除模块用于在删除元素时,查询待删除元素所对应的子集,在对应的子集中删除待删除元素,并将待删除元素从对应的拆分型布隆过滤器和计数型布隆过滤器中删除。本发明采用拆分型布隆过滤器和计数型过滤器相结合的方法,解决了元素动态增加和动态删除所带来的位相量重建问题。
文档编号G06F17/30GK101923568SQ20101021694
公开日2010年12月22日 申请日期2010年6月23日 优先权日2010年6月23日
发明者魏逢一 申请人:北京星网锐捷网络技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1