一种分布式检索方法及装置与流程

文档序号:11407178阅读:210来源:国知局
一种分布式检索方法及装置与流程

本发明涉及信息检索领域,尤其涉及一种分布式检索方法及装置。



背景技术:

相似信息识别技术目前被广泛使用,一种典型应用场景是在海量信息中检测相似信息的存在,例如在搜索引擎爬虫系统中进行网页去重;另一种典型应用场景是用来检测相似信息出现的频度,例如在反垃圾系统中进行相似邮件数量的检测。

simhash是一种较为常见的重复信息识别算法,simhash可以将文档等信息转换成一个64位的字节,本文称为指纹;如果两个信息所计算出的指纹的海明距离<n(根据经验这个n一般取值为3),就认为两个信息相似;其中,海明距离是指两个字节(比如所述指纹)的对应比特取值不同的比特个数。比如指纹fp1和指纹fp2除了第27位、第55位上的比特取值不同,其它62位上的比特取值都相同,则认为指纹fp1是fp2的相似指纹,fp2也是fp1的相似指纹。

目前,在分布式系统中使用simhash算法有以下两种方案:

第一种方案:在存储信息或检索信息时,利用simhash计算待存储信息或待检索信息的64位指纹;随机从多台服务器中选取一台服务器;将计算出的指纹发往所选取的服务器;服务器收到指纹后,使用simhash单机方案存储所述待存储信息的指纹,或者检索所述待检索信息的指纹的相似指纹并对相似指纹进行计数。

第一种方案的主要缺陷在于:相似指纹的计数不准确,存储时将待存储信息的指纹随机分布到n台服务器中的某一台服务器上,因此检索结果是一台服务器中相似指纹的计数值。这样所得到的相似指纹的计数不稳定,在 不同服务器上检索会得到不同的检索结果。

第二种方案:将指纹存储在多个服务器上;在检索时向多个服务器发送待检索信息的指纹;每个服务器分别检索待检索信息的指纹的相似指纹并计数;由于存储和检索均分布到多个服务器完成,因此有可能出现重复计数的问题;比如两个服务器中都保存有上文的指纹fp1,如果这两个服务器都收到待检索信息的指纹fp2,则都会对相似指纹fp1进行计数。为了进行计数去重,第二种方案中,进行检索的服务器需要将相似指纹和计数值返回给发起检索的客户端,由客户端通过汇总、比较相似指纹进行去重。

上述方案的主要缺陷在于:需要额外的去重操作,处理速度慢。如果不同服务器查到的相似指纹是重复的,不同服务器发送给客户端相同的相似指纹将会浪费网络流量。



技术实现要素:

本申请提供了一种分布式检索方法及装置,可以解决在分布式系统中进行相似信息识别时计数不稳定、需要额外的计数去重操作的问题。

本申请采用如下技术方案。

一种分布式检索方法,应用于服务器,包括:

收到检索请求后,根据所述检索请求中携带的待检索信息的指纹,在所保存的指纹中查找相似指纹;

对于查找到的每个相似指纹,分别进行如下操作:将该相似指纹的分段和所述待检索信息的指纹的分段按照预定顺序依次对应比较,当找到第一个完全相同的分段后停止比较;将该完全相同的分段的标识和所述检索请求中携带的标识进行比较,如果相同则在计数结果中包含该相似指纹;其中,分段的划分以及每个分段的标识根据第一预定规则确定;

返回所述计数结果。

可选地,所述的方法还包括:

如果所述完全相同的分段的标识和所述检索请求中携带的标识不同,则不在所述计数结果中包含相应的相似指纹。

可选地,所述分段的标识为所述分段的序号。

可选地,所述根据所述检索请求中携带的待检索信息的指纹,在所保存的指纹中查找相似指纹包括:

根据第一预定规则,从所述检索请求携带的所述待检索信息的指纹中,获取所述检索请求携带的标识对应的分段;

在所保存的分段中,查找与所获取的分段完全相同的分段;其中,所保存的每个分段至少属于所保存的指纹中的一种指纹;

在所保存的指纹中,筛选出所查找到的分段所对应的指纹,将筛选出的指纹分别和所述待检索信息的指纹进行比较,找出相似指纹。

可选地,所述在所保存的指纹中,筛选出所查找到的分段所对应的指纹包括:

