基于树形结构的布鲁姆过滤器的查询与更新方法

文档序号:6356553阅读:139来源:国知局
专利名称:基于树形结构的布鲁姆过滤器的查询与更新方法
技术领域
本发明涉及电子计算机网络技术,具体是指基于树形结构的布鲁姆过滤器的查询 与更新方法。
背景技术
随着计算机科学的不断进步特别是网络技术的飞速发展,网络规模的增长日新月 异,这就使得数据库和网络中数据规模也在不断的增大,网络资源的合理利用成为计算机 科学研究的新一轮挑战。在网络中的数据流日趋庞大的今天,如何合理的表示和查找一个 数据流的相关信息从而对它进行正确的处理,成为了计算机应用领域的核心问题。存储空间的利用率,数据集查询和更新效率这两个方面是布鲁姆过滤器及其相关 研究的重点关注所在,特别是在网络带宽资源依然宝贵,网络传输数据越来越大,网络负担 越来越重,线上实时处理速度要求越来越高的今天。尽管提供存储空间的硬件设施随着技 术的发展出现了一定程度上的富余,但是,对便于空间和时间的合理利用的高效的数据结 构的进行研究,并且能够达到减少计算机处理器对片外存储器的操作,以提高工作效率的 目的,具有重要的应用价值。本发明所提出的树形布鲁姆过滤器算法也是基于这一需求所 提出的,是为了更好的满足空间和时间的高效性而针对布鲁姆过滤器算法所进行的研究。布鲁姆过滤器BF是一种高效的数据存储结构,它主要用于在存在一定的假阳性 概率下对数据成员的查找。同时布鲁姆过滤器也是一种用于信息表示的精简数据结构,它 通过一个由“0”与“1”组成的比特位串来表示数据元素集合,并能够支持随机的哈希查找。 布鲁姆过滤器算法的实质就是通过K个哈希函数将原本需要存储的数据元素集合转换成 仅由一定比特位就能够表示的位串,它改善了传统查询算法(如哈希查询,树形查找)中 由数据大小决定存储空间的不利局面,在数据规模飞速膨胀的今天其意义显得尤为突出。 布鲁姆过滤器是基于网络发展的现状所提出的高效的查询算法,但由于布鲁姆过滤器不支 持元素删除操作的局限性,计数布鲁姆过滤器CBF被提出以便解决这一问题。CBF使用长度 为m的计数器counter来代替布鲁姆过滤器中的比特位,以便记录元素映射到向量U中的 情况,通过计数器的增减来表示元素的插入与删除。但是,当所取的m过小时CBF存在数据 溢出的问题,而且使用固定比特的计数器会造成存储空间的浪费。BloomingTree算法采用了多层次的布鲁姆过滤器结构,其主要思想是通过为置 “1”的比特位增加由比特位组成的叶子结点的方式实现分层的数据结构,并且每一层的布 鲁姆过滤器都能够呈现“树形”结构中相应叶子结点的层次特性,从而达到比CBF空间更加 高效——空间需求减少了 39. 2%,达到减少假阳性的目的。BloomingTree算法数据结构如 图1所示。第一层是由m个比特位所组成的布鲁姆过滤器;第二、三层由叶子结点所组成,这 些叶子结点的大小由控制函数bitnode决定,每个结点对应着第一层置“1”的比特位。第 四层也就是最后一层则是由计数器组成的计数布鲁姆过滤器,其大小为m比特。BloomingTree算法在逻辑索引方面的缺陷如图1中所标记的第5个比特位所示,置“1”后,因为BloomingTree算法必须根据所查询的比特位的前一位是 “1”还是“O”来决定下一层叶子结点置“1”的位置,而现在第5个比特位的前一个比特位由 “O”变成了 “1”,但是第5个比特位的下一层叶子结点并没有发生相应的变化,这种情况的 发生必然会导致查询时出现误判,特别是当数据集规模增大,插入、删除操作增多时这样的 情况将会频繁出现。

