首页> 中国专利> 一种高效动态的数据集合成员管理方法

一种高效动态的数据集合成员管理方法

摘要

本发明公开了一种高效动态数据集合成员管理方法,包括成员插入方法、成员判定方法、成员删除方法及数据集合紧凑方法,通过建立的动态布谷鸟过滤器,来适应动态集合大小的变化,利用成员指纹信息的数据存储匹配,完成集合成员的判定。本发明方法解决了现有技术中无法同时解决动态集合表示中集合扩展、缩小和集合成员可靠删除的问题,通过执行本发明中的方法,在相同判定精度的前提下,大大提高了成员判定的速度,此外,本发明方法显著改善了数据集合的空间利用率,解决了动态数据集合元素删除的可靠性问题。

著录项

  • 公开/公告号CN105630955A

    专利类型发明专利

  • 公开/公告日2016-06-01

    原文格式PDF

  • 申请/专利权人 华中科技大学;

    申请/专利号CN201510982653.9

  • 发明设计人 陈汉华;金海;廖良翌;

    申请日2015-12-24

  • 分类号G06F17/30(20060101);

  • 代理机构42201 华中科技大学专利中心;

  • 代理人曹葆青

  • 地址 430074 湖北省武汉市洪山区珞喻路1037号

  • 入库时间 2023-12-18 15:46:39

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-01-29

    授权

    授权

  • 2016-06-29

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20151224

    实质审查的生效

  • 2016-06-01

    公开

    公开

说明书

技术领域

本发明属于计算机信息表示与信息检索领域,更具体地,涉及一种高效动态数据集合成员管理方法。

背景技术

数据集合的表示和集合成员判定是很多计算机领域应用中存在的两个核心问题,比较典型的如路由器应用,数据库应用,P2P应用。由于数据量呈现爆发式地增长,将海量的数据以原始数据的形式存储并进行集合成员判定的空间开销和时间开销几乎不可接受。集合成员判定技术,在特定的数据结构中以集合成员的哈希值作为地址,通过在指定地址存储每个集合成员的布尔值或是指纹信息作为集合成员存在性标识来表示一个集合。这种方式牺牲一定判断精度,却可以极大地降低集合成员表示的空间开销并且提供快速地集合成员判定功能。大部分数据结构以及集合成员判定技术都是为集合大小确定、集合成员相对稳定的静态集合设计的,但是随着大数据时代的来临,很多应用中动态数据集合变得越来越多,而之前为静态集合设计的集合成员判定数据结构在空间效率和基本操作上显现出很大的局限性。

目前,集合成员判定技术主要由以下三种方法:(1)基于布隆过滤器bloomfilter及其变种的集合成员判定技术:利用bloomfilter数据结构及其变种,使用布尔值来标识数据集合成员的存在性,该方案在应对静态集合时具有很高的空间效率和时间效率。但是对于动态集合,该方案所采用的数据结构无法支持容量伸缩,导致在处理动态集合时需要预先分配大量空间,导致巨大的空间浪费;(2)基于布谷鸟过滤器cuckoofilter的集合成员判定技术:利用cuckoofilter数据结构存储数据集合成员的指纹信息来标识集合成员,通过匹配指纹信息进行集合成员判定。在面对静态集合的时候,在时间效率上优于前者且空间效率上接近于前者;同样在面对动态集合时,该数据结构预先设定的容量使得此方法的应用场景受到极大限制;(3)基于动态布隆过滤器dynamicbloomfilter的集合成员判定技术:该技术基于dynamicbloomfilter数据结构,通过动态分配相同的bloomfilter并且以链表的形式连接来伸缩容量,满足动态集合大小变化的需求以改善空间利用率,但是元素删除的不可靠性使得其集合成员判断错误率随着删除的元素增多而增大,甚至导致数据结构无法使用。这种缺陷使得该技术在面对高度动态的数据集合时往往难以胜任。

发明内容