以所查找到的分段的值作为键名查找对应的键值;一个分段的值所对应的的键值为所保存的指纹中所有包含该分段的指纹。

可选地,所述在所保存的分段中,查找与所获取的分段完全相同的分段包括:

在所保存的、以所述检索请求携带的标识作为索引的分段中,查找与所获取的分段完全相同的分段。

一种分布式检索方法,应用于客户端,包括:

按照第二预定规则分别确定每个分段对应的服务器;

分别向每个分段对应的服务器发送检索请求;所述检索请求中携带所述待检索信息的指纹,以及对应于该服务器的分段的标识;其中,分段的划分以及每个分段的标识根据第一预定规则确定;

将服务器针对所述检索请求返回的计数结果相加,得到检索结果。

可选地,所述分段的标识为所述分段的序号。

可选地,所述按照第二预定规则分别确定每个分段对应的服务器包括:

将所述待检索信息的指纹按照所述第一预定规则划分为k个分段;

分别使用每个分段的值对服务器的个数进行哈希运算,根据运算结果确定该分段对应的服务器。

一种分布式检索装置,设置于服务器,包括:

相似指纹查找模块,用于收到检索请求后,根据所述检索请求中携带的待检索信息的指纹,在所保存的指纹中查找相似指纹;

计数模块,用于对于查找到的每个相似指纹,分别进行如下操作:将该相似指纹的分段和所述待检索信息的指纹的分段按照预定顺序依次对应比较,当找到第一个完全相同的分段后停止比较;将该完全相同的分段的标识和所述检索请求中携带的标识进行比较,如果相同则在计数结果中包含该相似指纹;其中,分段的划分以及每个分段的标识根据第一预定规则确定;

响应模块,用于返回所述计数结果。

可选地,所述计数模块还用于当所述完全相同的分段的标识和所述检索请求中携带的标识不同时,不在所述计数结果中包含相应的相似指纹。

可选地,所述分段的标识为所述分段的序号。

可选地,所述相似指纹查找模块包括:

获取单元,用于根据第一预定规则,从所述检索请求携带的所述待检索信息的指纹中,获取所述检索请求携带的标识对应的分段;

分段比较单元,用于在所保存的分段中,查找与所获取的分段完全相同的分段;其中,所保存的每个分段至少属于所保存的指纹中的一种指纹;

指纹比较单元,用于在所保存的指纹中,筛选出所查找到的分段所对应的指纹,将筛选出的指纹分别和所述待检索信息的指纹进行比较,找出相似指纹。

可选地,所述指纹比较单元在所保存的指纹中,筛选出所查找到的分段所对应的指纹包括:

所述指纹比较单元以所查找到的分段的值作为键名查找对应的键值;一个分段的值所对应的键值为所保存的指纹中所有包含该分段的指纹。

可选地,所述分段比较单元在所保存的分段中,查找与所获取的分段完全相同的分段包括:

所述分段比较单元在所保存的、以所述检索请求携带的标识作为索引的分段中,查找与所获取的分段完全相同的分段。

一种分布式检索装置,设置于客户端,包括:

确定模块,用于按照第二预定规则分别确定每个分段对应的服务器;

请求模块,用于分别向每个分段对应的服务器发送检索请求;所述检索请求中携带所述待检索信息的指纹,以及对应于该服务器的分段的标识;其中,分段的划分以及每个分段的标识根据第一预定规则确定;

计算模块,用于将服务器针对所述检索请求返回的计数结果相加,得到检索结果。

可选地,所述分段的标识为所述分段的序号。

可选地,所述确定模块包括:

划分单元,用于将所述待检索信息的指纹按照所述第一预定规则划分为k个分段;

哈希运算单元,用于分别使用每个分段的值对服务器的个数进行哈希运算,根据运算结果确定该分段对应的服务器。

本申请包括以下优点:。

本申请至少一个备选方案中,检索可以在多个服务器进行,因此检索结果更加全面,相对单台服务器检索的情况,检索结果较为稳定和准确。

本申请至少一个备选方案中,服务器在对相似指纹计数时已经进行了去重处理;因此服务器可以只返回计数结果给客户端,客户端将所有服务器返回的计数结果求和即可得到检索结果,处理速度快,而且节省了网络流量。即使客户端要求获取相似指纹的具体数据,由于服务器已经进行了去重,因此可以避免重复发送同样的相似指纹,也减少了不必要的网络流量。