发明内容
本发明所要解决的技术问题是,在低于CBF的空间需求的条件下实现与CBF相同 的功能,与CBF相比在相同的假阳性条件下达到更高的正确匹配率;解决BloomingTree算 法在逻辑索引时的发生错误的问题,节省BloomingTree算法在查询和更新所需要的时间 开销,提高正确匹配率。为解决上述问题,本发明的技术方案是,基于树形结构的布鲁姆过滤器由多层次 的布鲁姆过滤器构成,第一层为常用布鲁姆过滤器,中间层是由与第一层置“1”的比特位对 应的叶子结点所组成的比特位串,最后一层为由计数器组成的计数布鲁姆过滤器。所述基于树形结构的布鲁姆过滤器的查询与更新方法为1)在树形布鲁姆过滤器中存储一定规模或者具有相应特性数据的数据集;2)读入需要查询的数据集或者需要进行更新操作的数据集;3)基于树形结构的布鲁姆过滤器元素查询与更新;4)输出查询和更新结果。所述基于树形结构的布鲁姆过滤器元素查询与更新的步骤为第一步使用哈希函数对数据集成员进行哈希计算;第二步对得到的哈希值求模,得到第一层置“1”的比特位在下一层叶子结点应 该置“1”的位置;第三步对第一层置“ 1 ”的比特位之前已经置“ 1 ”的比特位进行计数,得到叶子结 点在下一层叶子结点中的插入位置;第四步在中间层布鲁姆过滤器中根据得到的索引数据,查询或更新相应位置的 叶子结点;第五步在最后一层查询或更新该层上一层相应比特位之前已经置“1”的比特位 的个数,找到最后一层中的相应计数器。本发明所述方法可以大大减少误判发生的机率,降低了查询、插入和删除操作所 需的时间,增强布鲁姆过滤器的可扩展性,为网络数据存储和数据集成员查询提供保障。


