1.本发明涉及数据查找领域,尤其涉及一种基于向量的数据比对方法、终端设备及存储介质。
背景技术:2.随着互联网、物联网和云数据产业以及大数据战略的加速落地,高需求数据处理性能计算以及数据处理要求也呈现增长趋势。随着gpu的更新换代和fpga芯片对数据的处理速度加快,快速查找对应运算结果的算法成为了一个提升速度的重点关注问题。
3.常见的数据结构中,链表、树、映射中key和value没有关联性,这样,必须查找所有的key来找到对应的value,随着数据集元素的增加,需求的存储空间也会增长,最终达到存储瓶颈,同时查找速度也会相应越来越慢。如公开号为cn107729577a的中国发明专利《一种基于多维哈希表的数据查找方法、终端设备及存储介质》中说明了基于多维哈希表的数据查找方法,但对大批量数据情况,哈希表占用空间仍然较大,对fpga这种既严格又紧缺的内存规划仍然不足。
技术实现要素:4.为了解决上述问题,本发明提出了一种基于向量的数据比对方法、终端设备及存储介质。
5.具体方案如下:
6.一种基于向量的数据比对方法,包括以下步骤:
7.s1:接收用于比对的数据,针对接收的每个数据,通过k种哈希算法分别进行哈希运算,得到对应的k个哈希向量,将k个哈希向量均通过格式归一化处理后,以格式归一化处理后的k个哈希向量为地址、地址中的值为特征值构建比对数据库;
8.s2:当接收到待比对数据时,通过k种哈希算法分别对待比对数据进行哈希运算,得到对应的k个哈希向量;将k个哈希向量均通过格式归一化处理后,以格式归一化处理后的k个哈希向量为地址,从比对数据库中查找对应地址的值是否均为特征值,如果是,判定待比对数据可能存在于比对数据库内;否则,判定待比对数据不可能存在于比对数据库内。
9.进一步的,哈希向量进行格式归一化处理的方法为:将哈希向量与格式特征码进行与运算,其中格式特征码的二进制格式中所有位均为1。
10.进一步的,格式特征码为16位的二进制数。
11.进一步的,比对数据库中包含2
16
个地址,且每个地址初始化设定为0。
12.进一步的,特征值为1。
13.进一步的,k的大小根据误判率p进行确定,当误判率p小于预设的阈值时,判定k的大小符合要求;
14.误判率p的计算公式为:
[0015][0016]
其中,e为自然底数,n表示接收的用于比对的数据的个数,l表示格式归一化处理后的哈希向量包括l个比特。
[0017]
进一步的,还包括:对判定可能存在于比对数据库内的待比对数据与接收的所有用于比对的数据进行一一比对。
[0018]
一种基于向量的数据比对终端设备,包括处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例上述的方法的步骤。
[0019]
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例上述的方法的步骤。
[0020]
本发明采用如上技术方案,能够在不损失查找速率的情况下,减少了数据内存占用率。
附图说明
[0021]
图1所示为本发明实施例一的流程图。
[0022]
图2所示为该实施例中比对数据库构建过程示意图。
具体实施方式
[0023]
为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。
[0024]
现结合附图和具体实施方式对本发明进一步说明。
[0025]
实施例一:
[0026]
本发明实施例提供了一种基于向量的数据比对方法,如图1所示,所述方法包括以下步骤:
[0027]
s1:接收用于比对的数据,针对接收的每个数据,通过k种哈希算法分别进行哈希运算,得到对应的k个哈希向量(一维向量),将k个哈希向量均通过格式归一化处理后,以格式归一化处理后的k个哈希向量为地址、地址中的值为特征值构建比对数据库。
[0028]
该实施例中用于比对的数据为加密后的密文,在其他实施例中也可以采用其他类型的数据,在此不做限定。
[0029]
该实施例中哈希向量进行格式归一化处理的方法为:将哈希向量与格式特征码进行与运算,其中格式特征码的二进制格式中所有位均为1。具体的,设定格式特征码为16位的二进制数,即“11111111 11111111”。
[0030]
由于上述的格式归一化处理可能造成不同哈希向量进行格式归一化后得到相同的结果,以使后续结果造成误判,因此为了提高本实施例方法的准确率,还需要对k的大小进行选择,该实施例中k的大小根据误判率p进行确定,当误判率p小于预设的阈值时,判定k的大小符合要求。阈值的大小该实施例中设定为万分之五,本领域技术人员可以根据实际需求对其进行调整。
[0031]
误判率p的计算公式为:
[0032][0033]
其中,e为自然底数,n表示接收的用于比对的数据的个数,l表示格式归一化处理后的哈希向量包括l个比特。
[0034]
很明显,l值太小,很快所有的空间被占满,导致查询任何值都反馈“可能存在”,起不到查询效果,l值的大小会直接影响到查询效果,l值越大其效果越好。
[0035]
特征值为一预设的固定值,该实施例中设定为1,在其他实施例中也可以设定为其他值,在此不做限定。
[0036]
基于上述的格式特征码,该实施例中设定比对数据库中包含2
16
个地址,且每个地址初始化设定为0,当根据接收到的用于比对的数据计算得到对应地址后,将对应地址中的值置1。
[0037]
哈希算法包括可以为:murmurhash、常用逻辑运算、数学运算等,该实施例中,设定k=8,则8种哈希算法分别为:
[0038]
设定变量:bitmap_mask=l、bitmap_shift1=5、bitmap_shift2=13;
[0039]
1)((d1&0xffffffff)》》dgst_shifts1)&bitmap_mask=v0;
[0040]
2)(((d1》》16)&0xffffffff)》》dgst_shifts1)&bitmap_mask=v1;
[0041]
3)((d1&0xffffffff)》》dgst_shifts2)&bitmap_mask=v2;
[0042]
4)(((d1》》16)&0xffffffff)》》dgst_shifts2)&bitmap_mask=v3;
[0043]
5)(d1^d1)&bitmap_mask=v4;
[0044]
6)(d1&d1)&bitmap_mask=v5;
[0045]
7)(d1|d1)&bitmap_mask=v6;
[0046]
8)(d1+d1)&bitmap_mask=v7;
[0047]
其中,d1表示进行哈希运算的数据,v0~v7表示8种哈希运算结果。
[0048]
s2:当接收到待比对数据时,通过k种哈希算法分别对待比对数据进行哈希运算,得到对应的k个哈希向量;将k个哈希向量均通过格式归一化处理后,以格式归一化处理后的k个哈希向量为地址,从比对数据库中查找对应地址的值是否均为特征值,如果是,判定待比对数据可能存在于比对数据库内;否则,判定待比对数据不可能存在于比对数据库内。
[0049]
由于哈希算法的碰撞性,通过上述步骤得到的结果为初步过滤结果,为了得到最终的准确结果,还需要将初步过滤结果即可能存在于比对数据库内的数据与接收的所有用于比对的数据进行一一比对来进行最终确认。
[0050]
下面以一个具体的实例进行说明。如图2所示中,假设接收到的用于比对的数据个数为3,分别为obj1、obj2、obj3,哈希算法的个数k=4,则每个数据均进行4次哈希运算,最后得到的4个格式归一化处理后的值作为地址(vector1、vector2、vector3、vector4),对应地址中的值设定为1,其他地址中的值初始化为0。
[0051]
本发明实施例本相比与现有技术占用了查找更少的存储空间(相对《一种基于多维哈希表的数据查找方法、终端设备及存储介质》专利,在不损失查找速率的情况下,减少了密文内存占用率最高达到32倍),并能更快速查找对应运算结果的数据的算法,能够跟上设备升级换代运算速度。本实施例方法可以应用到密码恢复装置中,密码遍历结果在批量
密文中比对查找,确定最终准确结果。
[0052]
在传统的密码恢复过程中,多数情况下我们得到十万数量级的条数密文,了解到密文的加密算法,通过正向遍历方式,构造遍历密码,密码通过已知的加密算法计算,得到已知密码的密文,再跟未知密码的十万级数量级的条数密文进行比对,在未知批量密文中找到已知密码的密文,则可确定该未知密文的密码是我们设置的已知密码。如果密码个数至少达到十亿数量级,这样密文比对查找频率就增加到十亿数量级以上,本实施例利用多个一维向量加上过滤后的少量密文映射方式比对查找算法的速度以及密文占用存储空间都有考虑,在实际应用中达到一定的效果。
[0053]
实施例二:
[0054]
本发明还提供一种基于向量的数据比对终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例一的上述方法实施例中的步骤。
[0055]
进一步地,作为一个可执行方案,所述基于向量的数据比对终端设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述基于向量的数据比对终端设备可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,上述基于向量的数据比对终端设备的组成结构仅仅是基于向量的数据比对终端设备的示例,并不构成对基于向量的数据比对终端设备的限定,可以包括比上述更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述基于向量的数据比对终端设备还可以包括输入输出设备、网络接入设备、总线等,本发明实施例对此不做限定。
[0056]
进一步地,作为一个可执行方案,所称处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述基于向量的数据比对终端设备的控制中心,利用各种接口和线路连接整个基于向量的数据比对终端设备的各个部分。
[0057]
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述基于向量的数据比对终端设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据手机的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
[0058]
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例上述方法的步骤。
[0059]
所述基于向量的数据比对终端设备集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指
令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)以及软件分发介质等。
[0060]
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。