发明内容
本发明提供一种生成索引文档ID的方法及装置,用于对索引文档进行编号,以便后续的处理。
根据本公开实施例的第一方面,提供一种生成索引文档ID的方法,包括:
接收由客户端发送来的文件;
存储所述文件的信息,所述文件的信息分布在至少一个服务器中,每个服务器有至少一个分表;
获取存储的所有分表的数量、各个所述分表的序号和循环处理的次数;
根据所述所有分表的数量、所述各个分表的序号和所述循环处理的次数,计算所述文件的索引文档ID。
在一个实施例中,所述根据所述所有分表的数量、所述各个分表的序号和所述循环处理的次数,计算所述文件的索引文档ID,包括:
根据以下公式计算索引文档ID:
ID=idxid×idstep+idflag,
其中,符号ID为所述索引文档ID,符号idxid为循环处理的次数,符号idstep为所有分表的数量,符号idflag为各个分表的序号;
所述符号idxid在每生产一个索引文档ID后增加一;
所述文件的索引文档ID的初始值为0,表示所述文件未被处理。
在一个实施例中,在生成所述索引文档ID之前,还包括:
根据哈希算法依此计算所述文件的哈希值;
根据所述哈希值将所述文件匹配到相对应的所述分表。
在一个实施例中,所述根据所述哈希值将所述文件匹配到相对应的所述分表,包括:
将所述哈希值的整个取值范围均等的划分为多个数值区间,所述多个数值区间的数量和所有所述分表的数量相同,且所述数值区间与所述分表一一对应;
将所述文件的哈希值在某一个数值区间段内的所有所述文件,匹配到同一个所述分表。
在一个实施例中,每个所述分表都拥有各自独立的所述循环处理的次数。
根据本公开实施例的第二方面,提供一种生成索引文档ID的装置,包括:
接收模块,用于接收由客户端发送来的文件;
存储模块,用于存储所述文件的信息,所述文件的信息分布在至少一个服务器中,每个服务器有至少一个分表;
获取模块,用于获取存储的所有分表的数量、各个所述分表的序号和循环处理的次数;
第一计算模块,用于根据所述所有分表的数量、所述各个分表的序号和所述循环处理的次数,计算所述文件的索引文档ID。
在一个实施例中,所述第一计算模块,包括:
计算子模块,用于根据以下公式计算索引文档ID:
ID=idxid×idstep+idflag,
其中,符号ID为所述索引文档ID,符号idxid为循环处理的次数,符号idstep为所有分表的数量,符号idflag为各个分表的序号;
自增子模块,用于所述符号idxid在每生产一个索引文档ID后增加一;
在一个实施例中,生成所述索引文档ID之前,所述装置还包括:
第二计算模块,用于根据哈希算法依此计算所述文件的哈希值;
匹配模块,用于根据所述哈希值将所述文件匹配到相对应的所述分表。
在一个实施例中,所述匹配模块,包括:
划分子模块,用于将所述哈希值的整个取值范围均等的划分为多个数值区间,所述多个数值区间的数量和所有所述分表的数量相同,且所述数值区间与所述分表一一对应;
匹配子模块,用于将所述文件的哈希值在某一个数值区间段内的所有所述文件,匹配到同一个所述分表。
本公开的实施例提供的技术方案可以包括以下有益效果:可将所有文件均匀的匹配到各个分表,生成的索引文档ID唯一且索引文档ID的数值是连续的,且可根据索引文档ID推断出该索引文档对应的具体分表及该索引文档是在该分表中的第多少条记录信息。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
在数据库中处理索引文档之前,需要对索引文档进行编号,即生成索引文档ID,以便在后续的处理过程中准确的区分出不同的索引文档。为了使各分表处理的索引数据量均衡,采用哈希算法对索引文档计算出该文件相应的哈希值,该哈希值是存在一个数值取值范围的。根据数据所拥有分表的数量,将该哈希值的取值范围均等的划分为若干哈希数值小区间,该小区间的数量与分表的数量相同,并每个分表分别对应一个哈希数值小区间,将落在同一个哈希数值小区间的文件匹配到同一个分表中。哈希算法的特性可以确保每个哈希数值区间所匹配到的哈希数值的数量均等性,即保证每个分表所对应的索引文档的数量均等性。根据本申请中的生成索引文档ID的计算公式,利用各个分表中循环处理的次数、所有分表的数量和各个分表的序号,计算出各个索引文档的索引文档ID。
图1是根据一示例性实施例示出的一种生成索引文档ID的方法流程图,如图1所示,该生成索引文档ID的方法,包括以下步骤S11-S14:
在步骤S11中,接收由客户端发送来的文件;
在步骤S12中,存储所述文件的信息,所述文件的信息分布在至少一个服务器中,每个服务器有至少一个分表;
在步骤S13中,获取存储的所有分表的数量、各个所述分表的序号和循环处理的次数;
在步骤S14中,根据所述所有分表的数量、所述各个分表的序号和所述循环处理的次数,计算所述文件的索引文档ID。
在一个实施例中,在服务器端,接收由用户端发送过来的文件。由于实际应用中可能会面对几十万甚至更多的客户端在同一个时间段内集中向服务器发送某一类信息。以服务器为例,该类信息的数据库可以拥有至少一个分表,数据库中的分表分布在至少一个服务器中。对服务器而言,一个服务器上可有至少一个分表。
以视频的描述文件为例,在有限的时间内,服务器来不及对所有视频描述文件进行处理,先将所有的视频的描述文件保存下来,依次记录在队列中,在保存下来的同时,服务器向客户端回复该客户端的操作成功。获取所有的分表序号,且所有的分表序号是连续的。例如,一个数据库拥有10个服务器,每个服务器中拥有5个分表,这些分表序号为‘01’、‘02’、‘03’.....‘50’,且每一个分表中拥有一个变量idxid,idxid是该分表的循环处理的次数,循环处理的次数idxid的初始值为0,每处理一个视频的描述文件,该变量idxid自增1。通过分表的总数量idstep和各个分表的序号idflag以及每个分表中循环处理的次数idxid,来计算索引文档ID。
通过以下公式来计算索引文档ID:
ID=idxid×idstep+idflag,
其中,符号ID为所述索引文档ID,符号idxid为循环处理的次数,符号idstep为所有分表的数量,符号idflag为各个分表的序号。
所有未处理的索引文档ID都是0。
某个分表的序号idflag是40,该分表的循环处理的次数idxid为200,所有分表的数量idstep为50,通过上述公式,生成的这个文件的索引文档ID就是10040。通过上述公式,还可得到该分表的上一个生成的索引文档ID是9990,且可以预测该分表下一个生成的索引文档ID是10090。分表序号idflag为41的分表,在其循环处理的次数idxid为200时,生成的索引文档ID为10041。同理,在循环次数为200的各个分表中,其生成的索引文档ID的数值依此为‘10051’、‘10052’、‘10053’......‘10100’。在循环次数为201的各个分表中,其生成的索引文档ID的数值依此为‘10101’、‘10102’、‘10103’......‘10150’。通过上述内容可以得出索引文档ID是连续的。
根据上述公式ID=idxid×idstep+idflag,生成的索引文档ID的数值除以所有分表的数量idstep可以得到一个商idxid和一个余数idflag,该余数idflag表示该索引文档ID是对应于那个分表,该商idxid表示该分表中的循环的轮数,即该索引文档是该分表中的第多少个索引文档。举例而言,一个索引文档ID为10072,那么通过该数值除以所有分表的数量50,可以得到一个商为201,一个余数为22。该余数22表示索引文档ID为10072的索引文档对应的分表的序号为22,该商201表示索引文档ID为10072的索引文档在序号为22的分表中的第201个索引文档。通过上述内容可以得出索引文档ID与该索引文档所对应分表之间的是存在联系的。
本公开的实施例提供的技术方案可以包括以下有益效果:生成索引文档ID需要的元素只与分表有关,可以加强生成索引文档ID与分表的联系,生成的索引文档ID唯一且索引文档ID的数值连续,可根据索引文档ID推断出该索引文档对应的具体分表及该索引文档是在该分表中的第多少条记录信息。
在一个实施例中,如图2所示,还包括如下步骤S21-S22:
在步骤S21中,根据哈希算法依此计算所述文件的哈希值;
在步骤S22中,根据所述哈希值将所述文件匹配到相对应的所述分表。
在一个实施例中,在服务器端,接收由用户端发送过来的文件。总表可以分为至少一个分表,该些分表可以分布在至少一个服务器中。对服务器而言,一个服务器上可有至少一个分表。以服务器为例,文件以视频的描述描述文件为例,在有限的时间内,服务器来不及对所有视频描述文件进行处理,先将所有的视频描述文件保存下来,依此记录在队列中,在保存下来的同时,服务器向客户端回复该客户端的操作成功。如果数据库中只存在一个表,那么就无需考虑该文件与表的对应关系。在分表数量等于或多余两个的情况下,当每个分表所对应的文件数量相同时,可以使数据库系统中资源配置达到最优。通过使用哈希算法来依次计算队列记录文件的哈希值,根据哈希算法的特性,可以使得生成的哈希值在哈希值整个取值区间上均匀的分布,并建立各个分表与各个哈希值的取值区间的一一对应关系。
本公开的实施例提供的技术方案可以包括以下有益效果:文件的哈希值与分表的对应关系为一一对应关系,且所有文件的哈希值均匀的分布在整个哈希值的取值范围内。
在一个实施例中,如图3所示,还包括步骤S31-S32:
在步骤S31中,将所述哈希值的整个取值范围均等的划分为多个数值区间,所述多个数值区间的数量和所有所述分表的数量相同,且所述数值区间与所述分表一一对应;
在步骤S32中,将所述文件的哈希值在某一个数值区间段内的所有所述文件,匹配到同一个所述分表。
在一个实施例中,一个数据库中拥有分表的数量与划分的哈希数值区间的数量相同,且整个哈希值的数值区间是均匀划分的,即各个哈希值的取值区间的范围是一致的,根据哈希算法的特性,可使生成的哈希值在哈希值整个取值区间上均匀的分布,建立各个哈希值的取值区间与各个分表的一一对应关系。将文件的哈希值落在特定的哈希值取值区间的所有文件匹配到同一个分表。
本公开的实施例提供的技术方案可以包括以下有益效果:可以将所有文件均匀的匹配到各个分表中,避免出现某些分表对应的索引文档特别多,而另一些分表对应的索引文档比较少的情况出现。使得分表的所对应的文件数量均衡,进而使各个服务器的负载也均衡。
在一个实施例中,如图4所示,包括如下步骤S41:
在步骤S41中,每个所述分表都拥有各自独立的所述循环处理的次数。
在一个实施例中,在各个分表生成索引文档ID的过程中,各个分表中各自拥有独立循环处理的次数idxid,彼此之间的循环处理的次数idxid的数值只在本分表内有效。例如,一个分表的序号为39的分表,该分表的循环处理的次数idxid为13456。另一个序号为40的分表,其循环处理的次数idxid可能为12344。再一个序号为41的分表,其循环处理的次数idxid可能是14321。即各个分表中的循环处理的次数idxid是之间没有必然的联系。当序号为39的分表中的循环处理的次数idxid自增1之后,序号为40的分表中的循环处理的次数idxid并不会因为序号为39的分表中的循环处理的次数idxid的变化而变化。即序号为40的分表和序号为39的分表的循环处理的次数idxid彼此之间是独立的。
本公开的实施例提供的技术方案可以包括以下有益效果:各个分表中的循环处理的次数idxid彼此独立,可以避免在生成索引文档ID时,各个分表中的循环处理的次数idxid之间相互影响,导致索引文档ID的数值不连续或者生成重复的索引文档ID。
在一个实施例中,图5是根据一示例性实施例示出的一种生成索引文档ID的装置框图。如图5示,该装置包括接收模块51、存储模块52、获取模块53、第一计算模块54。
该接收模块51,用于接收由客户端发送来的文件;
该存储模块52,用于存储所述文件的信息,所述文件的信息分布在至少一个服务器中,每个服务器有至少一个分表;
该获取模块53,用于获取存储的所有分表的数量、各个所述分表的序号和循环处理的次数;
该第一计算模块54,用于根据所述所有分表的数量、所述各个分表的序号和所述循环处理的次数,计算所述文件的索引文档ID。
在一个实施例中,图6是根据一示例性实施例示出的一种生成索引文档ID的装置框图。如图6所示,该第一计算模块54包括计算子模块61和自增子模块62。
该计算子模块61,用于根据以下公式计算索引文档ID:
ID=idxid×idstep+idflag,
其中,符号ID为所述索引文档ID,符号idxid为循环处理的次数,符号idstep为所有分表的数量,符号idflag为各个分表的序号;
该自增子模块62,用于所述符号idxid在每生产一个索引文档ID后增加一。
在一个实施例中,图7是根据一示例性实施例示出的一种生成索引文档ID的装置框图。如图7所示,该装置还包括第二计算模块71和匹配模块72。
该第二计算模块71,用于根据哈希算法依此计算所述文件的哈希值;
该匹配模块72,用于根据所述哈希值将所述文件匹配到相对应的所述分表。
在一个实施例中,图8是根据一示例性实施例示出的一种生成索引文档ID的装置框图。如图8所示,该匹配模块72包括划分子模块81和匹配子模块82。
该划分子模块81,用于将所述哈希值的整个取值范围均等的划分为多个数值区间,所述多个数值区间的数量和所有所述分表的数量相同,且所述数值区间与所述分表一一对应;
该匹配子模块82,用于将所述文件的哈希值在某一个数值区间段内的所有所述文件,匹配到同一个所述分表。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。