数据检索装置、数据存储方法和数据检索方法
【专利摘要】本发明公开了一种数据检索装置、数据存储方法和数据检索方法。计算机(1)执行的处理包括:将数据集划分为多个数据集;确定用于数据集的哈希函数;生成用于指定哈希函数的哈希系数值信息(20)和在哈希系数值与数据集之间的对应关系信息(21);以及生成用于数据集的哈希信息(22)。在哈希函数确定中,基于数据集的数据的键、利用候选哈希函数来计算哈希值,并且将候选哈希函数确定为如下数据集的哈希函数:关于该数据集,判定了所有数据能够被存储到基于哈希值的第一地址或与第一地址邻接的第二地址。在哈希信息生成中,通过将数据和键存储到第一或第二地址中来生成用于数据集的哈希信息。
【专利说明】数据检索装置、数据存储方法和数据检索方法
【技术领域】
[0001]本文中论述的实施方式涉及数据检索装置、数据存储方法以及数据检索方法。
【背景技术】
[0002]常规地,作为数据检索方法之一,利用哈希表的数据检索方法是可用的。
[0003]这里,哈希表是表类型数据结构的一种类型,其利用哈希函数作为确定要在其中存储数据的表的位置的措施或者作为确定要从其获取数据的表的位置的措施。
[0004]与其它数据检索方法(例如,二叉树搜索方法)相比,利用哈希表的数据检索方法的优点在于数据检索效率较高,即,对检索目标数据进行检索或判定不存在检索目标数据所需的时间较短。
[0005]另一方面,利用哈希表的数据检索方法使用通过如下方式生成的哈希表:将数据存储到基于通过哈希函数计算的哈希值而指定的存储位置处。通过哈希函数计算的哈希值可能在不同数据间是相等的,并且在此情况下,取决于将数据存储到哈希表中以及检索数据的方式,数据检索的效率降低。
[0006]另一方面,利用保证在存储到哈希表中的所有数据间哈希值彼此不重叠的完美哈希函数似乎是可能的构思。当使用利用完美哈希函数生成的哈希表时,由于不同数据间存储位置彼此不重叠,所以能够在数据检索时唯一地指定存储位置,数据检索效率在理论上是最高的并且保证了最高的数据检索效率。
[0007]然而,确定用于给定数据集的完美哈希函数是不容易的。具体地,不容易确定用于大规模数据集的完美哈希函数。例如,在通过蛮力法(brute force method)计算完美哈希函数的情况下,计算成本相对于数据数量的增加呈指数增加。
[0008]另一方面,作为用于抑制在计算完美哈希函数时的计算成本的方法,CHD算法是可用的,其中大规模数据集被划分成多个小规模数据集,并且针对多个小规模数据集中的每个数据集来计算单独的完美哈希函数。
【发明内容】
[0009]顺便提及,在上述CHD算法中,作为与多个小规模数据集中的每个数据集相对应的单独的完美哈希函数,确定由两个哈希函数fl(x)和f2(x)以及两个算子α和β —即,表达式χ=Π (x) + a F2 (X) + β——定义的完美哈希函数,并且利用该完美哈希函数计算哈希值X。然后,基于通过完美哈希函数计算的哈希值来存储数据以生成哈希表。然而,需要很多时间来确定完美哈希函数、计算哈希值以及生成哈希表。因此,需要时间来存储数据并且数据存储速度降低。
[0010]另外,在上述CHD算法中,与多个小规模数据集相对应的各个完美哈希函数的算子α和β被压缩并保留,并且在数据检索时所压缩的算子α和β被解压缩以用作原始算子。然后,通过上述完美哈希函数利用原始算子来计算哈希值,并且利用所计算的哈希值来检索数据。然而,需要时间来计算哈希值。因此,需要时间来检索数据并且数据检索速度较低。
[0011]因此,期望提高数据存储速度和数据检索速度,同时尽可能地抑制数据检索效率的降低。
[0012]根据实施方式的方面,数据检索装置包括:数据划分单元,其将数据集划分为多个数据集;哈希函数确定单元,其确定与多个数据集相对应的多个哈希函数;哈希系数值信息生成单元,其生成包括指定多个哈希函数的多个哈希系数的值的哈希系数值信息;对应关系信息生成单元,其生成将指定多个哈希函数的多个哈希系数的值与多个数据集彼此关联的对应关系信息;以及哈希信息生成单元,其生成与多个数据集相对应的多个哈希信息;其中,哈希函数确定单元执行以下操作:针对数据集中的每个数据集,基于包括在该数据集中的多个数据的键,利用候选哈希函数来计算哈希值,并且判定所述多个数据的全部是否能够被存储到基于哈希值指定的第一存储位置或与第一存储位置邻接的第二存储位置;以及将所述候选哈希函数确定为与这样的数据集相对应的哈希函数:关于该数据集,判定了所述多个数据的全部能够被存储到第一存储位置或第二存储位置;并且,哈希信息生成单元通过以下方式生成用于该数据集的哈希信息:针对数据集中的每个数据集,将数据和键存储到基于根据所述多个数据的键,利用与该数据集相对应的哈希函数计算的哈希值指定的第一存储位置或者第二存储位置。
[0013]因此,实施方式的该方面的优点在于能够提高数据存储速度和数据检索速度,同时尽可能地抑制数据检索效率的降低。
【专利附图】
【附图说明】
[0014]图1是描绘根据实施方式的数据检索装置的配置的视图;
[0015]图2是描绘包括根据本实施方式的数据检索装置的信息处理装置的硬件配置的视图;
[0016]图3至图5是示出由设置在根据本实施方式的数据检索装置中的数据存储处理单元(数据存储程序)执行的处理(数据存储方法)的流程图;
[0017]图6是示出设置在根据本实施方式的数据检索装置中的哈希函数索引表(对应关系表)和哈希函数实体管理表(哈希系数值表)的示意图;
[0018]图7至图9是示出由设置在根据本实施方式的数据检索装置中的数据存储处理单元(数据存储程序)执行的处理(数据存储方法)的流程图;
[0019]图10是示出应用根据本实施方式的数据检索装置的雇员ID检索系统中的存储目标的数据集的视图;
[0020]图11是示出应用根据本实施方式的数据检索装置的雇员ID检索系统中的检索目标数据集中的每个数据的CRC32值,以及在CRC32值除以“5”(小规模数据集的数量)的情况下的余数的值的视图;
[0021]图12是示出将应用根据本实施方式的数据检索装置的雇员ID检索系统中的检索目标的数据集划分为多个小规模数据集的情况下的结果的视图;
[0022]图13是示出对应用根据本实施方式的数据检索装置的雇员ID检索系统中的小规模数据集中的每个数据集分配哈希函数的结果的视图;
[0023]图14是示出应用根据本实施方式的数据检索装置的雇员ID检索系统中的哈希函数实体管理表(哈希系数值表)的视图;
[0024]图15是示出应用根据本实施方式的数据检索装置的雇员ID检索系统中的哈希函数索引表(对应关系表)的视图;
[0025]图16是示出将应用根据本实施方式的数据检索装置的雇员ID检索系统的数据集号码“O”中包括的每个数据的哈希值除以“5”(哈希表的大小)的情况下的余数的值的视图;
[0026]图17是示出将应用根据本实施方式的数据检索装置的雇员ID检索系统的数据集号码“O”中包括的每个数据存储到与数据集号码“O”相对应的哈希表中的情况下的结果的视图;
[0027]图18是示出将应用根据本实施方式的数据检索装置的雇员ID检索系统的数据集号码“I”中包括的每个数据的哈希值除以“5”(哈希表的大小)的情况下的余数的值的视图;
[0028]图19是示出将应用根据本实施方式的数据检索装置的雇员ID检索系统的数据集号码“ I”中包括的每个数据存储到与数据集号码“ I”相对应的哈希表中的情况下的结果的视图;
[0029]图20是示出将应用根据本实施方式的数据检索装置的雇员ID检索系统的数据集号码“2”中包括的每个数据的哈希值除以“5”(哈希表的大小)的情况下的余数的值的视图;
[0030]图21是示出将应用根据本实施方式的数据检索装置的雇员ID检索系统的数据集号码“2”中包括的每个数据存储到与数据集号码“2”相对应的哈希表中的情况下的结果的视图;
[0031]图22是示出将应用根据本实施方式的数据检索装置的雇员ID检索系统的数据集号码“3”中包括的每个数据的哈希值除以“5”(哈希表的大小)的情况下的余数的值的视图;
[0032]图23是示出将应用根据本实施方式的数据检索装置的雇员ID检索系统的数据集号码“3”中包括的每个数据存储到与数据集号码“3”相对应的哈希表中的情况下的结果的视图;
[0033]图24是示出将应用根据本实施方式的数据检索装置的雇员ID检索系统的数据集号码“4”中包括的每个数据的哈希值除以“5”(哈希表的大小)的情况下的余数的值的视图;
[0034]图25是示出将应用根据本实施方式的数据检索装置的雇员ID检索系统的数据集号码“4”中包括的每个数据存储到与数据集号码“4”相对应的哈希表中的情况下的结果的视图;
[0035]图26是示出由应用根据本实施方式的数据检索装置的雇员ID检索系统中的数据检索处理单元(数据检索程序)执行的处理(数据检索方法)的流程图;
[0036]图27是示出应用根据本实施方式的数据检索装置的字典型数据压缩系统中的存储目标的数据集的视图;
[0037]图28是示出应用根据本实施方式的数据检索装置的字典型数据压缩系统的存储目标的数据集中的每个数据的CRC32值,以及在将CRC32值除以“4”(小规模数据集的数量)的情况下的余数值的视图;
[0038]图29是示出将应用根据本实施方式的数据检索装置的字典型数据压缩系统中的存储目标数据集划分为多个小规模数据集的情况下的结果的视图;
[0039]图30是示出应用根据本实施方式的数据检索装置的字典型数据压缩系统的小规模数据集中的每个数据集的哈希函数的分配结果的视图;
[0040]图31是示出应用根据本实施方式的数据检索装置的字典型数据压缩系统中的哈希函数实体管理表(哈希系数值表)的视图;
[0041]图32是示出应用根据本实施方式的数据检索装置的字典型数据压缩系统中的哈希函数索引表(对应关系表)的视图;
[0042]图33是示出将应用根据本实施方式的数据检索装置的字典型数据压缩系统的数据集号码“O”中包括的每个数据的哈希值除以“4”(哈希表的大小)的情况下的余数的值的视图;
[0043]图34是示出将应用根据本实施方式的数据检索装置的字典型数据压缩系统的数据集号码“O”中包括的每个数据存储到与数据集号码“O”相对应的哈希表中的情况下的结果的视图;
[0044]图35是示出将应用根据本实施方式的数据检索装置的字典型数据压缩系统的数据集号码“I”中包括的每个数据的哈希值除以“5”(哈希表的大小)的情况下的余数的值的视图;
[0045]图36是示出将应用根据本实施方式的数据检索装置的字典型数据压缩系统的数据集号码“ I”中包括的每个数据存储到与数据集号码“ I”相对应的哈希表中的情况下的结果的视图;
[0046]图37是示出将应用根据本实施方式的数据检索装置的字典型数据压缩系统的数据集号码“2”中包括的每个数据的哈希值除以“4”(哈希表的大小)的情况下的余数的值的视图;
[0047]图38是示出将应用根据本实施方式的数据检索装置的字典型数据压缩系统的数据集号码“2”中包括的每个数据存储到与数据集号码“2”相对应的哈希表中的情况下的结果的视图;
[0048]图39是示出将应用根据本实施方式的数据检索装置的字典型数据压缩系统的数据集号码“3”中包括的每个数据的哈希值除以“5”(哈希表的大小)的情况下的余数的值的视图;
[0049]图40是示出将应用根据本实施方式的数据检索装置的字典型数据压缩系统的数据集号码“3”中包括的每个数据存储到与数据集号码“3”相对应的哈希表中的情况下的结果的视图;
[0050]图41是由应用根据本实施方式的数据检索装置的字典型数据压缩系统中的数据检索处理单元(数据检索程序)执行的处理(数据检索方法)的流程图;以及
[0051]图42是包括由应用根据本实施方式的数据检索装置的字典型数据压缩系统中的数据检索处理单元(数据检索程序)执行的处理(数据检索方法)的数据压缩处理的流程图。
【具体实施方式】[0052]在下文中,将参照图1至图42的图来描述根据本公开内容的实施方式的数据存储程序、数据检索程序、数据检索装置、数据存储方法以及数据检索方法。
[0053]根据本实施方式的数据检索装置被设置在信息处理装置如服务器中,并且用于执行数据的存储和检索。
[0054]首先,参照图2描述包括本数据检索装置的信息处理装置的硬件配置。
[0055]可以利用计算机如服务器来实现包括本数据检索装置的信息处理装置,并且其硬件配置包括CPU (中央处理单元)102、主存储器101、通信控制单元109、输入装置106、显示控制单元103、显示装置104、存储装置105以及用于例如便携式记录介质108的驱动装置107,如图2所示。所提及的组件通过总线110彼此连接。注意,本装置的硬件配置不限于此。
[0056]这里,CPU102控制整个计算机,将程序读出到主存储器101中,并且执行该程序以执行包括数据检索装置的信息处理装置所需的处理。此外,CPU102中包括可高速访问的高速缓冲存储器111,高速缓冲存储器111的容量小于主存储器101。作为高速缓冲存储器111,例如,使用SRAM。在进行程序等的执行时,高速缓冲存储器111暂时存储频繁访问的数据。其在下文中被称为CPU高速缓存或CPU高速缓冲存储器。
[0057]在进行程序等的执行时,主存储器101中临时存储程序或数据。作为主存储器101,例如,使用DRAM。
[0058]通信控制单元109 (通信接口)用于通过网络(如局域网(LAN)或因特网)与不同的装置通信。通信控制单元109可以最初被并入计算机中,或者可以后来附接至计算机的NIC (网络接口卡)。
[0059]输入装置106为定点设备,如鼠标或键盘。
[0060]显示装置104为显示单元,如液晶显示单元。
[0061]显示控制单元103执行控制以使显示装置104显示例如处理结果等。
[0062]要注意,输入装置106和显示装置104可以是设置在连接到网络的不同计算机中的输入装置和输出装置。
[0063]存储装置105例如是硬盘驱动器(HDD),并且在存储装置105中存储各种程序和各种数据。在本实施方式中,在存储装置105中存储下文中描述的数据存储程序和数据检索程序并且存储在下文中描述的大规模数据集。要注意,例如,将ROM (只读存储器)与存储装置105单独地设置,并且可以在ROM中存储各种程序和各种数据。
[0064]设置驱动装置107以用于访问便携式记录介质108 (例如,光盘或磁光盘)的存储内容。
[0065]在具有如上所述的硬件配置的计算机中,CPU102将存储在存储装置105中的数据存储程序或数据检索程序读出到主存储器101中,并且执行所读出的程序以实现本数据检索装置的各种功能,即,诸如数据存储处理功能、数据检索处理功能、哈希系数值表存储功能、对应关系表存储功能以及哈希表存储功能的功能。
[0066]为此,如图1所示,本数据检索装置I包括数据存储处理单元2、数据检索处理单元
3、哈希系数值表存储单元4、对应关系表存储单元5以及哈希表存储单元6。
[0067]这里,数据存储处理单元2包括数据划分单元7、哈希函数确定单元8、哈希系数值表生成单元9、对应关系表生成单元10以及哈希表生成单元11。[0068]数据划分单元7将数据集划分为多个数据集。
[0069]哈希函数确定单元8确定分别用于多个数据集的多个哈希函数。具体地,针对数据集中的每个,哈希函数确定单元8基于包括在该数据集中的多个数据的键,通过候选哈希函数来计算哈希值,并且判定该多个数据的全部是否能够被存储到基于哈希值指定的第一存储位置或与第一存储位置邻接的第二存储位置。然后,哈希函数确定单元8将候选哈希函数确定为用于如下数据集的哈希函数:关于该数据集,判定了多个数据的全部能够存储到第一存储位置或第二存储位置。这里,哈希函数确定单元8优选地使用如下哈希函数作为候选函数:在数据的键串(键字符串)Ix1, x2) X3,, x?}被表示为xK (I ^ η)的情况下,该哈希函数由哈希系数R(1 ^ R ^ 256)的值指定并且包括在由fR (Xk) =f K(Xim) X R+XK [其中fR (X。) =Rtl (Rci是初始值)]表示的函数组中。此外,哈希函数确定单元8优选地在发现如下两个或更多个数据集时将候选函数值作为用于该两个或更多个数据集中的每个数据集的哈希函数:关于该两个或更多个数据集,判定了多个数据的全部能够存储到第一存储位置或第二存储位置。此外,哈希函数确定单元8优选地确定16个或32个哈希函数作为分别用于多个数据集的多个哈希函数。
[0070]哈希系数值表生成单元9生成哈希系数值表20 (参照图6),以用于在其中存储用于指定多个哈希函数的多个哈希系数的值。这里,哈希系数值表生成单元9将用于分别指定多个哈希函数的多个哈希系数的值存储到CPU高速缓冲存储器111中,以在CPU高速缓冲存储器111中生成哈希系数值表20 (参照图6)。因此,哈希系数值表20 (参照图6)被保留在CPU高速缓冲存储器111中,并且在CPU高速缓冲存储器111中生成存储哈希系数值表20 (参照图6)的哈希系数值表存储单元4。以此方式,哈希系数值表生成单元9优选地生成具有能够保留在CPU高速缓冲存储器111中的信息量的哈希系数值表20 (参照图6)。要注意,由于哈希系数的值是哈希函数的实体,所以哈希系数值表20 (参照图6)在下文中也被称为哈希函数实体管理表或哈希系数值信息。此外,哈希系数值表生成单元9在下文中也被称为哈希函数实体管理表生成单元或哈希系数值信息生成单元。
[0071] 对应关系表生成单元10生成对应关系表21 (参照图6),该对应关系表21将分别指定多个哈希函数的多个哈希系数值与多个数据集彼此相关联。这里,对应关系表生成单元10使将分别指定多个哈希函数的多个哈希系数值与多个数据集彼此相关联的对应关系表21 (参照图6)存储到CPU高速缓冲存储器111中,以在CPU高速缓冲存储器111中生成对应关系表21 (参照图6)。因此,对应关系表21 (参照图6)被保留在CPU高速缓冲存储器111中,并且在CPU高速缓冲存储器111中生成存储对应关系表21 (参照图6)的对应关系表存储单元5。以此方式,对应关系表生产单元10优选地生成具有能够保留在CPU高速缓冲存储器111中的信息量的对应关系表21(参照图6)。此外,对应关系表生成单元10优选地在候选哈希函数被确定为用于所述两个或更多个数据集中的每个数据集的哈希函数时,生成将指定一个哈希函数的哈希系数值与该两个或更多个数据集彼此相关联的对应关系表。此外,对应关系表生成单元10优选地在16个或32个哈希函数要被确定为用于多个数据集的多个哈希函数的情况下,生成将指定多个哈希函数的多个哈希系数值与多个数据集彼此相关联,并且包括根据4位或5位进行配置的多个索引的对应关系表。要注意,对应关系表21 (参照图6)在下文中被称为哈希函数索引表或对应关系信息。此外,对应关系表生成单元10在下文中被称为哈希函数索引表生成单元或对应关系信息生成单元。[0072]哈希表生成单元11生成分别用于多个数据集的多个哈希表22。具体地,哈希表生成单元11针对每个数据集将数据和键存储到基于哈希值指定的第一存储位置,或者第二存储位置,以生成用于该数据集的哈希表22,其中该哈希值是基于多个数据的键,通过用于该数据集的哈希函数而计算的。要注意,哈希表22在下文中也称为哈希信息。此外,哈希表生成单元11在下文中也称为哈希信息生成单元。
[0073]数据检索处理单元3包括哈希表指定单元12、哈希系数值获取单元13、哈希值计算单元14、读出单元15以及输出单元16。
[0074]哈希表指定单元12基于检索目标数据的键,从存储由数据集划分出的多个数据集的多个哈希表22中指定存储包括该检索目标数据的一个数据集一个哈希表22。要注意,哈希表指定单元12在下文中也被称为哈希信息指定单元。
[0075]利用将多个数据集与分别指定多个哈希函数的哈希系数的值彼此相关联的对应关系表21 (参照图6)和存储分别指定多个哈希函数的多个哈希系数的值的哈希系数值表
20(参照图6),哈希系数值获取单元13获取指定与一个数据集相对应的一个哈希函数的一个哈希系数的值。在此情况下,对应关系表21和哈希系数值表20 (参照图6)优选地具有能够保留在CPU高速缓冲存储器111中的信息量。此外,对应关系表优选地将指定一个哈希函数的哈希系数的值与两个或更多个数据集彼此相关联。此外,对应关系表优选地包括将多个数据集与分别指定多个哈希函数的哈希系数的值相关联的多个索引,并且该多个索引优选地根据4位或5位进行配置。此外,在数据的键串(键字符串)Ix1, X2, X3,, xn}被表示为χκ(1 < K < η)的情况下,多个哈希函数优选地由哈希系数的值R(1256)指定,并且包括在由f R (Xk) =f R (Xk-D X R+XK [其中fR (X。) =Ro (Rt)是初始值)]表示的函数组中。此外,多个哈希函数优选地为16个或32个哈希函数。
[0076]哈希值计算单元14利用检索目标数据的键和一个哈希系数的值,通过一个哈希函数来计算哈希值。
[0077]读出单元15从一个哈希表22读出被存储在基于哈希值指定的第一存储位置和与第一存储位置邻接的第二存储位置的数据和键。
[0078]在判定从第一存储位置或第二存储位置读出的键与检索目标数据的键相一致的情况下,输出单元16输出与被判定为一致的键相关联的数据作为检索目标数据。
[0079]哈希系数值表存储单元4存储哈希系数值表20 (参照图6),哈希系数值表20 (参照图6)存储分别指定多个哈希函数的多个哈希系数的值。具体地,哈希系数值表存储单元4存储由上述哈希系数值表生成单元9生成的哈希系数值表20 (参照图6)。要注意,由于哈希系数的值是哈希函数的实体,所以哈希系数值表存储单元4也被称为哈希函数实体管理表存储单元。此外,哈希系数值表存储单元4也被称为哈希系数值信息存储单元。在本实施方式中,CPU高速缓冲存储器111的存储区域的一部分被用作哈希系数值表存储单元
4。换言之,由上述哈希系数值表生成单元9生成的哈希系数值表20 (参照图6)被保留在CPU高速缓冲存储器111中。
[0080]对应关系表存储单元5存储将分别指定多个哈希函数的多个哈希系数的值与多个数据集彼此相关联的对应关系表21 (参照图6)。简言之,对应关系表存储单元5存储由上述对应关系表生成单兀10生成的对应关系表21 (参照图6)。要注意,对应关系表存储单元5也被称为哈希函数索引表存储单元或对应关系信息存储单元。在本实施方式中,CPU高速缓冲存储器111的存储区域的一部分被用作对应关系表存储单元5。换言之,由上述对应关系表生成单元10生成的对应关系表21 (参照图6)被保留在CPU高速缓冲存储器111中。
[0081]哈希表存储单元6存储分别用于多个数据集的多个哈希表22 (哈希表集)。具体地,哈希表存储单元6存储由上述哈希表生成单元11生成的多个哈希表22。要注意,哈希表存储单元6也被称为哈希信息存储单元。在本实施方式中,主存储器101的存储区域的一部分被用作哈希表存储单元6。换言之,由哈希表生成单元11生成的多个哈希表22被保留在主存储器101中。
[0082]现在,参照图3至图9来描述由本数据检索装置中的CPU102根据在主存储器101中读取的数据存储程序或数据检索程序而执行的处理(数据存储方法、数据检索方法)。
[0083]首先,参照图3至图8来描述由设置在本数据检索装置中的数据存储处理单元2执行的处理,即,由数据检索装置I中的CPU102根据在主存储器101中读取的数据存储程序而执行的处理(数据存储方法)。
[0084]这里,如果数据存储处理单元2接收到对数据集的存储请求,那么其按照以下过程将该数据集存储到在主存储器101中生成的哈希表22 (哈希信息)中。
[0085]首先,当数据存储处理单元2接收存储对象的数据集时,如图3所示,数据存储处理单元2使其数据划分单元7将存储目标的数据集划分为多个数据集(步骤S10)。
[0086]这里,数据存储处理单元2使其数据划分单元7将存储目标的大规模数据集划分为多个小规模数据集。例如,构成大规模数据集的多个数据被划分为多个小规模数据集,使得多个小规模数据集中的每个数据集平均包括四个数据。在此情况下,在构成要存储的大规模数据集的数据的总数为η时,例如可以通过ROUND (n + 4)来确定小规模数据集的数量m。具体地,计算构成存储目标的大规模数据集的多个数据中的每个数据的键的CRC32值,并且计算在将每个所计算的CRC32值除以小规模数据集的数量m的情况下的余数的值(CRC值)。然后,将包括η个数据的大规模数据集划分为m个小规模数据集,使得在同一小规模数据集中包含具有相等的所计算CRC值的数据。换言之,所计算的CRC值被用作m个小规模数据集的标识号码(数据集号码)以将包括η个数据的大规模数据集划分为m个小规模数据集。例如,在使用支持SSE4.2扩展指令集的CPU的情况下,可以利用作为硬件内置的CRC32c操作指令(内置函数名称:crc32)以高速地将大规模数据集划分为多个小规模数据集。
[0087]然后,数据存储处理单元2使其哈希函数确定单元8确定分别用于多个数据集的多个哈希函数(步骤S20)。换言之,确定要用于生成分别用于多个数据集的哈希表22的多个哈希函数。具体地,数据存储处理单元2使其哈希函数确定单元8针对每个数据集,基于包括在该数据集中的多个数据中的每个数据的键,通过候选哈希函数来计算哈希值。然后,判定该多个数据的全部是否可以存储到基于哈希值指定的第一存储位置或与第一存储位置邻接的第二存储位置。然后,将候选哈希函数确定为用于如下数据集哈希函数:关于该数据集,判定了多个数据的全部可以被存储到基于哈希值指定的第一存储位置或与第一存储位置邻接的第二存储位置。此外,当发现如下两个或更多个数据集时,候选哈希函数被确定为用于该两个或更多个数据集中的每个数据集的哈希函数:关于该两个或更多个的数据集,判定多个数据的全部可以存储到第一存储位置或第二存储位置。[0088]然后,数据存储处理单元2使其哈希系数值表生成单元9(哈希函数实体管理表生成单元、哈希系数值信息生成单元)生成哈希系数值表20 (哈希函数实体管理表;哈希系数值信息;参照图6),哈希系数值表20存储分别指定多个哈希函数的多个哈希系数的值(步骤S30)。这里,数据存储处理单元2使其哈希系数值表生成单元9将分别指定多个哈希函数的多个哈希系数的值存储到CPU高速缓冲存储器111中,以在CPU高速缓冲存储器111中生成哈希系数值表20 (参照图6)。因此,哈希系数值表20 (参照图6)被保留在CPU高速缓冲存储器111中,并且在CPU高速缓冲存储器111中生成存储哈希系数表值20 (参阅图6)的哈希系数值表存储单元4 (哈希系数值信息存储单元)。以此方式,数据存储处理单元2优选地使其哈希系数值表生成单元9生成具有能够保留在CPU高速缓冲存储器111中的信息量的哈希系数值表20 (参照图6)。
[0089]然后,数据存储处理单元2使其对应关系表生成单元10 (哈希函数索引表生成单元;对应关系信息生成单元)生成对应关系表21 (哈希函数索引表;对应关系信息,参照图6),对应关系表21使分别指定多个哈希函数的多个哈希系数的值与多个数据集彼此相关联(步骤S40)。这里,数据存储处理单元2使其对应关系表生成单元10将对应关系表21(参照图6)存储到CPU高速缓冲存储器111中以在CPU高速缓冲存储器111中生成对应关系表21 (参照图6),对应关系表21 (参照图6)将分别指定多个哈希函数的多个哈希系数的值与多个对数据集彼此相关联。因此,对应关系表21 (参照图6)被保留在CPU高速缓冲存储器111中,并且在CPU高速缓冲存储器111中生成用于存储对应关系表21 (参照图6)的对应关系表存储单元5 (对应关系信息存储单元)。以此方式,数据存储处理单元2优选地使其对应关系表生成单元10生成具有能够保留在CPU高速缓冲存储器111中的信息量的对应关系表21 (参照图6)。此外,当数据存储处理单元2将候选哈希函数确定为用于两个或更多个数据集中的各个数据集的哈希函数时,优选地由对应关系表生成单元10生成将指定一个哈希函数的哈希系数的值与两个或更多个数据集相关联的对应关系表。
[0090]这里,将如下情况用作示例并且在下面参照图4对其进行具体描述:其中用于确定多个哈希函数的处理(步骤S20)、用于生成哈希系数值表的处理(步骤S30)以及用于生成对应关系表的处理(步骤S40)并行地执行,并且将16个哈希函数被分配给多个小规模数据集。
[0091]要注意,“i”从“I”依次递增1,直至“16” (l^i^ 16),以确定分别与索引号I至16相对应的16个哈希函数。
[0092]首先,如图4所示,数据存储处理单元2使其哈希函数确定单元8将“i”设置为“l”(i=l)(步骤A10),并且在数据的键串Ix1, x2,x3,...,Xj被表示为χκ(1≤K≤η)的情况下,选择由哈希系数的值R(1≤R≤256)指定并且包括在由fK(?) =^(Xih) XR+xK[其中fK(Xci) =Rci(Rci是初始值)]表示的函数组中的一个哈希函数作为候选哈希函数(步骤A20)。例如,
[0093]哈希系数的值R可以被设置为“ I ”以选择一个哈希函数,使得该一个哈希函数被用作候选哈希函数。
[0094]然后,数据存储处理单元2使其哈希函数确定单元8针对每个小规模数据集,通过所选择的候选哈希函数,基于包括在该小规模数据集中的多个数据的键来计算哈希值(步骤A30)。这里,数据存储处理单元2使其哈希函数确定单元8按照m个小规模数据集的标识号码(数据集号码)的升序,针对每个小规模数据集,通过所选择的候选哈希函数,基于包括在该小规模数据集的多个数据中的每个数据的键来计算哈希值。
[0095]例如,在数据的键串(X1, X2, X3, , XnI被表示为xK (I≤K≤η)并且由哈希系数的值R (I ^ 256)指定并且包括在由fE (xK) =fE (Xh) X R+xk [其中fK (x0) =R0 (R0是初始值)]表示的函数组中的一个哈希函数被选择作为候选哈希函数的情况下,上面给出的表达式可以展开为以下乘积和(product sum)表达式以计算哈希值。
[0096]fE( (X1, x2, x3,...,xn}) =R0*Rn+x1>l<Rn_1+x2>l<Rn_2+X3*Rn 3+...+XnJIHXn
[0097]通过以此方式从函数组选择候选哈希函数,使候选哈希函数的选择简化并容易,并且可以提高选择速度。此外,通过如上所述将递归函数转换成非递归函数,可以利用例如多处理器并行处理或CPU指令预取来提高哈希值的计算速度。此外,通过使用包括乘积和算术运算或矢量算术运算(例如,通过使用CPU的单指令多数据(SIMD)指令)的计算功能的CPU并且由CPU的计算功能执行上面给出的乘积和表达式的计算,或者通过使用可以进行并行计算(同时并行计算)的CPU (例如,多核CPU,即具有多个CPU单元的单个CPU设备)或通过使用多个CPU并且执行上面给出的乘积和表达式的并行计算,可以高速地进行哈希值的计算。此外,由于通过单个哈希函数fK(X)来计算哈希值,所以与上述CHD算法相比可以高速执行哈希值的计算,其中在上述CHD算法中,通过由f I (X) + a f2 (x) + β表示的完美哈希函数来计算哈希值,即,需要计算两个哈希函数fl(x)和f2(x)。因此,可以高速进行数据的存储处理。
[0098]然后,数据存储处理单元2使其哈希函数确定单元8针对每个小规模数据集来判定多个数据的全部是否可以存储到基于由所选择的候选哈希函数计算的哈希值而指定的存储位置(第一存储位置)或与第一存储位置邻接的另一存储位置(第二存储位置)(步骤A40)。这里,数据存储处理单元2使其哈希函数确定单元8按照m个小规模数据集的标识号码(数据集号码)的升序,针对每个小规模数据集来判定多个数据的全部是否可以存储到基于由所选择的候选哈希函数计算的哈希值而指定的存储位置(第一存储位置)或与第一存储位置邻接的另一存储位置(第二存储位置)。
[0099]在下文中,将如下情况用作示例并且参照图5对其进行描述:其中,针对每个小规模数据集来判定多个数据的全部是否可以存储到基于由所选择的候选哈希函数计算的哈希值所指定的地址(第一存储位置)或下一地址(第二存储位置)。
[0100] 例如,数据存储处理单元2使其哈希函数确定单元8首先计算在将由所选择的候选哈希函数基于包括在第一小规模数据集中的第一数据的键而计算的哈希值除以用于第一小规模数据集的哈希表的大小的情况下的余数的值(步骤B10),并且将第一数据存储到与该余数值相对应的临时存储哈希表的地址(行;存储位置)(步骤B20)。这里,当包括在第一小规模数据集中的数据的数量η’为“4”时,用于第一小规模数据集的哈希表的大小可以通过ROUND (η’+0.8)而设置为“5”。要注意,哈希表的大小“5”表示哈希表可以存储五个数据。然后,计算在将由所选择的候选哈希函数基于包括在第一小规模数据集中的第二数据的键而计算的哈希值除以用于第一小规模数据集的哈希表的大小的情况下的余数的值(步骤Β10)。然后,将第二数据存储到与该余数值相对应的临时存储表的地址(步骤Β20)。此后,针对包括在第一小规模数据集中的多个数据的全部来执行类似处理。结果,生成用于第一小规模数据集的临时存储表。[0101]然后,判定在以上述方式生成的用于第一小规模数据集的临时存储表的第一地址中存储的数据的数量是否为3或更多(步骤B30)。
[0102]如果作为上述判定的结果判定了不满足所描述的条件,则处理前进到“否”路径,在该“否”路径中判定:(i)在用于第一小规模数据集的临时存储表的下一地址中存储的数据的数量是否为3或更多;以及(ii)是否在下一地址中存储的数据的数量是否为2而且在第一地址中存储的数据的数量为2 (步骤MO)。
[0103]如果作为上述判定的结果判定了两个条件(i)和(ii)未满足,则处理前进到“否”路径。在该“否”路径中,依次关于在用于第一小规模数据集的临时存储表的后续地址中的每个地址中存储的数据来判定:(iii)在该地址中存储的数据的数量是否为3或更多;(iv)是否该地址中存储的数据的数量为2而且紧接在前面的地址中存储的数据的数量为2 ; (V)是否该地址中存储的数据的数量为2并且该地址为最后一个地址;以及(vi)是否该地址中存储的数据的数量为I且该地址为最后一个地址而且紧接在前面的地址中存储的数据的数量为2 (步骤B50)。
[0104]如果作为上述判定的结果判定了在用于第一小规模数据集的临时存储表的后续地址的全部地址中存储的数据不满足(iii)至(vi)的四个条件中的任意条件,则处理前进到“否”路径。在该“否”路径中,判定第一小规模数据集的多个数据的全部可以被存储到基于由所选择的候选哈希函数计算的哈希值而指定的地址(第一存储位置)或下一地址(第二存储位置)(步骤B60)。在此情况下,作为在图4的流程图的步骤A40的判定结果,处理前进到步骤A40的“是”路径。
[0105]另一方面,如果判定在用于第一小规模数据集的临时存储表的一些地址中存储的数据满足上述条件中的一些条件,即,如果在步骤B30、B40或B50处判定一个或更多个条件被满足,则这表示全部数据不能被存储到基于由所选择的候选哈希函数计算的哈希值而指定的地址或下一地址。因此,判定第一小规模数据集的多个数据的全部不能被存储到基于由所选择的候选哈希函数计算的哈希值而指定的地址(第一存储位置)或下一地址(第二存储位置)(步骤B70)。在此情况下,作为在图4的流程图的步骤A40的判定结果,处理前进到步骤A40的“否”路径。
[0106]要注意,这里采用如下示例为例并对其进行描述,但判定不限于此:在该示例中,判定多个数据的全部是否可以存储到基于通过候选哈希函数计算的哈希值而指定的地址(第一存储位置)或下一地址(第二存储位置)。具体地,可以判定多个数据的全部是否可以存储到基于通过候选哈希函数计算的哈希值而指定的存储位置(第一存储位置)或与第一存储位置邻接的存储位置(第二存储位置)。例如,可以判定多个数据的全部是否可以存储到基于通过候选哈希函数计算的哈希值而指定的地址(第一存储位置)或多个后续地址(第二存储位置)。这里,要被判定为第二存储位置的,在作为第一存储位置的地址后面的地址位置的数量可以基于如下数据的大小来确定:该数据是在数据检索处理时在所使用的CPU中通过执行一次加载指令所能够加载的数据。例如,在所使用的CPU中,每个地址的数据和键的总大小由d表示,并且可以通过执行一次加载指令(例如,通用寄存器的通用加载指令或与SIMD指令寄存器(如XMM寄存器或YMM寄存器)相对应的SIMD加载指令)而加载到CPU的寄存器中的数据的大小的最大值由D表示。此外,将第一存储位置后面的第y个地址的地址位置确定为第二存储位置。在此情况下,y可以被确定为在FLOOR (D + d)的范围内。另外,可以判定多个数据的全部是否可以存储到基于通过候选哈希函数计算的哈希值而指定的存储位置(第一存储位置)或在第一存储位置前面的存储位置(第二存储位置)。
[0107]同时,小规模数据集的多个数据的全部是否可以被保存到基于通过候选哈希函数计算的哈希值而指定的第一存储位置或与第一存储位置邻接的第二存储位置的判定是如下判定:该候选哈希函数是否为用于小规模数据集或存储包括在小规模数据集中的多个数据的哈希表的近乎完美(半完美)的哈希函数。这里,如果包括在小规模数据集中的多个数据的全部在哈希表中的实际存储位置为基于通过某一哈希函数计算的哈希值而指定的第一存储位置或与第一存储位置邻接的第二存储位置的条件满足,则该哈希函数被称为近乎完美的哈希函数。此外,与在上述CHD算法中通过判定某一哈希函数是否为用于小规模数据集的完美哈希函数来将该哈希函数选择为完美哈希函数的概率相比,可以通过判定候选哈希函数是否为用于小规模数据集的近乎完美的函数来将该候选哈希函数选择为近乎完美的哈希函数的概率更高。换言之,通过判定数据是否可以被存储到基于通过候选哈希函数计算的哈希值而指定的第一存储位置或与第一存储位置邻接的第二存储位置以选择哈希函数,与选择完美哈希函数的替代情况不同,哈希函数的选择条件被减轻,使得可以容易且高速地进行哈希函数的选择。因此,可以高速进行用于每个小规模数据集的哈希函数的确定。
[0108]附带地,如果数据存储处理单元2使其哈希函数确定单元8在图4的步骤A40针对每个小规模数据集来判定多个数据的全部可以被存储到基于由所选择的候选哈希函数计算的哈希值而指定的存储位置(第一存储位置)或与第一存储位置邻接的另一存储位置(第二存储位置),那么处理前进到步骤A40的“是”路径。在该“是”路径中,表示小规模数据集满足条件的标记F,即,表示候选哈希函数为用于该小规模数据集的近乎完美的哈希函数的标记F,被设置为“I” (F=I ;步骤A50),此后,处理前进到步骤A60。
[0109]另一方面,如果数据存储处理单元2使其哈希函数确定单元8在图4的步骤A40针对每个小规模数据集判定多个数据的全部不能被存储到基于由所选择的候选哈希函数计算的哈希值而指定的存储位置(第一存储位置)或与第一存储位置邻接的另一存储位置(第二存储位置),那么处理前进到步骤A40的“否”路径并且在该“否”路径中前进到步骤A60。在此情况下,标记F具有初始设定值“O”。
[0110]然后,在步骤A60,判定是否已经针对未被分配哈希函数的小规模数据集的全部执行了以下处理:用于通过所选择的候选哈希函数计算哈希值的处理;以及用于判定多个数据的全部是否可以存储到基于所计算的哈希值而指定的地址(第一存储位置)或与第一存储位置邻接的另一地址(第二存储位置)的处理。
[0111]在目前阶段,未给小规模数据集中的任何一个分配哈希函数,并且已经执行了仅针对第一小规模数据集的处理。因此,判定了尚未针对未被分配哈希函数的小规模数据集的全部执行上述处理,并且处理前进到步骤A60的“否”路径。在该“否”路径中,处理返回到步骤A30使得针对第二或后续小规模数据集重复类似的处理(步骤A30至A60以及BlO至 B70)。
[0112]如果在步骤A60判定已经针对未被分配哈希函数的所有小规模数据集执行了上述处理,则处理前进到步骤A60的“是”路径。在此情况下,关于未被分配哈希函数的小规模数据集的全部获得以下判定的结果:多个数据的全部是否可以被存储到基于由所选择的候选函数计算的哈希值而指定的地址(第一存储位置)或后续地址(第二存储位置)。
[0113]然后,数据存储处理单元2使其哈希函数确定单元8将候选哈希函数判定为用于如下小规模数据集的哈希函数:关于该小规模数据集,多个数据的全部可以存储到第一存储位置或第二存储位置。然后,数据存储处理单元2使其哈希系数值表生成单元9生成哈希系数值表20 (参照图6),哈希系数值表20 (参照图6)存储分别指定多个哈希函数的多个哈希系数的值。此外,数据存储处理单元2使其对应关系表生成单元10生成对应关系表
21(参照图6),对应关系表21 (参照图6)将指定多个哈希函数的多个哈希系数的值与多个数据集彼此相关联(步骤A70和步骤A80)。
[0114]例如,如果关于其判定了所有数据可以存储到基于由候选哈希函数计算的哈希值而指定的第一存储位置或第二存储位置的那些小规模数据集的数量为a,那么当m-a等于或小于阈值thd时,该候选哈希函数被用作哈希函数并且被分配为用于小规模数据集的哈希函数。以此方式,当小规模数据集的总数量和满足条件的小规模数据集的数量之间的差较小时,即,当满足条件的小规模数据集数量较大时,候选哈希函数被采用为哈希函数。从而,将一个哈希函数分配给尽可能多的小规模数据集。
[0115]为此,在步骤A70处判定m-a是否等于或小于阈值thd。然后,如果作为上述判定的结果判定了 m-a等于或小于阈值thd,则处理前进到步骤A70的“是”路径,在该“是”路径中处理前进到步骤A80。在步骤A80,将指定被采用为哈希函数的候选哈希函数的哈希系数的值(这里为值R1至R8)以与索引号I相关联的关系存储到在CPU高速缓冲存储器111中生成的哈希系数值表,即,存储到将哈希函数的索引号与指定哈希函数的哈希系数的值(在此,值R1至R8)彼此相关联的哈希函数实体管理表20 (参照图6)中(步骤A80)。此外,将作为哈希函数分配给小规模数据集的哈希函数的索引号I以与作为小规模数据集的标识号码的CRC值相关联的关系存储到在CPU高速缓存存储器111中生成的对应关系表中,即,存储到将作为小规模数据集的标识号码的CRC值与哈希函数的索引号彼此相关联的哈希函数索引表21 (参照图6)中(步骤A80)。要注意,阈值thd在i满足1≤i≤15时为“2174”,并且在i满足i=16时为“O”。因此,哈希函数的采用条件逐渐变严格。
[0116]然后,判定i是否为“16”,即,是否满足i=16 (步骤A90),并且如果不满足i=16,则i递增,即,i增加至i=i+l (步骤A100),此后,处理返回到步骤A20。在本阶段,由于i不满足i=16,其被设置为i=2,然后处理返回到步骤A20。在数据的键串Ix1, x2,x3,...,xn}由χκ(1≤K≤η)表示的情况下,在步骤Α20,选择由哈希系数R(1≤R≤256)的值指定并且包括在由fK (Xk) =Fk(Xih) XR+XK[其中fK (X。) =R(| (R(|是初始值)]表示的函数组中的一个哈希函数作为候选哈希函数。例如,哈希系数的值R可以被设置为“2”以选择一个哈希函数,并且所选择的哈希函数可以被确定为候选哈希函数。此后,重复与上述类似的处理。
[0117]另一方面,如果在步骤A70判定m-a大于阈值thd,则处理前进到“否”路径,在该“否”路径中处理返回到步骤S20而不采用候选哈希函数作为索引号I的哈希函数。在步骤A20,保持i=l,并且在数据的键串(X1, x2,X3,...,xn}被表示为χκ(1≤K≤η)的情况下,选择由哈希系数R(1 ≤ R ≤ 256)的值指定并且包括在由400=40^) XR+xK[其中fK(Xci) =Rci (Rci是初始值)]表示的函数组中的一个哈希函数作为候选哈希函数。例如,哈希系数的值R可以被设置为“2”以选择一个哈希函数,并且所选择的哈希函数可以被确定为候选哈希函数。此后,重复与上述类似的处理。[0118]此后,如果在步骤A90判定满足i=16,那么由于这表示索引号I至16的16个哈希函数已经被确定,所以处理结束。
[0119]要注意,在数据的键串(X1, X2, X3, , xj被表示为xK (I ^ K ^ η)并且选择由哈希系数R(1 ^ 256)的值指定并且包括在由fK (?) =^(Xih) XR+xK[其中f K (xQ) =Rtl (Rtl是初始值)]表示的函数组中的一个哈希函数作为候选哈希函数的情况下,哈希系数的值R可以从“I”依次增加,或者可以依次选择I至256中的任意值作为哈希系数的值R。然而,为了防止已被选择为候选哈希函数并且已经经受上述处理的哈希函数再次被选择,哈希函数优选地在执行上述处理之后(例如,在步骤A70或步骤A90的“否”路径中)被标注为“已使用”。这使得可以在步骤A20选择候选哈希函数时选择未使用的哈希函数。此外,在如上所述从索引号I至索引号16依次确定哈希函数的情况下,在用于确定索引号I的哈希函数的过程中,有必要执行这样的处理:如用于计算用于所有小规模数据集的哈希值的处理。然而,在用于确定索引号2和后续索引号的哈希函数的过程中,可以针对未被分配哈希函数的那些小规模数据集执行诸如用于计算哈希值的处理等的处理。此外,如上所述,在i=16的情况下,阈值thd被设置为“O”使得:在未被分配哈希函数的那些小规模数据集的全部仍满足上述步骤A40处的条件时,确定索引号16的哈希函数使得没有剩下未被分配哈希函数的小规模数据集。然而,哈希函数的确定不限于此,而是可以采取任何措施来防止剩下未被分配哈希函数的小规模数据集。例如,可以采取以下措施。具体地,固定阈值thd使其不改变,并且在步骤A80之前执行关于是否满足i=16的判定(步骤A90)。然后,如果在步骤A90处判定不满足i=16,则处理前进到步骤A100,但是如果判定满足i=16,则进一步判定是否剩下未被分配哈希函数的小规模数据集。然后,如果判定没有剩下未被分配哈希函数的小规模数据集,则处理前进到A80,而如果判定有剩下的未被分配哈希函数的小规模数据集,则处理返回到步骤A20。然后,重复类似的处理,直到判定没有剩下未被分配哈希函数的小规模数据集。[0120]在此方式,数据存储处理单元2使其哈希函数确定单元8确定要使用的16个哈希函数,即,要分配给多个小规模数据集的索引号I至16的16个哈希函数。由以此方式确定的16个哈希函数构成哈希函数池。然后,从由16个哈希函数构成的哈希函数池,分配用于每个小规模数据集的哈希函数。为此,数据存储处理单元2使其哈希函数确定单元8确定由16个哈希函数构成的哈希函数池。此外,数据存储处理单元2使其哈希系数值表生成单元9将用于指定16个哈希函数的哈希系数的值(这里为R1至R8的值;由2个字节构成值中的每个值)与索引号I至16相关联,从而在CPU高速缓冲存储器111中生成哈希系数值表20 (参照图6)。要注意,哈希系数值表20也被称为哈希系数集。此外,数据存储处理单元2使其对应关系表生成单元10将16个哈希函数的索引号I至16中的所分配哈希函数的索引号与分别作为多个小规模数据集的标识号码的CRC值相关联,从而在CPU高速缓冲存储器111中生成对应关系表21 (参照图6)。由于以此方式仅需要生成对应关系表21和哈希系数值表20 (参照图6),所以与涉及算子的压缩处理的上述CHD算法的替换情况相比,可以高速地进行数据存储处理。
[0121]这里,由于分配给多个小规模数据集的哈希函数的数量为16,所以可以由4位(固定长度)来表示与每个小规模数据集的CRC值相关联的哈希函数的索引号,即,用于标识16个哈希函数中的每个哈希函数的标识符。换言之,在m个小规模数据集的情况下,可以通过如下方式生成对应关系表:使用m行、I列的矩阵,并且将由4位表示的16个哈希函数的索引号之一存储到每行中。这里,尽管小规模数据集的数量取决于要存储的数据的数量,例如,如果在一个小规模数据集中平均包含四个数据,那么小规模数据集的数量变成数据的总数的四分之一。此外,由于将哈希函数与每个小规模数据集相关联所需的信息量为4位,所以每个数据所需的信息量为约I位。此外,如果使用16个哈希函数,如果将例如R1至R8的8个值作为用于16个哈希函数中的每个哈希函数的哈希系数的值存储到哈希系数值表中并且八个值中每个值的大小均为2字节,那么哈希系数值表的大小为256字节。因此,当要存储的数据的数量为η时,将哈希函数与每个小规模数据集相关联所需的每一个数据的信息量为约(η+2048)位。例如,每一个数据的信息量在η为1,000,OOO时为1.002η位,在η为100,000时为L 020η位,以及在η为10,000时为L 205η位(存储效率为约80%)。以此方式,与每一个数据的信息量为1.62η位(存储效率81%)或2.3η位(存储效率100%)的CHD算法相比,可以减少每一个数据的信息量。具体地,随着数据集的规模增大,可以减少每一个数据的信息量。因此,当大规模数据集被划分并存储为小规模数据集时,可以减少将哈希函数与每个小规模数据集相关联所需的信息量。从而,可以在CPU高速缓冲存储器111中确定地保留信息,并且因此,可以实现高速数据检索。简言之,通过减少用于所有小规模数据集的哈希函数的标识符长度以减少存储器的使用量,可以提高高速缓存器命中率并且实现更高速的数据检索。[0122]要注意,虽然例如将R1至R8的八个值存储作为用于16个哈希函数中的每个哈希函数的哈希系数的值的以生成哈希系数值表,但是哈希系数值表的生成不限于此。具体地,可以将一个值或多个值存储作为用于16个哈希函数中的每个哈希函数的哈希系数的一个或更多个值。例如,可以将R1的一个值存储作为用于16个哈希函数中的每个哈希函数的哈希系数的值以生成哈希系数值表。或者,可以将R1至Rs的S (S≥ 2)个值存储为用于16个哈希函数中的每个哈希函数的哈希系数的值以生成哈希系数值表。在数据的键串Ix1, χ2,χ3,…,χη}被表示为χκ(1≤K≤η)以及由哈希系数的值R (I≤R≤256)指定并且将包括在由fK(xK) =^(Xih) XR+xk[其中400=4(1^是初始值)]表示的函数组中的一个哈希函数用于计算哈希值的情况下,如可以从上面给出的乘积和表达式确认的,需要R1至Rn的η个值作为哈希系数的值。因此,如果存储小于η的一个值或多个值作为用于16个哈希函数中的每个哈希函数的哈希系数的值以生成哈希系数值表,那么在计算哈希值时,可以使用存储在哈希系数值表中的哈希系数的值来计算未存储在哈希系数值表中的哈希系数的值。例如,如果仅存储R1的值作为哈希系数的值以生成哈希系数值表,那么当计算哈希值时,可以使用R1的值来计算R2至Rn的值。此外,如果使用具有乘积和算术运算或矢量算术运算的计算功能的CPU (例如,使用CPU的SMD指令)来由计算功能执行上述乘积和表达式的计算,或使用能够执行并行计算(同时并行计算)的CPU (例如,多核CPU,即,具有多个CPU单元的单个CPU设备)或多个CPU来实施上面给出的乘积和表达式的并行计算以由此计算出哈希值,那么可以利用要使用的一个或更多个CPU来确定要存储到哈希系数值表中的哈希系数的值的数量。例如,在上面给出的乘积和表达式被划分为Z项(乘法构成的部分表达式)并且利用例如CPU的SMD指令来依次计算这Z项以计算哈希值时,可以存储R1至Rz的Z个值作为用于16个哈希函数中的每个哈希函数的哈希系数的值以生成哈希系数值表。例如,当上面给出的乘积和表达式被划分为8项并且利用例如CPU的SMD指令来依次计算这8项以计算哈希值时,可以存储R1至R8的8个值作为用于16个哈希函数中的每个哈希函数的哈希系数的值以生成哈希系数值表。在此情况下,在数据的键串为(X1, X2, X3,, XnI (η ( 8)的情况下,在计算哈希值时,可以通过利用存储在哈希系数值表中的R1至R8的八个值,使用例如CPU的SIMD指令来依次计算包括R1至R8的8项,从而高速地计算哈希值。此外,在数据的键串为(X1, X2, X3,...,χη} (η>8)的情况下,在计算哈希值时,可以任意使用存储在哈希系数值表中的R1至R8的8个值来计算Rn(n ^ 9)的值,并且针对每8项利用例如CPU的SIMD指令来依次计算包括R1至Rn的η项以高速地计算哈希值。此外,例如,在上面给出的乘积和表达式被划分为Z项(乘法构成的部分表达式)并且利用可以执行并行计算的CPU或多个CPU来依次并行计算这Z项以计算哈希值时,可以存储R1至Rz的Z个值作为用于16个哈希函数中的每个哈希函数的哈希系数的值以生成哈希系数值表。例如,在上面给出的乘积和表达式被划分为8项并且利用可以执行并行计算的CPU或多个CPU来并行计算这8项以计算哈希值时,可以存储R1至R8的8个值作为用于16个哈希函数中的每个哈希函数的哈希系数的值以生成哈希系数值表。在此情况下,在数据的键串为(X1, X2, X3,, XnI (η<8)的情况下,在计算哈希值时,可以利用存储在哈希系数值表中的R1至R8的8个值来并行计算包括R1至R8的8项,从而高速地计算哈希值。此外,在数据的键串为(X1, X2, X3,...,χη} (η>8)的情况下,在计算哈希值时,如果可以任意使用存储在哈希系数值表中的R1至R8的8个值来计算Rn (n ^ 9)的值并且针对每8项并行地计算包括R1至Rn的η项,那么可以高速地计算哈希值。还可以例如通过将使用CPU的SMD指令的方法与涉及并行计算的方法相结合来高速地计算哈希值。要注意,优选地响应于CPU高速缓冲存储器的大小来确定哈希系数值表的大小,使得哈希系数值表可以保留在CPU高速缓冲存储器中。简言之,优选地响应于CPU高速缓冲存储器的大小来确定要存储到哈希系数值表中的哈希系数的值的数量,使得哈希系数值表可以保留在CPU高速缓冲存储器中。
[0123]此外,虽然采用如下情况作为示例并对其进行了描述,但处理的执行不限于此:在该情况下,并行执行用于确定多个哈希函数的处理(图3的步骤S20)、用于生成哈希系数值表的处理(图3的步骤S30)以及用于生成对应关系表的处理(图3的步骤S40)。例如,可以在执行用于确定多个哈希函数的处理之后执行用于生成哈希系数值表的处理和用于生成对应关系表的处理。
[0124]然后,数据存储处理单元2使其哈希表生成单元(哈希信息生成单元)11生成分别用于多个数据集的多个哈希表22 (步骤S50)。具体地,数据存储处理单元2使其哈希表生成单元11针对每个数据集通过以下方式生成用于该数据集的哈希表22:将数据和键存储到基于哈希值指定的第一存储位置或第二存储位置,该哈希值是由用于该数据集的哈希函数,利用多个数据的键而计算的。因此,多个哈希表22保留在主存储器101中,并且在主存储器101中生成存储多个哈希表22的哈希表存储单元(哈希信息存储单元)6。
[0125]这里,数据存储处理单元2使其哈希表生成单元11首先确定用于小规模数据集的哈希表22的大小(步骤C10),如图7所示。例如,当包含在小规模数据集中的数据的数量η’为“4”时,用于小规模数据集的哈希表22的大小可以例如通过ROUND (η +0.8)而设置为“5”。因此,通过基于小规模数据集的大小来确定哈希表22的大小,可以将用于小规模数据集的哈希表22的数据存储率设置为约80%。
[0126] 然后,数据存储处理单元2使其哈希表生成单元11生成用于小规模数据集的哈希表22并且将哈希表22存储到主存储器101中(步骤C20至C80)。具体地,作为用于小规模数据集的哈希表22,在主存储器101中生成具有以上述方式确定的尺寸的哈希表22,并且利用包含在小规模数据集中的数据的键将数据和键存储到基于由分配给小规模数据集的哈希函数计算的哈希值而指定的第一存储位置,或第二存储位置,从而生成用于小规模数据集的哈希表22。
[0127]用于小规模数据集的哈希表22可以例如利用用于小规模数据集的临时存储表来生成,该临时存储表是通过上述数据存储处理单元2的哈希函数确定单元8的处理生成的。要注意,对于每个小规模数据集,将多个数据的全部存储到基于由分配给小大规模数据集的哈希函数计算的哈希值所指定的地址(第一存储位置)或下一地址(第二存储位置)以生成哈希表22。此外,这里采用如下实例作为示例并对其进行描述:其中,连续生成从用于第一小规模数据集的第一哈希表22到用于第十六小规模数据集的第十六哈希表22的16个哈希表22。
[0128]具体地,如图7所示,数据存储处理单元2首先使其哈希表生成单元11判定数据是否已经被存储在与临时存储表的地址相对应的哈希表22的地址中(步骤C20)。如果尚无数据被存储,则处理前进到步骤C20的“否”路径,在该路径中,将存储在临时存储表中的数据存储到哈希表的相应地址中(步骤C30)。然而,如果在步骤C20处数据已经被存储,则处理前进到“是”路径,在该路径中,将存储在临时存储表中的数据存储到哈希表的相应地址的下一地址(步骤C80)。
[0129]该阶段是如下阶段:将存储在用于第一小规模数据集的临时存储表的第一地址(行)中的第一数据存储到主存储器101中的用于第一小规模数据集的第一哈希表22的第一地址(行)中。因此,尚无数据被存储,从而处理前进到步骤C80的“否”路径。在该“否”路径中,将存储在用于第一小规模数据集的临时存储表的第一地址中的第一数据存储到主存储器101中的用于第一小规模数据集的第一哈希表22的第一地址中(步骤S30)。
[0130]然后,数据存储处理单元2使其哈希表生成单元11判定是否有两个数据存储到临时存储表的一个地址中(步骤C40)。如果两个数据被存储到临时存储表的一个地址中,则处理前进到步骤C40的“是”路径,在该路径中,将第二数据存储到哈希表22的相应地址的下一地址(步骤C50)。然而,如果两个数据未被存储到临时存储表的一个地址中,则处理前进到步骤C40的“否”路径,在该路径中前进到步骤C60。
[0131]在此阶段,判定是否有两个数据存储到用于第一小规模数据集的临时存储表的第一地址中(步骤C40),如果两个数据被存储到用于第一小规模数据集的临时存储表的第一地址中,则处理前进到步骤C40的“是”路径。在该“是”路径中,将第二数据存储到主存储器101中的用于第一小规模数据集的第一哈希表22的第二地址中(步骤C50)。另一方面,如果两个数据未被存储到用于第一小规模数据集的临时存储表的第一地址中,则处理前进到步骤C40的“否”路径,在该路径中前进到步骤C60。
[0132]此后,数据存储处理单元2使其哈希表生成单元11判定存储在临时存储表中的所有数据是否已经被存储到主存储器101的哈希表22中(步骤C60)。如果判定尚未存储所有的数据,则处理前进到步骤C60的“否”路径,在该路径中返回到步骤C20以重复类似处理。
[0133]在此阶段,由于尚未存储所有的数据,所以处理返回到步骤C20。该阶段是如下阶段:将存储到用于第一小规模数据集的临时存储表的第二地址中的第一数据存储到主存储器101中的用于第一小规模数据集的第一哈希表22的第二地址中。因此,在步骤C20,判定是否已经将数据存储到主存储器101中的用于第一小规模数据集的第一哈希表22的第二地址中(步骤C20)。
[0134]如果作为步骤C20处的判定的结果判定了数据尚未被存储,则处理前进到“否”路径,在该路径中,将存储在用于第一小规模数据集的临时存储表的第二地址中的第一数据存储到主存储器101中的用于第一小规模数据集的第一哈希表22的第二地址中(步骤C30)。然后,判定是否有两个数据存储到用于第一小规模数据集的临时存储表的第二地址中(步骤C40)。如果两个数据被存储到用于第一小规模数据集的临时存储表的第二地址中,则处理前进到步骤S40的“是”路径,在该路径中,将第二数据存储到主存储器101中的用于第一小规模数据集的第一哈希表22的第三地址中(步骤C50)。另一方面,如果在步骤S40处两个数据未被存储到用于第一小规模数据集的临时存储表的第二地址中,则处理前进到“否”路径,在该路径中前进到步骤C60。
[0135]另一方面,如果在步骤C20处判定了数据已经被存储,则处理前进到“是”路径,在该路径中,将存储在用于第一小规模数据集的临时存储表的第二地址中的第一数据存储到主存储器101中的用于第一小规模数据集的第一哈希表22的第三地址中(步骤C80)。
[0136]此后,重复类似的处理,以将存储在用于第一小规模数据集的临时存储表的第三地址后面的地址中的数据依次存储到主存储器101中的用于第一小规模数据集的第一哈希表22的相应地址中或该相应地址后面的地址中。
[0137]然后,如果在步骤C60判定已经存储了所有数据,则处理前进到“是”路径,在该路径中判定是否已经针对所有小规模数据集生成了哈希表22(步骤C70)。如果作为上述判定的结果判定已经针对所有小规模数据集生成了哈希表22,则处理结束,但如果判定尚未针对所有小规模数据集生成哈希表22,则处理前进到“否”路径,在该路径中返回到步骤ClO以重复类似处理。
[0138]该阶段是如下阶段:其中,作为用于第一小规模数据集的第一哈希表22,在主存储器101中生成如下哈希表22,其中将多个数据的全部存储到基于由分配给第一小规模数据集的哈希函数计算的哈希值所指定的一个或更多个地址(第一存储位置)或接下来的一个或更多个地址(第二存储位置)。因此,在步骤C70处,判定尚未针对所有小规模数据集生成哈希表22,并且处理前进到“否”路径,在该路径中返回到步骤C10。然后,重复类似处理以在主存储器101中生成用于第二小规模数据集和后续小规模数据集的第二哈希表22和后续哈希表22。
[0139]然后,如果在步骤C70处判定已经针对所有小规模数据集生成哈希表22,则处理结束。
[0140]因此,作为用于小规模数据集中的每个小规模数据集的哈希表22,可以在主存储器101中生成如下哈希表22:其中将多个数据的全部存储到基于由分配给小规模数据集的哈希函数计算的哈希值所指定的地址(第一存储位置)或下一地址(第二存储位置)。基于这样的近乎完美的哈希函数所生成的哈希表22保证将数据存储到基于哈希值指定的地址(第一存储位置)或下一地址(第二存储位置)。因此,如下文所述,在数据检索时,由于每次仅需要读出存储在地址中的数据并且判定数据是否被存储在地址中之一,所以与使用完美哈希函数的替代情况相比,可以抑制数据检索效率的降低。换言之,通过相对于上述选择完美哈希函数的替代情况的选择条件减弱用于哈希函数的选择条件,在可以容易并高速地进行哈希函数的选择的同时,可以相对于使用完美哈希函数的替代情况抑制数据检索效率的降低。
[0141]要注意,虽然这里使用由上述数据存储处理单元2的哈希函数确定单元8的处理生成的用于每个小规模数据集的临时存储表来生成用于该小规模数据集的哈希表22,但哈希表22的生成不限于此。例如,哈希表22可以如图8所示的方式生成。参照图8,数据存储处理单元2使其哈希表的生成单元11确定用于小规模数据集的哈希表22的大小(步骤D10),并且利用作为小规模数据集的标识号码的CRC值从对应关系表21 (参照图6)中获取索引号(步骤D20)。然后,将所获取的索引号用于利用所获取的索引号从哈希系数值表20(参照图6)获取指定分配给小规模数据集的哈希函数的哈希系数的值(步骤D30)。然后,通过分配给小规模数据集的哈希函数,基于包括在小规模数据集中的每个数据的键,使用所获取的哈希系数的值来计算哈希值(步骤D40)。然后,计算在将所计算的哈希值除以用于小规模数据集的哈希表22的大小的情况下的余数的值(步骤D50)。然后,与上述类似地按照余数值的升序将数据和键存储到主存储器101中的用于小规模数据集的哈希表22的基于哈希值指定的地址(第一存储位置)(在此,基于根据哈希值所计算的余数的值)或下一地址(第二存储位置)以生成用于每个小规模数据集的哈希表(步骤D60)。然后,可以重复类似处理直到在步骤D70判定已经针对所有小规模数据集生成了哈希表22。要注意,虽然这里首先确定哈希表22的大小,但是大小的确定不限于此。具体地,该处理(步骤D10)至少可以在执行用于将数据存储到哈希表22中的处理(步骤D60)之前执行。
[0142]要注意,虽然采用如下实例作为示例并对其进行描述,但哈希表22的生成不限于此:在该实例中,将多个数据的全部存储到基于由分配给小规模数据集的哈希函数计算的哈希值所指定的地址(第一存储位置)或下一地址(第二存储位置)以生成哈希表22。具体地,可以将多个数据的全部存储到基于由分配给小规模数据集的哈希函数计算的哈希值所指定的存储位置(第一存储位置)或第一存储位置后面的另一存储位置(第二存储位置)以生成哈希表。例如,可以将多个数据的全部存储到基于由分配给小规模数据集的哈希函数计算的哈希值所指定的地址(第一存储位置)或第一存储位置后面的多个地址(第二存储位置)以生成哈希表。这里,可以响应于如下数据的大小来确定要被用作第一存储位置的地址后面的第二存储位置的地址的数量:该数据是在数据检索处理时由要使用的CPU执行一次加载指令所能够加载的数据。例如,在使用的CPU中,每个地址的数据和键的总大小由d表示,并且可以通过执行一次加载指令(例如,通用寄存器的通用加载指令或与SMD指令寄存器(如XMM寄存器或YMM寄存器)相对应的SIMD加载指令)而加载到CPU的寄存器中的数据的大小的最大值由D表示。此外,将第一存储位置后面的第y个地址的地址位置确定为第二存储位置。在此情况下,y可以被确定为在OSySFLOOR (D + d)的范围内。这里,如果选择较大的值作为y的值,则由于某一哈希函数可能是近乎完美的哈希函数概率增加,所以便于用于确定哈希函数的处理而且可以进一步减小在存储大量数据时要使用的哈希函数的数量。要注意,如果选择较大的值作为I的值,则在数据检索时检索出检索目标数据或判定未存储检索目标数据所需的时间段(CPU时间)增加约几纳秒至几十纳秒。例如,用于这种判定所需的CPU时间平均为约2/2时钟。因此,即使通过选择较大的值作为y的值而使上述判定所需的时间变长,这对检索处理能力的影响也很小并且可以忽略不计。或者,例如,可以将多个数据的全部存储到基于由分配给小规模数据集的哈希函数计算的哈希值所指定的存储位置(第一存储位置)或在第一存储位置之前的另一存储位置(第二存储位置)以生成哈希表22。
[0143]现在,参照图9来描述由设置在数据检索装置I中的数据检索处理单元3执行的处理,即,由数据检索装置I中的CPU102根据读入到主存储器101中的数据检索程序执行的处理(数据检索方法)。
[0144]这里,如果数据检索处理单元3接收到对数据的检索请求,那么其以以下过程对主存储器101中的多个哈希表22执行数据检索。
[0145]首先,如图9所示,数据检索处理单元3使其哈希表指定单元(哈希信息指定单元)12基于检索目标数据的键从分别存储通过划分数据集而获得的多个数据集的多个哈希表22中指定一个哈希表22,该一个哈希表22存储包括该检索目标数据的一个数据集(步骤E10)。
[0146]这里,在数据检索处理单元3接收到检索目标数据的键后,使其哈希表指定单元12计算检索目标数据的键的CRC32值并且计算在将所计算的CRC32值除以小规模数据集的数量m的情况下的余数的值(CRC值)。以此方式基于检索目标数据的键而计算的CRC值可以被用作通过划分包括η个数据的大规模数据集而获得的m个小规模数据集的标识号码,即,作为分别存储m个小规模数据集的m个哈希表的标识号码。因此,基于以上述方式根据检索目标数据的键计算的CRC值,可以从m个哈希表中指定对包括检索目标数据的数据集进行存储的哈希表。换言之,可以基于检索目标数据的键来获取存储包括检索目标数据的数据集的哈希表的标识号码(标识符)。例如,在使用支持SSE4.2扩展指令集的CPU时,可以利用作为硬件内置的CRC32c操作指令(内置函数名称:crc32)高速地指定存储包括检索目标数据的数据集的哈希表。
[0147]然后,数据检索处理单元3使其哈希系数值获取单元13基于检索目标数据的键,利用对应关系表21 (参照图6)和哈希系数值表20 (参照图6)来获取指定与一个数据集相对应的一个哈希函数的一个哈希系数的值(步骤E20和E30),其中,该对应关系表21将多个数据集和分别指定多个哈希函数的哈希系数的值彼此关联,该哈希系数值表20存储分别指定多个哈希函数的多个哈希系数的值。
[0148]这里,数据检索处理单元3使其哈希系数值获取单元13使用以上述方式基于检索目标值的键计算的CRC值并且使用CPU高速缓冲存储器111中的对应关系表21 (参照图6)来获取索弓I号(步骤E20 )。然后,使用该索引号来获取指定与包括检索目标数据的数据集相对应的哈希函数的哈希系数的值(这里为值R1至R8)(步骤E30)。以此方式,从CPU高速缓冲存储器111获取到指定分配给存储包括检索目标数据的数据集的哈希表22的哈希函数(近乎完美的哈希函数)的哈希系数的值。由于对应关系表21和哈希系数值表20 (参照图6)两者以此方式存储在CPU高速缓冲存储器111中,所以对指定与包括检索目标数据的数据集相对应的哈希函数的哈希系数的值的访问可以在速度上提高。此外,由于以4位的固定长度配置索引号(4位的固定长度条目),所以可以通过顶地址+索引号X4位的四则运算来访问存储有期望的哈希系数的值的物理位置,因此,可以预料到访问速度的提高。因此,可以高速地执行对存储包括检索目标数据的数据集的哈希表22中的数据位置的指定。
[0149]此后,数据检索处理单元3使其哈希值计算单元14利用检索目标数据的键和一个哈希系数的值,通过一个哈希函数计算哈希值(步骤E40)。
[0150]这里,数据检索处理单元3使其哈希值计算单元14利用检索目标数据的键和以上述方式所获得的指定与包括检索目标数据的数据集相对应的哈希函数的哈希系数的值(这里,R1至R8中的每个值),通过如下一个哈希函数来计算哈希值(步骤E40):该一个哈希函数在数据的键串(X1, x2,X3,...,xn}被表示为χκ(I≤K≤η)的情况下由哈希系数R(I≤R≤256 )的值指定并且包括在由fK (xK) =fE (Xh) X R+xk [其中fk (xq) =R0 (R0是初始值)]表示的函数组中。然后,计算在将所计算的哈希值除以用于包括检索目标数据的数据集的哈希表的大小(这里为5)的情况下的余数的值(步骤E50)。要注意,哈希值的计算可以类似于由数据存储处理单元2的哈希函数确定单元8计算哈希值来执行。由于以此方式通过单个哈希函数fK(x)来计算哈希值,所以与上述CHD算法相比可以高速地执行哈希值的计算,其中该CHD算法涉及通过由f I (x) + a f2 (X) + β表示的完美哈希函数计算哈希值,即,其需要计算两个哈希函数fl (X)和f2 (X)。
[0151]此后,数据检索处理单元3使其读出单元15从一个哈希表22中读出存储在基于哈希值指定的第一存储位置和与第一存储位置邻接的第二存储位置中的数据和键(步骤E60)。由于以此方式读出存储在基于哈希值指定的第一存储位置和与第一存储位置邻接的第二存储位置中的数据和键,所以与使用完美哈希函数的替代情况相比,可以抑制数据检索效率的降低。
[0152]这里,数据检索处理单元3使其读出单元15从主存储器101 (或CPU高速缓冲存储器111),具体地,从由以上述方式基于检索目标数据的键计算的CRC值指定的哈希表22中,读出存储在由在将以上述方式计算的哈希值除以哈希表的大小的情况下的余数的值所指定的地址(第一存储位置)和下一地址(第二存储位置)中的数据和键(步骤E60)。
[0153]要注意,由于如上所述在主存储器101中生成关于其将多个数据全部存储到基于哈希值指定的地址(第一存储位置)或下一地址(第二存储位置)中的哈希表22,所以采用其中读出存储到基于哈希值指定的地址(第一存储位置)或下一地址(第二存储位置)中的数据和键的情况作为示例并对其进行描述,但数据和键的读出不限于此。具体地,响应于由上述数据存储处理单元2的哈希表生成单元11生成的哈希表22,可以读出存储到基于哈希值指定的存储位置(第一存储位置)或与第一存储位置邻接的另一存储位置(第二存储位置)中的数据和键。例如,在将多个数据全部存储到基于由分配给小规模数据集的哈希函数计算的哈希值所指定的地址(第一存储位置)或第一存储位置后面的多个地址(第二存储位置)中以生成哈希表22时,可以读出存储在基于哈希值指定的地址(第一存储位置)或第一存储位置后面的多个地址(第二存储位置)中的数据和键。这里,可以响应于如下数据的大小来确定要被用作第一存储位置的地址后面的第二存储位置的地址的数量:该数据是由要使用的CPU执行一次加载指令所能够加载的数据。例如,在使用的CPU中,每个地址的数据和键的总大小由d表示,并且可以通过执行一次加载指令(例如,通用寄存器的通用加载指令或与SIMD指令寄存器(如XMM寄存器或YMM寄存器)相对应的SIMD加载指令)而加载到(PU的寄存器中的数据的大小的最大值由D表示。此外,将第一存储位置后面的第y个地址的地址位置确定为第二存储位置。在此情况下,可以从FLOOR (D + d)的范围内确定I。 另外,例如,在将多个数据全部存储到基于由分配给小规模数据集的哈希函数计算的哈希值所指定的存储位置(第一存储位置)或第一存储位置之前的另一存储位置(第二存储位置)以生成哈希表22的情况下,可以读出存储到基于哈希值指定的存储位置(第一存储位置)或第一存储位置之前的存储位置(第二存储位置)中的数据和键。
[0154]此后,数据检索处理单元3使其输出单元16在判定从第一存储位置或第二存储位置读出的键与检索目标数据的键一致时输出与被判定为一致的键相关联的数据作为检索目标数据(步骤E70至E110)。
[0155]这里,数据检索处理单元3使其输出单元16判定从以上述方式基于哈希值指定的地址(第一存储位置)和下一地址(第二存储位置)读出的键是否与检索目标数据的键一致。具体地,首先判定从基于哈希值指定的地址读出的键是否与检索目标数据的键一致(步骤E70),然后判定从基于哈希值指定的地址的下一地址读出的键是否与检索目标数据的键一致(步骤E90)。如果作为上述判定的结果判定从基于哈希值指定的地址读出的键与检索目标数据的键一致,则输出与从基于哈希值指定的地址读出的键相关联的数据作为检索目标数据(步骤E80)。另一方面,如果判定从基于哈希值指定的地址的下一地址读出的键与检索目标数据的键一致,则输出与从基于哈希值指定的地址的下一地址读出的键相关联的数据作为检索目标数据(步骤E100)。此外,如果从基于哈希值指定的地址读出的键和从基于哈希值指定的地址的下一地址读出的键均不与检索目标数据的键一致,则输出检索失败消息(错误消息)(步骤E110)。
[0156]因此,根据本实施方式的数据检索装置、数据存储方法和数据检索方法的优点在于:可以提高数据存储速度和数据检索速度,同时尽可能地抑制数据检索效率的降低。
[0157]具体地,利用根据本实施方式的数据检索装置、数据存储方法和数据检索方法,使用近乎完美的哈希函数来再利用小数量的哈希函数,并且使用上述对应关系表21和哈希系数值表20(参照图6)。因此,根据本实施方式的数据检索装置、数据存储方法和数据检索方法的优点在于:在通过哈希函数来计算哈希值时,仅需要访问CPU高速缓冲存储器111,使得可以在不降低数据检索效率和不降低数据存储效率的情况下提高数据检索速度。
[0158]具体地,作为抑制在针对大规模数据集计算完美哈希函数时的计算成本的方法,CHD算法是可用的,其中大规模的数据集被划分为多个小规模数据集,并且针对多个小规模数据集的每个小规模数据集计算各个完美哈希函数。
[0159]然而,在CHD算法中,使用与小规模数据集的数量相对应的多个完美哈希函数。因此,随着数据集的规模增大,将哈希函数与小规模数据集中的每个小规模数据集相关联所需的信息量增加,并且使用增加的存储区。在此情况下,难以将所有信息存储到具有高读出速度的CPU高速缓冲存储器中。因此,当通过哈希函数来计算哈希值时,以固定概率发生对主存储器的访问,并且由于对主存储器的访问速度是访问CPU高度缓冲存储器的速度的几十分之一至几百分之一,所以数据检索速度下降。
[0160]此外,在上述CHD算法中,作为与多个小规模数据集中的每个小规模数据集相对应的各个完美哈希函数,计算由两个哈希函数fl (X)的和f2(x)以及两个算子α和β —即,表达式X=Fl (x) + a f2 (X) + β——定义的完美哈希函数,并且利用完美哈希函数来计算哈希值X。然后,基于由完美哈希函数计算的哈希值来存储数据以生成哈希表。然而,需要时间来确定完美哈希函数、计算哈希值以及生成哈希表。因此,需要时间来存储数据,并且数据存储速度较低。
[0161]此外,在上述CHD算法中,压缩并保留与多个小规模数据集相对应的各个完美哈希函数的算子α和β,然后在数据检索时,对所压缩的算子α和β进行解压缩以获得原始算子。然后,使用原始算子来通过上述完美哈希函数计算哈希值,并且使用所计算的哈希值来检索数据。然而,需要时间来计算哈希值。因此,需要时间来检索数据,并且数据检索速度较低。
[0162]另一方面,为了提高数据检索速度,似乎可能的构思为:再次利用一小数量的哈希函数,即,将一个哈希函数分配给多个小规模数据集来代替将一个哈希函数分配给一个小规模数据集,从而减少要使用的哈希函数的数量并减少信息量。
[0163]然而,只要在CHD算法中使用完美哈希函数作为哈希函数,就不能显著减少哈希函数的数量,并且难以充分减少信息量。换言之,为了充分减少信息量,期望将要使用的哈希函数的数量减少至几十或更少。然而,由于某个哈希函数可能是用于给定小规模数据集的完美哈希函数的概率非常低,所以难以从几十或更少的哈希函数中针对所有小规模数据集来选择完美哈希函数。因此,只要使用完美哈希函数作为哈希函数,在可以充分地降低信息量之前难以减少要使用的哈希函数的数量。
[0164]在此情况下,如果使用非完美哈希函数作为哈希函数,则可以减少要使用的哈希函数的数量并且减少信息量。然而,如果使用非完美哈希函数作为哈希函数,那么数据检索效率下降。
[0165]此外,似乎可能的构思为:降低哈希表的存储效率,例如,通过将七个数据而不是八个数据存储到具有可以存储10个数据的大小的哈希表中,从而提高某个哈希函数可能是用于给定小规模数据集的完美哈希函数的概率,并且减少要使用的哈希函数的数量以及减少信息量。然而,这使数据的存储效率下降。因此,如果使用具有低存储效率的哈希表,则会压缩存储器利用率。
[0166]因此,在根据本实施方式的数据检索装置、数据存储方法和数据检索方法中,使用上述近乎完美的哈希函数来再利用小数量的哈希函数,并且使用上述对应关系表21和哈希系数值表20 (参照图6),以通过使得在通过哈希函数来计算哈希值时仅需要访问CPU高速缓冲存储器111而使得可以提高数据检索速度,而不使数据检索效率下降并且不使数据存储效率降低。具体地,通过使用显著提高哈希函数的重复使用率的近乎完美的哈希函数来减少将哈希函数与每个小规模数据集相关联所需的信息量,可以提高高速缓存器命中率,从而实现数据检索速度的增加,同时保持与完美哈希函数相比拟的数据检索效率,并且保持与上述CHD算法相比拟的数据存储效率。
[0167]要注意,虽然在本实施方式中采用使用16个哈希函数的情况作为示例并对其进行描述,但哈希函数的数量不限于此。例如,可以使用32个哈希函数。在此情况下,由于用于标识32个哈希函数的标识符(索引号)由5位表示,对应关系表所必需的信息量与使用16个哈希函数的情况相比增加了约25%。然而,即使如果如刚才所提及的这种信息量增加,该信息也可以保留在CPU高速缓冲存储器中,因此可以实现高速数据检索。另一方面,如果要使用的哈希函数的数量增加,则用于确定哈希函数的处理的速度也增加。这是因为在上述实施方式关于是否超过阈值thd的判定中可以采用某个哈希函数作为哈希函数的概率增加,并且试验的次数减少。例如,在要存储的数据的数量超过500,000的情况下,优选地使用32个哈希函数。要注意,如果要使用的哈希函数的数量减少到8个或更少,那么在上述实施方式关于是否超过阈值thd的判定中变得非常难以采用某个哈希函数作为哈希函数。因此,优选地将要使用的哈希函数的数量设置为16或更多。这里,如果要使用的哈希函数的数量由P表示,那么将哈希函数与每个小规模数据集相关联所需的信息量为ceil (log(p))。因此,当P改变时,将哈希函数与每个小规模数据集相关联所需的信息量与log(p)成比例地改变。因此,为了提高高速缓存命中率并且实现更高速度的数据检索,将要使用的哈希函数的数量确定为使得将哈希函数与每个小规模数据集相关联所需的信息量(具体地为对应关系表所需的信息量)变为根据CPU高速缓冲存储器的大小的信息量。
[0168]此外,可以将根据上述本实施方式的数据检索装置、数据存储方法以及数据检索方法用于例如精确匹配检索、最长匹配字符串检索等。这里,将精确匹配检索用于例如验证唯一的ID,如商品编号、型号、商店的条形码、雇员编号、国家代码或邮件地址等。同时,将最长匹配字符串检索用于例如词法分析和语法分析(例如,编译器)、形态分析(例如,字符输入装置αΜΕ )中的转换处理)、IP通信中的路由表检索、电话网络中的路由表检索、货物运输中通过邮政编码的行李目的地分布、字典型的数据压缩中的字典的最长匹配检索等。
[0169]在下文中,作为精确匹配检索的示例,首先采用如下情况作为示例并对其进行描述:其中,将上述实施方式的数据检索装置、数据存储方法和数据检索方法应用于雇员ID检索系统。然后,作为最长匹配字符串检索的示例,采用如下情况作为示例并对其进行描述:其中,将数据检索装置、数据存储方法和数据检索方法应用于字典型数据压缩系统中。
[0170][雇员ID检索系统作为精确匹配检索的示例]
[0171]在此,作为数据检索装置的雇员ID检索系统是根据雇员ID来检索具有该雇员ID的雇员的姓名的系统。
[0172]在本雇员ID检索系统中,如果接收到对如图10所描绘的这种数据集的存储请求,则按照以下过程将数据集存储到在主存储器101中生成的哈希表22中。
[0173]首先,如果雇员ID检索系统的数据存储处理单元2接收到如图10所描绘的存储目标的这种数据集,则使其数据划分单元7将存储目标的数据集划分为如图12所描绘的多个数据集。
[0174]这里,数据存储处理单元2使其数据划分单元7计算构成存储目标的数据集的多个数据中的每个数据的键的CRC32值,并且计算在将每个所计算的CRC32值除以小规模数据集的数量(这里为5)的情况下的余数的值(CRC值)。然后,将包括多个数据的存储目标的数据集划分为如图12所描绘的多个小规模数据集,使得所计算的CRC值彼此相等的数据可以被包括在同一小规模数据集中。具体地,将所计算的CRC值用作多个小规模数据集的标识号码(数据集号码)以将包括多个数据的存储目标的数据集划分为多个小规模数据集。例如,在使用支持SSE4.2扩展指令集的CPU时,可以利用作为硬件内置的CRC32c操作指令(内置函数名称:crc32)高速地将包括多个数据的存储目标的数据集划分为多个小规模数据集。
[0175]然后,数据存储处理单元2使其哈希函数确定单元8确定如图13所描绘的分别用于多个小规模数据集的多个哈希函数。
[0176]然后,数据存储处理单元2使其哈希系数值表生成单元9(哈希函数实体管理表生成单元)生成哈希系数值表(哈希函数实体管理表),在该哈希系数值表中存储有如图14所描绘的用于分别指定多个哈希函数的多个哈希系数的值。
[0177]然后,数据存储处理单元2使其对应关系表生成单元10 (哈希函数索引表生成单元)生成对应关系表(哈希函数索引表),该对应关系表如图15所描绘的将用于指定多个哈希函数的多个哈希系数的值与多个数据集彼此相关联。
[0178]然后,数据存储处理单元2使其哈希表生成单元11生成分别用于多个数据集的多个哈希表22。
[0179]这里,数据存储处理单元2使其哈希表生成单元11首先确定与每个小规模数据集相对应的哈希表22的大小。例如,当包含在每个小规模数据集中的数据的数量η’为“4”时,用于每个小规模数据集的哈希表的大小可以通过ROUND (η’+0.8)而确定为“5”。因此,通过基于每个小规模数据集的大小来确定哈希表22的大小,可以将用于每个小规模数据集的哈希表22的数据存储率设置为约80%。
[0180]然后,数据存储处理单元2使其哈希表生成单元11上生成用于每个小规模数据集的哈希表22,并且将哈希表22存储到主存储器101中。
[0181]这里,将利用作为小规模数据集的标识号码的CRC值从对应关系表获取的索引号用于从哈希系数值表获取用于指定分配给小规模数据集的哈希函数的哈希系数的值。然后,通过分配给小规模数据集的哈希函数,基于包括在小规模数据集中的每个数据的键,使用哈希系数的值来计算哈希值。然后,计算在将所计算的哈希值除以用于小规模数据集的哈希表的大小的情况下的余数的值。然后,按照余数的升序将数据和键存储到主存储器中的用于小规模数据集的哈希表的基于哈希值指定的地址(第一存储位置)或下一地址(第二存储位置)以生成用于每个小规模数据集的哈希表。
[0182]具体地,关于标识号码(数据集号码)为“O” 一即其CRC值为“O” 一的小规模数据集,基于包括在小规模数据集中的每个数据的键来计算哈希值,并且计算在将所计算的哈希值除以用于数据集号码为“O”的小规模数据集的哈希表22的大小(这里为5)的情况下的余数的值。通过计算,获得如图16所描绘的这种结果。然后,按照余数值的升序将数据和键存储到主存储器101中的用于数据集号码为“O”的小规模数据集的哈希表22的基于哈希值指定的地址(第一存储位置)或下一地址(第二存储位置),以生成用于数据集号码为“O”的小规模数据集的哈希表22。结果,生成如图17所描绘的这种哈希表22。
[0183]类似地,关于标识号码(数据集号码)为“I” 一即其CRC值为“I” 一的小规模数据集,基于包括在小规模数据集中的每个数据的键来计算哈希值,并且计算在将所计算的哈希值除以用于数据集号码为“I”的小规模数据集的哈希表22的大小(这里为5)的情况下的余数的值。通过计算,获得如图18所描绘的这种结果。然后,按照余数值的升序将数据和键存储到主存储器101中的用于数据集号码为“I”的小规模数据集的哈希表22的基于哈希值指定的地址(第一存储位置)或下一地址(第二存储位置),以生成用于数据集号码为“I”的小规模数据集的哈希表22。结果,生成如图19所描绘的这种哈希表22。
[0184]类似地,还关于标识号码(数据集号码)为“2” 一即其CRC值为“2”——的小规模数据集,基于包括在小规模数据集中的每个数据的键来计算哈希值,并且计算在将所计算的哈希值除以用于数据集号码为“2”的小规模数据集的哈希表22的大小(这里为5)的情况下的余数的值。通过计算,获得如图20所描绘的这种结果。然后,按照余数值的升序将数据和键存储到主存储器101中的用于数据集号码为“2”的小规模数据集的哈希表22的基于哈希值指定的地址(第一存储位置)或下一地址(第二存储位置),以生成用于数据集号码为“2”的小规模数据集的哈希表22。结果,生成如图21所描绘的这种哈希表22。[0185]类似地,还关于标识号码(数据集号码)为“3”——即其CRC值为“3”——的小规模数据集,基于包括在小规模数据集中的每个数据的键来计算哈希值,并且计算在将所计算的哈希值除以用于数据集号码为“3”的小规模数据集的哈希表22的大小(这里为5)的情况下的余数的值。获得如图22所描绘的这种结果。然后,按照余数值的升序将数据和键存储到主存储器101中的用于数据集号码为“3”的小规模数据集的哈希表22的基于哈希值指定的地址(第一存储位置)或下一地址(第二存储位置),以生成用于数据集号码为“3”的小规模数据集的哈希表22。结果,生成如图23所描绘的这种哈希表22。
[0186]类似地,还关于标识号码(数据集号码)为“4” 一即其CRC值为“4”——的小规模数据集,基于包括在小规模数据集中的每个数据的键来计算哈希值,并且计算在将所计算的哈希值除以用于数据集号码为“4”的小规模数据集的哈希表22的大小(这里为5)的情况下的余数的值。获得如图24所描绘的这种结果。然后,按照余数值的升序将数据和键存储到主存储器101中的用于数据集号码为“4”的小规模数据集的哈希表22的基于哈希值指定的地址(第一存储位置)或下一地址(第二存储位置),以生成用于数据集号码为“4”的小规模数据集的哈希表22。结果,生成如图25所描绘的这种哈希表22。
[0187]附带地,如果接收到对数据的检索请求,则本雇员ID检索系统按照以下过程在主存储器101的多个哈希表22中执行数据检索。
[0188]这里,采用其中接收到雇员ID “0110”作为用于检索目标数据的键的情况作为示例并对其进行描述。
[0189]首先,如图26所示,雇员ID检索系统的数据检索处理单元3使其哈希表指定单元12基于检索目标数据的键,从分别存储从数据集划分的多个数据集的多个哈希表22中指定存储包括检索目标数据的数据集的一个哈希表22。
[0190]这里,在接收到雇员ID “0110”作为检索目标数据的键时(步骤F10),数据检索处理单元3使其哈希表指定单元12计算作为检索目标数据的键的雇员ID “0110”的CRC32值(步骤F20)。然后,计算在将所计算的CRC32值(这里为“0xl4429f04”)除以小规模数据集的数量(这里为“5”)的情况下的余数的值(CRC值;这里为“4”)(步骤F30)。
[0191]然后,数据检索处理单元3使其哈希系数值获取单元13基于检索目标数据的键,利用对应关系表(参照图15)和哈希系数值表(参照图14)来获取用于指定与一个数据集相对应的一个哈希函数的一个哈希系数的值(步骤F40和F50),其中,该对应关系表将多个数据集和分别指定多个哈希函数的哈希系数的值彼此关联,该哈希系数值表存储分别指定多个哈希函数的多个哈希系数的值。
[0192]这里,数据检索处理单元3使其哈希系数值获取单元13利用以上述方式基于检索目标数据的键而计算的CRC值(这里为“4”)并且利用CPU高速缓冲存储器111中的对应关系表(参照图15)来获取索引号(这里为“6”)(步骤F40)。然后,利用所获取的索引号(这里为“6”),从CPU高速缓冲存储器111中的哈希系数值表(参照图14)获取用于指定与包括检索目标数据的数据集相对应的哈希函数的哈希系数的值(这里为R1至R8的值)(步骤F50)。
[0193]此后,数据检索处理单元3使其哈希值计算单元14利用检索目标数据的键和一个哈希系数的值,通过一个哈希函数来计算哈希值(步骤F60)。
[0194]这里,数据检索处理单元3使其哈希值计算单元14利用检索目标数据的键(这里为雇员ID“0110”)以及以上述方式获取的并且指定与包括检索目标数据的数据集相对应的哈希函数的哈希系数的值(这里为R1至R8的值),通过如下一个哈希函数来计算哈希值(步骤F60):该哈希函数在数据的键串{x” x2, x3,, xj被表示为xK (I ^ K ^ η)的情况下由哈希系数R(1≤R≤256)的值指定并且包括在由fK(?) =^(Xim) XR+xK[其中fK(XQ)=RQ(R。是初始值)]表示的函数组中。然后,计算在将所计算的哈希值除以关于包括检索目标数据的数据集的哈希表22的大小(这里为“5”)的情况下的余数的值,并且获得“I”作为余数值(步骤F60)。
[0195]然后,数据检索处理单元3使其读出单元15从一个哈希表22中读出存储在基于哈希值指定的第一存储位置和与第一存储位置邻接的第二存储位置中的数据和键(步骤F70)。
[0196]这里,数据检索处理单元3使其读出单元15从主存储器101中,具体地从由以上述方式基于检索目标数据的键计算的CRC值(这里为“4”)所指定的哈希表(第四哈希表)22中,读出存储在将以上述方式计算的哈希值除以哈希表22的大小的情况下的余数值(这里为“I”)所指定的地址(第一存储位置;这里为“I”)和下一地址(第二存储位置;这里为“2”)中的数据和键(步骤F70)。
[0197]然后,数据检索处理单元3使其输出单元16在判定从第一存储位置或第二存储位置读出的键与检索目标数据的键相一致时输出与被判定为一致的键相关联的数据作为检索目标数据(步骤F80至FlOO )。
[0198]这里,数据检索处理单元3使其输出单元16首先判定从基于哈希值指定的地址(这里为“I”)读出的键(这里为“0106”)是否与检索目标数据的键(这里为“0110”)一致(步骤F80)。然后,判定从基于哈希值指定的地址的下一地址(这里为“2”)读出的键(这里为“0110”)是否与检索目标数据的键(这里为“0110”)一致(步骤F90)。作为上述判定的结果判定从基于哈希值指定的地址的下一地址(这里为“2”)读出的键与检索目标数据的键一致。然后,获得与从基于哈希值指定的地址的下一地址(这里为“2”)读出的键(这里为“0110”)相关联的数据(这里为“Satoshi Yamamoto”)(步骤F90)并且将其输出作为检索目标数据(步骤FlOO )。
[0199]因此,通过将上述数据检索装置应用于如上所述的这种雇员ID检索系统,优点在于可以提高数据存储速度和数据检索速度,同时尽量抑制数据检索效率的降低。
[0200]这里,在字典型数据压缩系统中,将上述数据检索装置I (数据存储方法和数据检索方法)用作用于数据压缩的字典,并且通过向数据检索装置I提供字符串(经压缩的字符串),可以获得与字符串相对应的压缩代码。在此情况下,存储目标数据为压缩代码,并且存储目标数据的键为经压缩的字符串。要注意,在例如日本公开特许公报第Hei9-218877号(其全部内容通过引用并入本文)或日本公开特许公报第2011-221845号(其全部内容通过引用并入本文)中公开了字典型数据压缩系统。
[0201]如果接收到对如图27所示的这种数据集的存储请求,则字典型数据压缩系统按照以下过程将数据集存储到在主存储器101中生成的哈希表22中。
[0202]首先,如果接收到如图27所示的存储目标的这种数据集,则设置在字典型数据压缩系统中的上述数据检索装置I的数据存储处理单元2使其数据划分单元7将存储目标的数据集划分为多个数据集,如图29所示。[0203]这里,数据存储处理单元2使其数据划分单元7计算构成目标对象的数据集的多个数据中的每个数据的键的CRC32值,并且计算在将每个所计算的CRC32值除以小规模数据集的数量(这里为4)的情况下的余数的值(CRC值)。然后,将包括多个数据的存储目标的数据集划分为多个小规模数据集,使得所计算的CRC值彼此相等的数据被包括在同一小规模数据集中,如图29所示。换言之,将所计算的CRC值用作多个小规模数据集的标识号码(数据集号码)以将包括多个数据的存储目标的数据集划分为多个小规模数据集。例如,在使用支持SSE4.2扩展指令集的CPU时,可以利用作为硬件内置的CRC32c操作指令(内置函数名称:crc32)高速地将包括多个数据的存储目标的数据集划分为多个小规模数据集。
[0204]然后,数据存储处理单元2使其哈希函数确定单元8确定用于多个小规模数据集的多个哈希函数,如图30所示。
[0205]然后,数据存储处理单元2使其哈希系数值表生成单元9(哈希函数实体管理表生成单元)生成哈希系数值表(哈希函数实体管理表),该哈希系数值表存储分别指定多个哈希函数的多个哈希系数的值,如图31所示。
[0206]然后,数据存储处理单元2使其对应关系表生成单元10 (哈希函数索引表生成单元)生成对应关系表(哈希函数索引表),该对应关系表将分别指定多个哈希函数的多个哈希系数的值与多个数据集彼此相关联,如图32所示。
[0207]然后,数据存储处理单元2使其哈希表生成单元11生成分别用于多个数据集的多个哈希表22。
[0208]这里,数据存储处理单元2使其哈希表生成单元11首先确定与每个小规模数据集相对应的哈希表22的大小。例如,当包含在每个小规模数据集中的数据的数量η’为“3”时,用于每个小规模数据集的哈希表22的大小可以通过ROUND (η +0.8)而设置为“4”。同时,例如,在每个小规模数据集中包含的数据的数量η’为“4”的情况下,用于每个小规模数据集的哈希表的大小可以通过ROUND (η’+0.8)而设置为“5”。因此,通过基于每个小规模数据集的大小来确定哈希表22的大小,可以将用于每个小规模数据集的哈希表22的数据存储效率设置为约80%。
[0209]此后,数据存储处理单元2使其哈希表生成单元11生成用于每个小规模数据集的哈希表22,并且将哈希表22存储到主存储器101中。
[0210]这里,利用使用作为小规模数据集的标识号码的CRC值从对应关系表获取的索引号来获取指定分配给小规模数据集的哈希函数的哈希系数的值。然后,使用所获取的哈希系数的值,通过分配给小规模数据集的哈希函数,基于包括在小规模数据集中的每个数据的键来计算哈希值。然后,计算在将所计算的哈希值除以关于小规模数据集的哈希表22的大小的情况下的余数的值。然后,按照余数值的升序将数据和键存储到主存储器101中的用于小规模数据集的哈希表22的基于哈希值指定的地址(第一存储位置)或下一地址(第二存储位置)以生成用于每个小规模数据集的哈希表22。
[0211]具体地,关于标识号码(数据集号码)为“O” 一即其CRC值为“O” 一的小规模数据集,基于包括在小规模数据集中的每个数据的键来计算哈希值,并且计算在将所计算的哈希值除以用于数据集号码为“O”的小规模数据集的哈希表22的大小(这里为4)的情况下的余数的值。通过计算,获得如图33所描绘的这种结果。然后,按照余数值的升序将数据和键存储到主存储器101中的用于数据集号码为“O”的小规模数据集的哈希表22的基于哈希值指定的地址(第一存储位置)或下一地址(第二存储位置),以生成用于数据集号码为“O”的小规模数据集的哈希表22。结果,生成如图34所描绘的这种哈希表22。
[0212]类似地,关于标识号码(数据集号码)为“I”——即其CRC值为“I”——的小规模数据集,基于包括在小规模数据集中的每个数据的键来计算哈希值,并且计算在将所计算的哈希值除以用于数据集号码为“I”的小规模数据集的哈希表22的大小(这里为5)的情况下的余数的值。通过计算,获得如图35所描绘的这种结果。然后,按照余数值的升序将数据和键存储到主存储器101中的用于数据集号码为“I”的小规模数据集的哈希表22的基于哈希值指定的地址(第一存储位置)或下一地址(第二存储位置),以生成用于数据集号码为“I”的小规模数据集的哈希表22。结果,生成如图36所描绘的这种哈希表22。
[0213]类似地,还关于标识号码(数据集号码)为“2” 一即其CRC值为“2”——的小规模数据集,基于包括在小规模数据集中的每个数据的键来计算哈希值,并且计算在将所计算的哈希值除以用于数据集号码为“2”的小规模数据集的哈希表22的大小(这里为4)的情况下的余数的值。通过计算,获得如图37所描绘的这种结果。然后,按照余数值的升序将数据和键存储到主存储器101中的用于数据集号码为“2”的小规模数据集的哈希表22的基于哈希值指定的地址(第一存储位置)或下一地址(第二存储位置),以生成用于数据集号码为“2”的小规模数据集的哈希表22。结果,生成如图38所描绘的这种哈希表22。
[0214]类似地,还关于标识号码(数据集号码)为“3” 一即其CRC值为“3”——的小规模数据集,基于包括在小规模数据集中的每个数据的键来计算哈希值,并且计算在将所计算的哈希值除以用于数据集号码为“3”的小规模数据集的哈希表22的大小(这里为5)的情况下的余数的值。获得如图39所描绘的这种结果。然后,按照余数值的升序将数据和键存储到主存储器101中的用于数据集号码为“3”的小规模数据集的哈希表22的基于哈希值指定的地址(第一存储位置)或下一地址(第二存储位置),以生成用于数据集号码为“3”的小规模数据集的哈希表22。结果,生成如图40所描绘的这种哈希表22。
[0215]附带地,如果该字典型数据压缩系统接收到对数据的检索请求,即,用于数据压缩的字符串检索请求,则其按照以下过程关于主存储器101中的多个哈希表22来执行数据检索(字符串检索)。
[0216]这里,采用其中接收到压缩字符串“aa”作为用于检索目标数据(压缩代码)的键的情况作为示例并对其进行描述。
[0217]首先,如图41所示,设置在字典型数据压缩系统中的数据检索装置I的数据检索处理单元3使其哈希表指定单元12基于检索目标数据的键,从分别存储从数据集划分的多个数据集的多个哈希表22中指定存储包括检索目标数据的数据集的一个哈希表22。
[0218]这里,在接收到压缩字符串“aa”作为检索目标数据的键时(步骤G10),数据检索处理单元3使其哈希表指定单元12计算作为检索目标数据的键的压缩字符串“aa”的CRC32值(步骤G20)。然后,计算在将所计算的CRC32值(这里为“0xl4429f04”)除以小规模数据集的数量(这里为“5”)的情况下的余数的值(CRC值;这里为“3”)(步骤G30)。
[0219]然后,数据检索处理单元3使其哈希系数值获取单元13基于检索目标数据的键,利用对应关系表(参照图32)和哈希系数值表(参照图31)来获取指定与一个数据集相对应的一个哈希函数的一个哈希系数的值(步骤G40和G50),其中,该对应关系表将多个数据集与用于指定多个哈希函数的哈希系数的值彼此关联,该哈希系数值表存储用于指定多个哈希函数的多个哈希系数的值。
[0220]这里,数据检索处理单元3使其哈希系数值获取单元13利用以上述方式基于检索目标数据的键计算的CRC值(这里为“3”)并且利用CPU高速缓冲存储器111中的对应关系表(参照图32)来获取索引号(这里为“2”)(步骤G40)。然后,利用索引号(这里为“2”)从CPU高速缓冲存储器111中的哈希系数值表(参照图31)获取指定与包括检索目标数据的数据集相对应的哈希函数的哈希系数的值(这里为R1至R8的值)(步骤G50)。
[0221]然后,数据检索处理单元3使其哈希值计算单元14利用检索目标数据的键和一个哈希系数的值,通过一个哈希函数来计算哈希值(步骤G60)。
[0222] 这里,数据检索处理单元3使其哈希值计算单元14利用检索目标数据的键(这里为压缩字符串“aa”)以及已经以上述方式获取的并且指定与包括检索目标数据的数据集相对应的哈希函数的哈希系数的值(这里为R1至R8的值),通过如下一个哈希函数来计算哈希值(步骤G60):该哈希函数在数据的键串(X1, x2,X3,...,xj被表示为χκ(I≤K≤η)的情况下由哈希系数R (I ^ 256)的值指定并且包括在由fK (?) =^(Xih) XR+xK[其中G(Xtl)=Rtl(&是初始值)]表示的函数组中。然后,计算在将所计算的哈希值除以关于包括检索目标数据的数据集的哈希表22的大小(这里为“5”)的情况下的余数的值,并且获得“I”作为余数值(步骤G60)。
[0223]然后,数据检索处理单元3使其读出单元15从哈希表22中读出存储在基于哈希值指定的第一存储位置和与第一存储位置邻接的第二存储位置中的数据和键(步骤G70)。
[0224]这里,数据检索处理单元3使其读出单元15从主存储器101中,具体地从由以上述方式基于检索目标数据的键计算的CRC值(这里为“3”)所指定的哈希表(第三哈希表)22,读出存储在由在将以上述方式计算的哈希值除以哈希表22的大小的情况下的余数值(这里为“I”)所指定的地址(第一存储位置;这里为“I”)和下一地址(第二存储位置;这里为“2”)中的数据和键。
[0225]然后,数据检索处理单元3使其输出单元16在判定从第一存储位置或者第二存储位置读出的键与检索目标数据的键一致时输出与被判定为一致的键相关联的数据作为检索目标数据(步骤G80至GlOO )。
[0226]这里,数据检索处理单元3使其输出单元16首先判定从基于哈希值指定的地址(这里为“I”)读出的键(这里为“aab”)是否与检索目标数据的键(这里为“aa”)一致(步骤G80)。然后,判定从基于哈希值指定的地址的下一地址(这里为“2”)读出的键(这里为“aa”)是否与检索目标数据的键(这里为“aa”)一致(步骤G90)。作为上述判定的结果判定从基于哈希值指定的地址的下一地址(这里为“2”)读出的键与检索目标数据的键一致。然后,获得与从基于哈希值指定的地址的下一地址(这里为“2”)读出的键(这里为“aa”)相关联的数据(这里为“C”)(步骤G90)并且输出是检索目标数据作为压缩代码(步骤G100)。
[0227]附带地,在将上述数据检索装置(数据存储方法和数据检索方法)用作用于数据压缩的字典的字典型数据压缩系统中,通过利用检索处理时间不依赖于检索目标字符串的长度的性质,可以通过用于以以下方式从给定字符串的顶部起发现最长一致字符串的过程并且通过二叉树搜索法和该过程的顺序应用来压缩给定字符串以获得压缩代码串。与此相反,在使用前缀树的情况下,由于检索处理时间与检索目标字符串的长度成比例地增加,所以在从顶部起的最长一致字符串较长的情况下,用于发现最长一致字符串所需的时间变长并且数据压缩处理时间变长。
[0228]这里,采用其中在字典型数据压缩系统中压缩字符串“aabbabb”以获得压缩代码串的情况作为示例并对其进行说明。
[0229]首先,当字典型数据压缩系统接收到对字符串“aabbabb”的压缩请求时(步骤H10),其首先将字符串“aabb”输入到上述数据检索装置I中(步骤H20)。然后,当上述数据检索装置I接收到压缩字符串“aabb”作为检索目标数据(压缩代码)的键时,其执行类似于上述处理的处理,并输出错误消息。因此,字典型数据压缩系统获得关于字符串“aabb”的错误消息(步骤H20)。
[0230]然后,字典型数据压缩系统将字符串“aa”输入到数据检索装置I中(步骤H30)。然后,当上述数据检索装置I接收到压缩代码串“aa”作为检索目标数据(压缩代码)的键时,其执行类似于上述处理的处理,并输出“C”作为是检索目标数据的压缩代码。因此,字典型数据压缩系统获得“C”作为关于字符串“aa”的压缩代码(步骤H30)。
[0231]然后,字典型数据压缩系统将字符串“aab”输入到上述数据检索装置I中(步骤H40 )。然后,当上述数据检索装置I接收到压缩代码串“ aab ”作为检索目标数据(压缩代码)的键时,其执行类似于上述处理的处理,并输出“H”作为是检索目标数据的压缩代码。因此,字典型数据压缩系统获得“H”作为关于字符串“aab”的压缩代码(步骤H40)。
[0232]当字典型数据压缩系统以此方式获得关于压缩代码串“aabb”的错误消息并且获得关于压缩代码串“aa”的压缩代码“C”,然后获得关于压缩代码串“aab”的压缩代码“H”时,其判定在字典中从字符串(aabbabb)的顶部起的最长一致字符串为“aab”(步骤H50)。
[0233]此后,字典型数据压缩系统将字符串“bab”输入到上述数据检索装置I中(步骤H60)。然后,当上述数据检索装置I接收到压缩字符串“bab”作为检索目标数据(压缩代码)的键时,其执行类似于上述处理的处理,并输出“L”作为是检索目标数据的压缩代码。因此,字典型数据压缩系统获得“L”作为关于字符串“bab”的压缩代码(步骤H60)。
[0234]然后,字典型数据压缩系统将字符串“babb”输入到上述数据检索装置I中(步骤H70)。然后,当数据检索装置I接收到压缩字符串“babb”作为检索目标数据(压缩代码)的键时,其执行类似于上述处理的处理,并输出错误消息。因此,字典型数据压缩系统获得关于字符串“babb”的错误消息(步骤H70)。
[0235]当以此方式获得关于压缩字符串“bab”的压缩代码“L”并且获得关于压缩字符串“babb”的错误消息时,字典型数据压缩系统判定在词典中从字符串“babb”的顶部起的最长一致字符串为“bab”(步骤H80)。
[0236]然后,字典型数据压缩系统将字符串“b”输入到上述数据检索装置I中(步骤H90)。然后,当上述数据检索装置I接收到压缩字符串“b”作为检索目标数据(压缩代码)的键时,其执行类似于上述处理的处理,并输出“B”作为是检索目标数据的压缩代码。因此,字典型数据压缩系统获得“B”作为关于字符串“b”的压缩代码(步骤H90)。
[0237]然后,字典型数据压缩系统基于以上述方式所获得的关于压缩字符串“aab”的压缩代码“H”、关于压缩字符串“bab”的压缩代码“L”以及关于压缩字符串“b”的压缩代码“B”,获得“HLB”作为是字符串“aabbabb”的压缩形式的压缩代码串并且输出“HLB”(步骤H100)。
[0238]因此,由于如上所述的这种字典型数据压缩系统将上述数据检索装置I用作用于数据压缩的字典,优点在于可以增加数据存储速度和数据检索速度,同时尽可能地抑制数据检索效率的降低。例如,如果将用于计算哈希值以访问构成字典的哈希表22的对应关系表和哈希系数值表存储在CPU高速缓冲存储器111中,则字典型数据压缩系统可以提高数据压缩处理的速度,并且提高对来自用户的数据更新请求或数据插入请求的响应能力。
[0239]要注意,本发明并不限于上面结合实施方式描述的配置,而可以在不脱离本发明的精神和范围的情况下以各种方式进行修改。
[0240]例如,在上述实施方式中,数据检索装置被配置为使得将数据存储程序或数据检索程序安装在计算机中。然而,可以以存储在计算机可读记录介质中的状态来提供用于使计算机执行上述实施方式中的处理的数据存储程序或数据检索程序(即用于使计算机执行上述这些功能的数据存储程序和数据检索程序)。
[0241]这里,记录介质包括可以存储程序的任何介质,例如,存储器(如半导体存储器)和盘(如磁盘、光盘[例如,⑶(致密盘)-ROM、DVD (数字多功能盘)、蓝光盘等])以及磁光盘(MO)。要注意,磁盘、光盘、磁光盘等被称为便携式记录介质。
[0242]在此情况下,通过驱动装置从便携式记录介质中读出数据存储程序或数据检索程序,并且将所读出的数据存储程序或数据检索程序安装到存储装置中。作为安装的结果,实现了上面结合实施方式描述的数据检索装置、数据存储方法和数据检索方法,并且通过CPU读出并执行安装在存储装置中的数据存储程序或数据检索程序来执行实施方式中的处理。要注意,计算机可以直接从便携式记录介质中读出程序,并且根据程序执行处理。
[0243]此外,可以例如通过作为传输介质的网络(例如,因特网、通信电路(如公共电路或专用电路等))来提供用于使计算机执行实施方式中的处理的数据存储程序或数据检索程序。
[0244]例如,程序提供者可以通过网络(例如,因特网或局域网(LAN)和通信接口)将设置在不同计算机如服务器上的数据存储程序或数据检索程序安装到存储装置中。作为这种安装的结果,实现了上面结合实施方式所描述的数据检索装置、数据存储方法和数据检索方法,并且类似于上述实施方式的情况,通过CPU读出并执行安装在存储装置中的数据存储程序或数据检索程序来执行实施方式中的处理。要注意,每当从不同的计算机如服务器向计算机传输程序时,计算机可以根据所接收的程序连续地执行处理。
【权利要求】
1.一种数据检索装置,包括: 数据划分单元,其将数据集划分为多个数据集; 哈希函数确定单元,其确定与所述多个数据集相对应的多个哈希函数; 哈希系数值信息生成单元,其生成包括指定所述多个哈希函数的多个哈希系数的值的哈希系数值信息; 对应关系信息生成单元,其生成将指定所述多个哈希函数的所述多个哈希系数的值与所述多个数据集彼此关联的对应关系信息;以及 哈希信息生成单元,其生成与所述多个数据集相对应的多个哈希信息;其中, 所述哈希函数确定单元执行以下操作: 针对所述数据集中的每个数据集,基于包括在该数据集中的多个数据的键,利用候选哈希函数来计算 哈希值,并且判定所述多个数据的全部是否能够被存储到基于所述哈希值指定的第一存储位置或与所述第一存储位置邻接的第二存储位置;以及 将所述候选哈希函数确定为与如下数据集相对应的哈希函数:关于该数据集,判定了所述多个数据的全部能够被存储到所述第一存储位置或所述第二存储位置;并且 所述哈希信息生成单元通过如下方式生成用于所述数据集的所述哈希信息:针对所述数据集中的每个数据集,将所述数据和所述键存储到所述第一存储位置或所述第二存储位置,其中所述第一存储位置是基于根据所述多个数据的键,利用与所述数据集相对应的所述哈希函数计算的哈希值指定的。
2.根据权利要求1所述的数据检索装置,其中,所述对应关系信息生成单元生成具有能够保留在高速缓冲存储器中的信息量的所述对应关系信息;并且 所述哈希系数值信息生成单元生成具有能够保留在所述高速缓冲存储器中的信息量的所述哈希系数值信息。
3.根据权利要求1或2所述的数据检索装置,其中,所述哈希函数确定单元将如下哈希函数用作所述候选哈希函数:在数据的键串Ix1, X2, X3,, χ?}被表示为χκ的情况下,该哈希函数由哈希系数R的值指定,并且包括在由400=40^) XR+xK表示的函数组中,其中,1≤K≤n,1≤R≤256,fK(x0)=R0,R0是初始值。
4.根据权利要求1至3中任一项所述的数据检索装置,其中,所述哈希函数确定单元在发现如下两个或更多个数据集时将所述候选哈希函数确定为与所述两个或更多个数据集相对应的哈希函数:关于所述两个或更多个数据集,判定了所述多个数据的全部能够被存储到所述第一存储位置或所述第二存储位置;并且 所述对应关系信息生成单元生成将指定一个哈希函数的哈希系数的值与所述两个或更多个数据集彼此关联的对应关系信息。
5.一种数据检索装置,包括: 哈希信息指定单元,其从存储通过划分数据集而获得的多个数据集的多个哈希信息中,基于检索目标数据的键来指定存储有包括所述检索目标数据的一个数据集的一个哈希信息; 哈希系数值获取单元,其利用对应关系信息和哈希系数值信息来获取基于所述检索目标数据的键指定与所述一个数据集相对应的一个哈希函数的一个哈希系数的值,其中,所述对应关系信息将所述多个数据集与指定多个哈希函数的哈希系数的值彼此关联,所述哈希系数值信息包括指定所述多个哈希函数的多个哈希系数的值; 哈希值计算单元,其利用所述检索目标数据的键和所述一个哈希系数的值,通过所述一个哈希函数来计算哈希值; 读出单元,其从所述一个哈希信息中读出存储在基于所述哈希值指定的第一存储位置和与所述第一存储位置邻接的第二存储位置中的数据和键;以及 输出单元,其在判定从所述第一存储位置或所述第二存储位置读出的键与所述检索目标数据的键一致时,输出与被判定为一致键的所述键相关联的数据作为所述检索目标数据。
6.一种由计算机执行的数据存储方法,包括: 将数据集划分为多个数据集; 确定与所述多个数据集相对应的多个哈希函数; 生成包括指定所述多个哈希函数的多个哈希系数的值的哈希系数值信息; 生成将指定所述多个哈希函数的所述多个哈希系数的值与所述多个数据集彼此关联的对应关系/[目息;以及 生成与所述多个数据集相对应的多个哈希信息;其中, 所述确定多个哈希函数包括: 针对所述数据集中的每个数据集,基于包括在该数据集中的多个数据的键,利用候选哈希函数来计算哈希值,并且判定所述多个数据的全部是否能够被存储到基于所述哈希值指定的第一存储位置或与所述第一存储位置邻接的第二存储位置;以及 将所述候选哈希函数确定为与如下数据集相对应的哈希函数:关于该数据集,判定了所述多个数据的全部能够被存储到所述第一存储位置或所述第二存储位置;并且 所述生成多个哈希系数值信息包括通过如下方式生成用于所述数据集的哈希信息:针对所述数据集中的每个数据集,将所述数据和所述键存储到所述第一存储位置或所述第二存储位置,其中所述第一存储位置是基于根据所述多个数据的键,利用与所述数据集相对应的哈希函数计算的哈希值指定的。
7.根据权利要求6所述的数据存储方法,其中,所述生成对应关系信息包括生成具有能够保留在高速缓冲存储器中的信息量的所述对应关系信息;并且 所述生成哈希系数值信息包括生成具有能够保留在所述高速缓冲存储器中的信息量的所述哈希系数值信息。
8.根据权利要求6或7所述的数据存储方法,其中,在确定所述多个哈希函数的过程中,将如下哈希函数用作所述候选哈希函数:在数据的键串Ix1, x2,x3,...,xn}被表示为Xk的情况下,该哈希函数由哈希系数R的值指定,并且包括在由fK(xK) =fK(Xim) XR+xK表示的函数组中,其中,I≤K≤n,l≤R≤256,fK (x。) =R。,R。是初始值。
9.根据权利要求6至8中任一项所述的数据存储方法,其中,所述确定多个哈希函数包括:在发现下述两个或更多个数据集时将所述候选哈希函数确定为与所述两个或更多个数据集相对应的哈希函数:关于所述两个或更多个数据集,判定了所述多个数据的全部能够被存储到所述第一存储位置或所述第二存储位置;并且 生成所述对应关系信息包括:生成将指定一个哈希函数的哈希系数的值与所述两个或更多个数据集彼此关联的对应关系信息。
10.一种由计算机执行的数据检索方法,包括: 基于检索目标数据的键,从存储通过划分数据集而获得的多个数据集的多个哈希信息中指定存储包括所述检索目标数据的一个数据集的一个哈希信息; 利用对应关系信息和哈希系数值信息来获取基于所述检索目标数据的键指定与所述一个数据集相对应的一个哈希函数的一个哈希系数的值,其中,所述对应关系信息将所述多个数据集与指定多个哈希函数的哈希系数的值彼此关联,所述哈希系数值信息包括指定所述多个哈希函数的多个哈希系数的值; 利用所述检索目标数据的键和所述一个哈希系数的值,通过所述一个哈希函数来计算哈希值; 从所述一个哈希信息中读出存储在基于所述哈希值指定的第一存储位置和与所述第一存储位置邻接的第二存储位置中的数据和键;以及 在判定从所述第一存储位置或所述第二存储位置读出的所述键与所述检索目标数据的键一致时, 输出与被判定为一致键的所述键相关联的数据作为所述检索目标数据。
【文档编号】G06F17/30GK103914506SQ201310739206
【公开日】2014年7月9日 申请日期:2013年12月26日 优先权日:2012年12月28日
【发明者】小林郁弥 申请人:富士通株式会社