针对现有技术的以上缺陷或不足,同时结合集合成员动态增减,集合大小动态变化这两大动态数据集合的特点,本发明提供一种高效动态数据集合成员管理方法,其目的在于解决现有技术中无法同时解决动态集合表示中集合扩展和集合成员可靠删除的问题。此外,针对存储数据集合的数据结构提出了数据结构紧凑方法,显著改善了数据结构的空间利用率。

为实现上述目的,按照本发明的一个方面,提出了一种高效动态数据集合成员插入方法,其特征在于,所述方法包括以下步骤:

(1)建立动态布谷鸟过滤器DCF并初始化,令DCF只有一个布谷鸟过滤器CF且当前布谷鸟过滤器指针curCF指向DCF中第一个CF;

(2)通过哈希函数计算得到待插入数据成员指纹信息ξ及与其对应的两个候选bucket位置μ,ν;

(3)将待插入数据成员指纹信息ξ插入当前布谷鸟过滤器指针curCF指向的布谷鸟过滤器CF中,若插入成功,进入步骤(5),否则,插入失败,保存最后一个被踢出数据成员指纹信息ξ*并进入步骤(4);

(4)进入FailureHandling步骤,将ξ*插入进当前布谷鸟过滤器指针curCF后连接着的相同结构的某一个CF中,结束算法;

(5)检查当前布谷鸟过滤器指针curCF的存储元素是否小于CF存储容量c,若是,则结束算法;若等于CF存储容量c,则进入步骤(6);

(6)检查当前布谷鸟过滤器指针curCF是否指向动态布谷鸟过滤器DCF的最后一个CF,若是,则分配一个新的CF连接在DCF后,并且令当前布谷鸟过滤器指针curCF指向它;否则让当前布谷鸟过滤器指针curCF指向其紧接着的后一个CF,结束算法。

作为进一步优选的,所述动态布谷鸟过滤器DCF是由s个布谷鸟过滤器CF通过链表的形式连接构成;每个CF均为一个长度l的bucket数组,l=2n,其所能存储数据成员数量的最大值为存储容量c,c≤4l;每个bucket包括4个基本存储单元entry,每个entry大小固定且仅存储一个数据成员的指纹信息;DCF保持两个指针,分别为当前布谷鸟过滤器指针curCF和下一布谷鸟过滤器指针nextCF。

作为进一步优选的,对于集合成员x的待插入数据成员指纹信息ξ的两个候选bucket位置μ,ν具体为:

μ=h1(x)

v=μh1(ξ)

其中,h1(·)为哈希函数。

作为进一步优选的,所述步骤(3)具体包括:

(3-1)将待插入数据成员指纹信息ξ放入curCF中两个候选bucket任意一个基本存储单元entry为空的位置上,返回插入成功;若两个候选bucket都存在空基本存储单元entry,则随机选择一个bucket中任意一个空基本存储单元entry存储,返回插入成功;若两个候选bucket都不存在空基本存储单元entry,则随机选择一个bucket进入步骤(3-2);

(3-2)在已选定的bucket中随机选择一个基本存储单元entry,将存储在该基本存储单元entry内的数据成员指纹信息踢出并存储待插入ξ;

(3-3)进入重定位relocation步骤,设置计数器记录当前插入过程执行重定位relocation次数,若计数器值小于最大重定位次数MNK,进入步骤(3-4),否则返回插入失败,进入步骤(4)。

(3-4)计算被踢出数据成员指纹信息ξ*的另一个候选bucket位置,若该bucket中存在空基本存储单元entry,将ξ*插入,返回插入成功,进入步骤(5);若该bucket中不存在空基本存储单元entry,则进入步骤(3-2);

作为进一步优选的,所述步骤(4)具体包括:

(4-1)令下一布谷鸟过滤器指针nextCF指向当前布谷鸟过滤器指针curCF。

(4-2)检查下一布谷鸟过滤器指针nextCF指向的布谷鸟过滤器CF是否为DCF的最后一个CF,若是,则分配一个新的CF连接在DCF后,并且让下一布谷鸟过滤器指针nextCF指向它;否则,让nextCF指向curCF后紧接着的CF;

