一种应用于烟花过滤器的元素管理方法及烟花过滤器
文献发布时间:2023-06-19 10:32:14
技术领域
本发明涉及计算机信息表示与信息检索技术领域,尤其涉及的是一种应用于烟花过滤器的元素管理方法及烟花过滤器。
背景技术
布谷鸟过滤器是一个紧凑型布谷鸟哈希表(Compact Cuckoo Hash Table),采用基于指纹(Fingerprint)的异或操作(XOR)计算每个元素的两个候选存储桶(Bucket)索引值,在该两个候选存储中,插入或删除或查询该元素的指纹,而不是该元素本身。但是,现有的布谷鸟过滤器存在每个元素的存储空间开销随元素个数动态变化的问题,其原因是布谷鸟过滤器的异或操作要求存储桶数必须为2的幂(即2
因此,现有技术还有待改进和发展。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种应用于烟花过滤器的元素管理方法,其中,所述烟花过滤器包括布谷鸟哈希表,所述布谷鸟哈希表包括若干个存储块,所述若干个存储块均包括若干个候选存储桶,所述方法包括:
获取待管理元素的对应的存储块的随机偏移量和所述待管理元素的锚点索引值;
根据所述存储块的随机偏移量、所述待管理元素的锚点索引值和加减法操作确定所述待管理元素对应的候选存储桶;
通过所述待管理元素对应的候选存储桶执行所述待管理元素的元素管理操作;所述元素管理操作包括插入操作、查询操作以及删除操作中的一种或者多种。
在一种实施方式中,所述获取所述待管理元素的对应的存储块的随机偏移量和所述待管理元素的锚点索引值包括:
根据第一哈希函数计算并确定待管理元素的指纹和所述待管理元素的锚点索引值;
根据所述待管理元素的指纹以及第二哈希函数计算并确定所述待管理元素的对应的存储块的随机偏移量。
在一种实施方式中,所述根据所述待管理元素的对应的存储块的随机偏移量、所述待管理元素的锚点索引值和加减法操作确定所述待管理元素对应的候选存储桶包括:
获取所述存储块的起始存储桶索引值;
根据所述存储块的起始存储桶索引值、所述待管理元素的锚点索引值和所述存储块的随机偏移量,通过加减法操作计算并得到候选存储桶索引值;
将所述候选存储桶索引值对应的存储桶作为候选存储桶。
在一种实施方式中,所述获取所述存储块的起始存储桶索引值包括:
获取预设的存储块固定偏移量;
将所述存储块的序号与所述存储块固定偏移量的乘积作为所述存储块的起始存储桶索引值。
在一种实施方式中,当所述元素管理操作为插入操作时,所述通过所述待管理元素对应的候选存储桶执行所述待管理元素的元素管理操作包括:
检测所述候选存储桶是否存在空闲存储位置;
若存在空闲存储位置,将所述待管理元素对应的指纹存储至所述空闲存储位置;
若不存在空闲存储位置,在若干个候选存储桶中选取一个目标候选存储桶,在所述目标候选存储桶中选取一个目标指纹,将所述待管理元素对应的指纹存储至所述目标指纹对应的存储位置;
获取所述目标候选存储桶的索引值,根据所述目标候选存储桶的索引值与加减法操作重新确定所述目标指纹的存储位置。
在一种实施方式中,所述获取所述目标候选存储桶的索引值,根据所述目标候选存储桶的索引值与加减法操作重新确定所述目标指纹的存储位置包括:
获取所述目标候选存储桶的索引值,根据所述目标候选存储桶的索引值确定所述目标指纹的参考候选存储桶;所述参考候选存储桶为所述目标指纹对应的候选存储桶中除所述目标存储桶之外的候选存储桶;
若所述参考候选存储桶具有空闲存储位置,将所述目标指纹存储至所述参考候选存储桶的空闲存储位置;
若所述参考候选存储桶未具有空闲存储位置,在所述参考候选存储桶内选取一个目标存储位置,将所述目标指纹存储于所述目标存储位置;
将所述目标存储位置原始存储的指纹重新作为目标指纹,将所述目标存储位置所在的存储桶重新作为目标候选存储桶,继续执行获取所述目标候选存储桶的索引值,根据所述目标候选存储桶的索引值与加减法操作重新确定所述目标指纹的存储位置直至参考候选存储桶具有空闲位置或者元素移动次数达到预设阈值。
在一种实施方式中,所述获取所述目标候选存储桶的索引值,根据所述目标候选存储桶的索引值确定所述目标指纹的参考候选存储桶;所述参考候选存储桶为所述目标指纹对应的候选存储桶中除所述目标存储桶之外的候选存储桶包括:
获取所述目标候选存储桶的索引值,根据所述目标候选存储桶的索引值确定所述目标候选存储桶所处的存储块,将所述目标候选存储桶所处的存储块作为目标存储块,并得到所述目标存储块的存储块索引值;
根据所述目标存储块的存储块索引值计算出所述目标存储块的随机偏移量;
根据所述目标存储块的随机偏移量和加减法操作计算出所述目标指纹的锚点索引值;
根据所述目标指纹的锚点索引值确定所述目标指纹的参考候选存储桶;所述参考候选存储桶为所述目标指纹对应的候选存储桶中除所述目标存储桶之外的候选存储桶。
在一种实施方式中,当所述元素管理操作为查询操作时,通过所述待管理元素对应的候选存储桶执行所述待管理元素的元素管理操作包括:
在所述待管理元素对应的候选存储桶内查找是否存在与所述待管理元素的指纹匹配的指纹;
当存在时,显示所述待管理元素存在;
当不存在时,显示所述待管理元素不存在。
在一种实施方式中,当所述元素操作为删除操作时,所述通过所述待管理元素对应的候选存储桶执行所述待管理元素的元素管理操作包括:
在所述待管理元素对应的候选存储桶内查找是否存在与所述待管理元素的指纹匹配的指纹;
当存在时,删除查找到的指纹;
当不存在时,显示所述待管理元素删除失败。
第二方面,本发明实施例还提供一种烟花过滤器,其特征在于,所述烟花过滤器包括:
布谷鸟哈希表,所述布谷鸟哈希表包括若干个存储块,所述若干个存储块均包括若干个候选存储桶;
获取模块,用于获取所述待管理元素的对应的存储块的随机偏移量和所述待管理元素的锚点索引值;
确定模块,用于根据所述存储块的随机偏移量和所述待管理元素的锚点索引值确定所述待管理元素对应的候选存储桶;
执行模块,用于通过所述待管理元素对应的候选存储桶执行所述待管理元素的元素管理操作;所述元素管理操作包括插入操作、查询操作以及删除操作中的一种或者多种。
本发明的有益效果:本发明实施例通过获取所述待管理元素的对应的存储块的随机偏移量和所述待管理元素的锚点索引值;根据所述存储块的随机偏移量、所述待管理元素的锚点索引值和加减法操作确定所述待管理元素对应的候选存储桶;通过所述待管理元素对应的候选存储桶执行所述待管理元素的元素管理操作;所述元素管理操作包括插入操作、查询操作以及删除操作中的一种或者多种。由于本发明提供的元素管理方法不要求烟花过滤器的存储桶数为2的幂,因此可以解决现有技术中的布谷鸟过滤器的异或操作要求存储桶数必须为2的幂,导致元素的存储空间开销增大的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种应用于烟花过滤器的元素管理方法的流程示意图。
图2是本发明实施例提供的获取随机偏移量以及锚点索引值的流程示意图。
图3是本发明实施例提供的确定候选存储桶的流程示意图。
图4是本发明实施例提供的现有的布谷鸟过滤器的结构示意图。
图5是本发明实施例提供的在烟花过滤器中插入元素x的参考图。
图6是本发明实施例提供的在烟花过滤器中插入元素y的参考图。
图7是本发明实施例提供的在烟花过滤器中查询元素x的参考图。
图8是本发明实施例提供的在烟花过滤器中删除元素x的参考图。
图9是本发明实施例提供的在烟花过滤器中插入元素的完整流程示意图。
图10是本发明实施例提供的在烟花过滤器中查询元素的完整流程示意图。
图11是本发明实施例提供的在烟花过滤器中删除元素的完整流程示意图。
图12是本发明实施例提供的烟花过滤器的内部的模块连接图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
需要说明,若本发明实施例中有涉及方向性指示(诸如上、下、左、右、前、后),则该方向性指示仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。
布谷鸟过滤器是一种支持删除操作的高效布鲁姆过滤器。具体地,标准布鲁姆过滤器采用m个比特的位图来表示一个集合的n个元素(Item),即每个插入的元素采用k个哈希函数映射到位图的k个比特,设置该k个比特值为1。每个查询的元素采用相同的k个哈希函数映射到位图的k个比特,检查该k个比特值是否全为1;如果全为1,该元素在集合中;否则,该元素不在集合中。标准布鲁姆过滤器是一种空间高效的随机化数据结构,查询的假阳性错误率低(False Positive Rate)(即查询结果表明元素在集合中,但是该元素实际上不在该集合中),但不产生假阴性错误(False Negatives)(即如果查询结果表明元素不在集合中,则该元素一定不在该集合中)。标准布鲁姆过滤器支持元素插入和查询操作,但是不支持元素删除操作。
计数布鲁姆过滤器是一种支持删除操作的布鲁姆过滤器,即采用m个计数器(Counter)来表示一个集合的n个元素。当插入元素时,采用k个哈希函数映射元素到k个计数器,该k个计数器值自增1;当删除元素时,该k个计数器值自减1。当查询元素时,采用相同的k个哈希函数映射元素到k个计数器,检查该k个计数器值是否全大于1;如果全大于1,该元素在集合中;否则,该元素不在集合中。在实际应用中,计数器大小设置为4比特,可避免计数器溢出问题。因此,计数布鲁姆过滤器支持快速增量更新,但是其存储空间开销高,是标准布鲁姆过滤器的4倍。
而布谷鸟过滤器显著减少计数布鲁姆过滤器的存储空间开销,甚至比标准布鲁姆过滤器的存储空间开销更低。布谷鸟过滤器是一个紧凑型布谷鸟哈希表(Compact CuckooHash Table),采用基于指纹(Fingerprint)的异或操作(XOR)计算每个元素的两个候选存储桶(Bucket)索引值,在该两个候选存储中,插入或删除或查询该元素的指纹,而不是该元素本身。但是,布谷鸟过滤器存在每个元素的存储空间开销随元素个数动态变化的问题,其原因是布谷鸟过滤器的异或操作要求存储桶数必须为2的幂(即2
为了解决上述问题,本发明提供了一种新型的广义布谷鸟过滤器,称为烟花过滤器(Firework Filter),并提供了一种应用于烟花过滤器的元素管理方法,该方法不仅不要求过滤器的存储桶数为2的幂,而且支持哈希函数个数k等于或大于2,从而降低存储空间开销,并实现与现有布谷鸟过滤器相近的高速查询和更新性能。
如图4所示,烟花过滤器是一个分块布谷鸟哈希表,由多个存储块构成,每个存储块包含多个存储桶,且每个存储块包含的存储桶个数相同,每个存储桶包含多个存储位置。其中每一个存储块中的任意两个相邻存储桶,其各自对应的索引相邻,不同存储块中的各存储桶互不相同。烟花过滤器采用与存储桶的数量相同个数的哈希函数,映射每个元素到每个存储块的一个存储桶,存储每个元素的指纹在一个存储桶的一个存储位置,而不存储该元素本身。
具体地,所述布谷鸟哈希表中的每个存储桶均包括指定数量的存储位置,其中,存储位置用于存储元素的指纹,并且每个存储位置存储一个元素的指纹(Fingerprint)。此外,所述指定数量可以根据实际需要确定。例如,所述指定数量为4等。当所述指定数量为4时,说明布谷鸟哈希表中的每个存储桶均包含四个存储位置,即每个存储桶可以存储四个元素的指纹。
当需要执行元素插入、查询和删除操作时,通过烟花哈希方法和加减法操作,得到该元素的候选存储桶索引值并确定执行操作命令的候选存储桶,使该候选存储桶完成相应的操作。
如图1所示,本实施例提供一种应用于烟花过滤器的元素管理方法,所述烟花过滤器包括布谷鸟哈希表,所述布谷鸟哈希表包括若干个存储块,所述若干个存储块均包括若干个候选存储桶,所述方法包括如下步骤:
步骤S100、获取待管理元素的对应的存储块的随机偏移量和所述待管理元素的锚点索引值。
现有研究表明:当哈希函数个数k>2时,布谷鸟哈希表的负载因子(Load Factor)(即存储的元素个数与哈希表存储位置数的比值)增大。因此,给定布谷鸟过滤器的存储位置数,增加哈希函数个数k,可增加存储的元素个数,从而减少每个元素的存储空间开销(即过滤器存储空间与存储的元素个数的比值)。为了降低存储空间开销,本实施例为烟花过滤器中的存储块设计了一个随机偏移量,当需要对待管理元素执行元素管理操作时,会产生所述待管理元素的对应的存储块的随机偏移量和所述待管理元素的锚点索引值。所述随机偏移量是根据哈希函数得到的数值,指的是元素在每一个存储块中的随机变化的偏移量;所述锚点索引值指元素在每个存储块的同一相对存储桶索引值。后续根据所述待管理元素的对应的存储块的随机偏移量和所述待管理元素的锚点索引值确定执行元素管理操作的存储桶。由于本实施例引入了一个随机偏移量,因此本实施例中的元素管理方法不要求过滤器的存储桶数为2的幂,支持哈希函数个数k等于或大于2,可以有效降低每个元素的存储空间开销。
在一种实现方式中,如图2所示,所述步骤S100具体包括如下步骤:
步骤S110、根据第一哈希函数计算并确定待管理元素的指纹和所述待管理元素的锚点索引值;
步骤S120、根据所述待管理元素的指纹以及第二哈希函数计算并确定所述待管理元素的对应的存储块的随机偏移量。
当烟花过滤器接收到元素管理操作时,首先需要根据第一哈希函数计算并确定所述待管理的指纹和所述待管理元素的锚点索引值。举例说明:当插入元素x时,计算元素x的指纹f
H(x):f
其中哈希值F(x)中的低位数值为f
然后根据所述待管理元素的指纹以及第二哈希函数计算并确定每一个存储块的随机偏移量。举例说明:当需要计算元素X的第i个存储块的随机偏移量,已知元素X的指纹为F(x),采用哈希函数G
为了确定执行所述待管理元素的元素管理操作的存储桶,如图2所示,所述方法还包括如下步骤:
步骤S200、根据所述待管理元素的对应的存储块的随机偏移量、所述待管理元素的锚点索引值和加减法操作确定所述待管理元素对应的存储桶,得到候选存储桶。
具体地,本实施例获取到所述待管理元素的对应的存储块的随机偏移量、所述待管理元素的锚点索引值以后,需要基于加减法操作对得到的随机偏移量和锚点索引值进行计算,得到所述待管理元素对应的存储桶的索引值,即候选存储桶索引值。根据该候选存储他索引值查找并确定执行所述待管理元素的元素管理操作的候选存储桶。
在一种实现方式中,如图3所示,所述步骤S200具体包括如下步骤:
步骤S210、获取所述待管理元素的对应的存储块的起始存储桶索引值;
步骤S220、根据所述存储块的起始存储桶索引值、所述待管理元素的锚点索引值和所述存储块的随机偏移量,通过加减法操作计算并得到候选存储桶索引值;
步骤S230、将所述候选存储桶索引值对应的存储桶作为候选存储桶。
如图5所示,每一个存储块对应的第一个存储桶的索引并不相同,第一个存储块的第一个存储桶的索引值为0,第二个存储块的第一个存储桶的索引值为3,第三个存储块的第一个存储桶的索引值为6,第四个存储块的第一个存储桶的索引值为9。因此为了准确确定候选存储桶的索引值,本实施例还需要预先获取起始存储桶索引值,用于指示每一个存储块的第一个存储桶的索引值。如图5所示,只有第一个存储块中的存储桶的索引值是从0开始,其他存储块中的存储桶的索引值均不是从0开始,且每一个存储块中第一个存储桶的索引值的相差数值均相等,因此在一种实现方式中,可以通过获取一个存储块中包含的存储桶的个数,将所述一个存储块中包含的存储桶的个数作为存储块固定偏移量。然后将存储块的序号与所述存储块固定偏移量的乘积作为与所述序号对应的存储块的起始存储桶索引值,得到所述待管理元素的对应的存储块的起始存储桶索引值。只有准确地确定了每一个存储块的第一个存储桶的索引值,才能在每一个存储块的第一个存储桶的索引值的基础上通过随机偏移量进行偏移,然后准确得到每一个存储块中可以用于执行待管理元素的元素管理操作的候选存储桶。
获取到所述待管理元素的对应的存储块的起始存储桶索引值之后,根据所述存储块的起始存储桶索引值、所述待管理元素的锚点索引值和所述存储块的随机偏移量,通过加减法操作计算并得到候选存储桶索引值,然后将所述候选存储桶索引值对应的存储桶作为候选存储桶。举例说明:假设需要计算元素x的第i个存储块的第i个候选存储桶索引值h
h
其中G
找到执行所述待管理元素的元素管理操作的候选存储桶以后,如图1所示,所述方法还包括如下步骤:
步骤S300、通过所述待管理元素对应的候选存储桶执行所述待管理元素的元素管理操作;所述元素管理操作包括插入操作、查询操作以及删除操作中的一种或者多种。
本实施例中的烟花过滤器支持插入操作、查询操作以及删除操作。当确定完毕候选存储桶以后,即通过所述待管理元素对应的候选存储桶执行相应的元素管理操作。下面分别以实现方式的形成对插入操作、查询操作以及删除操作进行具体说明。
在一种实现方式中,当所述元素管理操作为插入操作时,所述步骤S300具体包括如下步骤:
A1、检测所述候选存储桶是否存在空闲存储位置;
A2、若存在空闲存储位置,将所述待管理元素对应的指纹存储至所述空闲存储位置;
A3、若不存在空闲存储位置,在若干个候选存储桶中选取一个目标候选存储桶,在所述目标候选存储桶中选取一个目标指纹,将所述待管理元素对应的指纹存储至所述目标指纹对应的存储位置;
A4、获取所述目标候选存储桶的索引值,根据所述目标候选存储桶的索引值与加减法操作重新确定所述目标指纹的存储位置。
当所述元素管理操作为插入操作时,即表示需要将所述待管理元素的指纹存储进所述待管理元素对应的候选存储桶中。因此需要检测所述候选存储桶是否存在空闲存储位置。在一种实现方式中,可以通过依次搜索所述待管理元素对应的候选存储桶h
检查完毕以后,若候选存储桶中存在空闲存储位置,则可以直接将所述待管理元素对应的指纹存储至所述空闲存储位置,完成元素的插入操作。具体地,本实施例中的候选存储桶并非只有一个,每一个存储块中均有一个存储桶为所述待管理元素对应的候选存储桶,在进行插入操作时,可以按顺序检查每一个候选存储桶中是否有空闲存储位置,若有空闲存储位置,则直接将该元素的指纹存储进空闲存储位置中,完成元素的插入操作,也可以同时检查所有候选存储桶中是否有空闲存储位置,若有空间存储位置,则随机选择一个候选存储位置并将该元素的指纹存储进空闲存储位置中,完成元素的插入操作。当所有候选存储桶中均没有空闲存储位置用于存储所述待管理元素的指纹时,则在所有候选存储桶中随机选取一个候选存储桶作为目标候选存储桶,然后在所述目标候选存储桶中选取一个指纹作为目标指纹,将所述待管理元素对应的指纹存储至所述目标指纹对应的存储位置。然后,获取所述目标候选存储桶的索引值,根据所述目标候选存储桶的索引值与加减法操作重新确定所述目标指纹的存储位置。
为了重新确定所述目标指纹的存储位置,在一种实现方式中,首先需要获取所述目标候选存储桶的索引值,根据所述目标候选存储桶的索引值确定所述目标指纹的参考候选存储桶;所述参考候选存储桶为所述目标指纹对应的候选存储桶中除所述目标存储桶之外的候选存储桶。具体地,可以通过获取所述目标候选存储桶的索引值,根据所述目标候选存储桶的索引值确定所述目标候选存储桶所处的存储块,将所述目标候选存储桶所处的存储块作为目标存储块,并得到所述目标存储块的存储块索引值。其中,所述目标存储块的存储块索引值可以按照公式d=h/l计算得到,l是单独一个存储块所包含的存储桶数。
然后根据所述目标存储块的存储块索引值计算出所述目标存储块的随机偏移量,之后根据所述目标存储块的随机偏移量和加减法操作计算出所述目标指纹的锚点索引值。其中所述目标存储块的随机偏移量和所述目标指纹的锚点索引值可以通过下述公式H=(h-G
之后,再根据所述目标指纹的锚点索引值确定所述目标指纹的参考候选存储桶。具体地,首先根据所述目标存储块的存储块索引值i,然后采用的公式i=(d+j)mod k计算出所述目标指纹对应的参考候选存储桶所处的存储块索引值,其中k是存储块数(也是哈希函数个数)。之后,再根据公式h
然后搜索所述参考候选存储桶中是否具有空闲存储位置,若所述参考候选存储桶具有空闲存储位置,将所述目标指纹存储至所述参考候选存储桶的空闲存储位置。若所述参考候选存储桶未具有空闲存储位置,在所述参考候选存储桶内选取一个目标存储位置,将所述目标指纹存储于所述目标存储位置。然后将所述目标存储位置原始存储的指纹重新作为目标指纹,将所述目标存储位置所在的存储桶重新作为目标候选存储桶,继续执行获取所述目标候选存储桶的索引值,根据所述目标候选存储桶的索引值与加减法操作重新确定所述目标指纹的存储位置直至参考候选存储桶具有空闲位置或者元素移动次数达到预设阈值。所述元素移动次数具体通过下述过程得到的,在所述参考候选存储桶内选取一个目标存储位置,将所述目标指纹存储于该目标存储位置之前,将所述移动次数自增1,以统计待管理元素的插入操作对应的元素移动次数,用于衡量待管理元素对应的插入操作是否结束,避免插入操作进入死循环。
本实施例提供一种烟花过滤器的元素插入操作的完整流程如图9所示。以插入元素x、元素y为例子,图5是在烟花过滤器中插入元素x的示例,图6是在烟花过滤器中插入元素y的示例,图5、6中过滤器均包含k=4个存储块、每个存储块包含l=3个存储桶,每个存储桶包含C=2个存储位置、存储桶总数为m=12。
当插入元素x时,具体插入流程如下:
步骤1、采用第一哈希函数H(x):f
步骤2、采用第二哈希函数G
步骤3、采用公式h
h
h
h
h
步骤4、搜索指纹f
步骤5、随机在指纹f
当插入元素y时,具体插入流程如下:
步骤1、采用第一哈希函数H(x):f
步骤2、采用第二哈希函数G
步骤3、搜索指纹f
步骤4、随机选择指纹f
步骤5、基于旧指纹f
步骤6、搜索指纹f
步骤7、随机选择候选存储桶h
当所述元素管理操作为查询操作时,所述步骤S300具体为:在所述待管理元素对应的候选存储桶内查找是否存在与所述待管理元素的指纹匹配的指纹;当存在时,显示所述待管理元素存在;当不存在时,显示所述待管理元素不存在。元素查询操作的具体流程如下(如图10所示):
C1、采用第一哈希函数H(x):f
C2、采用第二哈希函数G
C3、判断索引值i是否满足条件i C4、根据公式h C5、根据候选存储桶索引值h C6:元素x在集合中,查询操作结束。 C7:元素x不在集合中,查询操作结束。 举例说明元素的查询操作流程:图7是在烟花过滤器中查询元素x的示例,图7中过滤器包含k=4个存储块、每个存储块包含l=3个存储桶,每个存储桶包含C=2个存储位置、存储桶总数为m=12。 当查询元素x时,具体查询流程步骤如下: 步骤1、第一哈希函数H(x):f 步骤2、计算指纹f 步骤3、根据存储块的随机偏移量以及第二哈希函数G 步骤4、搜索指纹f 当所述元素操作为删除操作时,所述步骤S300具体为:在所述待管理元素对应的候选存储桶内查找是否存在与所述待管理元素的指纹匹配的指纹;当存在时,删除查找到的指纹;当不存在时,显示所述待管理元素删除失败。元素删除操作的具体流程步骤如下(如图11所示): C1、采用第一哈希函数H(x):f C2、采用第二哈希函数G C3、判断索引值i是否满足条件i C4、根据公式h C5、根据候选存储桶索引值h C6:随机选择一个候选存储桶,删除一个与f C7:元素x删除失败,删除操作结束。 举例说明元素的删除操作流程:图8是在烟花过滤器中删除元素y的示例,图8中过滤器包含k=4个存储块、每个存储块包含l=3个存储桶,每个存储桶包含b=2个存储位置、存储桶总数为m=12。 当删除元素y时,具体删除流程如下: 步骤1、采用第一哈希函数H(x):f 步骤2、计算指纹f 步骤3、采用第二哈希函数G 步骤4、根据计算出的候选存储桶索引值搜索指纹f 步骤5、随机选择一个候选存储桶h 需要强调的是,烟花过滤器的元素删除方法可确保正确删除元素,不会产生假阴性错误。如果两个插入元素的指纹相同,烟花过滤器插入该两个元素的两个指纹在过滤器中。如果删除上述两个元素的一个指纹,另一个指纹仍在过滤器中,因此不会产生假阴性错误,可能产生假阳性错误。尽管如此,烟花过滤器的元素删除方法不会增加假阳性错误率,其假阳性错误率低,与标准布鲁姆过滤器、计数布鲁姆过滤器、布谷鸟过滤器等的假阳性错误率相同。 基于上述实施例,本发明还提供了一种烟花过滤器,如图12所示,该装置包括:布谷鸟哈希表,所述布谷鸟哈希表包括若干个存储块,所述若干个存储块均包括若干个候选存储桶; 获取模块,用于获取所述待管理元素的对应的存储块的随机偏移量和所述待管理元素的锚点索引值; 确定模块,用于根据所述存储块的随机偏移量和所述待管理元素的锚点索引值确定所述待管理元素对应的候选存储桶; 执行模块,用于通过所述待管理元素对应的候选存储桶执行所述待管理元素的元素管理操作;所述元素管理操作包括插入操作、查询操作以及删除操作中的一种或者多种。 本发明中的烟花过滤器不要求过滤器的存储桶数为2的幂,并可扩展支持哈希函数个数等于或大于2,从而提升存储空间效率以及查询和更新性能。本发明提供的烟花过滤器可以表示为(k,b)-FF,其中k表示哈希函数个数,b表示每个存储桶包含的存储位置数。现有布谷鸟过滤器是烟花过滤器的一个特例,即(2,4)-FF,其中k=2且b=4。对该类烟花过滤器(k,b)-FF的理论分析和实验评估,本发明人发现:烟花过滤器(4,1)-FF是最佳过滤器,即当哈希函数个数k=4,每个存储桶包含b=1个存储位置、过滤器的负载因子(Load Factor)为0.95时,(4,1)-FF具有最小的每个元素的存储空间开销和最快的查询和更新性能。 本发明的技术亮点如下: 1、本发明中的烟花过滤器是由k个存储块组成的分块布谷鸟哈希表,采用烟花哈希方法和加减法操作,基于哈希函数产生元素的一个锚点索引值和k个随机偏移量,计算指纹的k个存储块的k个候选存储桶索引值。其中锚点索引值是元素在每个存储块的同一相对存储桶索引值,第i个随机偏移量是指纹在第i个存储块的存储桶索引值。烟花过滤器不要求存储桶数为2的幂,支撑哈希函数个数等于或大于2。 2、本发明中的元素插入方法,通过采用烟花哈希方法,产生元素的一个锚点索引值和k个随机偏移量;并采用加法操作,计算指纹的k个存储块的k个候选存储桶索引值,插入指纹到其中一个候选存储桶。当旧指纹重新插入过滤器时,基于旧指纹及其当前存储桶索引值,采用减法操作,计算旧指纹的锚点索引值;采用加法操作,计算旧指纹的其他存储块的k-1个候选存储桶索引值,插入旧指纹到其他一个候选存储桶。 3、本发明中的元素查找方法或元素删除方法,通过采用烟花哈希方法,产生元素的一个锚点索引值和k个随机偏移量;采用加法操作,计算指纹的k个存储块的k个候选存储桶索引值;搜索元素的k个候选存储桶,查找或删除一个匹配指纹。 4、本发明提供一种最佳的烟花过滤器(4,1)-FF,即当哈希函数个数k=4,每个存储桶包含b=1个存储位置、过滤器的负载因子(Load Factor)为0.95时,(4,1)-FF具有最小的每个元素的存储空间开销和最快的查询和更新性能。 综上所述,本发明公开了一种应用于烟花过滤器的元素管理方法,通过获取所述待管理元素的对应的存储块的随机偏移量和所述待管理元素的锚点索引值;根据所述存储块的随机偏移量、所述待管理元素的锚点索引值和加减法操作确定所述待管理元素对应的候选存储桶;通过所述待管理元素对应的候选存储桶执行所述待管理元素的元素管理操作;所述元素管理操作包括插入操作、查询操作以及删除操作中的一种或者多种。由于本发明提供的元素管理方法不要求烟花过滤器的存储桶数为2的幂,因此可以解决现有技术中的布谷鸟过滤器的异或操作要求存储桶数必须为2的幂,导致元素的存储空间开销增大的问题。 应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
- 一种应用于烟花过滤器的元素管理方法及烟花过滤器
- 一种烟花爆竹用烟火药中锶元素的快速定性检测方法