本申请至少一个备选方案中,将指纹划分为多个分段后映射到不同服务 器上进行存储;这样检索时可以先通过比较分段进行初步筛选,然后根据筛选结果再检索相似指纹,加快了处理速度。该备选方案的一种实施方式中,服务器还可以在保存分段时以标识作为索引,在检索时可以只比较以检索请求所携带的标识作为索引的分段,减少了比较次数,进一步加快了处理速度。

当然,实施本申请的任一产品必不一定需要同时达到以上所述的所有优点。

附图说明

图1为实施例一的分布式检索方法的流程示意图;

图2为实施例二的分布式检索方法的流程示意图;

图3为实施例三的分布式检索装置的示意图;

图4为实施例三中确定模块的示意图;

图5为实施例四的分布式检索装置的示意图;

图6为实施例四中模块的示意图。

具体实施方式

下面将结合附图及实施例对本申请的技术方案进行更详细的说明。

需要说明的是,如果不冲突,本申请实施例以及实施例中的各个特征可以相互结合,均在本申请的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

在一个典型的配置中,客户端或认证系统的计算设备可包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存(memory)。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。内存可能包括模块1,模块2,……,模块n(n为大于2的整数)。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom),快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

实施例一、一种分布式检索方法,应用于服务器,如图1所示,包括步骤s110~s130。

s110、收到检索请求后,根据所述检索请求中携带的待检索信息的指纹,在所保存的指纹中查找相似指纹;

s120、对于查找到的每个相似指纹,分别进行如下操作:将该相似指纹的分段和所述待检索信息的指纹的分段按照预定顺序依次对应比较,当找到第一个完全相同的分段后停止比较;将该完全相同的分段的标识和所述检索请求中携带的标识进行比较,如果相同则在计数结果中包含该相似指纹;其中,分段的划分以及每个分段的标识根据第一预定规则确定;

s130、返回所述计数结果。

本实施例中,两个分段完全相同是指这两个分段的每一位比特都对应相同,比如第一位都是“1”、第二位都是“0”,以此类推;也就是说,这两个分段的值相同。

本实施例中,步骤s120中还可以包括:如果所述完全相同的分段的标识和所述检索请求中携带的标识不同,则可以不在所述计数结果中包含相应的相似指纹,比如直接忽略该相似指纹。

本实施例中,所返回的计数结果根据场景、需求等条件可以设置成不同 含义,比如存在以下两种含义:

第一种含义,计数结果表示所有包含在计数结果中的相似指纹在所述服务器中的计数值的总和;

由于同一种指纹有可能多次出现,比如在垃圾邮件的场景中,假设一封相同内容的邮件被多次发送,则可能发生将该邮件的指纹多次存储到同一台服务器中的情况(即这一种指纹有多个)。为了节省存储空间,服务器不会反复存储相同的指纹,而是对于一种指纹只存储一次,再要存储该种指纹时只增加该指纹的计数值;服务器中针对所保存的每种指纹,还保存了对应的计数值(相当于每种指纹在本服务器上的个数或者存储次数);指纹和其计数值可以但不限于保存为指纹表的形式。

当计数结果为第一种含义时,所述在计数结果中包含该相似指纹可以是指:将计数结果加上该相似指纹的计数值(可以但不限于从指纹表中查到)。在计数结果中不包含该相似指纹可以是指:不增加计数结果。相应地,对某一种指纹进行计数是指将计数结果加上该种指纹对应的计数值。

第二种含义,计数结果表示所有包含在计数结果中的相似指纹的种类数;比如对指纹fp1进行检索的服务器中存在五种指纹:fp2、fp3、fp4、fp5,fp6;假设检索请求中携带的标识为1,fp2、fp3、fp4、fp5,fp6与fp1第一个完全相同的分段的标识均为1,则计数结果为5;假设检索请求中携带的标识为2,只有fp3与fp1第一个完全相同的分段的标识为2,则计数结果为1;以此类推。

当计数结果为第二种含义时,所述在计数结果中包含该相似指纹可以是指:将计数结果加1。在计数结果中不包含该相似指纹可以是指:不增加计数结果。相应地,对某一种指纹进行计数是指将计数结果加上1。

