一致性布谷过滤器的操作方法转让专利
申请号 : CN201910304801.X
文献号 : CN110046164B
文献日 : 2021-07-02
发明人 : 郭得科 , 罗来龙 , 李江帆 , 李尚森
申请人 : 中国人民解放军国防科技大学
摘要 :
权利要求 :
1.一致性布谷过滤器的操作方法,其特征是,所述操作方法包括元素插入,元素查询和元素删除;所述操作方法还包括对一致性布谷过滤器的容量进行调整,调整方式包括扩容、缩容、扩展和压缩,扩展是指向一致性布谷过滤器中增加未使用的索引独立布谷过滤器,压缩是指压缩稀疏索引独立布谷过滤器;
当要表示的元素数量急剧增加时,通过向一致性布谷过滤器中增加单个或多个未使用的索引独立布谷过滤器使得一致性布谷过滤器的容量增加,增加的索引独立布谷过滤器是异构的,桶和槽的数量能被调整;
当索引独立布谷过滤器因为集合元素的移除而变得稀疏时,一致性布谷过滤器尝试通过压缩操作将该索引独立布谷过滤器移除:一致性布谷过滤器首先选取最低利用率的索引独立布谷过滤器向量并移除;
将被移除的索引独立布谷过滤器中的元素指纹ηx重新插入到一致性布谷过滤器中,如果所述被移除的索引独立布谷过滤器中的元素指纹ηx被成功插入到一致性布谷过滤器,被选择的所述被移除的索引独立布谷过滤器可以安全移除,否则,不需要进一步压缩一致性布谷过滤器,压缩持续移除索引独立布谷过滤器直到存在被移除的索引独立布谷过滤器不能被安全移除;
其中,所述一致性布谷过滤器包括s个异构的索引独立布谷过滤器,每个索引独立布谷过滤器有mi≥1个桶,每个桶有bi≥1个槽位,其中,s≥1,初始值为1,i∈[0,s‑1];mi个桶被映射到一个范围从1到M‑1的一致性哈希环中,其中M是一致性哈希环的取值范围;每个桶可存储0‑b个指纹,且为每个元素x提供k≥1个候选桶,为了确定元素x的候选桶,k个相互独立的哈希函数被用于将元素指纹ηx映射到一致性哈希环中,k个哈希函数的k个最近的桶被认为是元素指纹ηx的候选桶。
2.根据权利要求1所述的一致性布谷过滤器的操作方法,其特征是,一致性布谷过滤器追踪每个索引独立布谷过滤器中插入的元素数量,并将插入最后一个元素的索引独立布谷过滤器标记为活跃索引独立布谷过滤器,元素插入的操作方式如下:f
索引独立布谷过滤器将元素x映射到整数区间[0,2 ‑1]中来生成元素指纹ηx,其中f为元素指纹长度;
相互独立的k个哈希函数将元素指纹ηx映射到一致性哈希环中,基于生成的哈希值,一致性哈希决定元素指纹ηx在活跃索引独立布谷过滤器中的候选桶;
将元素指纹ηx按布谷哈希中的策略插入到活跃的索引独立布谷过滤器中,如果活跃索引独立布谷过滤器成功存储元素指纹ηx,那么插入结束;否则,一致性布谷过滤器会进行扩容操作或者扩展操作,扩容操作或者扩展操作后,将元素指纹ηx插入到扩容的或者扩展的索引独立布谷过滤器中。
3.根据权利要求1所述的一致性布谷过滤器的操作方法,其特征是,元素查询的操作方式如下:
通过相互独立的k个哈希函数对元素指纹ηx进行哈希来决定元素指纹ηx在一致性哈希环中的位置;
基于哈希值,一致性哈希得出对于元素指纹ηx在索引独立布谷过滤器中候选桶的位置:如果任一候选桶持有元素指纹ηx,成员关系查询终止,返回存在;相反,如果在所有的索引独立布谷过滤器中,都没有找到元素指纹ηx,一致性布谷过滤器判定元素x不属于集合A,返回不存在。
4.根据权利要求3所述的一致性布谷过滤器的操作方法,其特征是,元素x的删除需要首先进行成员关系查询来找出元素的可能位置,元素删除的操作方式如下:如果对应的元素指纹ηx在一致性布谷过滤器中未找到,删除操作返回失败;如果对应的元素指纹ηx在一致性布谷过滤器中被找到则直接执行删除。
5.根据权利要求1所述的一致性布谷过滤器的操作方法,其特征是,扩容是指向索引独立布谷过滤器中增加桶,缩容是指通过从指定索引独立布谷过滤器中移除桶;
扩容时,在其后继中存储的元素指纹ηx会受到影响:新的桶Bnew被映射到Bi和Bj(i,j∈[0,m‑1])之间,Bj是Bnew的后继,在这种情况下,仅在Bj中存储的元素可能需要被重新放置到Bnew中,即如果在Bj中的元素指纹ηx被映射到Bi和Bnew之间,则它应该被移动到Bnew中;否则,应该继续留在Bi中;
缩容时,当某个桶从索引独立布谷过滤器中移除时,仅在此桶中的元素需要被重新放置到一致性布谷过滤器中:若一致性哈希中的桶Bi和Bj,Bj是Bi的后继,一致性布谷过滤器优先尝试将桶Bi中的元素指纹ηx推到桶Bj中,然后将剩余元素重新放置到其余桶中,如果Bi中的元素指纹ηx被全部成功存储,Bi能够被移除,否则,Bi不能被移除。
6.根据权利要求1所述的一致性布谷过滤器的操作方法,其特征是,容量调整的触发条件是:通过元素的到达速率α和元素移除速率β共同决定是否需要调整一致性布谷过滤器容量,当α>β时,进行扩容或者扩展;当α<β时,进行缩容和压缩;
通过元素的到达速率α和一致性布谷过滤器假阳性比率上界 共同决定扩容或者扩展:当 时,是阈值,一致性布谷过滤器能够在小规模单体扩容操作下插入抵达元素,小规模单体为在每次扩展中只增加单个桶;当 时,在增加新的索引独立布谷过滤器之后总体的假阳性比率不会超过 扩展操作才被触发,否则,一致性布谷过滤器仅使用桶级别的单体扩容操作;
当缩容的条件与扩展的条件一致时,压缩的条件与扩容的条件一致。
说明书 :
一致性布谷过滤器的操作方法
技术领域
背景技术
率下支持常数时间成员查询操作。用于成员查询广泛使用的概率型数据结构有布隆过滤
器,布谷过滤器以及它们的变种。布隆过滤器和布谷过滤器用不同的方式表示元素。布隆过
滤器是一个固定长度的初始比特为0的数组。为了插入一个元素,k个独立的哈希函数用于
将元素映射到比特向量,然后相应的比特会被置1。当检测任意元素x的成员关系时,布隆过
滤器只检查k个相应的比特位是否为0。如果都是1,布隆过滤器得出x是集合成员(可能隐含
一个假阳性元素);否则,可以正确的得出x不是集合成员(无假阴性)。和布隆过滤器不同,
布谷过滤器在桶中直接存储元素指纹。布谷过滤器通过部分布谷哈希得出元素的两个候选
桶,将指纹存入其中之一。如果元素的指纹在任意一个候选桶中找到,则认为元素是集合成
员。然而布谷过滤器和布隆过滤器因为不能重新设置容量大小不能处理动态集合成员。为
此,动态布隆过滤器(DBF)和动态布谷过滤器(DCF)已经被提出。DBF和DCF尝试根据需求增
加和合并同构的布隆过滤器和布谷过滤器来实现容量的伸缩性。在DBF和DCF中,每个过滤
器的长度都是预置的,因为格或桶的索引是基于过滤器的长度取余得到,所以过滤器的长
度不能改变。只能通过增加和合并同构的过滤器来调整容量。在最坏的情况下,因为一个额
外的元素需要一个过滤器,导致空间利用率低于50%的结果。因此,在空间稀缺的场景下,
桶级别的容量调整对于节省空间是必要的。而且,DBF主要的缺陷在于由于可能有多个布隆
过滤器满足查询条件,不能支持可靠的删除操作。尽管DCF保证可靠的元素删除,利用异或
γ
操作在重新放置时得到第二个候选桶。所以,每个布谷过滤器的长度只能是m=2 (γ≥0)。
否则,异或操作会超出范围。
用容量大小要适应性的随着集合基数趋势变化一致调整;空间效率(SE)。无论集合基数的
变化如何,空间利用率都保持在较高水平。这对空间稀缺的场景十分重要,例如:无线传感
器网络。设计伸缩性(DF)。所有的参数都是可调整的,用户可以根据设计目标定制自身的配
置。例如:哈希函数的数量可能为了更高的空间利用而增加,为了更好的查询吞吐而减少。
如果这些准则可以实现,将会给集合表示和成员关系查询带来前所未有的好处,保证空间
节省和服务质量。设计伸缩性进一步将数据结构扩展到更多有不同需求的一般场景。
器和它的变种通过在每次插入中的重放置策略提高了空间利用率。DBF和DCF通过动态增加
和合并过滤器在一定程度上提供了容量弹性。然而,在现实中,需要更加细粒度的容量伸缩
来处理小规模的容量溢出和在一些元素被删除时及时的空间回收。而且,现有的数据结构
被设计可伸缩性限制。在布隆过滤器器得框架中,为了目标假阳性比率,参数需要细致的设
置。同时,布隆过滤器的现有协议必须使用固定数量的哈希函数和2的幂次方桶数。现有数
据结构在实现上述三条准则不足的共同原因是它们都维持了元素的格或桶的索引与过滤
器长度之间紧密的依赖。结果它们的容量不管动态集合的变化,必须是预置的和不可修改
的。
发明内容
问题。
取值范围。
希函数的k个最近的桶被认为是元素指纹ηx的候选桶。
为1,i∈[0,s‑1]。
操作方式如下:
行扩容操作或者扩展操作,扩容操作或者扩展操作后,将元素指纹ηx插入到扩展的或者扩
展的索引独立布谷过滤器中。
索引独立布谷过滤器中,都没有找到元素指纹ηx,一致性布谷过滤器判定元素x不属于集合
A,返回不存在。
置到Bnew中,即如果在Bj中的元素指纹ηx被映射到Bi和Bnew之间,则它应该被移动到Bnew中;否
则,应该继续留在Bi中;
器优先尝试将桶Bi中的元素指纹ηx推到桶Bj中,然后将剩余元素重放置到其余桶中,如果Bi
中的元素指纹ηx被全部成功存储,Bi可以被移除,否则,Bi不能被移除。
过滤器可以是异构的,桶和槽的数量是可以调整的;
器,选择的被移除的索引独立布谷过滤器可以安全移除,否则,一致性布谷过滤器早已足够
简练,不需要进一步压缩,压缩持续移除索引独立布谷过滤器直到存在被移除的索引独立
布谷过滤器不能被安全移除。
和压缩;
滤器之后总体的假阳性比率才不会超过 扩展操作才被触发。否则,一致性布谷过滤器仅
使用桶级别的单体扩容操作;
缩性变化。本发明还组合多个索引独立布谷过滤器作为一致性布谷过滤器,并且提出动态
集合表示和容量调整的算法,并且实现了设计的三条准则。
附图说明
具体实施方式
利用率。总的来说,布谷哈希表是有m个桶的数组。每个桶存储一个元素。为了插入元素x,两
个独立的哈希函数h1和h2用于为元素x选择候选桶。如果桶h1(x)%m或者h2(x)%m是空的,
元素会存储在其中之一。相反,如果两个桶均被占用,布谷哈希表会随机选取一个,提出已
存元素来安置x。被踢出的受害者会被分派到它的其它候选桶中。布谷哈希表会持续踢出并
重新安置已存元素直到受害者成功安置或者踢出的迭代此处超过预设的最大值。当元素插
入失败时,布谷哈希表被认为已满。为了查询或者访问元素,用户只需要检查元素的两个候
选桶。重新放置使得布谷哈希表优化了先前存入元素的放置,因此保证了较高的空间利用
率。在实际实现中,每个桶推荐存储多个元素,并且哈希函数的个数也可以有选择性而不是
固定值。
元素的条件下,调整哈希表时,只有一部分已存元素需要被移动。一致性哈希将元素和桶映
射到从0到M的环中。之后,元素被顺时针或者逆时针分派到环中。当一个新的增加环中时,
仅在其后继桶中的部分元素需要被移动。类似地,在桶被移除出哈希表时,该桶中的元素只
需被推到其后继桶中即可。假设哈希表中桶的数量是m,元素数量是n,平均每次更新影响的
元素只有n/m。一致性哈希已经被广泛应用与分布式系统,本实施例中使用一致性哈希来将
指纹分派到CCF桶中,同时可以随意愿单体扩容和单体缩容。
个可以存储b个指纹的桶,集合中元素x与由哈希函数h0生成的f比特指纹ηx相关联。对于CF
显而易见的问题是在不需要元素原始信息时得出被踢出元素候选桶。CF应用partial‑key
布谷哈希策略来处理这个问题。候选桶可以通过对当前桶的索引和被踢出元素指纹的哈希
值进行异或操作得到。
的话还会对提出的受害者元素重放置。为了查询元素y是否是集合A的成员,CF检查y对应的
候选桶。如果指纹ηy存在其中之一,CF判定y∈A;否则CF判定 由于指纹潜在的哈希碰
撞问题,CF可能会有假阳性错误(将本不属于集合的元素误认为是集合成员)。理论上,CF的
假阳性错误有上界 f是指纹的比特位数,b是每个桶中槽的数目。如
果集合A中所有元素均成功插入,对于CF来说没有假阴性的错误。
简化的影响可以通过指纹边缘图来可视化,其顶点是散列表的桶,并且其边
缘连接指纹的可能成对位置。基于图论,SCF提供了理论上的性能分析。自适应布谷过滤器
(ACF)尝试通过重新设置发生碰撞的指纹来从CF向量中移除假阳性错误。ACF包括一个CF和
相应的布谷哈希表。这样的设计确保ACF识别假阳性错误,将桶索引与指纹解耦。当一个假
阳性错误发生,ACF为冲突元素生成新的指纹,这个指纹可直接从哈希表中直接获取。结果,
假阳性错误之后不会再次发生。
回收机制被建议合并两个低负载的CF,从而提高空间使用。DCF的假阳性比率上界为1‑(1‑
S
fCF) ,fCF是每个CF向量的假阳性比率,s是DCF中保持的CF数目。
设计可伸缩性和不合时宜的空间回收。总之,我们提出了CCF,一种新颖的概率型数据结构
能够同时确保容量弹性、高的空间使用和设计可伸缩性。
先设定的,在整个生命周期中不可改变。计算哈希值的异或操作通过限制过滤器的长度为2
的幂次方,更加恶化了容量的可伸缩性。因此,我们重新设计了布谷过滤器的框架,在这里
提出了I2CF。
范围。为了在一致性哈希环中确保负载均衡,每个桶有v≥1虚拟节点,I2CF同样存储元素的
指纹而不是元素的实际内容,为每个元素提供k≥1个候选桶。如果元素的指纹被存储在候
选桶之一,那么这个元素就被成功表示。为了确定元素x的候选桶,k个相互独立的哈希函数
被用于将元素指纹ηx映射到一致性哈希环中。之后关于k个哈希函数的k个最近的桶(默认
顺时针)被认为是ηx的候选桶。用这种方式,候选桶是索引独立的并且有一致性哈希决定。
指纹可以存在这些候选桶的任意一个。如果所有的候选桶已被占用,I2CF随机踢出这些候
选桶之一的已存入指纹来插入新指纹,被踢出的受害者会被重新放置在它的一个候选桶
中。重新放置过程在桶中有空余位置时成功结束,在重放置次数达到给定阈值时失败结束。
桶。一个I2CF简单的示例在图1中给出。第二,I2CF将布谷过滤器中固定的2个桶一般化为可
变变量k。通过后面的分析,k值越大空间利用越高,I2CF实现了桶级别的容量弹性和更高的
空间利用来表示动态集合。
初始为1,i∈[0,s‑1]。
像已有的CF变种,CCF同样利用指纹来表示集合中的元素。对于元素x的指纹可利用哈希函
f
数h0将x映射到[0,2‑1]得到。CCF包括s(s≥1,初始为1)个异构的I2CF。任意I2CFi(i∈[0,
s‑1])有mi≥1个桶,每个桶有bi≥1个槽位。所用的哈希函数ki和I2CFi中Mi的值同样允许与
其他I2CF中不同。这样的框架,CCF能实现最大的设计可伸缩性。注意到为了复用在I2CF之
间为指纹计算的哈希值,我们默认选择k0=…=ki=…=ks‑1=k,并且M0=…=Mi=…=
Ms‑1=M。更重要的是,CCF提供桶级别和过滤器级别的容量弹性。可以通过在I2CF中增加或
者移除桶,同样也可以引入未使用的I2CF或合并低使用率的I2CF。当一个I2CF被扩大或者
引入时,它会被标记为活跃状态来存储新元素。
会查询所有的s个I2CF向量。对于I2CFi,假阳性比率是 总体的假阳性比率
得出为 注意到,DCF和CCF都有多个过滤器,有同样的假阳性比率。
一般地,f越大,会有越低的假阳性比率,更大的k,b,s导致更高的假阳性比率。然而,DCF不
能支持运行时假阳性比率,因为s会随着集合基数的增加而持续增加。结果,当更多的CF增
加时,DCF的假阳性比率会一直增加。相反,CCF通过为s设定阈值支持运行时假阳性比率保
证。如果s达到了阈值。一方面,CCF可以执行压缩操作来合并一些I2CF。另一方面,CCF仅使
用桶级别的容量变化来容纳新元素,因此s的值不会增加。这样假阳性比率会被合理的限
制。
跃I2CF。为了插入元素x,CCF首先将x映射到[0,2 ‑1]中来生成元素指纹。之后相互独立的k
个哈希函数将元素指纹ηx映射到一致性哈希环中。基于生成的哈希值,一致性哈希决定ηx的
在活跃I2CF中的候选桶。之后,尝试将ηx按布谷哈希中的策略插入到活跃I2CF中。如果活跃
I2CF成功存储指纹ηx,那么插入算法终止。否则,CCF容量会在桶级别或者过滤器级别扩展。
之后,ηx会被插入到扩展的或者增加的I2CF中。算法1中展示了伪代码。注意到,当扩展时,
CCF标记被操作的I2CF为活跃状态,因此待插入的数会被插入到这个I2CF向量。建议选择具
有最少桶的I2CF,以便在执行桶级别扩展时实现更好的平衡。有时,为了成功放置ηx,需要
增加多个桶。如果在插入x之后还有多个元素需要插入,CCF在假阳性比率限制下将会引入
新的I2CF向量,这样新的元素可以立即被插入。
哈希函数对元素指纹ηx哈希来决定元素指纹ηx在哈希环I2CFi(i∈[0,s‑1])中的位置。基于
哈希值,一致性哈希得出对于元素指纹ηx在I2CFi中候选桶的位置。如果任一候选桶持有元
素指纹ηx,成员关系查询终止,返回存在。相反,如果在所有的I2CF中,都没有找到元素指纹
ηx,CCF判定 返回不存在。对于查询的元素可能存在一定的假阳性错误,但是对于存储
元素不存在假阴性错误。
操作会被执行与降低CCF容量,保持较高的空间使用率。CCF偏向于选择过滤器级别的容量
调整,因为小的s可以保证较低的假阳性比率。
急剧的增加或者减少。为了处理这个问题,数据结构必须在不同粒度上进行容量调整。因
此,本实施例提出了两个选择来扩展CCF的容量,即:纵向上向I2CF中增加桶,横向上向CCF
中增加未使用的I2CF。对称的,CCF的容量可以被缩小,通过从指定I2CF中移除桶,或者压缩
稀疏I2CF。单体扩容和单体缩容能进行桶级别的容量调整,同时,向外扩展和压缩实现过滤
器级别的容量调整。这些方法保证了CCF在表示动态集合时有很好的容量弹性。
Bj中存储的元素可能需要被重新放置到Bnew中。具体地,如果在Bj中的指纹被映射到Bi和Bnew
之间,它应该被移动到Bnew中;否则,应该继续留在Bi中。极端情况下,Bj是空的,那么Bnew也应
该是空的。图1(b)中所示的为简单的扩容。
Bi和Bj,Bj是Bi的后继。CCF优先尝试将桶Bi中的指纹推到桶Bj中,然后将剩余元素重放置到
其余桶中。如果Bi中的指纹被全部成功存储,Bi可以被移除。否则,Bi不能被移除。图1(c)所
示为简单的缩容。当CCF单体缩容时,为了省时优先移除空的和低使用率的桶。
CCF的容量可以通过向CCF中增加单个或多个未使用的I2CF立即增加。增加的I2CF可以是异
构的,因为它们是完全独立的。桶和槽的数量是可以调整的。
后,我们尝试将I2CFL中的指纹重新插入到CCFT中。如果I2CFL中的指纹可以被成功插入到
CCF,选择的I2CFL可以安全移除。否则,CCF早已足够简练,不需要进一步压缩。压缩算法持
续移除I2CF直到存在I2CF不能被安全移除。
单体扩容操作下插入抵达元素(在每次扩张中只增加单个桶)。保守地使用向外扩展,因为
增加I2CF会导致更高的总体假阳性比率。仅当 时,ξCCF在增加新的I2CF之后总体的假
阳性比率才不会超过 向外扩展操作才有可能被触发。否则,CCF仅使用桶级别的单体扩容
操作。特殊情况下,当 时,但是现有I2CF在 限制下不允许插入更多的元素,CCF需要对
I2CF进行大规模单体扩容操作(每次扩张增加多个桶)。在每次单体扩容过程中需要增加的
桶数与到达速率α城比例。
规模扩容操作。
I2CF中存储的指纹低于阈值时才会触发。为此,CCF为每个I2CF增加了计数器来追踪存储指
纹的数量。
容量是稳定的。在这种情况下,除非插入操作失败或者存在I2CF使用率极低,其余并不需要
立即调整CCF容量。因此,在更高的层次,我们建议使用α和β共同决定CCF容量调整策略。当α
>β时,单体扩容和向外扩展操作需要来扩展CCF;当α<β时,进行单体缩容和压缩操作。
容量弹性 ++ ++ ++ +++
空间效率 + + ++ ++ ++ ++ +++ +++
设计伸缩性 ++ ++ + + + + +++ +++
提高了空间利用率。DBF和DCF通过动态增加和合并过滤器在一定程度上提供了容量弹性。
然而,在现实中,需要更加细粒度的容量伸缩来处理小规模的容量溢出和在一些元素被删
除时及时的空间回收。而且,现有的数据结构被设计可伸缩性限制。在布隆过滤器器得框架
中,为了目标假阳性比率,参数需要细致的设置。同时,布隆过滤器的现有协议必须使用固
定数量的哈希函数和2的幂次方桶数(表中+越多表示越适应该准则)。
设为m。CCF元素插入、查询、删除的时间复杂度分别是O(max·logm),O(s·k·b·logm),O
(s·k·b·logm)。
这些桶的哈希值被组织成形成二叉搜索树。给定元素的一个哈希值,相应的候选桶的位置
会在O(logm)时间内找到。为了将元素插入活跃I2CF中,最多max次重放置被允许,所以时间
复杂度为O(max·logm)。对于查询和删除操作,CCF最坏情况下需要遍历所有的I2CF,因此
时间复杂度为O(s·k·b·logm)。
分布式系统都会导致对数级别的复杂度。
个衍生的问题是寻找ni与mi之间的阈值Ti。当 I2CFi有1‑o(1)的概率成功插入ni元
素。否则I2CFi可能有1‑o(1)的概率失败插入ni元素。
为是ki和bi的函数。实际上,超图可能不是ki阶的因为ki个独立的哈希函数可能为元素x在
I2CFi中选择相同的索引桶。我们称这个现象为映射碰撞。映射碰撞破坏了超图的ki阶假设。
的位置。例如S01表示第一个桶的第二个位置。在二分图中,边代表了指纹和槽位之间的指
派。如果桶是某个指纹的候选桶,该桶所有的槽位都会与该指纹有边的关系,来明确表示该
指纹可以被存入该桶的槽位中。在生成的二分图中,匹配意味着存储指纹的可能路径。这种
抽象自然提供给我们二分图中很重要的性质,即:Hall定理。
集W,存在完全覆盖X的匹配:
理的要求。相反,如果 时, 对于ni指纹没有足够的空间来容纳。在这种情景下,
I2CFi以很高的概率不能满足Hall定理。如图3所示,给定mi=50和bi=2, 随着ki增长很
30
快。给定mi和ki,bi的增长也会导致 的增加。表2进一步表示了在mi=2 , 随着ki和bi变化
而变化。阈值提供了在实际中使用I2CF和CCF的引导。直觉上,更大的 保证了更高的空间
占用。所以,给定相同的值bi,I2CF在增加ki时有能力实现比DCF更好的空间使用率。
是多少?我们尝试利用一下观察解决这个问题。
I2CFi成功存储。
这种方法因为要测试 的可能二分图,有指数增长的计算复杂度。因此,作为替代,我们
基于Hall定理和观察3得出了上界p{Ψ=ni}(ni∈[1,mi·bi])。
计算了所有(ni·ki)依据Q[l]给定的分布映射到所选的k个桶的可能情
况。
界p{Ψ=ni},等式(11)可以通过将映射问题视为典型的球和桶的问题得到。
0.03968,p{Ψ=3}=0.3456,p{Ψ=4}=0.4992,p{Ψ=5}=0.1152。因此,p{Ψ=3}的上
界为0.99968。当计算p{Ψ=3}时,我们有ki·ni=6=1+1+4=2+1+1=1+2+3。因此F(j,ni,
ki)=3,Q={[1,1,4],[1,2,3],[2,2,2]},D0=3因为[1,1,4]有三种可能组合,D1=6,D2=
1。结果,
器级别容量变化的CCFF。M的值设为5×10 ,一致性哈希环的虚拟节点数v设为10。图4(b),
(c),(d)描述了分别描述了CDF中桶的数量,空间利用率,空槽位的数量。
完美的匹配了图4(a)中有mopt的曲线变化。CCFF也能通过动态执行的压缩和向外扩展算法
快速响应mopt的变化。然而DCF不能在mopt下降时及时压缩低使用率的CF。原因在于在低使用
率的CF中的指纹移到其他CF相应的桶中。因此,很难实现成功的压缩操作。相反的是,CCFF
尝试将在低使用率的I2CF中的指纹移到其余I2CF中,借以释放低使用率I2CF中被占用的
桶。CCFB和CCFF都有比DCF更好的容量弹性。
要低于CCFB(1.0)和CCFF(0.999)。为了准确,平均来说,DCF(0.8809),CCFB(0.9481),CCFF
(0.9425)。对应的,CDF的空槽位数量在图4(d)中展示。对于CCFF和CCFB在最终结果有93%和
97%低于500个空槽位,然而对于DCF来说只有62%。在最坏的情况下,DCF仍然有3176个空
槽位。超过16%的DCF最终结果中有超过1000个空槽位。原因在于DCF只能压缩可以将已存
入该低使用率CF的指纹移到其它未满的CF中。结果,当n的值减少时,DCF并不能及时回收低
使用率的CF。注意到CCFB要比CCFF有更多的空槽位。原因是在我们的实验中仅合并存储少于
2个指纹的桶。在实验的最后,由于元素的移除,容纳两个指纹的桶数目变多,但是CCFB并不
能立即回收空槽位。
但是I2CF和CCF却允许不同的参数设置。这使得CCF要比DCF更适合于动态集合表示。
2,b=3,max=1200,v=10。
低于12%的结果可以获得超过0.98的空间使用。对于一个元素,有更多的候选位置意味着
一个桶可以被分配到而更多的元素。结果,某个桶被分配到低于b个元素的的概率降低,从
而会有更高的空间使用。当b从3增加到6时,如图5(b)所示,空间1利用急剧增加。具体的,平
均来说,当b=3时,空间利用为0.9481;当b=6时,空间利用为0.9986。这个现象是合理的,
因为b越大,在CCFB中会有更少的桶。在雅虎的数据集中,被存储流的最大数量为7290。所以
max=1200意味着在插入的重放置过程中,可能覆盖整个过滤器来发现潜在的空槽位。同
样,在过滤器中更少的桶数,某个桶被分配给少于b个元素的概率会变低。因此,结果中的空
间利用升高。
希望来找到空桶来容纳指纹。而且,就像在图5(d)中所示,当一致性哈环中的虚拟节点从10
降到1时,空间使用下降很大(平均来说,从0.9481降到0.9298)。当v=1时,结果中仅有16%
可以达到0.95的空间使用。相反的,当v=10时,大约76%的结果可以达到0.95的空间使用。
越多的虚拟节点,一致性哈希在桶之间实现更好的负载均衡。所以,某个桶被分配少于b个
元素的可能性会降低,因此达到较高的空间利用。
拟节点的个数v。参考的CCFF配置为m=64,b=3,max=20,v=10。
而当m=64时,仅有22.4%的结果可以实现0.98的空间利用。原因在于,m越小在增加和合并
I2CF时更细粒度的容量控制。例如,因为存储5个元素,额外的I2CF被引入时,16桶的I2CF确
实比64桶的I2CF更加节省空间。
间[0.920,0.984]。然而,当b=3时,大约52%的结果中空间利用超过0.940。这个现象是合
理的,因为固定m增加b意味着,在增加未利用的I2CF时需要更多的空间资源,在合并低使用
率的I2CF时更难。
的桶数。假设对于踢出的受害者候选桶的选择是随机的。空槽位可以从I2CF中被搜索到的
概率是
改、等同替换、改进等,均应包含在本发明的保护范围之内。