(4-3)在nextCF中插入ξ*,若插入成功,返回成功结果;插入失败,进入步骤(4-2)。

按照本发明的另一个方面,提出了一种高效动态数据集合成员判定方法,其特征在于,所述方法包括以下步骤:

(1)通过哈希函数计算得到待判定数据成员指纹信息ξ'及与其对应的两个候选bucket位置μ',v';

(2)初始化计数器k=1;

(3)遍历动态布谷鸟过滤器DCF的s个CF中第k个CF,其中,1≤k≤s,记为CFk,判断CFk是否存在,若存在,进入步骤(4);若不存在,返回查询失败,集合成员判定算法结束;

(4)在CFk中对应的两个候选bucket位置μ',v'中查询是否存在待判定数据成员指纹信息ξ',若存在,则返回查询成功,算法结束;若不存在,计数器k加1,进入步骤(3)。

作为进一步优选的,对于集合成员x的待判定数据成员指纹信息ξ'的两个候选bucket位置μ',v'具体为:

μ'=h1(x)

v=μh1(ξ)

其中,h1(·)为哈希函数。

按照本发明的另一个方面,提出了一种高效动态数据集合成员删除方法,其特征在于,所述方法包括以下步骤:

(1)通过哈希函数计算得到待删除数据成员指纹信息ξdel及与其对应的两个候选bucket位置μdel,vdel

(2)初始化计数器k=1;

(3)遍历动态布谷鸟过滤器DCF的s个CF中第k个CF,其中,1≤k≤s,记为CFk,判断CFk是否存在,若存在,进入步骤(4);若不存在,返回删除失败,算法结束;

(4)在CFk中对应的两个候选bucket位置μdel,vdel中查询是否存在ξdel,若存在,则将对应的数据成员指纹信息移除,返回删除成功,算法结束;若不存在,计数器k加1,进入步骤(3)。

作为进一步优选的,对于集合成员x的待删除数据成员指纹信息ξdel的两个候选bucket位置μdel,vdel具体为:

μdel=h1(x)

vdel=μdelh1(ξdel)

其中,h1(·)为哈希函数。

按照本发明的另一个方面,提出了一种高效动态数据集合紧凑方法,其特征在于,所述方法包括:

(1)建立布谷鸟过滤器队列CFQ数组,并将指向未达到布谷鸟过滤器CF存储容量c的布谷鸟过滤器CF及其地址存入CFQ数组;

(2)将CFQ数组中的CF按存储数据集合成员的数量由少到多进行排序,统计得到CFQ数组长度length;

(3)初始化计数器i=1;

(4)令源布谷鸟过滤器CF指针sourceCF指向CFQ数组中第i个CF;

(5)判断sourceCF是否指向CFQ数组中最后一个CF,若是,即i=length,算法结束;若否,则进入步骤(6);

(6)初始化计数器j=length;

(7)令目标布谷鸟过滤器指针targetCF指向第j个CF;

(8)判断目标布谷鸟过滤器指针targetCF是否等于源布谷鸟过滤器指针sourceCF,若是,则将计数器i加1,进入步骤(4);若否,则进入步骤(9)。

(9)遍历源布谷鸟过滤器指针sourceCF指向的CF中的bucket,将遍历到的bucket中的数据成员指纹信息存储到目标布谷鸟过滤器指针targetCF指向的CF中相同位置bucket的空基本存储单元entry中;

(10)检查源布谷鸟过滤器指针sourceCF是否为空,若是,则将sourceCF指向的CF从DCF中删除后,将计数器i加1,进入步骤(4);否则将计数器j减1,进入步骤(7)。

总体而言,按照本发明点的以上技术方案与现有技术相比,主要具备以下的技术优点:

1、本发明结合集合成员动态增减,集合大小动态变化这动态数据集合的两大特点,提出了一种高效动态数据集合成员管理方法,能够通过动态伸缩数据结构的容量适应动态集合大小的变化,精简高效地表示一个动态集合,进一步提高了数据结构的构建速度;

2、通过执行本发明中的高效动态数据集合成员插入、删除、判定方法,有效解决了海量数据存储空间及集合成员判定的时间开销问题,在相同集合成员判定精度的前提下,本发明方法在降低计算复杂度及改善空间利用率的同时,提供了高效的集合成员判定速度及可靠的集合成员删除;

3、此外,本发明针对动态集合自身特点,提出了一种高效动态数据集合紧凑方法,通过对未达存储容量的布谷鸟过滤器的整理及对应成员搬移,避免了动态数据集合的存储资源浪费,大大提高了动态数据集合的空间利用率。

附图说明

图1为本发明一种高效动态数据集合成员插入方法流程图;

图2是本发明一种高效动态数据集合成员判定方法流程图;

图3是本发明一种高效动态数据集合成员删除方法流程图;

图4是本发明一种高效动态数据集合紧凑方法流程图;

图5是本发明实施例中插入成员x示意图;

图6是本发明实施例中relocation步骤的示意图;

图7是本发明实施例中判定集合成员x,删除成员x示意图;

图8,图9分别是本发明实施例中高效动态数据集合紧凑方法前后DCF示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1-4所示,为本发明提供了一种高效动态数据集合成员管理方法,包括了四个基本操作算法:分别为集合成员插入方法、集合成员判定方法、集合成员删除方法及数据集合紧凑方法,首先,先对本发明中用到的特殊的数据结构——动态布谷鸟过滤器DCF(Dynamiccuckoofilter)进行介绍。

Dynamiccuckoofilter(DCF)是由s个布谷鸟过滤器cuckoofilter(CF),通过链表的形式连接构成。每一个CF都是一个长度为l的bucket数组,每个bucket含有4个基本存储单元entry,每个entry用于存储一个数据成员的指纹信息且大小固定。DCF可以设置每个CF所能存储数据成员数量的最大值,记为容量c(c≤4l)。DCF保持两个指针,当前布谷鸟过滤器指正curCF和下一布谷鸟过滤器指针nextCF,用于执行DCF的基本操作算法。DCF中参数s的大小,即DCF中CF的数量,将根据DCF所表示数据集合的大小变化而改变。通过增加DCF中CF的数量,达到DCF结构容量扩充的目的,同样的,紧凑存储在DCF内的数据,删除空CF以减少DCF中CF的数量,可以达到DCF结构容量减小的目的。参数l=2n,从而保证DCF基本操作中异或操作的可行性。

如下分别对本发明中的四个基本操作方法进行说明。

(a)集合成员插入算法,如图1所示:

(1)建立动态布谷鸟过滤器DCF并初始化,令DCF只有一个布谷鸟过滤器CF且当前布谷鸟过滤器指针curCF指向DCF中第一个CF;

(2)通过哈希函数计算得到待插入数据成员指纹信息ξ及与其对应的两个候选bucket位置μ,ν;

对于集合成员x的待插入数据成员指纹信息ξ的两个候选bucket位置μ,ν具体为:

μ=h1(x)

v=μh1(ξ)

其中,h1(·)为哈希函数。

(3)将待插入数据成员指纹信息ξ插入当前布谷鸟过滤器指针curCF指向的布谷鸟过滤器CF中,若插入成功,进入步骤(5),否则,插入失败,保存最后一个被踢出数据成员指纹信息ξ*并进入步骤(4);

作为进一步优选的,所述步骤(3)具体包括:

(3-1)将待插入数据成员指纹信息ξ放入curCF中两个候选bucket任意一个基本存储单元entry为空的位置上,返回插入成功;若两个候选bucket都存在空基本存储单元entry,则随机选择一个bucket中任意一个空基本存储单元entry存储,返回插入成功;若两个候选bucket都不存在空基本存储单元entry,则随机选择一个bucket进入步骤(3-2);

(3-2)在已选定的bucket中随机选择一个基本存储单元entry,将存储在该基本存储单元entry内的数据成员指纹信息踢出并存储待插入ξ;

(3-3)进入重定位relocation步骤,设置计数器记录当前插入过程执行重定位relocation次数,若计数器值小于最大重定位次数MNK,进入步骤(3-4),否则返回插入失败,进入步骤(4)。

(3-4)计算被踢出数据成员指纹信息ξ*的另一个候选bucket位置,若该bucket中存在空基本存储单元entry,将ξ*插入,返回插入成功,进入步骤(5);若该bucket中不存在空基本存储单元entry,则进入步骤(3-2);

(4)进入FailureHandling步骤,将ξ*插入进当前布谷鸟过滤器指针curCF后连接着的相同结构的某一个CF中,结束算法;

(4-1)令下一布谷鸟过滤器指针nextCF指向当前布谷鸟过滤器指针curCF。

(4-2)检查下一布谷鸟过滤器指针nextCF指向的布谷鸟过滤器CF是否为DCF的最后一个CF,若是,则分配一个新的CF连接在DCF后,并且让下一布谷鸟过滤器指针nextCF指向它;否则,让nextCF指向curCF后紧接着的CF;

(4-3)在nextCF中插入ξ*,若插入成功,返回成功结果;插入失败,进入步骤(4-2)。

(5)检查当前布谷鸟过滤器指针curCF的存储元素是否小于CF存储容量c,若是,则结束算法;若等于CF存储容量c,则进入步骤(6);

(6)检查当前布谷鸟过滤器指针curCF是否指向动态布谷鸟过滤器DCF的最后一个CF,若是,则分配一个新的CF连接在DCF后,并且令当前布谷鸟过滤器指针curCF指向它;否则让当前布谷鸟过滤器指针curCF指向其紧接着的后一个CF,结束算法。

(b)集合成员判定方法,如图2所示:

按照本发明的另一个方面,提出了一种高效动态数据集合成员判定方法,其特征在于,所述方法包括以下步骤:

(1)通过哈希函数计算得到待判定数据成员指纹信息ξ'及与其对应的两个候选bucket位置μ',v';

对于集合成员x的待判定数据成员指纹信息ξ'的两个候选bucket位置μ',v'具体为:

μ'=h1(x)

v=μh1(ξ)

其中,h1(·)为哈希函数。

(2)初始化计数器k=1;

(3)遍历动态布谷鸟过滤器DCF的s个CF中第k个CF,其中,1≤k≤s,记为CFk,判断CFk是否存在,若存在,进入步骤(4);若不存在,返回查询失败,集合成员判定算法结束;

(4)在CFk中对应的两个候选bucket位置μ',v'中查询是否存在待判定数据成员指纹信息ξ',若存在,则返回查询成功,算法结束;若不存在,计数器k加1,进入步骤(3)。

(c)集合成员删除算法,如图3所示:

(1)通过哈希函数计算得到待删除数据成员指纹信息ξdel及与其对应的两个候选bucket位置μdel,vdel

对于集合成员x的待删除数据成员指纹信息ξdel的两个候选bucket位置μdel,vdel具体为:

μdel=h1(x)

vdel=μdelh1(ξdel)

其中,h1(·)为哈希函数。

(2)初始化计数器k=1;

(3)遍历动态布谷鸟过滤器DCF的s个CF中第k个CF,其中,1≤k≤s,记为CFk,判断CFk是否存在,若存在,进入步骤(4);若不存在,返回删除失败,算法结束;

(4)在CFk中对应的两个候选bucket位置μdel,vdel中查询是否存在ξdel,若存在,则将对应的数据成员指纹信息移除,返回删除成功,算法结束;若不存在,计数器k加1,进入步骤(3)。

(d)高效动态数据集合紧凑方法,如图4所示:

(1)建立布谷鸟过滤器队列CFQ数组,并将指向未达到布谷鸟过滤器CF存储容量c的布谷鸟过滤器CF及其地址存入CFQ数组;

(2)将CFQ数组中的CF按存储数据集合成员的数量由少到多进行排序,统计得到CFQ数组长度length;

(3)初始化计数器i=1;

(4)令源布谷鸟过滤器CF指针sourceCF指向CFQ数组中第i个CF;

(5)判断sourceCF是否指向CFQ数组中最后一个CF,若是,即i=length,算法结束;若否,则进入步骤(6);

(6)初始化计数器j=length;

(7)令目标布谷鸟过滤器指针targetCF指向第j个CF;

(8)判断目标布谷鸟过滤器指针targetCF是否等于源布谷鸟过滤器指针sourceCF,若是,则将计数器i加1,进入步骤(4);若否,则进入步骤(9)。

(9)遍历源布谷鸟过滤器指针sourceCF指向的CF中的bucket,将遍历到的bucket中的数据成员指纹信息存储到目标布谷鸟过滤器指针targetCF指向的CF中相同位置bucket的空基本存储单元entry中;

(10)检查源布谷鸟过滤器指针sourceCF是否为空,若是,则将sourceCF指向的CF从DCF中删除后,将计数器i加1,进入步骤(4);否则将计数器j减1,进入步骤(7)。

如图5-6所示,以具体实例对本发明一种高效动态数据集合成员管理方法进行进一步说明:

(a)集合成员插入:

下面以插入成员x为例,详细说明集合成员插入过程。

(1)建立DCF,如图5所示是一个长度l=8,bucket数量m=4的DCF,初始时DCF只有一个CF(即CF1),且curCF指向CF1

(2)通过哈希函数计算数据成员的标记信息,称为fingerprint。

(3)通过两个哈希函数计算数据成员的fingerprint的两个候选bucket位置2和6。

(3-1)选择哈希函数h1(.),对于集合成员x,两个候选bucket位置2和6计算方式为:2=h1(x),6=2h1(x,fingerprint).

(4)将数据成员的fingerprint插入curCF的bucket2或者bucket6,插入成功,进入步骤(6);插入失败,保存最后一个被踢出的fingerprint,并进入步骤(5)。

(4-1)将x的fingerprint放入curCF中两个候选bucket2或者bucket6中任意一个有空entry的位置上,返回插入成功;如果两个候选bucket2和bucket6都存在空entry,则随机选择一个bucket中随机一个空entry存储,返回插入成功;如果两个候选bucket都不存在空entry,如图6所示,则随机选择一个bucket6进入步骤(4-2)。

(4-2)在bucket6中随机选择一个entry,将存储在内的q的fingerprint踢出并存储存储x的fingerprint。

(4-3)进入重定位relocation步骤,如图6所示,设置计数器记录当前插入过程执行relocation次数,若计数器值小于最大relocation次数MNK,进入步骤(4-4),否则返回插入失败,进入步骤(5)。

(4-4)根据公式计算被踢出的q的fingerprint的另一个候选bucket位置bucket4,若该bucket中存在空entry,将fingerprint插入,返回插入成功,进入步骤(6);若不存在空entry,如图6所示情况,则重复步骤(4-2),将存储在内的成员g的fingerprint踢出并将q的fingerprint存储进去,g的fingerprint继续进行relocation步骤,直到找到有空entry的bucket1,插入过程结束,每个成员的指纹都找到了自己的存储位置。

(5)进入FailureHandling步骤,将被踢出元素的fingerprint插入进curCF后连接着的相同结构的CF中。

(5-1)将nextCF指向curCF。

(5-2)检查nextCF指针指向的CF是否为DCF的最后一个CF,若为最后一个,则分配一个新的CF连接在DCF后,并且让nextCF指向它;否则让nextCF指向nexCF后紧接着的CF。

(5-3)在nextCF中执行插入操作,若插入成功,返回成功结果;插入失败,进入步骤(5-2)。

(6)检查curCF存储元素是否小于容量c,若小于容量c,则插入数据集合成员算法结束;若等于容量c,则进入步骤(7)。

(7)检查curCF是否为DCF的最后一个CF,若为最后一个,则分配一个新的CF连接在DCF后,并且让curCF指向它;否则让curCF指向它紧接着的CF,插入数据集合成员算法结束。

(b)集合成员判定,如图7所示:

下面以查询成员x为例,详细说明集合成员判定过程。

(1)通过哈希函数计算数据成员的标记信息,称为fingerprint。

(2)通过两个哈希函数计算数据成员的fingerprint的两个候选bucket位置2和6。

(2-1)选择哈希函数h1(.),对于集合成员x,两个候选bucket位置2和6计算方式为:2=h1(x),6=2h1(x,fingerprint).

(3)初始化计数器k=1。

(4)遍历DCF的3个CF中第k个CF,记为CFk,判断CFk是否存在,若存在,进入步骤(5);若不存在,返回查询失败,集合成员判定算法结束。

(5)在CFk(1≤k≤s)中对应的候选bucket位置2和6中查询是否存在x的fingerprint,若存在,则返回查询成功,集合成员判定算法结束;若不存在,计数器k加1,进入步骤(4)。如图7所示,CF1和CF2中都未找到x对应的fingerprint,计数器k=3时,在CF3中找到x的fingerprint,返回查询成功。

(c)集合成员删除,如图7所示:

下面以删除元素x为例,详细说明集合成员删除过程。

(1)通过哈希函数计算数据成员的标记信息,称为fingerprint。

(2)通过两个哈希函数计算数据成员的fingerprint的两个候选bucket位置2和6。

(2-1)选择哈希函数h1(.),对于集合成员x,两个候选bucket位置2和6计算方式为:2=h1(x),6=2h1(x,fingerprint).

(3)初始化计数器k=1。

(4)遍历DCF的3个CF中第k个CF,记为CFk,判断CFk是否存在,若存在,进入步骤(5);若不存在,返回删除失败,集合成员删除算法结束。

(5)在CFk(1≤k≤s)中对应的候选bucket位置2和6中查询是否存在x的fingerprint,若存在,则将x的指纹信息移除,在相应的entry中存储“0”,返回删除成功,集合成员判定算法结束;若不存在,计数器k加1,进入步骤(4)。如图7所示,CF1和CF2中都未找到x对应的fingerprint,计数器k=3时,在CF3中找到x的fingerprint,将CF3中存储的x的fingerprint移除后,相应entry被置为“0”,返回删除成功。

(d)数据集合紧凑:

下面以图8为例,详细说明紧凑数据结构的过程。

(1)建立CFQ数组,将指向未达到容量c的CF的指针存入CFQ数组。如图8中CF1,CF2,CF3都未达到容量,全部都进入CFQ队列。

(2)将CFQ中的CF按存储数据集合成员的数量由少到多进行排序,排序后顺序为CF3,CF1,CF2,统计CFQ长度length=3。

(3)初始化计数器i=1。

(4)令sourceCF指向CFQ中第i个CF。

(5)判断sourceCF是否为CFQ中最后一个CF,若是,则数据集合紧凑方法结束;若不是最后一个,则进入步骤(6)。

(6)初始化计数器j=length=3。

(7)让targetCF指向第j个CF。

(8)判断targetCF是否等于sourceCF,若等于,则将计数器i加1,进入步骤(4);若不等于,则进入步骤(9)

(9)遍历sourceCF中的bucket数组,将sourceCF遍历到的bucket中的fingerprint存储到targetCF中相同位置的bucket中。

(10)检查curCF是否为空,若为空,则将curCF指向的CF从DCF结构中删除后,将计数器i加1,进入步骤(4);否则将计数器j减1,进入步骤(7)。如图9所示为数据集合紧凑算法执行完后DCF的结构示意图,原来图8中CF1和CF3中存储的fingerprint都搬至CF2中,由于fingerprint搬移后CF1和CF3为空,所以从DCF中删除,最后DCF只剩下CF2存在。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号