本发明涉及计算机,尤指一种数据预查询方法、装置、设备及计算机可读存储介质。
背景技术:
1、在对大规模数据的查询场景中(例如在大型数据库中查找某项数据、网络爬虫对待爬取网页通过查询已爬取网址数据库来避免重复爬取、邮箱系统对接收到的邮件通过查询垃圾邮件库来判断是否为垃圾邮件等),直接在相应数据库中精确查找待查询数据,耗时极长,效率较低。
技术实现思路
1、本发明实施例提供一种数据预查询方法、装置、设备及计算机可读存储介质,用以提高对待查询数据的查询效率。
2、本发明实施例提供了一种数据预查询方法,包括:
3、对任一第l级预设哈希函数,确定待查询数据对应的第l级哈希值;l起始值为1;所述第l级预设哈希函数为多个;
4、根据各所述第l级哈希值在第l级查询数组中对应的查询位置,判断所述待查询数据是否必不存在于数据库中;
5、若无法判断所述待查询数据是否必不存在于所述数据库中,且确定不满足查询结束条件,则令l加1,并返回所述对任一第l级预设哈希函数,确定所述待查询数据对应的第l级哈希值的步骤;
6、其中,各级查询数组通过如下方式确定:
7、根据所述数据库中的数据量确定各级对应的预设哈希函数、查询数组的总级数、各级查询数组的长度,并将查询数组新增的查询位置设置为无效查询值;
8、对所述数据库中的任一存储数据,从第一级开始直至所述存储数据对应的最后一级l0逐级执行如下步骤,以设置所述存储数据在各级查询数组中分别对应的多个查询位置:
9、对任一所述第l级预设哈希函数,基于所述第l级预设哈希函数确定所述存储数据对应的第l级哈希值;
10、对任一所述第l级哈希值,将第l级查询数组中所述第l级哈希值对应的查询位置设置为有效查询值;
11、其中,对于同一存储数据,所述存储数据对应的第l1级哈希值与第l2级哈希值不完全相同,l1,l2∈{li|1≤li≤l0,li∈z},l0≤lmax,lmax为查询数组的总级数。
12、可选地,所述根据各所述第l级哈希值在所述第l级查询数组中对应的查询位置,判断所述待查询数据是否必不存在于数据库中,包括:
13、若各所述第l级哈希值在所述第l级查询数组中对应的查询位置中,存在取值为无效查询值的查询位置,确定所述待查询数据必不存在于所述数据库中;
14、否则,确定无法判断所述待查询数据是否必不存在于所述数据库中。
15、作为一种可选的实施方式,任意两个级别对应的预设哈希函数不同。
16、作为另一种可选的实施方式,对同一目标数据,所述目标数据在不同级别对应的函数输入值不同;其中,所述目标数据对应的第l级哈希值根据所述目标数据对应的第l级函数输入值确定;
17、所述目标数据为所述待查询数据或所述存储数据。
18、更进一步地,作为一种可选的实施方式,任意两个级别对应的预设哈希函数相同;
19、对于同一预设哈希函数,所述目标数据对应的第1级函数输入值为所述目标数据;所述目标数据对应的非第1级函数输入值为所述目标数据对应的上一级哈希值。
20、更进一步地,作为另一种可选的实施方式,任意两个级别对应的预设哈希函数相同;
21、对于同一预设哈希函数,所述目标数据对应的第l级输入值通过对所述目标数据进行代数变换得到,任意两个级别对应的代数变换规则不同。
22、可选地,所述根据所述数据库中的数据量确定各级对应的预设哈希函数、查询数组的总级数、各级查询数组的长度,具体包括:
23、确定所述数据库中当前存储的第一数据量,以及上一次确定所述数据库中存储的第二数据量;
24、若所述第一数据量与所述第二数据量的差值小于预设第一增量阈值,则增加所述总级数;
25、若所述第一数据量与所述第二数据量的差值大于等于所述预设第一增量阈值,则增加所述长度;
26、所述方法还包括:
27、若增加了所述长度,则增加预设哈希函数的数量。
28、可选地,若本次确定的总级数相比于上一次确定的总级数增加,则所述总级数的增加量根据所述查询数组级数增加前的总级数确定;
29、更进一步可选地,所述总级数的增加量满足如下关系:
30、
31、其中,△l为所述总级数的增加量,l0为所述查询数组级数增加前的总级数;
32、可选地,若本次确定的长度相比于上一次确定的长度增加,则所述长度的增加量根据所述查询数组长度增加前的长度、所述第一数据量和所述查询数组长度增加后的所述预设哈希函数的数量确定。
33、更进一步可选地,所述长度增加量满足如下关系:
34、
35、其中,△m为所述长度增加量,n′为所述第一数据量,k′为所述查询数组的长度增加后的所述预设哈希函数的数量,m0为所述查询数组长度增加前的长度;
36、每次增加的预设哈希函数hash(x)为:
37、hash(x)=x mod m0
38、其中,x为所述待查询数据或所述存储数据。
39、可选地,所述预设第一增量阈值根据设备硬件性能和所述第一数据量中至少一项确定。
40、可选地,所述确定不满足查询结束条件,包括:
41、确定各所述第l级哈希值在所述第l级查询数组中对应的查询位置中均属于标志查询位置,确定不满足查询结束条件;其中,所述标志查询位置为,在第l级标志数组中对应的标志位置为有效标志值的查询位置;
42、其中,各级标志数组通过如下方式确定:
43、确定各级标志数组,并将标志数组新增的标志位置设置为无效标志值,其中所述第l级查询数组中的各查询位置分别唯一对应所述第l级标志数组中的一个标志位置;
44、对所述数据库中的任一存储数据,在对任一所述第l级哈希值,将第l级查询数组中所述第l级哈希值对应的查询位置设置为有效查询值之后,确定所述第l级不为所述存储数据对应的最后一级l0,则将所述第l级哈希值对应的标志位置设置为有效标志值;
45、其中,通过如下方式确定任一存储数据对应的最后一级l0:
46、选择参与确定对应第l级哈希值的所有第l级映射存储数据中的至少部分存储数据为第l级结束映射存储数据;其中l起始值为1;第1级映射存储数据为所述数据库中的所有存储数据;
47、对所述第l级结束映射存储数据,确定第l级为所述结束映射存储数据对应的最后一级l0;若所述第l级不为最后一级lmax,将非第l级结束映射存储数据的第l级映射存储数据作为下一级映射存储数据,令l加1,并返回选择参与确定对应第l级哈希值的所有第l级映射存储数据中的至少部分存储数据为第l级结束映射存储数据的步骤。
48、可选地,所述查询数组为位数组。
49、可选地,所述标志数组为位数组。
50、基于同一发明构思,本发明实施例还提供了一种数据预查询装置,包括:
51、设置单元,用于根据数据库中的数据量确定各级对应的预设哈希函数、查询数组的总级数、各级查询数组的长度,并将查询数组新增的查询位置设置为无效查询值;对所述数据库中的任一存储数据,从第一级开始直至所述存储数据对应的最后一级l0逐级执行如下步骤,以设置所述存储数据在各级查询数组中分别对应的多个查询位置:对任一第l级预设哈希函数,基于所述第l级预设哈希函数确定所述存储数据对应的第l级哈希值;所述第l级预设哈希函数为多个;对任一所述第l级哈希值,将第l级查询数组中所述第l级哈希值对应的查询位置设置为有效查询值;
52、预查询单元,用于对任一所述第l级预设哈希函数,确定待查询数据对应的第l级哈希值;l起始值为1;根据各所述第l级哈希值在所述第l级查询数组中对应的查询位置,判断所述待查询数据是否必不存在于所述数据库中;若无法判断所述待查询数据必不存在于所述数据库中,且确定不满足查询结束条件,则令l加1,并返回所述对任一所述第l级预设哈希函数,确定所述待查询数据对应的第l级哈希值的步骤;
53、其中,对于同一存储数据,所述存储数据对应的第l1级哈希值与第l2级哈希值不完全相同,l1,l2∈{li|1≤li≤l0,li∈z},l0≤lmax,lmax为查询数组的总级数。
54、基于同一发明构思,本发明实施例还提供了一种电子设备,包括:处理器和用于存储所述处理器可执行指令的存储器;
55、其中,所述处理器被配置为执行所述指令,以实现所述的数据预查询方法。
56、基于同一发明构思,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行所述的数据预查询方法。
57、本发明有益效果如下:
58、本发明实施例提供的数据预查询方法、装置、设备及计算机可读存储介质,通过据当前数据库中存储数据量,在适应性地调整查询数组的长度时,与不进行查询数组长度调整的布隆过滤器相比,可以令存储数据在当前级别上查询数组中的哈希映射位置更加稀疏,以降低查询过程中待查询数据与存储数据之间产生哈希冲突的概率,降低对待查询数据的预查询误判率;在适应性地增加查询数组的总级数时,通过更多级别的查询数组中同一存储数据的不同哈希映射位置,来从宏观角度改变各存储数据的哈希映射的位置分布,使得不存在于所述数据库中的待查询数据在多级哈希映射以进行预查询的过程中,因难以同时在多个级别的查询数组中与存储数据均发生哈希冲突,而被筛选出来给出其必不存在于所述数据库中的结论,也能够降低对待查询数据的预查询误判率。从而有效地提高了对待查询数据的预查询效率。