上述两种含义中,“同一种指纹”是指每一位都对应相同的指纹;内容完全相同的信息采用同一种算法计算出的指纹就属于同一种指纹。可见,第一种含义的计数结果统计的是去重后,服务器中相似指纹的个数,第二种含义的计数结果统计的是去重后、服务器中相似指纹的种类数。

本实施例中,如果服务器收到两个或两个以上携带相同指纹的检索请求 (携带的标识不同)、或者收到一个检索请求中携带两个或两个以上标识时,可以合并处理。比如一个检索请求携带指纹fp2,携带两个标识,所述合并处理具体为:在步骤s210中,根据指纹fp2查找相似指纹;在步骤s220中,依次对应比较分段时,只要一个相似指纹中,和fp2完全相同的分段的标识和携带fp2的检索请求中携带的任一个标识相同,则在计数结果中包含该相似指纹,如果和携带fp2的检索请求中携带的任一个标识都不同则不在计数结果中包含该相似指纹。两个检索请求都携带指纹fp2,但携带不同标识的情况类似。

当然,也可以针对携带相同指纹的不同检索请求分别进行上述步骤s210~s230,或者将携带两个或两个以上标识的检索请求视为两个检索请求分别进行上述步骤s210~s230。

本实施例的一种备选方案中,所述第一预定规则可以用于指示所述指纹的分段数量k以及每个分段的标识;其中,k为大于或等于2、小于或等于指纹的位数的整数,对于64位的指纹,k优选为4。所述第一预定规则可以预存在所述客户端中,每个客户端和服务器所用的第一预定规则是一致的。

其它备选方案中,所述第一预定规则也可以为其它形式,比如通过指示每个分段的起始位,来间接指示分段数k;再比如通过给定标识的命名规则,来指示每个分段的标识。

本实施例的一种备选方案中,所述第一预定规则还可以用于指示划分的方式,比如均分或指定每个分段的长度。一个示例中,指纹为64位,所述第一预定规则是将指纹均分为4个分段,每个分段16位。另一个示例中,也可以将指纹分成不等长的分段。在其它备选方案中,也可以默认为均分(此时指纹的位数除以分段数k得到的结果需要是整数),而不需要再用所述第一预定规则指示划分方式。

本实施例中,属于同一个相似信息检索系统或提供同一个相似信息检索服务的多个服务器所使用的第一预定规则相同。

本实施例的一种备选方案中,所述分段的标识可以但不限于为分段的序号。比如将64位的指纹划分为4个分段,则这4个分段的标识从左到右可 以依次为1、2、3、4。所述分段的标识也可以根据第一预定规则设置为其它编号或序列,在一个指纹中,分段和标识一一对应即可;比如上述4个分段的标识从左到右也可以依次为a、b、c、d。

本实施例的一种备选方案中,查找相似指纹的算法可以但不限于采用simhash算法,通过海明距离来判断是否相似;在其它备选方案中,也可以采用其它相似信息识别算法进行查找。

本实施例的一种备选方案中,所述根据所述检索请求中携带的待检索信息的指纹,在所保存的指纹中查找相似指纹包括:

所述根据所述检索请求中携带的待检索信息的指纹,在所保存的指纹中查找相似指纹包括:

根据第一预定规则,从所述检索请求携带的所述待检索信息的指纹中,获取所述检索请求携带的标识对应的分段;

在所保存的分段中,查找与所获取的分段完全相同的分段;其中,所保存的每个分段至少属于所保存的指纹中的一种指纹;

在所保存的指纹中,筛选出所查找到的分段所对应的指纹,将筛选出的指纹分别和所述待检索信息的指纹进行比较,找出相似指纹。

本备选方案中,所述服务器中除了保存指纹以外,还保存指纹中至少一个分段;该分段可以是由客户端发送存储请求时和待存储的指纹一起发送给服务器,也可以由服务器根据存储请求中携带的分段的标识,从待存储的指纹中自行获取。相应地,所述客户端在发送待存储信息的指纹给服务器时,可以发送按照所述第一预定规则得到的分段的标识,或直接发送分段给服务器;并且客户端可以按照所述第二预定规则确定每个分段对应的服务器,来将分段、或分段的标识发送给对应的服务器。

