CN110046164A - 索引独立布谷过滤器、一致性布谷过滤器及操作方法 - Google Patents
索引独立布谷过滤器、一致性布谷过滤器及操作方法 Download PDFInfo
- Publication number
- CN110046164A CN110046164A CN201910304801.XA CN201910304801A CN110046164A CN 110046164 A CN110046164 A CN 110046164A CN 201910304801 A CN201910304801 A CN 201910304801A CN 110046164 A CN110046164 A CN 110046164A
- Authority
- CN
- China
- Prior art keywords
- consistency
- cuckoo
- filter
- independent
- cuckoo filter
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Image Processing (AREA)
- Medicines Containing Antibodies Or Antigens For Use As Internal Diagnostic Agents (AREA)
Abstract
本发明提供了数据结构领域的索引独立布谷过滤器、一致性布谷过滤器及操作方法。索引独立布谷过滤器包括多个桶,每个桶有b个槽位,多个桶被映射到一个范围从1到M‑1的一致性哈希环中。一致性布谷过滤器,包括上述任意所述的s个异构的索引独立布谷过滤器,任意索引独立布谷过滤器有mi≥1个桶,每个桶有bi≥1个槽位,其中,s≥1,初始为1,i∈[0,s‑1]。本发明还从插入、查询、删除元素介绍了一致性布谷过滤器的操作方法,以及一致性布谷过滤器的容量调整问题。本发明在容量弹性、空间效率以及设计伸缩性方面都有着良好的表现。
Description
技术领域
本发明属于网络应用数据结构领域,具体是涉及到索引独立布谷过滤器、一致性布谷过滤器及操作方法。
背景技术
在数据库、缓存、路由器、存储和网络应用中,集合表示同时支持成员关系查询是一个基本的问题。这些系统通常采用概率型数据结构来表示集合元素,在很小的假阳性比率下支持常数时间成员查询操作。用于成员查询广泛使用的的概率型数据结构有布隆过滤器,布谷过滤器以及它们的变种。布隆过滤器和布谷过滤器用不同的方式表示元素。布隆过滤器是一个固定长度的初始比特为0的数组。为了插入一个元素,k个独立的哈希函数用于将元素映射到比特向量,然后相应的比特会被置1。当检测任意元素x的成员关系时,布隆过滤器只检查k个相应的比特位是否为0。如果都是1,布隆过滤器得出x是集合成员(可能隐含一个假阳性元素);否则,可以正确的得出x不是集合成员(无假阴性)。和布隆过滤器不同,布谷过滤器在桶中直接存储元素指纹。布谷过滤器通过部分布谷哈希得出元素的两个候选桶,将指纹存入其中之一。如果元素的指纹在任意一个候选桶中找到,则认为元素是集合成员。然而布谷过滤器和布隆过滤器因为不能重新设置容量大小不能处理动态集合成员。为此,动态布隆过滤器(DBF)和动态布谷过滤器(DCF)已经被提出。DBF和DCF尝试根据需求增加和合并同构的布隆过滤器和布谷过滤器来实现容量的伸缩性。在DBF和DCF中,每个过滤器的长度都是预置的,因为格或桶的索引是基于过滤器的长度取余得到,所以过滤器的长度不能改变。只能通过增加和合并同构的过滤器来调整容量。在最坏的情况下,因为一个额外的元素需要一个过滤器,导致空间利用率低于50%的结果。因此,在空间稀缺的场景下,桶级别的容量调整对于节省空间是必要的。而且,DBF主要的缺陷在于由于可能有多个布隆过滤器满足查询条件,不能支持可靠的删除操作。尽管DCF保证可靠的元素删除,利用异或操作在重新放置时得到第二个候选桶。所以,每个布谷过滤器的长度只能是m=2γ(γ≥0)。否则,异或操作会超出范围。
用于动态集合表示的概率型数据结构主要关注以下三个准则:容量弹性(CE)。数据结构的容量是依据集合基数来适应性调整的。尽管要表示的元素数量不可预测,但是可用容量大小要适应性的随着集合基数趋势变化一致调整;空间效率(SE)。无论集合基数的变化如何,空间利用率都保持在较高水平。这对空间稀缺的场景十分重要,例如:无线传感器网络。设计伸缩性(DF)。所有的参数都是可调整的,用户可以根据设计目标定制自身的配置。例如:哈希函数的数量可能为了更高的空间利用而增加,为了更好的查询吞吐而减少。如果这些准则可以实现,将会给集合表示和成员关系查询带来前所未有的好处,保证空间节省和服务质量。设计伸缩性进一步将数据结构扩展到更多有不同需求的一般场景。
然而,现有的概率数据结构不能正确的同时实现上述三条准则。布隆过滤器和DBF有低的空间使用率。原因是为了最小的假阳性比率,保持一半的比特位为0。相反,布谷过滤器和它的变种通过在每次插入中的重放置策略提高了空间利用率。DBF和DCF通过动态增加和合并过滤器在一定程度上提供了容量弹性。然而,在现实中,需要更加细粒度的容量伸缩来处理小规模的容量溢出和在一些元素被删除时及时的空间回收。而且,现有的数据结构被设计可伸缩性限制。在布隆过滤器器得框架中,为了目标假阳性比率,参数需要细致的设置。同时,布隆过滤器的现有协议必须使用固定数量的哈希函数和2的幂次方桶数。现有数据结构在实现上述三条准则不足的共同原因是它们都维持了元素的格或桶的索引与过滤器长度之间紧密的依赖。结果它们的容量不管动态集合的变化,必须是预置的和不可修改的。
发明内容
本发明的目的在于提供索引独立布谷过滤器、一致性布谷过滤器及操作方法,以解决现有方法无法同时实现用于动态集合表示的概率型数据结构的三条准则的现有技术问题。
为解决上述问题,本发明提供了一种索引独立布谷过滤器,包括多个桶,每个桶有b个槽位,多个桶被映射到一个范围从1到M-1的一致性哈希环中,其中M是一致性哈希环的取值范围。
优选地,每个桶可存储0-b个指纹,且为每个元素x提供k≥1个候选桶,为了确定元素x的候选桶,k个相互独立的哈希函数被用于将元素指纹ηx映射到一致性哈希环中,k个哈希函数的k个最近的桶被认为是元素指纹ηx的候选桶。
本发明还提供了一致性布谷过滤器,包括上述任意所述的s个异构的索引独立布谷过滤器,任意索引独立布谷过滤器有mi≥1个桶,每个桶有bi≥1个槽位,其中,s≥1,初始为1,i∈[0,s-1]。
依托于上述一致性布谷过滤器,本发明还提供了一致性布谷过滤器的操作方法,操作方式包括元素插入,元素查询和元素删除。
优选地,一致性布谷过滤器追踪每个索引独立布谷过滤器中插入的元素数量,并将插入最后一个元素的索引独立布谷过滤器标记为活跃索引独立布谷过滤器,元素插入的操作方式如下:
索引独立布谷过滤器将元素x映射到整数区间[0,2f-1]中来生成元素指纹ηx,其中f为元素指纹长度;
相互独立的k个哈希函数将元素指纹ηx映射到一致性哈希环中,基于生成的哈希值,一致性哈希决定元素指纹ηx在活跃索引独立布谷过滤器中的候选桶;
将元素指纹ηx按布谷哈希中的策略插入到活跃的索引独立布谷过滤器中,如果活跃索引独立布谷过滤器成功存储元素指纹ηx,那么插入结束;否则,一致性布谷过滤器会进行扩容操作或者扩展操作,扩容操作或者扩展操作后,将元素指纹ηx插入到扩展的或者扩展的索引独立布谷过滤器中。
优选地,元素查询的操作方式如下:
通过相互独立的k个哈希函数对元素指纹ηx哈希来决定元素指纹ηx在一致性哈希环中的位置;
基于哈希值,一致性哈希得出对于元素指纹ηx在索引独立布谷过滤器中候选桶的位置:如果任一候选桶持有元素指纹ηx,成员关系查询终止,返回存在;相反,如果在所有的索引独立布谷过滤器中,都没有找到元素指纹ηx,一致性布谷过滤器判定元素x不属于集合A,返回不存在。
优选地,元素x的删除需要首先进行成员关系查询来找出元素的可能位置,元素删除的操作方式如下:
如果对应的元素指纹ηx在一致性布谷过滤器中未找到,删除操作返回失败;如果对应的元素指纹ηx在一致性布谷过滤器中被找到则直接执行删除。
优选地,所述操作方式还包括对一致性布谷过滤器的容量进行调整,调整方式包括扩容、缩容、扩展和压缩。
优选地,扩容是指向索引独立布谷过滤器中增加桶,缩容是指通过从指定索引独立布谷过滤器中移除桶;
扩容时,在其后继中存储的元素指纹η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不能被移除。
优选地,扩展是指向一致性布谷过滤器中增加未使用的索引独立布谷过滤器,压缩是指压缩稀疏索引独立布谷过滤器;
当要表示的元素数量急剧增加时,一致性布谷过滤器的容量可以通过向一致性布谷过滤器中增加单个或多个未使用的索引独立布谷过滤器立即增加,增加的索引独立布谷过滤器可以是异构的,桶和槽的数量是可以调整的;
当索引独立布谷过滤器因为集合元素的移除而变得稀疏时,一致性布谷过滤器尝试通过压缩操作将该索引独立布谷过滤器移除:
一致性布谷过滤器首先选取最低利用率的索引独立布谷过滤器向量并移除;
将被移除的索引独立布谷过滤器中的元素指纹ηx重新插入到一致性布谷过滤器中,如果被移除的索引独立布谷过滤器中的元素指纹ηx可以被成功插入到一致性布谷过滤器,选择的被移除的索引独立布谷过滤器可以安全移除,否则,一致性布谷过滤器早已足够简练,不需要进一步压缩,压缩持续移除索引独立布谷过滤器直到存在被移除的索引独立布谷过滤器不能被安全移除。
优选地,容量调整的触发条件是:通过元素的到达速率α和元素移除速率β共同决定是否需要调整一致性布谷过滤器容量,当α>β时,进行扩容或者扩展;当α<β时,进行缩容和压缩;
通过元素的到达速率α和一致性布谷过滤器假阳性比率上界共同决定扩容或者扩展:
当时,是阈值,一致性布谷过滤器可以在小规模单体扩容操作下插入抵达元素,小规模单体为在每次扩展中只增加单个桶;当时,在增加新的索引独立布谷过滤器之后总体的假阳性比率才不会超过扩展操作才被触发。否则,一致性布谷过滤器仅使用桶级别的单体扩容操作;
对称的,缩容和压缩的条件与扩容和扩展一致。
本发明包括以下的有益效果:
本发明提出了索引独立布谷过滤器,其概率型数据结构可以将存储元素信息的桶或格的索引与过滤器长度解耦。在不需要重放置大多数元素的情况下,允许存储空间的伸缩性变化。本发明还组合多个索引独立布谷过滤器作为一致性布谷过滤器,并且提出动态集合表示和容量调整的算法,并且实现了设计的三条准则。
附图说明
图1为本发明优选实施例索引独立布谷过滤器运行过程示意图;
图2为本发明优选实施例所述索引独立布谷过滤器的随机二分图;
图3为本发明优选实施例插入指纹数量与容量关系图;
图4为本发明优选实施例参数对一致性布谷过滤器的影响对比图;
图5为本发明优选实施例参数对CCFB的影响对比图;
图6为本发明优选实施例参数对CCFF的影响对比图。
具体实施方式
本发明中CCF指的是一致性布谷过滤器,I2CF指的是索引独立布谷过滤器,是CCF的基本组成单元。
布谷哈希表:
哈希表支持常数时间的查询,但是会导致仅仅接近50%的空间占有率。通过整合“两个随机选择的力量”到哈希表中,布谷哈希表在保证常数查询时间同时实现较高的空间利用率。总的来说,布谷哈希表是有m个桶的数组。每个桶存储一个元素。为了插入元素x,两个独立的哈希函数h1和h2用于为元素x选择候选桶。如果桶h1(x)%m或者h2(x)%m是空的,元素会存储在其中之一。相反,如果两个桶均被占用,布谷哈希表会随机选取一个,提出已存元素来安置x。被踢出的受害者会被分派到它的其它候选桶中。布谷哈希表会持续踢出并重新安置已存元素直到受害者成功安置或者踢出的迭代此处超过预设的最大值。当元素插入失败时,布谷哈希表被认为已满。为了查询或者访问元素,用户只需要检查元素的两个候选桶。重新放置使得布谷哈希表优化了先前存入元素的放置,因此保证了较高的空间利用率。在实际实现中,每个桶推荐存储多个元素,并且哈希函数的个数也可以有选择性而不是固定值。
一致性哈希:
对于哈希表一个内在的缺点是调整大小需要对所有元素重新哈希。原因在于元素的位置是哈希值与表长度的余数。一致性哈希缓解了这种情况,在前提为单桶可存储多个元素的条件下,调整哈希表时,只有一部分已存元素需要被移动。一致性哈希将元素和桶映射到从0到M的环中。之后,元素被顺时针或者逆时针分派到环中。当一个新的增加环中时,仅在其后继桶中的部分元素需要被移动。类似地,在桶被移除出哈希表时,该桶中的元素只需被推到其后继桶中即可。假设哈希表中桶的数量是m,元素数量是n,平均每次更新影响的元素只有n/m。一致性哈希已经被广泛应用与分布式系统,本实施例中使用一致性哈希来将指纹分派到CCF桶中,同时可以随意愿单体扩容和单体缩容。
布谷过滤器:
布谷过滤器(CF)是基于布谷哈希表的轻量型概率数据结构,支持常数时间的成员关系查询。布谷过滤器将布谷哈希表中的实际元素内容替换为元素指纹。结构上,CF包含m个可以存储b个指纹的桶,集合中元素x与由哈希函数h0生成的f比特指纹ηx相关联。对于CF显而易见的问题是在不需要元素原始信息时得出被踢出元素候选桶。CF应用partial-key布谷哈希策略来处理这个问题。候选桶可以通过对当前桶的索引和被踢出元素指纹的哈希值进行异或操作得到。
元素x的两个候选桶通过h1(x)=hash(x)和得到。
有了上述的设计,在插入元素x时,CF首先计算x的指纹,然后利用预先指定好的哈希函数h1和h2生成两个候选位置。之后指纹ηx会被存储到这两个候选位置之一,如果有必要的话还会对提出的受害者元素重放置。为了查询元素y是否是集合A的成员,CF检查y对应的候选桶。如果指纹ηy存在其中之一,CF判定y∈A;否则CF判定由于指纹潜在的哈希碰撞问题,CF可能会有假阳性错误(将本不属于集合的元素误认为是集合成员)。理论上,CF的假阳性错误有上界f是指纹的比特位数,b是每个桶中槽的数目。如果集合A中所有元素均成功插入,对于CF来说没有假阴性的错误。
最近,CF的几个变种也被提出进一步提高性能。实验性的结果验证了CF的性能,但是并没有被理论证明。简化版布谷过滤器(SCF)计算元素x的桶的位置简化的影响可以通过指纹边缘图来可视化,其顶点是散列表的桶,并且其边缘连接指纹的可能成对位置。基于图论,SCF提供了理论上的性能分析。自适应布谷过滤器(ACF)尝试通过重新设置发生碰撞的指纹来从CF向量中移除假阳性错误。ACF包括一个CF和相应的布谷哈希表。这样的设计确保ACF识别假阳性错误,将桶索引与指纹解耦。当一个假阳性错误发生,ACF为冲突元素生成新的指纹,这个指纹可直接从哈希表中直接获取。结果,假阳性错误之后不会再次发生。
受动态布隆过滤器启发,动态布谷过滤器(DCF)动态的维持多个同构CF使得容量弹性改变。最开始,仅有一个CF保持活跃,随后的同构的CF将以主动或被动方式引入。一个回收机制被建议合并两个低负载的CF,从而提高空间使用。DCF的假阳性比率上界为1-(1-fCF)S,fCF是每个CF向量的假阳性比率,s是DCF中保持的CF数目。
然而,以上CF的变种都不能正确实现我们的设计准则。SCF和ACF仅利用了哈希函数的优势,不能在部署后不能实现容量调整。DCF支持过滤器级别的容量改变但导致有限的设计可伸缩性和不合时宜的空间回收。总之,我们提出了CCF,一种新颖的概率型数据结构能够同时确保容量弹性、高的空间使用和设计可伸缩性。
实施例1:
为了表示动态集合,所用的数据结构应该提供弹性容量。尽管DBF和DCF能够提供在过滤器级别的容量调整,但不能提供更细粒度的容量改变。原因在于过滤器的长度是预先设定的,在整个生命周期中不可改变。计算哈希值的异或操作通过限制过滤器的长度为2的幂次方,更加恶化了容量的可伸缩性。因此,我们重新设计了布谷过滤器的框架,在这里提出了I2CF。
本发明提供了一种索引独立布谷过滤器,参见图1(a),包括多个桶,每个桶有b个槽位,多个桶被映射到一个范围从1到M-1的一致性哈希环中,其中M是一致性哈希环的取值范围。为了在一致性哈希环中确保负载均衡,每个桶有v≥1虚拟节点,I2CF同样存储元素的指纹而不是元素的实际内容,为每个元素提供k≥1个候选桶。如果元素的指纹被存储在候选桶之一,那么这个元素就被成功表示。为了确定元素x的候选桶,k个相互独立的哈希函数被用于将元素指纹ηx映射到一致性哈希环中。之后关于k个哈希函数的k个最近的桶(默认顺时针)被认为是ηx的候选桶。用这种方式,候选桶是索引独立的并且有一致性哈希决定。指纹可以存在这些候选桶的任意一个。如果所有的候选桶以被占用,I2CF随机踢出这些候选桶之一的已存入指纹来插入新指纹,被踢出的受害者会被重新放置在它的一个候选桶中。重新放置过程在桶中有空余位置时成功结束,在重放置次数达到给定阈值时失败结束。
相比于布隆过滤器,I2CF有两个主要的改进。首先,I2CF将桶组织成一个一致性哈希环来解耦候选桶和过滤器长度之间的依赖。结果,I2CF自然能够根据需求来增加和移除桶。一个I2CF简单的示例在图1中给出。第二,I2CF将布谷过滤器中固定的2个桶一般化为可变变量k。通过后面的分析,k值越大空间利用越高,I2CF实现了桶级别的容量弹性和更高的空间利用来表示动态集合。
本发明还提供了一种一致性布谷过滤器,包括上述任意所述的s个异构的索引独立布谷过滤器,任意索引独立布谷过滤器有mi≥1个桶,每个桶有bi≥1个槽位,其中,s≥1,初始为1,i∈[0,s-1]。
I2CF提供桶级别的容量弹性,但是当集合基数动态变化的时候,单一的I2CF可能不能及时的提供足够的空间。因此,我们进一步扩展得到CCF通过动态地维持多个I2CF。就像已有的CF变种,CCF同样利用指纹来表示集合中的元素。对于元素x的指纹可利用哈希函数h0将x映射到[0,2f-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被扩大或者引入时,它会被标记为活跃状态来存储新元素。
对于在CCF中的一个I2CFi(i∈[0,s-1]),让bi代表每个桶中的槽位,ki代表在I2CFi中候选桶的个数。对于CCF查询的假阳性概率可被计算为:
当k0=…=ki=…=ks-1=k,并且b0=…=bi=…=bs-1=b时,
CCF的假阳性错误源于指纹的哈希碰撞。如果两个元素x∈A,有相同的指纹,即ηx=ηy,对y的成员关系查询会由于x的存在隐含假阳性错误。在CCF框架中,成员关系查询会查询所有的s个I2CF向量。对于I2CFi,假阳性比率是总体的假阳性比率得出为注意到,DCF和CCF都有多个过滤器,有同样的假阳性比率。一般地,f越大,会有越低的假阳性比率,更大的k,b,s导致更高的假阳性比率。然而,DCF不能支持运行时假阳性比率,因为s会随着集合基数的增加而持续增加。结果,当更多的CF增加时,DCF的假阳性比率会一直增加。相反,CCF通过为s设定阈值支持运行时假阳性比率保证。如果s达到了阈值。一方面,CCF可以执行压缩操作来合并一些I2CF。另一方面,CCF仅使用桶级别的容量变化来容纳新元素,因此s的值不会增加。这样假阳性比率会被合理的限制。
本发明还提供了一致性布谷过滤器的操作方法,操作方式包括元素插入,元素查询和元素删除。
元素插入:
算法1:在CCF插入元素指纹ηx;
输入:需插入的元素指纹ηx;
CCF追踪每个I2CF中插入的元素数量,之后将表示最后一个元素的I2CF标记为活跃I2CF。为了插入元素x,CCF首先将x映射到[0,2f-1]中来生成元素指纹。之后相互独立的k个哈希函数将元素指纹ηx映射到一致性哈希环中。基于生成的哈希值,一致性哈希决定ηx的在活跃I2CF中的候选桶。之后,尝试将ηx按布谷哈希中的策略[插入到活跃I2CF中。如果活跃I2CF成功存储指纹ηx,那么插入算法终止。否则,CCF容量会在桶级别或者过滤器级别扩展。之后,ηx会被插入到扩展的或者增加的I2CF中。算法1中展示了伪代码。注意到,当扩展时,CCF标记被操作的I2CF为活跃状态,因此待插入的数会被插入到这个I2CF向量。建议选择具有最少桶的I2CF,以便在执行桶级别扩展时实现更好的平衡。有时,为了成功放置ηx,需要增加多个桶。如果在插入x之后还有多个元素需要插入,CCF在假阳性比率限制下将会引入新的I2CF向量,这样新的元素可以立即被插入。
元素查询:
算法2:在CCF查询元素x;
输入:需查询的元素x;
CCF的成员关系查询可能检查每个I2CF向量。在CCF中,s表示I2CF向量的数量。我们在最坏的情况下需要检查s·k桶。算法2表示了成员检测算法细节。通过相互独立的k个哈希函数对元素指纹ηx哈希来决定元素指纹ηx在哈希环I2CFi(i∈[0,s-1])中的位置。基于哈希值,一致性哈希得出对于元素指纹ηx在I2CFi中候选桶的位置。如果任一候选桶持有元素指纹ηx,成员关系查询终止,返回存在。相反,如果在所有的I2CF中,都没有找到元素指纹ηx,CCF判定返回不存在。对于查询的元素可能存在一定的假阳性错误,但是对于存储元素不存在假阴性错误。
元素删除:
算法3:在CCF删除元素指x;
输入:需删除的元素x;
元素x的删除需要首先进行成员关系查询来找出元素的可能位置。如果对应的指纹ηx在CCF中未找到,删除操作返回失败。当一定数量的元素已经被从CCF中删除,容量调整操作会被执行与降低CCF容量,保持较高的空间使用率。CCF偏向于选择过滤器级别的容量调整,因为小的s可以保证较低的假阳性比率。
对于动态集合表示本质上的挑战在于集合基数n的不可预测性。这一挑战对所采用的数据结构提出了新的要求。而且,集合基数n可能无规律变化,例如:n可能渐进的或者急剧的增加或者减少。为了处理这个问题,数据结构必须在不同粒度上进行容量调整。因此,本实施例提出了两个选择来扩展CCF的容量,即:纵向上向I2CF中增加桶,横向上向CCF中增加未使用的I2CF。对称的,CCF的容量可以被缩小,通过从指定I2CF中移除桶,或者压缩稀疏I2CF。单体扩容和单体缩容能进行桶级别的容量调整,同时,向外扩展和压缩实现过滤器级别的容量调整。这些方法保证了CCF在表示动态集合时有很好的容量弹性。
单体扩容:当新的桶被加入I2CF中时,仅在其后继中存储的元素指纹会受到影响。考虑新的桶Bnew被映射到Bi和Bj(i,j∈[0,m-1])之间,Bj是Bnew的后继。在这种情况下,仅在Bj中存储的元素可能需要被重新放置到Bnew中。具体地,如果在Bj中的指纹被映射到Bi和Bnew之间,它应该被移动到Bnew中;否则,应该继续留在Bi中。极端情况下,Bj是空的,那么Bnew也应该是空的。图1(b)中所示的为简单的扩容。
单体缩容:相应地,CCF可以为了实现更高的空间利用率将桶从I2CF中移除。当某个桶从I2CF中移除时,仅在此桶中的元素需要被重放置到CCF中。考虑在一致性哈希中的桶Bi和Bj,Bj是Bi的后继。CCF优先尝试将桶Bi中的指纹推到桶Bj中,然后将剩余元素重放置到其余桶中。如果Bi中的指纹被全部成功存储,Bi可以被移除。否则,Bi不能被移除。图1(c)所示为简单的缩容。当CCF单体缩容时,为了省时优先移除空的和低使用率的桶。
向外扩展:另一个增加CCF容量的方法是增加未使用的I2CF。初始时,CCF维护单一I2CF,根据需求在单一过滤器上单体扩容和单体缩容。当要表示的元素数量急剧增加时,CCF的容量可以通过向CCF中增加单个或多个未使用的I2CF立即增加。增加的I2CF可以是异构的,因为它们是完全独立的。桶和槽的数量是可以调整的。
压缩:当I2CF因为集合元素的移除而变得稀疏时,CCF尝试通过压缩操作将该I2CF移除。算法4中展示,CCF首先选取最低利用率的I2CFL向量并移除,更新后的CCF为CCFT。之后,我们尝试将I2CFL中的指纹重新插入到CCFT中。如果I2CFL中的指纹可以被成功插入到CCF,选择的I2CFL可以安全移除。否则,CCF早已足够简练,不需要进一步压缩。压缩算法持续移除I2CF直到存在I2CF不能被安全移除。
算法4:CCF容量压缩
输入:待压缩的CCF;
CCF在桶级别和过滤器级别提供容量弹性。CCF主要给用户提供了三个函数,即:元素插入、查询、删除,只有增加和删除才会触发容量调整过程。
我们依靠元素的到达速率(α表示单位时间内元素到达的数量)和CCF假阳性比率上界共同决定单体扩容和向外扩展的使用。仅当时(是阈值),CCF可以在小规模单体扩容操作下插入抵达元素(在每次扩张中只增加单个桶)。保守地使用向外扩展,因为增加I2CF会导致更高的总体假阳性比率。仅当时,ξCCF在增加新的I2CF之后总体的假阳性比率才不会超过向外扩展操作才有可能被触发。否则,CCF仅使用桶级别的单体扩容操作。特殊情况下,当时,但是现有I2CF在限制下不允许插入更多的元素,CCF需要对I2CF进行大规模单体扩容操作(每次扩张增加多个桶)。在每次单体扩容过程中需要增加的桶数与到达速率α城比例。
与大规模单体扩容操作相比,向外扩展操作能够及时扩展CCF,单体扩容为了增加桶的数量导致更多的时间复杂性。因此,在的限制下,CCF更倾向于向外扩展而不是单体大规模扩容操作。
对称地,为了降低容量,CCF提供单体缩容操作从I2CF中移除桶和压缩操作来移除稀疏I2CF。当一个桶因为元素删除操作变空,它将被缩容操作移除出I2CF。压缩操作仅在I2CF中存储的指纹低于阈值时才会触发。为此,CCF为每个I2CF增加了计数器来追踪存储指纹的数量。
在实际中,在线系统频繁地插入和删除元素,因此重复的调整CCF容量大小是不必要的。特别地,当元素到达速率接近移除速率(β表示单元时间内元素移除的数量),需要的容量是稳定的。在这种情况下,除非插入操作失败或者存在I2CF使用率极低,其余并不需要立即调整CCF容量。因此,在更高的层次,我们建议使用α和β共同决定CCF容量调整策略。当α>β时,单体扩容和向外扩展操作需要来扩展CCF;当α<β时,进行单体缩容和压缩操作。
表1
名称 | BF | DBF | CF | DCF | ACF | SCF | I2CF | CCF |
容量弹性 | ++ | ++ | ++ | +++ | ||||
空间效率 | + | + | ++ | ++ | ++ | ++ | +++ | +++ |
设计伸缩性 | ++ | ++ | + | + | + | + | +++ | +++ |
如表1中所示,布隆过滤器和DBF有低的空间使用率。原因是为了最小的假阳性比率,保持一半的比特位为0。相反,布谷过滤器和它的变种通过在每次插入中的重放置策略提高了空间利用率。DBF和DCF通过动态增加和合并过滤器在一定程度上提供了容量弹性。然而,在现实中,需要更加细粒度的容量伸缩来处理小规模的容量溢出和在一些元素被删除时及时的空间回收。而且,现有的数据结构被设计可伸缩性限制。在布隆过滤器器得框架中,为了目标假阳性比率,参数需要细致的设置。同时,布隆过滤器的现有协议必须使用固定数量的哈希函数和2的幂次方桶数(表中+越多表示越适应该准则)。
实施例2:
CCF时间复杂度:
考虑有s个I2CF的CCF,k0=…=ki=…=ks-1=k,b0=…=bi=…=bs-1=b时。让max表示允许重放置次数,m表示I2CF的长度。I2CF可能有不同的长度,为了简化,我们统一设为m。CCF元素插入、查询、删除的时间复杂度分别是O(max·logm),O(s·k·b·logm,O(s·k·b·logm)。
CCF引入一致性哈希来实现容量弹性。因此查询和删除的时间复杂度不再是常数级别。当我们需要知道元素候选桶的索引时,CCF需要参考底层的一致性哈希环。在实现中,这些桶的哈希值被组织成形成二叉搜索树。给定元素的一个哈希值,相应的候选桶的位置会在O(logm)时间内找到。为了将元素插入活跃I2CF中,最多max次重放置被允许,所以时间复杂度为O(max·logm)。对于查询和删除操作,CCF最坏情况下需要遍历所有的I2CF,因此时间复杂度为O(s·k·b·logm)。
与DCF相比,CCF的时间复杂度由于额外的乘数logm要稍微高一些。对数级别的复杂度,由于随着m的急剧增加对数值增加缓慢,在实际应用中可以接受。应用一致性哈希的分布式系统都会导致对数级别的复杂度。
CCF插入时的阈值:
CCF中的每个I2CF都可以动态的增加和删除桶来实现容量调整。对于给定参数的静态的I2CF,我们需要探讨有多少指纹可以被成功插入。给定需要被表示的指纹数量ni,一个衍生的问题是寻找ni与mi之间的阈值Ti。当I2CFi有1-o(1)的概率成功插入ni元素。否则I2CFi可能有1-o(1)的概率失败插入ni元素。
元素和桶之间的映射关系可以被抽象为ki阶超图,有mi节点,ni条超边,每一个超图的边独立的从mi个节点中选取固定大小的ki个节点连接。基于超图的核心理论,Ti可以认为是ki和bi的函数。实际上,超图可能不是ki阶的因为ki个独立的哈希函数可能为元素x在I2CFi中选择相同的索引桶。我们称这个现象为映射碰撞。映射碰撞破坏了超图的ki阶假设。
I2CFi的槽位可以很自然地表示为随机二分图G(V=(η,S),E),η表示要存储的指纹,S表示I2CFi中的槽位。图2中所示,每个槽位有两个下标,代表它的宿主桶号和在该桶中的位置。例如S01表示第一个桶的第二个位置。在二分图中,边代表了指纹和槽位之间的指派。如果桶是某个指纹的候选桶,该桶所有的槽位都会与该指纹有边的关系,来明确表示该指纹可以被存入该桶的槽位中。在生成的二分图中,匹配意味着存储指纹的可能路径。这种抽象自然提供给我们二分图中很重要的性质,即:Hall定理。
Hall定理:G(V=(η,S),E)是集合X和集合Y的二分图。对于节点集合NG(W)表示在G中W的邻居节点,即:Y中所有节点与W中的一些元素邻接。当且仅当对于X的每个子集W,存在完全覆盖X的匹配:
|W|≤|NG(W)| (3)
另外,给定I2CFi的参数为mi,b,ki与待插入元素数量ni,我们有以下观察:
1、对于插入随机元素x,Θ(Θ∈[0,ki])是代表x被映射到某个桶的次数。由于相互独立的哈希函数的使用,Θ遵循典型的二项分布。具体地,当Θ=θ时,可以被计算为:
p0表示元素x被映射到某个桶的概率。因为Θ≥1意味着x被映射到桶中,p0可以由下式得出:
2、Φ∈[0,ni]是代表映射到某个桶中的所有元素总数。Φ由于插入元素的独立性也服从典型的二项分布。具体地,Φ=φ时:
联合考虑上述观察及Hall定理,我们为I2CFi提出了新的阈值指纹有很高的概率可以被成功存储;相反,当时,I2CFi有很高的概率不能成功存储一些指纹。
如果Φ<bi,对于I2CFi很可能将指纹存入剩余的bi-Φ槽位中。我们考虑当Φ<bi的情况,得出在某个桶中空间占用的情况:
是在Φ<bi时桶中永远不会被使用的空间,相反,如果所有指纹被成功存储,I2CFi的空间使用率为:
阈值可以由的平均值得出:
通过上述描述可以通过综合考虑观察1,2和Hall定理证明。直觉上,当时,意味着对于ni指纹有足够的空间。结果,当时,I2CFi有很高的概率满足Hall定理的要求。相反,如果时,对于ni指纹没有足够的空间来容纳。在这种情景下,I2CFi以很高的概率不能满足Hall定理。如图3所示,给定mi=50和bi=2,随着ki增长很快。给定mi和ki,bi的增长也会导致的增加。表2进一步表示了在mi=230,随着ki和bi变化而变化。阈值提供了在实际中使用I2CF和CCF的引导。直觉上,更大的保证了更高的空间占用。所以,给定相同的值bi,I2CF在增加ki时有能力实现比DCF更好的空间使用率。
表2
成功表示的概率:
对于给定I2CFi的当小于阈值,ni指纹可以以很高的概率成功存储。然而,他们没有解决衍生问题:对于给定I2CFi,成功存储ni指纹的概率,或者迁就一下,概率的上界是多少?我们尝试利用一下观察解决这个问题。
3、对于给定的ni指纹,在最大匹配图G(V=(η,S),E)中边的数量意味着可以被成功插入I2CFi中最大数量的指纹。如果最大匹配是完全匹配,那么所有给定的指纹可以被I2CFi成功存储。
在参数为mi,ni,ki的I2CFi中,Ψ表示被成功插入的元素。计算Ψ概率分布的暴力破解方法是通过探索的可能空间,然后计数最大匹配包含数目Ψ=ψ条边的二分图。然而,这种方法因为要测试的可能二分图,有指数增长的计算复杂度。因此,作为替代,我们基于Hall定理和观察3得出了上界p{Ψ=ni}(ni∈[1,mi·bi])。
在参数为mi,ni,ki的给定I2CFi中,ni(ni∈[1,mi·bi])个待插入的指纹,所有ni指纹成功放置的概率上界:
p{Ω=j}代表ni个指纹被映射到I2CFi中的j个桶中。计算如下:
Q是向量数组,每个向量有j个正整数,这些正整数之和为ni·ki。在Q中的向量数目表示为F(j,ni,ki),可以通过输入j,ni,ki得到。Dl是在Q[l]中j个整数的可能组合。因子计算了所有(ni·ki)依据Q[l]给定的分布映射到所选的k个桶的可能情况。
上述描述可以通过考虑观察3和Hall定理证明。p{Ω=j}只计数ni个指纹映射到确定的j个桶的可能性,没有考虑ni指纹的子集不满足Hall定理。因此,等式(10)提供了上界p{Ψ=ni},等式(11)可以通过将映射问题视为典型的球和桶的问题得到。
当mi=5,bi=2,ki=2,ni=3时,我们通过计算p{Ψ=5}举例。根据等式(10),我们有p{Ψ=3}≤p{Ψ=2}+p{Ψ=3}+p{Ψ=4}+p{Ψ=5}。根据等式(11),p{Ψ=2}=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。结果,
通过上述分析,为使用CCF和I2CF的用户提供了参数设定的指南。
实施例3:
本实施例实现了两个版本的CCF,即只允许桶级别容量变化的CCFB,和只允许过滤器级别容量变化的CCFF。M的值设为5×1010,一致性哈希环的虚拟节点数v设为10。图4(b),(c),(d)描述了分别描述了CDF中桶的数量,空间利用率,空槽位的数量。
通过结合考虑图4(a),(b),我们可以得到DCF和CCF的容量弹性特征。很明显,CCFB实现了最好的弹性,在元素数量增加或者减少时使容量扩大或者缩小。图4(b)CCFB的曲线完美的匹配了图4(a)中有mopt的曲线变化。CCFF也能通过动态执行的压缩和向外扩展算法快速响应mopt的变化。然而DCF不能在mopt下降时及时压缩低使用率的CF。原因在于在低使用率的CF中的指纹移到其他CF相应的桶中。因此,很难实现成功的压缩操作。相反的是,CCFF尝试将在低使用率的I2CF中的指纹移到其余I2CF中,借以释放低使用率I2CF中被占用的桶。CCFB和CCFF都有比DCF更好的容量弹性。
而且,CDF的空间效率在图4(c)中描述。对于DCF,所得的空间效率大约有37%低于0.90。然而,对于CCFF和CCFB在最终结果中只用10%低于0.90。DCF最大的空间效率为0.970,要低于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并不能立即回收空槽位。
从以上的实验,我们得出CCF要比DCF能实现更好的容量弹性和更高的空间利用率。另一方面,设计可伸缩性却不能被很好的量化比较。直观上DCF只增加和合并同构的CF,但是I2CF和CCF却允许不同的参数设置。这使得CCF要比DCF更适合于动态集合表示。
CCFB中参数的影响:
这里量化了参数对CCFB的影响。特别应四个主要参数,即:候选桶数k,桶中的槽位数b,最大允许踢出次数max,和在一致性哈希环中虚拟节点的数目v。CCFB的参考设置为k=2,b=3,max=1200,v=10。
如图5(a)所示,当k从2增加到16时,CCF获得了更好的空间使用性能(从0.9481上升到0.9599)。当k=16时,结果中接近有一半以上空间占用超过0.98。然而,当k=2时,只有低于12%的结果可以获得超过0.98的空间使用。对于一个元素,有更多的候选位置意味着一个桶可以被分配到而更多的元素。结果,某个桶被分配到低于b个元素的的概率降低,从而会有更高的空间使用。当b从3增加到6时,如图5(b)所示,空间1利用急剧增加。具体的,平均来说,当b=3时,空间利用为0.9481;当b=6时,空间利用为0.9986。这个现象是合理的,因为b越大,在CCFB中会有更少的桶。在雅虎的数据集中,被存储流的最大数量为7290。所以max=1200意味着在插入的重放置过程中,可能覆盖整个过滤器来发现潜在的空槽位。同样,在过滤器中更少的桶数,某个桶被分配给少于b个元素的概率会变低。因此,结果中的空间利用升高。
当max的值从1200降到700时,在图5(c)中记录了CDF的空间使用率。很明显,更高的max值,CCF能实现更高的空间占有。原因是,更高的max,插入过程会搜素更多的桶,更有希望来找到空桶来容纳指纹。而且,就像在图5(d)中所示,当一致性哈环中的虚拟节点从10降到1时,空间使用下降很大(平均来说,从0.9481降到0.9298)。当v=1时,结果中仅有16%可以达到0.95的空间使用。相反的,当v=10时,大约76%的结果可以达到0.95的空间使用。越多的虚拟节点,一致性哈希在桶之间实现更好的负载均衡。所以,某个桶被分配少于b个元素的可能性会降低,因此达到较高的空间利用。
CCFF中参数的影响:
在空间利用的角度进一步评估了参数对CCFF的性能影响。考虑的参数包括在每个I2CF中桶的数量m,在桶中槽的数量b,最大踢出次数(重放置次数)max,一致性哈希环中虚拟节点的个数v。参考的CCFF配置为m=64,b=3,max=20,v=10。
如图6(a)所示,当m从64降到16时,CCFF实现了更好的空间利用。平均来说,从0.912上升到0.931。当m=16时,大约一半(准确来说48.3%)的结果,空间利用超过0.98,然而当m=64时,仅有22.4%的结果可以实现0.98的空间利用。原因在于,m越小在增加和合并I2CF时更细粒度的容量控制。例如,因为存储5个元素,额外的I2CF被引入时,16桶的I2CF确实比64桶的I2CF更加节省空间。
桶中的槽位数变化时,即b从3变化到6,如图6(b)所示。CCFF会变得多一些空间花费。具体的,平均空间利用从0.912降到0.899。当b=6时,大约57%的结果,空间利用落在区间[0.920,0.984]。然而,当b=3时,大约52%的结果中空间利用超过0.940。这个现象是合理的,因为固定m增加b意味着,在增加未利用的I2CF时需要更多的空间资源,在合并低使用率的I2CF时更难。
如图6(c)所示,在每次插入中增加最大允许重放置次数,即max从增加到50,空间利用只有微弱的增长(从0.912到0.913)。在理论上分析,让ω代表有m桶的I2CF中有空槽位的桶数。假设对于踢出的受害者候选桶的选择是随机的。空槽位可以从I2CF中被搜索到的概率是
给定m和ω,这个概率确实随着max的增加而增加,然而是以一种边际的方式。因此,当max足够大时,即使对max增加很大的值,也可能会是特别小的增长。
从上述的结果中,CCF的参数对它的性能有不同的影响。用户可以通过利用这些参数的优势来定制数据结构的配置实现自身目标。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.索引独立布谷过滤器,其特征是,包括多个桶,每个桶有b个槽位,多个桶被映射到一个范围从1到M-1的一致性哈希环中,其中M是一致性哈希环的取值范围。
2.根据权利要求1所述的索引独立布谷过滤器,其特征是,每个桶可存储0-b个指纹,且为每个元素x提供k之1个候选桶,为了确定元素x的候选桶,k个相互独立的哈希函数被用于将元素指纹ηx映射到一致性哈希环中,k个哈希函数的k个最近的桶被认为是元素指纹ηx的候选桶。
3.一致性布谷过滤器,其特征是,包括如权利要求1或2所述的s个异构的索引独立布谷过滤器,任意索引独立布谷过滤器有mi之1个桶,每个桶有bi之1个槽位,其中,s≥1,初始为1,i∈[0,s-1]。
4.一致性布谷过滤器的操作方式,其特征是,所述操作方式包括元素插入,元素查询和元素删除,一致性布谷过滤器追踪每个索引独立布谷过滤器中插入的元素数量,并将插入最后一个元素的索引独立布谷过滤器标记为活跃索引独立布谷过滤器,元素插入的操作方式如下:
索引独立布谷过滤器将元素x映射到整数区间[0,2f-1]中来生成元素指纹ηx,其中f为元素指纹长度;
相互独立的k个哈希函数将元素指纹ηx映射到一致性哈希环中,基于生成的哈希值,一致性哈希决定元素指纹ηx在活跃索引独立布谷过滤器中的候选桶;
将元素指纹ηx按布谷哈希中的策略插入到活跃的索引独立布谷过滤器中,如果活跃索引独立布谷过滤器成功存储元素指纹ηx,那么插入结束;否则,一致性布谷过滤器会进行扩容操作或者扩展操作,扩容操作或者扩展操作后,将元素指纹ηx插入到扩展的或者扩展的索引独立布谷过滤器中。
5.根据权利要求4所述的一致性布谷过滤器的操作方式,其特征是,元素查询的操作方式如下:
通过相互独立的k个哈希函数对元素指纹ηx哈希来决定元素指纹ηx在一致性哈希环中的位置;
基于哈希值,一致性哈希得出对于元素指纹ηx在索引独立布谷过滤器中候选桶的位置:如果任一候选桶持有元素指纹ηx,成员关系查询终止,返回存在;相反,如果在所有的索引独立布谷过滤器中,都没有找到元素指纹ηx,一致性布谷过滤器判定元素x不属于集合A,返回不存在。
6.根据权利要求4所述的一致性布谷过滤器的操作方式,其特征是,元素x的删除需要首先进行成员关系查询来找出元素的可能位置,元素删除的操作方式如下:
如果对应的元素指纹ηx在一致性布谷过滤器中未找到,删除操作返回失败;如果对应的元素指纹ηx在一致性布谷过滤器中被找到则直接执行删除。
7.根据权利要求4所述的一致性布谷过滤器的操作方式,其特征是,所述操作方式还包括对一致性布谷过滤器的容量进行调整,调整方式包括扩容、缩容、扩展和压缩。
8.根据权利要求7所述的一致性布谷过滤器的操作方式,其特征是,扩容是指向索引独立布谷过滤器中增加桶,缩容是指通过从指定索引独立布谷过滤器中移除桶;
扩容时,在其后继中存储的元素指纹η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不能被移除。
9.根据权利要求7所述的一致性布谷过滤器的操作方式,其特征是,扩展是指向一致性布谷过滤器中增加未使用的索引独立布谷过滤器,压缩是指压缩稀疏索引独立布谷过滤器;
当要表示的元素数量急剧增加时,一致性布谷过滤器的容量可以通过向一致性布谷过滤器中增加单个或多个未使用的索引独立布谷过滤器立即增加,增加的索引独立布谷过滤器可以是异构的,桶和槽的数量是可以调整的;
当索引独立布谷过滤器因为集合元素的移除而变得稀疏时,一致性布谷过滤器尝试通过压缩操作将该索引独立布谷过滤器移除:
一致性布谷过滤器首先选取最低利用率的索引独立布谷过滤器向量并移除;
将被移除的索引独立布谷过滤器中的元素指纹ηx重新插入到一致性布谷过滤器中,如果被移除的索引独立布谷过滤器中的元素指纹ηx可以被成功插入到一致性布谷过滤器,选择的被移除的索引独立布谷过滤器可以安全移除,否则,一致性布谷过滤器早已足够简练,不需要进一步压缩,压缩持续移除索引独立布谷过滤器直到存在被移除的索引独立布谷过滤器不能被安全移除。
10.根据权利要求7所述的一致性布谷过滤器的操作方式,其特征是,容量调整的触发条件是:通过元素的到达速率α和元素移除速率β共同决定是否需要调整一致性布谷过滤器容量,当α>β时,进行扩容或者扩展;当α<β时,进行缩容和压缩;
通过元素的到达速率α和一致性布谷过滤器假阳性比率上界共同决定扩容或者扩展:
当时,是阈值,一致性布谷过滤器可以在小规模单体扩容操作下插入抵达元素,小规模单体为在每次扩展中只增加单个桶;当时,在增加新的索引独立布谷过滤器之后总体的假阳性比率才不会超过扩展操作才被触发,否则,一致性布谷过滤器仅使用桶级别的单体扩容操作;
对称的,缩容和压缩的条件与扩容和扩展一致。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910304801.XA CN110046164B (zh) | 2019-04-16 | 2019-04-16 | 一致性布谷过滤器的操作方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910304801.XA CN110046164B (zh) | 2019-04-16 | 2019-04-16 | 一致性布谷过滤器的操作方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110046164A true CN110046164A (zh) | 2019-07-23 |
CN110046164B CN110046164B (zh) | 2021-07-02 |
Family
ID=67277502
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910304801.XA Active CN110046164B (zh) | 2019-04-16 | 2019-04-16 | 一致性布谷过滤器的操作方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110046164B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111291126A (zh) * | 2020-02-28 | 2020-06-16 | 深信服科技股份有限公司 | 数据回收方法、装置、设备及存储介质 |
CN111552693A (zh) * | 2020-04-30 | 2020-08-18 | 南方科技大学 | 一种标签布谷鸟过滤器 |
CN113360516A (zh) * | 2021-08-11 | 2021-09-07 | 成都信息工程大学 | 基于先进先出及最小活跃数策略的集合成员管理方法 |
CN113535705A (zh) * | 2021-08-03 | 2021-10-22 | 佛山赛思禅科技有限公司 | Sfad布谷鸟过滤器及基于sfad布谷鸟过滤器重复数据删除方法 |
CN113641681A (zh) * | 2021-10-13 | 2021-11-12 | 南京大数据集团有限公司 | 一种空间自适应的海量数据查询方法 |
CN116401258A (zh) * | 2023-06-06 | 2023-07-07 | 支付宝(杭州)信息技术有限公司 | 数据索引方法、数据查询方法及对应装置 |
CN117891858A (zh) * | 2024-03-14 | 2024-04-16 | 苏州大学 | 一种时空高效的并行近似成员查询方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105653629A (zh) * | 2015-12-28 | 2016-06-08 | 湖南蚁坊软件有限公司 | 一种基于哈希环的分布式数据过滤方法 |
US20170235496A1 (en) * | 2016-02-11 | 2017-08-17 | Dell Products L.P. | Data deduplication with augmented cuckoo filters |
CN107391034A (zh) * | 2017-07-07 | 2017-11-24 | 华中科技大学 | 一种基于局部性优化的重复数据检测方法 |
CN107908713A (zh) * | 2017-11-10 | 2018-04-13 | 南京邮电大学 | 一种基于Redis集群的分布式动态杜鹃过滤系统及其过滤方法 |
-
2019
- 2019-04-16 CN CN201910304801.XA patent/CN110046164B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105653629A (zh) * | 2015-12-28 | 2016-06-08 | 湖南蚁坊软件有限公司 | 一种基于哈希环的分布式数据过滤方法 |
US20170235496A1 (en) * | 2016-02-11 | 2017-08-17 | Dell Products L.P. | Data deduplication with augmented cuckoo filters |
CN107391034A (zh) * | 2017-07-07 | 2017-11-24 | 华中科技大学 | 一种基于局部性优化的重复数据检测方法 |
CN107908713A (zh) * | 2017-11-10 | 2018-04-13 | 南京邮电大学 | 一种基于Redis集群的分布式动态杜鹃过滤系统及其过滤方法 |
Non-Patent Citations (3)
Title |
---|
BIN FAN ET AL: "Cuckoo Filter: Practically Better Than Bloom", 《PROCEEDINGS OF THE 10TH ACM INTERNATIONAL ON CONFERENCE ON EMERGING NETWORKING EXPERIMENTS AND TECHNOLOGIES》 * |
HANHUA CHEN ET AL: "The Dynamic Cuckoo Filter", 《IEEE XPLORE》 * |
JONAH KALLENBACH ET AL: "《CuckooRings: A Data Structure for Reducing Maximum Load in Consistent Hashing》", 31 May 2015, HTTPS://ANKITG.ME/ASSETS/CUCKOORINGS_WRITEUP.PDF * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111291126B (zh) * | 2020-02-28 | 2023-09-05 | 深信服科技股份有限公司 | 数据回收方法、装置、设备及存储介质 |
CN111291126A (zh) * | 2020-02-28 | 2020-06-16 | 深信服科技股份有限公司 | 数据回收方法、装置、设备及存储介质 |
CN111552693B (zh) * | 2020-04-30 | 2023-04-07 | 南方科技大学 | 一种标签布谷鸟过滤器 |
CN111552693A (zh) * | 2020-04-30 | 2020-08-18 | 南方科技大学 | 一种标签布谷鸟过滤器 |
CN113535705A (zh) * | 2021-08-03 | 2021-10-22 | 佛山赛思禅科技有限公司 | Sfad布谷鸟过滤器及基于sfad布谷鸟过滤器重复数据删除方法 |
CN113535705B (zh) * | 2021-08-03 | 2024-02-02 | 佛山赛思禅科技有限公司 | Sfad布谷鸟过滤器及基于sfad布谷鸟过滤器重复数据删除方法 |
CN113360516B (zh) * | 2021-08-11 | 2021-11-26 | 成都信息工程大学 | 集合成员管理方法 |
CN113360516A (zh) * | 2021-08-11 | 2021-09-07 | 成都信息工程大学 | 基于先进先出及最小活跃数策略的集合成员管理方法 |
CN113641681B (zh) * | 2021-10-13 | 2022-02-22 | 南京大数据集团有限公司 | 一种空间自适应的海量数据查询方法 |
CN113641681A (zh) * | 2021-10-13 | 2021-11-12 | 南京大数据集团有限公司 | 一种空间自适应的海量数据查询方法 |
CN116401258A (zh) * | 2023-06-06 | 2023-07-07 | 支付宝(杭州)信息技术有限公司 | 数据索引方法、数据查询方法及对应装置 |
CN116401258B (zh) * | 2023-06-06 | 2023-09-22 | 支付宝(杭州)信息技术有限公司 | 数据索引方法、数据查询方法及对应装置 |
CN117891858A (zh) * | 2024-03-14 | 2024-04-16 | 苏州大学 | 一种时空高效的并行近似成员查询方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110046164B (zh) | 2021-07-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110046164A (zh) | 索引独立布谷过滤器、一致性布谷过滤器及操作方法 | |
CN105630955B (zh) | 一种高效动态的数据集合成员管理方法 | |
CN103345472B (zh) | 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法 | |
US5664179A (en) | Modified skip list database structure and method for access | |
DK2765524T3 (en) | PROCEDURE FOR DATA PROCESSING AND FITTING IN A CLUSTER SYSTEM | |
US9747214B2 (en) | Forecast modeling cache prefetch system and method | |
CN110222088A (zh) | 基于插入位置选择的数据近似集合表示方法及系统 | |
Özyer et al. | Integrating multi-objective genetic algorithm based clustering and data partitioning for skyline computation | |
CN104731882B (zh) | 一种基于哈希编码加权排序的自适应查询方法 | |
CN111258980B (zh) | 一种云存储系统中基于组合预测的动态文件放置方法 | |
CN109871461A (zh) | 基于深度哈希网络和子块重排序的大规模图像子块检索方法 | |
US20110179030A1 (en) | Method and apparatus for indexing suffix tree in social network | |
CN106066818B (zh) | 一种提高重复数据删除备份系统恢复性能的数据布局方法 | |
CN112434031A (zh) | 一种基于信息熵的不确定高效用模式挖掘方法 | |
CN104750432B (zh) | 一种数据存储方法及装置 | |
CN112486994A (zh) | 一种基于日志结构合并树的键值存储的数据快速读取方法 | |
Cambazoglu et al. | Performance of query processing implementations in ranking-based text retrieval systems using inverted indices | |
CN110018997B (zh) | 一种基于hdfs的海量小文件存储优化方法 | |
CN109634746B (zh) | 一种web集群缓存的利用系统及优化方法 | |
CN114387478A (zh) | 基于双头深度学习的类别不平衡图像分类方法及装置 | |
Navarro et al. | On sorting, heaps, and minimum spanning trees | |
CN109144431A (zh) | 数据块的缓存方法、装置、设备及存储介质 | |
CN109325598A (zh) | 一种面向资源分配的组合混沌遗传算法 | |
US8700822B2 (en) | Parallel aggregation system | |
CN116931838A (zh) | 一种固态盘缓存管理方法、系统、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |