CN111930924A - 基于布隆过滤器的数据查重系统及方法 - Google Patents
基于布隆过滤器的数据查重系统及方法 Download PDFInfo
- Publication number
- CN111930924A CN111930924A CN202010630817.2A CN202010630817A CN111930924A CN 111930924 A CN111930924 A CN 111930924A CN 202010630817 A CN202010630817 A CN 202010630817A CN 111930924 A CN111930924 A CN 111930924A
- Authority
- CN
- China
- Prior art keywords
- value
- filter
- bit
- numhashfunctions
- generating
- 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.)
- Pending
Links
Images
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/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/335—Filtering based on additional data, e.g. user or group profiles
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种基于布隆过滤器的数据查重系统及方法,包括:初始化过滤器模块:每个过滤器初始化时需要传入p与n两个参数,n为插入的元素个数,p为误报率,生成哈希函数个数numHashFunctions和布隆过滤器长度bitSize。本发明极大节省了单次处理时间与降低实际滤误判概率,过滤器会达到更稳定更可靠。不会因为后期数据量大了之后过滤器处理时间长而拖累其它程序服务使用。在量化效果上用改造后的过滤器比现有过滤器的综合性能快100倍左右。
Description
技术领域
本发明涉及数据过滤技术领域,具体地,涉及基于布隆过滤器的数据查重系统及方法。
背景技术
随着技术发展与数据量的增加,为了最求大数据量的准确性与可用性成为了发展很快的方向,不论在互联网大数据上还是在工业大数据场景中涉及的越来越多的应用场景。
目前相关领域存在着很多的过滤器插件,但在使用过程中发现有很多的弊端与瓶颈,如在过滤器过滤速度上与过滤错误率上随着数据量的增大而过滤速度呈曲线降低,错误率也呈现曲线上升,很多公司在解决问题时采用投入更多硬件资源来集群,但是效果也差强人意且比较耗费成本。
如果不处理p与n两个参数的话会使numHashFunctions变的越来越小和bitSize在一开始就过大,而numHashFunctions变小和bitSize变大后会导致布隆过滤器效率低下,且每个bit位都在同一个区间内,当数据量增大后后续生成value值生成相同bit值的概率变的越来越大,当不同value值得单个bit值重复率变大时,过滤器生成的bit数组相同的概率会同步增加,这种概率增加对过滤器来说是致命的,应为过滤的目的是处理大量数据的准确性与可用性,如果过滤器失去了这个属性,则降低了过滤器的实际作用。bitSize的变大会导致存储在过滤器中的空间更多,对资源占用更大,当存储的value越多时会造成过滤器的更新/存储、读取的性能变的低下。
如果因为内存庞大而造成在实际业务中使用过滤器时拖累性能,在高并发,高可用的应用场景中是非常危险的,会影响其它业务的处理能力。在过滤器很重要且性能也很重要的情况下,提高过滤器的性能与高可用性变成是唯一的选择。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种基于布隆过滤器的数据查重系统及方法。
根据本发明提供的一种基于布隆过滤器的数据查重系统,包括:
初始化过滤器模块:每个过滤器初始化时需要传入p与n两个参数,n为插入的元素个数,p为误报率,生成哈希函数个数numHashFunctions和布隆过滤器长度bitSize;
计算过滤器bit数组模块:根据初始化过滤器生成的numHashFunctions和bitSize以及传入的被计算的值key这三个数据生成一个value,所述value根据numHashFunctions生成多个long类型值,然后将多个long类型值根据bitSize生成多个int类型的bit数组,最终返回bit数组;
判重模块:根据返回的bit数组进行循环获得每一个bit值,在数据库Redis中查询每一个bit值在数据库Redis里面bit位的值:如果值为0,则表示没有任何一个值映射到这个bit位上,value这个值不存在;如果返回的值为1,这value这个值已经存在。
优选地,所述numHashFunctions和bitSize决定过滤器bit位的长度;
过滤器bit位的长度会影响过滤器最终的查询与更新值的效率与错误率。
优选地,所述生成一个value的过程包括:
初始化value数组值,数组长度为numHashFunctions,用户使用过滤器时会传入需要被验证的值key,然后把key生成hash 64位的long类型值,把这个long类型值生成10位长度的int类型值hash1,再用这个long类型值无符号右移>>>32位生成10位长度的int类型值hash2;
然后按照numHashFunctions长度来循环,按照hash1+i*hash2的计算方法生成nextHash值,i是循环下标,判断nextHash值是否小于0,小于0就对nextHash值取反运算;
然后给value赋值,值生成方法为:bitSize对nextHash取余运算:bit=nextHash%bitSize,bit值的大小不超过bitSize值。
优选地,所述传入的被计算的值key指用户传入的数据;
一个数据对应一个key值,通过key值查询对应的数据在过滤器中是否存在。
优选地,所述生成哈希函数个数numHashFunctions和布隆过滤器长度bitSize的具体算法如下:
如果算出来的numHashFunctions值小于等于3,则numHashFunctions取固定值3,禁止其小于3。
优选地,所述p与n两个参数为动态;
countValue值指记录项目实际过滤或存储的值,初始化为0,根据实际使用数量递增,存放在Redis中保存;
n值表示预订的过滤值个数,当countValue值的值等于n时,n值就会被重新初始化,重新初始化的值为:n乘2,也就是以n值为基础倍数扩增
p值表示可接受的数据过滤误判概率,当countValue值的值等于n时,p值就会被重新初始化,重新初始化的值为:p除2。
根据本发明提供的一种基于布隆过滤器的数据查重方法,包括:
初始化过滤器步骤:每个过滤器初始化时需要传入p与n两个参数,n为插入的元素个数,p为误报率,生成哈希函数个数numHashFunctions和布隆过滤器长度bitSize;
计算过滤器bit数组步骤:根据初始化过滤器生成的numHashFunctions和bitSize以及传入的被计算的值key这三个数据生成一个value,所述value根据numHashFunctions生成多个long类型值,然后将多个long类型值根据bitSize生成多个int类型的bit数组,最终返回bit数组;
判重步骤:根据返回的bit数组进行循环获得每一个bit值,在数据库Redis中查询每一个bit值在数据库Redis里面bit位的值:如果值为0,则表示没有任何一个值映射到这个bit位上,value这个值不存在;如果返回的值为1,这value这个值已经存在。
优选地,所述numHashFunctions和bitSize决定过滤器bit位的长度;
过滤器bit位的长度会影响过滤器最终的查询与更新值的效率与错误率;
所述传入的被计算的值key指用户传入的数据;
一个数据对应一个key值,通过key值查询对应的数据在过滤器中是否存在。
优选地,所述生成一个value的过程包括:
初始化value数组值,数组长度为numHashFunctions,用户使用过滤器时会传入需要被验证的值key,然后把key生成hash 64位的long类型值,把这个long类型值生成10位长度的int类型值hash1,再用这个long类型值无符号右移>>>32位生成10位长度的int类型值hash2;
然后按照numHashFunctions长度来循环,按照hash1+i*hash2的计算方法生成nextHash值,i是循环下标,判断nextHash值是否小于0,小于0就对nextHash值取反运算;
然后给value赋值,值生成方法为:bitSize对nextHash取余运算:bit=nextHash%bitSize,bit值的大小不超过bitSize值。
优选地,所述生成哈希函数个数numHashFunctions和布隆过滤器长度bitSize的具体算法如下:
如果算出来的numHashFunctions值小于等于3,则numHashFunctions取固定值3,禁止其小于3;
所述p与n两个参数为动态;
countValue值指记录项目实际过滤或存储的值,初始化为0,根据实际使用数量递增,存放在Redis中保存;
n值表示预订的过滤值个数,当countValue值的值等于n时,n值就会被重新初始化,重新初始化的值为:n乘2,也就是以n值为基础倍数扩增
p值表示可接受的数据过滤误判概率,当countValue值的值等于n时,p值就会被重新初始化,重新初始化的值为:p除2。
与现有技术相比,本发明具有如下的有益效果:
本发明改造了初始化的n与p值后就可以控制bitSize与numHashFunctions值的生成大小,从而实现把新增到Redis中的值分区,每个区段的值有长度限制从而达到相互不影响的目的。分区后就可以把公司200000000的数据量切分成100份,这样就相当于只用判定2000000的小数据量而达到处理大数据量的好处,极大节省了单次处理时间与降低实际滤误判概率,过滤器会达到更稳定更可靠。不会因为后期数据量大了之后过滤器处理时间长而拖累其它程序服务使用。在量化效果上用改造后的过滤器比现有过滤器的综合性能快100倍左右。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明提供的处理过滤数据重复性的过滤器的示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
根据本发明提供的一种基于布隆过滤器的数据查重系统,包括:
初始化过滤器模块:每个过滤器初始化时需要传入p与n两个参数,n为插入的元素个数,p为误报率,生成哈希函数个数numHashFunctions和布隆过滤器长度bitSize;
计算过滤器bit数组模块:根据初始化过滤器生成的numHashFunctions和bitSize以及传入的被计算的值key这三个数据生成一个value,所述value根据numHashFunctions生成多个long类型值,然后将多个long类型值根据bitSize生成多个int类型的bit数组,最终返回bit数组;
判重模块:根据返回的bit数组进行循环获得每一个bit值,在数据库Redis中查询每一个bit值在数据库Redis里面bit位的值:如果值为0,则表示没有任何一个值映射到这个bit位上,value这个值不存在;如果返回的值为1,这value这个值已经存在。
具体地,所述numHashFunctions和bitSize决定过滤器bit位的长度;
过滤器bit位的长度会影响过滤器最终的查询与更新值的效率与错误率。
具体地,所述生成一个value的过程包括:
初始化value数组值,数组长度为numHashFunctions,用户使用过滤器时会传入需要被验证的值key,然后把key生成hash 64位的long类型值,把这个long类型值生成10位长度的int类型值hash1,再用这个long类型值无符号右移>>>32位生成10位长度的int类型值hash2;
然后按照numHashFunctions长度来循环,按照hash1+i*hash2的计算方法生成nextHash值,i是循环下标,判断nextHash值是否小于0,小于0就对nextHash值取反运算;
然后给value赋值,值生成方法为:bitSize对nextHash取余运算:bit=nextHash%bitSize,bit值的大小不超过bitSize值。
具体地,所述传入的被计算的值key指用户传入的数据;
一个数据对应一个key值,通过key值查询对应的数据在过滤器中是否存在。
具体地,所述生成哈希函数个数numHashFunctions和布隆过滤器长度bitSize的具体算法如下:
如果算出来的numHashFunctions值小于等于3,则numHashFunctions取固定值3,禁止其小于3。
具体地,所述p与n两个参数为动态;
countValue值指记录项目实际过滤或存储的值,初始化为0,根据实际使用数量递增,存放在Redis中保存;
n值表示预订的过滤值个数,当countValue值的值等于n时,n值就会被重新初始化,重新初始化的值为:n乘2,也就是以n值为基础倍数扩增
p值表示可接受的数据过滤误判概率,当countValue值的值等于n时,p值就会被重新初始化,重新初始化的值为:p除2。
根据本发明提供的一种基于布隆过滤器的数据查重方法,包括:
初始化过滤器步骤:每个过滤器初始化时需要传入p与n两个参数,n为插入的元素个数,p为误报率,生成哈希函数个数numHashFunctions和布隆过滤器长度bitSize;
计算过滤器bit数组步骤:根据初始化过滤器生成的numHashFunctions和bitSize以及传入的被计算的值key这三个数据生成一个value,所述value根据numHashFunctions生成多个long类型值,然后将多个long类型值根据bitSize生成多个int类型的bit数组,最终返回bit数组;
判重步骤:根据返回的bit数组进行循环获得每一个bit值,在数据库Redis中查询每一个bit值在数据库Redis里面bit位的值:如果值为0,则表示没有任何一个值映射到这个bit位上,value这个值不存在;如果返回的值为1,这value这个值已经存在。
具体地,所述numHashFunctions和bitSize决定过滤器bit位的长度;
过滤器bit位的长度会影响过滤器最终的查询与更新值的效率与错误率;
所述传入的被计算的值key指用户传入的数据;
一个数据对应一个key值,通过key值查询对应的数据在过滤器中是否存在。
具体地,所述生成一个value的过程包括:
初始化value数组值,数组长度为numHashFunctions,用户使用过滤器时会传入需要被验证的值key,然后把key生成hash 64位的long类型值,把这个long类型值生成10位长度的int类型值hash1,再用这个long类型值无符号右移>>>32位生成10位长度的int类型值hash2;
然后按照numHashFunctions长度来循环,按照hash1+i*hash2的计算方法生成nextHash值,i是循环下标,判断nextHash值是否小于0,小于0就对nextHash值取反运算;
然后给value赋值,值生成方法为:bitSize对nextHash取余运算:bit=nextHash%bitSize,bit值的大小不超过bitSize值。
具体地,所述生成哈希函数个数numHashFunctions和布隆过滤器长度bitSize的具体算法如下:
如果算出来的numHashFunctions值小于等于3,则numHashFunctions取固定值3,禁止其小于3;
所述p与n两个参数为动态;
countValue值指记录项目实际过滤或存储的值,初始化为0,根据实际使用数量递增,存放在Redis中保存;
n值表示预订的过滤值个数,当countValue值的值等于n时,n值就会被重新初始化,重新初始化的值为:n乘2,也就是以n值为基础倍数扩增
p值表示可接受的数据过滤误判概率,当countValue值的值等于n时,p值就会被重新初始化,重新初始化的值为:p除2。
下面通过优选例,对本发明进行更为具体地说明。
优选例1:
本发明中解决了在大量数据下保证数据唯一性不重复的目的及高可用性,包括初始化过滤器阶段、计算过滤器bit数组、判断Redis中是否已经包含了过滤器bit数组、更新/存储过滤器value值、删除数据后删除过滤器value值,各阶段是一个独立机制,但是相互组成一个闭环整体。
如图1所示,在大数据量背景下处理过滤数据重复性的过滤器,包括:
初始化过滤器模块:每个过过滤器初始化时需要传入p与n两个参数(n为插入的元素个数,p为误报率),生成哈希函数个数(numHashFunctions)和布隆过滤器长度(bitSize)。初始化过滤器是重要步骤,是生成numHashFunctions和bitSize的基础,numHashFunctions和bitSize是决定过滤器bit位的长度。而过滤器bit位的长度会影响过滤器最终的查询与更新值的效率与错误率;
计算过滤器bit数组模块:根据初始化过滤器生成的numHashFunctions、bitSize以及传入的被计算的值key(这个值是使用者传入的数据,也就是key值,一般来说一个数据都会对应一个key值,使用者如果想知道某个数据时候在过滤器中存在时是需要用这个key值去过滤器查询的,查询出来true就认为存在,如果为false则认为该值不存在)这三个数据生成一个value:所述value根据numHashFunctions生成多个long类型值(Long是一个数据类型,long关键字表示一种长整型数据,是编程语言中的一种基本数据类型,为long int的缩写,默认为有符号长整型),然后把多个long类型值根据bitSize生成多个int类型的bit数组,最终返回bit数组;
判重模块:根据返回的bit数组在Redis中查询每一个bit值在里面bit位的值,如果值为0则表示说明没有任何一个值映射到这个bit位上,因此我们可以很确定地说value这个值不存在,如果返回的都为1,这value这个值可能已经存在;所述Redis就是一个存储/查询数据的一个数据库(也可参考:https://baike.baidu.com/item/Redis/6549233?fr=aladdin)
更新/存储过滤器模块:如果判断value这个值不存在于过滤器中后,就可以把返回的bit数组分别指向到bit位置,存储到Redis中存储;
删除过滤器模块:当传入需要删除的value后,根据单个bit位把计数器(Counter)的值减1,逐个处理。
本发明的发明点包括:
(1)通过采用改造numHashFunctions和bitSize生成算法,这个包括初始化阶段,根据初始化阶段传入p与n两个参数,生成numHashFunctions和bitSize,根据以前的算法,numHashFunctions生成的法则为: 可知,当bitSize在缓慢变大时,numHashFunctions的值是在变小的,直到小于1,但是如果numHashFunctions的值在接近1或等于1时,计算过滤器bit数组也会越来越小甚至数组长度为1.这个结果就会导致过滤器的错误率越来越高,失去过滤的意义。改造numHashFunctions和bitSize生成算法后,使numHashFunctions永远不会接近为1,控制到最小值接近或等于3,达到使过滤器的错误率不会降低。
(2)通过采用把p与n两个参数变为动态,改造计算过滤器bit数组,包括初始化过滤器、计算过滤器bit数组、更新/存储过滤器。在更新/存储过滤器时创建一个新的key:countValue,用来存储统计过滤器存放过的value的数量,通过countValue可以知道已经存放的value总量,按照n等于2亿数据量来切分n,把n等分或按照比例分为100份,相当于划分100个区间,根据countValue大小当countValue每到达一个等份值时则更新p与n两个参数,使其根据实际数据量增大而改变从而改变numHashFunctions和bitSize。bitSize的大小在100个区间里的每个区间中它的值是成倍数关系的,这样的倍数关系会改变过滤器bit数组中每个bit位大小的区间。当每个bit位大小的在100个区间中时相当于把过滤器所有的bit位划分了100份相对独立的空间存储达到相互干涉非常少。这样就解决了在公司2亿数据量甚至更多数据量时,p与n两个参数需要设置非常大,极大影响实际使用过滤器的速度与错误率攀升的难题,改造后可以实现只用处理200万的数据量的速度与错误率,极大的增加了在使用过滤器的处理时间,与大大降低了实际错误率,达到实现高可用处理高数据量的能力。
countValue:记录项目实际过滤或存储的值,初始化为0,根据实际使用数量递增,存放在Redis中保存(改造新增参数)
n值:表示预订的过滤值个数,初始化为2000000,本项目中以2000000为单位把公司目标值200000000分100个区段,在项目运行过程中单个区段固定不变。但当countValue值的值等于n时,n值就会被重新初始化,重新初始化的值为:n乘2,也就是以n值为基础倍数扩增
p值:表示可接受的数据过滤误判概率,这个值的生成方法跟n值相同,初始化为0.0000001,在项目运行过程中单个区段固定不变。但当countValue值的值等于n时,p值就会被重新初始化,重新初始化的值为:p除2
(3)通过采用改造删除过滤器的Counter大小设置,Counter的大小定位问题也是一个两难的问题:考虑到空间利用率的问题,从使用的角度来看,希望Counter越大越好,Counter越大就能记录越多的信息。但是越大的Counter需要占用更多的资源,而且在很多时候会造成极大的空间浪费。但是把p与n两个参数变为动态后,Counter的值可以改造成根据countValue值到达的区间而等比例增大Counter大小,这样在过滤器的每一个阶段可以拥有自己Counter,可以实现平衡空间利用率与资源占用的矛盾,保证过滤器的使用效率。
在本申请的描述中,需要理解的是,术语“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (10)
1.一种基于布隆过滤器的数据查重系统,其特征在于,包括:
初始化过滤器模块:每个过滤器初始化时需要传入p与n两个参数,n为插入的元素个数,p为误报率,生成哈希函数个数numHashFunctions和布隆过滤器长度bitSize;
计算过滤器bit数组模块:根据初始化过滤器生成的numHashFunctions和bitSize以及传入的被计算的值key这三个数据生成一个value,所述value根据numHashFunctions生成多个long类型值,然后将多个long类型值根据bitSize生成多个int类型的bit数组,最终返回bit数组;
判重模块:根据返回的bit数组进行循环获得每一个bit值,在数据库Redis中查询每一个bit值在数据库Redis里面bit位的值:如果值为0,则表示没有任何一个值映射到这个bit位上,value这个值不存在;如果返回的值为1,这value这个值已经存在。
2.根据权利要求1所述的基于布隆过滤器的数据查重系统,其特征在于,所述numHashFunctions和bitSize决定过滤器bit位的长度;
过滤器bit位的长度会影响过滤器最终的查询与更新值的效率与错误率。
3.根据权利要求1所述的基于布隆过滤器的数据查重系统,其特征在于,所述生成一个value的过程包括:
初始化value数组值,数组长度为numHashFunctions,用户使用过滤器时会传入需要被验证的值key,然后把key生成hash 64位的long类型值,把这个long类型值生成10位长度的int类型值hash1,再用这个long类型值无符号右移>>>32位生成10位长度的int类型值hash2;
然后按照numHashFunctions长度来循环,按照hash1+i*hash2的计算方法生成nextHash值,i是循环下标,判断nextHash值是否小于0,小于0就对nextHash值取反运算;
然后给value赋值,值生成方法为:bitSize对nextHash取余运算:bit=nextHash%bitSize,bit值的大小不超过bitSize值。
4.根据权利要求1所述的基于布隆过滤器的数据查重系统,其特征在于,所述传入的被计算的值key指用户传入的数据;
一个数据对应一个key值,通过key值查询对应的数据在过滤器中是否存在。
6.根据权利要求1所述的基于布隆过滤器的数据查重系统,其特征在于,所述p与n两个参数为动态;
countValue值指记录项目实际过滤或存储的值,初始化为0,根据实际使用数量递增,存放在Redis中保存;
n值表示预订的过滤值个数,当countValue值的值等于n时,n值就会被重新初始化,重新初始化的值为:n乘2,也就是以n值为基础倍数扩增
p值表示可接受的数据过滤误判概率,当countValue值的值等于n时,p值就会被重新初始化,重新初始化的值为:p除2。
7.一种基于布隆过滤器的数据查重方法,其特征在于,包括:
初始化过滤器步骤:每个过滤器初始化时需要传入p与n两个参数,n为插入的元素个数,p为误报率,生成哈希函数个数numHashFunctions和布隆过滤器长度bitSize;
计算过滤器bit数组步骤:根据初始化过滤器生成的numHashFunctions和bitSize以及传入的被计算的值key这三个数据生成一个value,所述value根据numHashFunctions生成多个long类型值,然后将多个long类型值根据bitSize生成多个int类型的bit数组,最终返回bit数组;
判重步骤:根据返回的bit数组进行循环获得每一个bit值,在数据库Redis中查询每一个bit值在数据库Redis里面bit位的值:如果值为0,则表示没有任何一个值映射到这个bit位上,value这个值不存在;如果返回的值为1,这value这个值已经存在。
8.根据权利要求7所述的基于布隆过滤器的数据查重方法,其特征在于,所述numHashFunctions和bitSize决定过滤器bit位的长度;
过滤器bit位的长度会影响过滤器最终的查询与更新值的效率与错误率;
所述传入的被计算的值key指用户传入的数据;
一个数据对应一个key值,通过key值查询对应的数据在过滤器中是否存在。
9.根据权利要求7所述的基于布隆过滤器的数据查重方法,其特征在于,所述生成一个value的过程包括:
初始化value数组值,数组长度为numHashFunctions,用户使用过滤器时会传入需要被验证的值key,然后把key生成hash 64位的long类型值,把这个long类型值生成10位长度的int类型值hash1,再用这个long类型值无符号右移>>>32位生成10位长度的int类型值hash2;
然后按照numHashFunctions长度来循环,按照hash1+i*hash2的计算方法生成nextHash值,i是循环下标,判断nextHash值是否小于0,小于0就对nextHash值取反运算;
然后给value赋值,值生成方法为:bitSize对nextHash取余运算:bit=nextHash%bitSize,bit值的大小不超过bitSize值。
10.根据权利要求7所述的基于布隆过滤器的数据查重方法,其特征在于,所述生成哈希函数个数numHashFunctions和布隆过滤器长度bitSize的具体算法如下:
如果算出来的numHashFunctions值小于等于3,则numHashFunctions取固定值3,禁止其小于3;
所述p与n两个参数为动态;
countValue值指记录项目实际过滤或存储的值,初始化为0,根据实际使用数量递增,存放在Redis中保存;
n值表示预订的过滤值个数,当countValue值的值等于n时,n值就会被重新初始化,重新初始化的值为:n乘2,也就是以n值为基础倍数扩增
p值表示可接受的数据过滤误判概率,当countValue值的值等于n时,p值就会被重新初始化,重新初始化的值为:p除2。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010630817.2A CN111930924A (zh) | 2020-07-02 | 2020-07-02 | 基于布隆过滤器的数据查重系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010630817.2A CN111930924A (zh) | 2020-07-02 | 2020-07-02 | 基于布隆过滤器的数据查重系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111930924A true CN111930924A (zh) | 2020-11-13 |
Family
ID=73317058
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010630817.2A Pending CN111930924A (zh) | 2020-07-02 | 2020-07-02 | 基于布隆过滤器的数据查重系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111930924A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112199378A (zh) * | 2020-12-01 | 2021-01-08 | 北京快成科技股份公司 | Ip地址匹配方法及装置 |
CN115454983A (zh) * | 2022-09-13 | 2022-12-09 | 浪潮卓数大数据产业发展有限公司 | 一种基于布隆过滤器的海量Hbase数据去重方法 |
CN117370624A (zh) * | 2023-12-04 | 2024-01-09 | 北京四方启点科技有限公司 | 一种电子单据处理方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108377237A (zh) * | 2018-02-05 | 2018-08-07 | 江苏大学 | 用于云端密文存储的具有所有权管理的数据去重系统及其数据去重方法 |
CN108460030A (zh) * | 2017-02-17 | 2018-08-28 | 北京大学 | 一种基于改进的布隆过滤器的集合元素判断方法 |
CN109408572A (zh) * | 2018-09-30 | 2019-03-01 | 南京联创信息科技有限公司 | 基于sb框架及布隆过滤器的海量数据处理方法 |
US20190286718A1 (en) * | 2018-03-15 | 2019-09-19 | Qualcomm Incorporated | Data structure with rotating bloom filters |
CN110399546A (zh) * | 2019-07-23 | 2019-11-01 | 中南民族大学 | 基于网络爬虫的链接去重方法、装置、设备及存储介质 |
-
2020
- 2020-07-02 CN CN202010630817.2A patent/CN111930924A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108460030A (zh) * | 2017-02-17 | 2018-08-28 | 北京大学 | 一种基于改进的布隆过滤器的集合元素判断方法 |
CN108377237A (zh) * | 2018-02-05 | 2018-08-07 | 江苏大学 | 用于云端密文存储的具有所有权管理的数据去重系统及其数据去重方法 |
US20190286718A1 (en) * | 2018-03-15 | 2019-09-19 | Qualcomm Incorporated | Data structure with rotating bloom filters |
CN109408572A (zh) * | 2018-09-30 | 2019-03-01 | 南京联创信息科技有限公司 | 基于sb框架及布隆过滤器的海量数据处理方法 |
CN110399546A (zh) * | 2019-07-23 | 2019-11-01 | 中南民族大学 | 基于网络爬虫的链接去重方法、装置、设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
ALEXANDER CRAIG等: ""Header length reduction for bloom filter multicast using stochastic overlay networks"", 《2016 IEEE INTERNATIONAL CONFERENCE ON COMMUNICATION》 * |
浪: ""布隆过滤器的那点事儿"", 《SEGMENTFAULT SEGMENTFAULT.COM/A/1190000022823381》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112199378A (zh) * | 2020-12-01 | 2021-01-08 | 北京快成科技股份公司 | Ip地址匹配方法及装置 |
CN115454983A (zh) * | 2022-09-13 | 2022-12-09 | 浪潮卓数大数据产业发展有限公司 | 一种基于布隆过滤器的海量Hbase数据去重方法 |
CN117370624A (zh) * | 2023-12-04 | 2024-01-09 | 北京四方启点科技有限公司 | 一种电子单据处理方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111930923B (zh) | 布隆过滤器系统及过滤方法 | |
CN111930924A (zh) | 基于布隆过滤器的数据查重系统及方法 | |
US9851917B2 (en) | Method for de-duplicating data and apparatus therefor | |
CN106874348B (zh) | 文件存储和索引方法、装置及读取文件的方法 | |
CN101655861A (zh) | 基于双计数布鲁姆过滤器的哈希方法和哈希装置 | |
CN108205571B (zh) | 键值数据表的连接方法及装置 | |
CN112395322B (zh) | 一种基于分级缓存的列表数据显示方法、装置及终端设备 | |
US9760836B2 (en) | Data typing with probabilistic maps having imbalanced error costs | |
CN112148217A (zh) | 全闪存储系统的重删元数据的缓存方法、装置及介质 | |
CN115964002A (zh) | 一种电能表终端档案管理方法、装置、设备及介质 | |
CN113641681B (zh) | 一种空间自适应的海量数据查询方法 | |
CN105528183A (zh) | 一种存储数据的方法及存储设备 | |
CN113392040B (zh) | 一种地址映射方法、装置、设备 | |
CN113568877B (zh) | 一种文件合并方法、装置、电子设备及存储介质 | |
CN115827702B (zh) | 一种基于布隆过滤器的软件白名单查询方法 | |
CN111465929B (zh) | 用于内容不可知文件标引的方法及系统 | |
US8407187B2 (en) | Validating files using a sliding window to access and correlate records in an arbitrarily large dataset | |
CN115795563A (zh) | 一种状态数据校验方法及装置 | |
CN115563116A (zh) | 一种数据库表扫描方法、装置以及设备 | |
CN111104435B (zh) | 一种元数据组织方法、装置、设备及计算机可读存储介质 | |
CN113419792A (zh) | 一种事件处理方法、装置、终端设备和存储介质 | |
US9824105B2 (en) | Adaptive probabilistic indexing with skip lists | |
CN113495901A (zh) | 一种面向可变长数据块的快速检索方法 | |
CN111291126B (zh) | 数据回收方法、装置、设备及存储介质 | |
CN113505086B (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20201113 |