本备选方案中,所述服务器中可以对所有保存的指纹都保存该指纹至少一个分段,也可以只对部分指纹保存分段。其它备选方案中,也可以不保存指纹的分段,只保存指纹本身。

本备选方案相当于分两步进行查找,先筛选出与待查询信息的指纹具有相同分段的指纹,再在其中查找相似指纹,这样缩小了查找相似指纹时所需 要比较的指纹,因此可以提高查找的效率。

本备选方案中,所述指纹和分段对应保存的一种实施方式可以为:将分段值作为键名(key),将所有包含该分段的指纹作为对应的键值(value);可见,一个分段的值对应的键值是一种或多种指纹,键值中的一种或多种指纹即筛选出的分段所对应的指纹。

本实施方式中,所述在所保存的指纹中,筛选出所查找到的分段所对应的指纹可以包括:

以所查找到的分段的值作为键名查找对应的键值;一个分段的值所对应的键值为所保存的指纹中所有包含该分段的指纹。

本实施方式中,值相同的分段在一个服务器中只保存一个,包括该分段的一种或多种指纹都对应于该分段保存。假设对于64位的指纹均分为4个分段,服务器中所保存的一个16位分段的值为“1010101010101010”,则该服务器中所保存的、包含“1010101010101010”这一分段的指纹都可以作为该分段的键值。

优选地,还可以将分段按照标识归类保存,比如标识为“1”的分段都以“1”作为索引进行保存,以此类推。一个分段的值所对应的键值中的指纹不仅要包含该分段,而且该分段在该指纹中的标识和该分段的索引是相同的。比如分段的标识为分段的序号,一个索引为“1”的16位分段的值为“1010101010101010”,则该分段对应的键值中每种指纹的第一个分段的值都是“1010101010101010”;如果一种指纹的第二/三/四个分段的值为“1010101010101010”,则该指纹不属于该分段的键值。这样在筛选与待查询信息的指纹具有相同分段的指纹时,筛选出的指纹更少,进一步提高了查找的效率。

其它实施方式中也可以用别的方式建立和保存分段和指纹的对应关系,比如可以将分段和所属指纹一一对应保存。

本备选方案的一种实施方式中,所述服务器还可以根据分段的标识分类保存分段,即:所述分段保存时以分段的标识作为索引;比如将标识为1的分段保存在一起,索引为“1”;将标识为“2”的分段保存在一起,索引为 “2”,以此类推;

本实施方式中,所述在所保存的分段中,查找与所获取的分段完全相同的分段可以包括:

在所保存的、以所述检索请求携带的标识作为索引的分段中,查找与所获取的分段完全相同的分段。

该实施方式可以缩小查找分段的范围,只有和待查询信息的指纹对应的分段相同的指纹,才进一步比较是否为相似指纹,这样可以进一步提高查找相似指纹的速度。

本实施例的一种备选方案中,将该相似指纹的分段和所述待检索信息的指纹的分段按照预定顺序依次对应比较时,可以先将相似指纹和待检索信息的指纹划分为分段,然后依次比较;比如针对64位的指纹fp1和fp2,各自划分为4段,得到fp1的分段fp1-1、fp1-2、fp1-3、fp1-4,和fp2的分段fp2-1、fp2-2、fp2-3、fp2-4;假设预定顺序为从左到右,则先比较fp1-1和fp2-1,如果完全相同则停止比较,也就是不再对该相似指纹进行分段对应比较;不完全相同则比较fp1-2和fp2-2;以此类推。也可以边划分边比较,比如假设预定顺序为从左到右,按16位为一个分段,则分别取fp1、fp2中的第1~16位进行比较,如果完全相同则停止比较,如果不完全相同则分别取fp1、fp2中的第17~32位进行比较,以此类推。

本实施例的一种备选方案中,如果客户端还要求返回相似指纹本身,则只发送进行了计数的相似指纹(即:在计数结果中包含的相似指纹),没进行计数的相似指纹(即:未在计数结果中包含的相似指纹)不发送。

实施例二、一种分布式检索方法,应用于客户端,如图2所示,包括步骤s210~s230。

s210、按照第二预定规则分别确定每个分段对应的服务器;

s220、分别向每个分段对应的服务器发送检索请求;所述检索请求中携带所述待检索信息的指纹,以及对应于该服务器的分段的标识;其中,分段的划分以及每个分段的标识根据第一预定规则确定;

s230、将服务器针对所述检索请求返回的计数结果相加,得到检索结果。

本实施例中,同一种指纹时存储在多台服务器上;当多台服务器上存储同一种指纹时,可以也根据所述第一预定规则确定指纹不同分段对应的服务器,服务器存储指纹时也保存对应的分段或标识。如果一种指纹只存储在一台服务器上,也可以适用本实施例的方法,但这种情况下对于该指纹只可能进行一次计数,所以不存在计数去重的问题。本实施例的一种备选方案中,所述待检索信息的指纹可以但不限于通过simhash算法计算得到;其它能够计算出指纹(或称为特征字)的重复信息识别算法也可以适用。该计算可以由客户端进行,或者也可以由其它设备计算后发送给客户端。

本实施例中,所述第一预定规则的细节参见实施例一;所述客户端使用的第一预定规则和服务器相同。

本实施例的一种备选方案中,所述分段的标识可以但不限于为分段的序号。比如将64位的指纹划分为4个分段,则这4个分段的标识从左到右可以依次为1、2、3、4。所述分段的标识也可以根据第一预定规则设置为其它编号或序列,在一个指纹中,分段和标识一一对应即可;比如上述4个分段的标识从左到右也可以依次为a、b、c、d。

本实施例的一种备选方案中,按照第二预定规则分别确定每个分段对应的服务器可以包括:

将所述待检索信息的指纹按照所述第一预定规则划分为k个分段;

分别使用每个分段的值对服务器的个数进行hash(哈希)运算,根据运算结果确定该分段对应的服务器。

本备选方案中,k个分段的哈希结果共有j个,j的范围是大于或等于1、小于或等于k。也就是说,分段可能和服务器一一对应,也可能两个或两个以上的分段对应于同一个服务器。由于分段的标识和分段是一一对应的,所以分段和服务器的对应关系,就相当于分段的标识和服务器的对应关系。

其它备选方案中,所述第二预定规则也可以是其它形式;比如按照其它计算方法或规则得到每个分段对应的服务器,再比如根据客户端中预存的分 段和服务器标识的对应关系确定每个分段对应的服务器(不同客户端中预存的对应关系可以不同,这样可以使检索压力分摊到不同服务器上),再比如根据分段的标识来确定对应的服务器。在确定分段对应的服务器时,如果不需要用到分段本身,客户端可以不对指纹进行分段操作,只要获取到分段的标识即可。

本实施例的一种备选方案中,如果所确定的对应的服务器个数小于k,即存在两个或两个以上的分段对应于同一个服务器的情况,则步骤s120中,在向对应于两个或两个以上分段的服务器发送检索请求时,可以分成两个检索请求发送,也可以将两个分段的标识放在一个检索请求中发送。

本实施例的一种备选方案中,所述客户端如果需要相似指纹的具体内容,还可以在发送标识和待检索信息的指纹给服务器时,要求服务器返回进行计数的相似指纹。

下面用一个具体的例子说明上述实施例;本例子中,分段数k为4,分段方式为均分;采用simhash获得64位指纹。假设指纹fp1和fp2为相似指纹,仅第27位、第55位不同。分段的标识为分段的序号,四个分段的标识从左到右依次为1、2、3、4。预定顺序为从左到右。

存储阶段:

客户端将待存储信息的指纹fp1划分为4个分段fp1-1、fp1-2、fp1-3、fp1-4,分段的标识分别为1、2、3、4;根据每个分段进行hash运算,根据hash运算的结果确定四个分段分别映射到服务器a、服务器b、服务器c和服务器d。客户端将带有指纹fp1和标识1的存储请求发往服务器a,将带有指纹fp1和标识2的存储请求发往服务器b,将带有指纹fp1和标识3的存储请求发往服务器c,将带有指纹fp1和标识4的存储请求发往服务器d。

以服务器a为例,首先根据指纹fp1的第一个分段fp1-1在以标识1为索引的集合中查找是否有相同分段,如果没有,则将分段fp1-1保存在以标识1为索引的集合中。该集合的形式可以但不限于为分段表,服务器a 将标识为1的分段都保存在该分段表中。