图1为BloomingTree基本结构及其查询示例;图2为树形布鲁姆过滤器查询算法;图3为树形布鲁姆过滤器插入过程;图4为树形布鲁姆过滤器与BloomingTree匹配率比较;图5为树形布鲁姆过滤器与BloomingTree查询时间比较;图6 (a)为树形布鲁姆过滤器与BloomingTree算法插入时间比较;
图6(b)为树形布鲁姆过滤器与BloomingTree算法删除时间比较。
具体实施例方式以下结合附图对本发明的具体实施方式
作详细说明。树形布鲁姆过滤器(Tree-based Bloom Filters)的基本数据结构如图1所示,算 法采用了更加高效的查询、插入和删除的算法,这样不仅能够有效的解决BloomingTree算 法在上述操作中所存在的逻辑索引时的错误,而且也有效的改进了在多层次结构中需要多 次重复计算的缺点。在多层次结构中特别是当层数L逐渐增大时树形布鲁姆过滤器在能够 保持BloomingTree在空间方面优势地位的同时,还有效的提高了时间的运算效率,下面就 以bitnode = 1为例,具体的介绍树形布鲁姆过滤器的查询,插入和删除操作。在一个树形布鲁姆过滤器中查询元素a是否属于某一个数据集合U时,需要经过k 个哈希函数中的任意一个或多个哈希后插入布鲁姆过滤器中,我们需要通过同样的哈希函 数找到第一层布鲁姆过滤器中元素的正确位置U1 [h (a) ] (L = 1),然后需要找到在树形结构 中相应的叶子结点并且返回相应的查询结果。图2说明了 TBF的基本查询过程,包括三个主要步骤步骤1 元素a经过哈希确定元素在第一层布鲁姆过滤器的位置Ul[h(a)],如果 U1Di(a)]的值等于1则继续查询L+1层,如果…^仏)]的值不等于1则返回元素a不属于 数据集合U的信息。步骤2 使用Popcoimt函数找出第一层布鲁姆过滤器中位置U1 [h(a)]之前所有 “1”的个数χ从而找到接下来L-I层中需要查询的叶子结点的位置,同时用得到的哈希值 h(a)对(此时bitnode = 1)求模得到值ρ指示叶子结点中置“ 1”的位置Leaf [h (a)](当 bitnode = 1时表示叶子结点左结点,表示叶子结点右结点)。步骤3 在L = 2,3,4……L_1层中根据得到的参数χ和ρ索引得到相应查询位置 uL [h (a)],如果% [h (a)]等于1则继续查询L+1层,如果% [h (a)]不等于1则返回元素a不 属于数据集合U的信息。步骤4:在最后一层即第L层,使用Popcoimt函数找出第L_1层中查询位置 u [h (a)]之前“ 1 ”的个数y,根据y找到第L层相应的计数器Counter,如果如果Counter不 等于O则返回元素a属于数据集合U的信息,如果Counter等于O则返回元素a不属于数 据集合U的信息。多层次的查询能够保证比计数布鲁姆过滤器更高的正确匹配率,但是树形布鲁姆 过滤器的关键还是在于的插入与删除操作是否能够在多层次索引结构中插入或者删除正 确的叶子结点以便保证查询的正确匹配率。树形布鲁姆过滤器的插入与删除操作如图3所 示,结合图2来描述树形布鲁姆过滤器的插入操作的具体步骤。图3表示树形布鲁姆过滤 器的插入操作,在插入一个属于数据集合U的元素b时,首先元素b经过哈希函数哈希之后 得到哈希值h(b),根据哈希值h(b)找到第一层布鲁姆过滤器中应该置“1”的位置并将其置 “ 1 ”;其次使用Popcoimt函数找出第一层布鲁姆过滤器中位置U1 [h (b)]之前所有“ 1,,的个 数χ从而找到接下来L-I层中需要插入叶子结点位置并插入叶子结点,同时用得到的哈希 值h(b)对求模得到值ρ指示叶子结点中置“1”的位置Leaf[h(b)];然后在L = 2,3,4…… L-I层中根据得到的参数χ索引得到叶子结点应该插入的位置并插入叶子结点,在根据参
5数P索引得到叶子结点中应该置“1”的位置ujh (b)]并将ujh (b)]置“1”;在最后一层即 第L层,使用Popcoimt函数找出第L-I层中查询位置u [h (b)]之前“1”的个数y,根据y找 到第L层相应的计数器Counter并令计数器中的值加1。树形布鲁姆过滤器的删除操作是插入操作的逆向过程,以删除元素c为例,在进 行删除操作时,首先元素C经过哈希函数哈希之后得到哈希值h (C),根据哈希值h (C)找到 第一层布鲁姆过滤器中应该置“0”的位置;其次使用Popcoimt函数找出第一层布鲁姆过滤 器中位置U1 [h(C)]之前所有“1”的个数χ从而找到接下来L-I层中需要删除叶子结点位 置;再在最后一层即第L层,使用Popcoimt函数找出第L-I层中查询位置u [h (c)]之前“ 1,, 的个数y,根据y找到第L层相应的计数器Counter并令计数器中的值减1 ;然后根据参数 P删除L = L-l,L-2,L-3……2层中相应的叶子结点;最后根据哈希值h(c)将第一层布鲁 姆过滤器相应位置置“0”。图4中实验结果验证的是当假阳性一致的时候,树形布鲁姆算法匹配个数要大于 BloomingTree算法的匹配个数。通过改变假阳性参数X = _f (X与假阳性概率f成反比), 比较在K = 4,5,6,7,8,9,10,11,12,14时,树形布鲁姆过滤器算法与BloomingTree算法在 匹配率方面的匹配正确率。假阳性相同的情况下,匹配个数多证明明正确匹配的个数相比 而言也就更多,实验验证了树形布鲁姆过滤器算法在数据成员查询方面的优势。图5用于验证在层数相同条件下,假阳性发生变化时树形布鲁姆过滤器算法和 BloomingTree算法在查询时间上的效率的优劣,选用最基本的层数L = 4,在层数L固定 条件下,比较在K = 2,4,6,8,10,11,12,13,14,15时,分别在所构造的树形布鲁姆过滤器 和BloomingTree中执行查询操作后的结果。经过统计实验结果后得到结论在假阳性相 同条件下,树形布鲁姆过滤器算法相对BloomingTree算法而言,其查询时间平均提高了 13. 37%。图6用于验证在假阳性相同条件下,层数不断增大时树形布鲁姆过滤器算法 和BloomingTree算法在插入和删除操作时间上的效率的优劣,需要比较在K = 8条件 下,选用不同层数L = 4,5,6,7,8,9,10,11,12时,分别在所构造的树形布鲁姆过滤器和 BloomingTree中进行十轮插入和删除操作后的结果。经过统计实验结果后得到结论在假 阳性相同条件下,树形布鲁姆过滤器算法相对BloomingTree算法而言,在执行插入操作时 时间效率平均提高了 17. 93%,在执行删除操作时时间效率平均提高了 12.01%。本发明作为一种基于树形结构的布鲁姆过滤器算法,具有一定的通用性,并且可 以通过应用该方法的思想改进多层次布鲁姆过滤器算法。可应用于数据集中数据成员检 测,以及广泛应用于数据库、网络和分布式系统中。其具体的实施可以归纳为一个预备步骤和三个实施步骤预备步骤预先在树形布鲁姆过滤器(TBF)存储数据集。预先在树形布鲁姆过滤器(TBF)存储一定规模或者具有相应特性数据的数据集, 用来作为数据成员查询时的规则依据,当新的数据集中需要对数据成员进行查询时,通过 TBF的查询算法查询已经存储在其中作为规则依据的数据集,从而得到得到相应的查询结^ ο步骤1 读入需要查询或者需要进行更新操作的数据集。首先读入需要查询的数据集或者需要进行更新操作的数据集,这样才能对已经存储在其中的依据数据集进行查询,或者对已经存储在其中的依据数据集进行插入、删除等 更新操作。步骤2 对读入的数据集进行相应操作。数据集读入之后,逐一对数据集中的成员进行查询、更新操作,相应的操作根据 TBF的数据结构可以分成三个部分第一层布鲁姆过滤器的操作;中间层布鲁姆过滤器的 操作;最顶层计数布鲁姆过滤器的操作。在第一层布鲁姆过滤器中数据集成员经过k个哈希函数中的任意一个或多个哈 希后插入布鲁姆过滤器中,我们需要通过同样的哈希函数找到第一层布鲁姆过滤器中元素 的正确位置U1 [h(a)] (L = 1),然后需要找到在树形结构中相应的叶子结点并且返回相应 的查询结果。根据得到的哈希值求模得到第一层置“1”的比特位在下一层叶子结点应该置 “ 1,,的位置,同时通过对第一层置“ 1,,的比特位之前已经置“ 1 ”进行计数得到叶子结点在下 一层叶子结点中的插入位置,在中间层布鲁姆过滤器中根据得到的索引数据,查询或者更 新相应位置的叶子结点。在最终层则是根据该层上一层相应比特位之前已经置“1”的比特 位的个数找到最后一层中的相应计数器,计数器用于更新操作进行计数。通过这样的逻辑 索引和更新方法,能够迅速、有效的查找到相应的比特位,完成对输入数据集所包含数据成 员的确认,或者通过相应的插入和删除算法,可以完成对原始数据集存储数据的更新。步骤3 输出查询和更新结果。输出结果可以根据个人需要设置相关参数,本发明应用时的输出结果包括需要查 询的数据集成员、数据集成员匹配个数以及检索所用的时间或者是需要更新的数据集成 员、更新所用的时间。由上可知,本发明是多层次的布鲁姆过滤器算法的创新算法,它主要用于数据集 成员的动态查询,能够实现计数布鲁姆过滤器同样的功能如支持数据成员信息的动态更 新、有效改善数据溢出状况等等,而且在空间结构上比计数布鲁姆过滤器更加高效。它是基 于BloomingTree算法的优化,改进了 BloomingTree算法在逻辑索引结构方面以及在时间 效率方面的缺陷。同时,通过实验验证了树形布鲁姆过滤器算法与BloomingTree算法相比 在时间上的高效性,它可以大大减少误判发生的机率,降低了查询、插入和删除操作所需的 时间,增强布鲁姆过滤器的可扩展性,为网络数据存储和数据集成员查询提供保障。
权利要求
1.一种基于树形结构的布鲁姆过滤器的查询与更新方法,其特征在于,该方法为1)在树形布鲁姆过滤器中存储一定规模或者具有相应特性数据的数据集;2)读入需要查询的数据集或者需要进行更新操作的数据集;3)基于树形结构的布鲁姆过滤器元素查询与更新;4)输出查询和更新结果。
2.根据权利要求1所述基于树形结构的布鲁姆过滤器的查询与更新方法,其特征在 于,所述基于树形结构的布鲁姆过滤器元素查询与更新的步骤为第一步使用哈希函数对数据集成员进行哈希计算;第二步对得到的哈希值求模,得到第一层置“1”的比特位在下一层叶子结点应该置 “1”的位置;第三步对第一层置“ 1,,的比特位之前已经置“ 1,,的比特位进行计数,得到叶子结点在 下一层叶子结点中的插入位置;第四步在中间层布鲁姆过滤器中根据得到的索引数据,查询或更新相应位置的叶子第五步在最后一层查询或更新该层上一层相应比特位之前已经置“1”的比特位的个 数,找到最后一层中的相应计数器。
全文摘要
本发明公开了一种基于树形结构的布鲁姆过滤器的查询和更新方法,该方法为在树形布鲁姆过滤器中存储一定规模或者具有相应特性数据的数据集;读入需要查询的数据集或者需要进行更新操作的数据集;基于树形结构的布鲁姆过滤器元素查询与更新;输出查询和更新结果。本发明可以大大减少误判发生的机率,降低了查询和更新操作所需的时间,增强布鲁姆过滤器的可扩展性,为网络数据存储和数据集成员查询提供保障,它可以应用于数据集中数据成员检测,以及广泛应用于数据库、网络和分布式系统中。
文档编号G06F17/30GK102110171SQ20111006941
公开日2011年6月29日 申请日期2011年3月22日 优先权日2011年3月22日
发明者张大方, 程聂, 苏欣, 黄昆 申请人:湖南大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1