服务器a还可以将fp1-1的值作为key,将指纹fp1存储到以fp1-1的值作为key所对应的value中;该value的形式可以但不限于为指纹列表。

如果服务器a之后又收到带有指纹fp3的存储请求,且存储请求中携带的标识为1,假设指纹fp3的第一个分段fp3-1和fp1-1完全相同,则服务器a根据fp3-1在以标识1为索引的分段表中查找是否有相同分段时,将会找到fp1-1,则服务器a将fp3也添加到以fp1-1的值作为key所对应的value中,即加入到以fp1-1的值作为key所对应的指纹列表中。

其它服务器的做法类似,不再赘述。

需要说明的是,即使不采用本例子中存储阶段的做法,比如直接存储指纹本身,也同样能够在服务器上实现检索时的计数去重。采用本例子中给出的存储方法,能够提高检索相似指纹时的效率,但对计数去重没有影响。

检索阶段:

客户端将待检索信息的指纹fp2划分为4个分段fp2-1、fp2-2、fp2-3、fp2-4,标识分别为1、2、3、4;根据每个分段进行hash运算,根据hash运算的结果确定四个分段分别映射到四个服务器,假设也正好是服务器a、服务器b、服务器c和服务器d。客户端将带有指纹fp2和标识1的检索请求发往服务器a,将带有指纹fp2和标识2的检索请求发往服务器b,将带有指纹fp2和标识3的检索请求发往服务器c,将带有指纹fp2和标识4的检索请求发往服务器d。

以服务器c为例,在以标识3为索引的分段表中,查找和fp2-3完全相同的分段,将会查找到fp1-3(或者是和fp1-3完全相同的分段,这里假设为fp1-3);在以fp1-3的值为key对应的指纹表中查找fp2的相似指纹,得到包含指纹fp1在内的一种或多种指纹。首先比较fp1-1和fp2-1,发现完全相同,但该分段的标识1不同于检索请求中的标识3,因此服务器c不在计数结果中包含指纹fp1。

服务器a也进会行上述类似操作,但不同的是标识1和检索请求中的标识1相同,因此服务器a会在计数结果中包含指纹fp1。

由于fp1和fp2的第27位、55位不同,即fp1-2和fp2-2不同,fp1-4和fp2-4不同,因此服务器b和服务器d在相应分段表中是查找不到相同的分段的,因此得到的相似指纹中没有fp1。

由此可见,通过上述方案,服务器端可以实现计数去重。

在本例子中,假设标识为3的存储请求、检索请求都改为发送给服务器a,则服务器a在根据fp2检索相似指纹时会筛选出两次fp1,但由于第一个完全相同的分段的标识为1,因此对于标识为3的检索请求,并不在计数结果中包含fp1,所以在对fp1计数时也只会计数一次。可见,即使携带相同待检索信息的指纹、不同标识的多个检索请求发到同一个服务器,也同样可以在服务器进行计数去重。

在本例子中,由于存储和检索时分段所遵循的规则相同、确定对应的服务器的规则也相同(根据分段的值进行哈希运算,根据哈希结果确定对应的服务器),所以携带fp1、标识1(或3)的存储请求、和携带fp2、标识1(或3)的检索请求会发到同一个服务器,避免了漏检的情况。

实施例三、一种分布式检索装置,设置于服务器,如图3所示,包括:

相似指纹查找模块31,用于收到检索请求后,根据所述检索请求中携带的待检索信息的指纹,在所保存的指纹中查找相似指纹;

计数模块32,用于对于查找到的每个相似指纹,分别进行如下操作:将该相似指纹的分段和所述待检索信息的指纹的分段按照预定顺序依次对应比较,当找到第一个完全相同的分段后停止比较;将该完全相同的分段的标识和所述检索请求中携带的标识进行比较,如果相同则在计数结果中包含该相似指纹;其中,分段的划分以及每个分段的标识根据第一预定规则确定;

响应模块33,用于返回所述计数结果。

其中,相似指纹查找模块31是以上所述装置中负责检索相似指纹的部分,可以是软件、硬件或两者的结合。

其中,计数模块32是以上所述装置中负责计数并进行计数去重的部分,可以是软件、硬件或两者的结合。

其中,响应模块33是以上所述装置中负责返回结果的部分,可以是软件、硬件或两者的结合。

本实施例的一种备选方案中,所述计数模块还可以用于当所述完全相同的分段的标识和所述检索请求中携带的标识不同时,不在所述计数结果中包含相应的相似指纹,比如直接忽略该相似指纹。

本实施例的一种备选方案中,所述分段的标识可以但不限于为所述分段的序号。

本实施例的一种备选方案中,所述相似指纹查找模块31如图4所示,可以包括:

获取单元311,用于根据第一预定规则,从所述检索请求携带的所述待检索信息的指纹中,获取所述检索请求携带的标识对应的分段;

分段比较单元312,用于在所保存的分段中,查找与所获取的分段完全相同的分段;其中,所保存的每个分段至少属于所保存的指纹中的一种指纹;

指纹比较单元313,用于在所保存的指纹中,筛选出所查找到的分段所对应的指纹,将筛选出的指纹分别和所述待检索信息的指纹进行比较,找出相似指纹。

其中,获取单元311是所述相似指纹查找模块31中负责获取待比较的分段的部分,可以是软件、硬件或两者的结合。

其中,分段比较单元312是所述相似指纹查找模块31中负责找到相同分段的部分,可以是软件、硬件或两者的结合。

其中,指纹比较单元313是所述相似指纹查找模块31中负责筛选出相似指纹的部分,可以是软件、硬件或两者的结合。

本实施例的一种备选方案中,所述指纹比较单元313在所保存的指纹中,筛选出所查找到的分段所对应的指纹包括:

所述指纹比较单元313以所查找到的分段的值作为键名查找对应的键值;一个分段的值所对应的键值为所保存的指纹中所有包含该分段的指纹。

本实施例的一种备选方案中,所述分段比较单元312在所保存的分段中,查找与所获取的分段完全相同的分段包括:

所述分段比较单元312在所保存的、以所述检索请求携带的标识作为索引的分段中,查找与所获取的分段完全相同的分段。

其它实施细节可参见实施例一。

实施例四、一种分布式检索装置,设置于客户端,如图5所示,包括:

确定模块41,用于按照第二预定规则分别确定每个分段对应的服务器;

请求模块42,用于分别向每个分段对应的服务器发送检索请求;所述检索请求中携带所述待检索信息的指纹,以及对应于该服务器的分段的标识;其中,分段的划分以及每个分段的标识根据第一预定规则确定;

计算模块43,用于将服务器针对所述检索请求返回的计数结果相加,得到检索结果。

其中,确定模块41是以上所述装置中负责确定分段的标识以及对应的服务器的部分,可以是软件、硬件或两者的结合。

其中,请求模块42是以上所述装置中负责发送检索请求的部分,可以是软件、硬件或两者的结合。

其中,计算模块43是以上所述装置中负责计算检索结果的部分,可以是软件、硬件或两者的结合。

本实施例的一种备选方案中,所述分段的标识可以但不限于为所述分段的序号。

本实施例的一种备选方案中,所述确定模块41如图6所示,可以包括:

划分单元411,用于将所述待检索信息的指纹按照所述第一预定规则划分为k个分段;

哈希运算单元412,用于分别使用每个分段的值对服务器的个数进行哈希运算,根据运算结果确定该分段对应的服务器。

其中,划分单元411是所述确定模块41中负责划分指纹的部分,可以是软件、硬件或两者的结合。所述划分单元411也可以设置在所述确定模块41中,哈希运算单元412使用划分单元411划分出的分段进行哈希运算。

其中,哈希运算单元412是所述确定模块41中负责进行哈希运算的部分,可以是软件、硬件或两者的结合。

其它实施细节可参见实施例二。

实施例五、一种分布式检索方法,包括实施例一中应用于服务器的方法和实施例二中应用于客户端的方法。

实施例六、一种分布式检索系统,包括实施例三中设置于服务器的装置和实施例四中设置于客户端的装置。

本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请不限制于任何特定形式的硬件和软件的结合。

当然,本申请还可有其他多种实施例,在不背离本申请精神及其实质的情况下,熟悉本领域的技术人员当可根据本申请作出各种相应的改变和变形,但这些相应的改变和变形都应属于本申请的权利要求的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1