CN117891414A - 一种基于完美哈希的数据存储方法及相关设备 - Google Patents
一种基于完美哈希的数据存储方法及相关设备 Download PDFInfo
- Publication number
- CN117891414A CN117891414A CN202410295896.4A CN202410295896A CN117891414A CN 117891414 A CN117891414 A CN 117891414A CN 202410295896 A CN202410295896 A CN 202410295896A CN 117891414 A CN117891414 A CN 117891414A
- Authority
- CN
- China
- Prior art keywords
- data
- key
- target
- value
- perfect hash
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 71
- 238000013500 data storage Methods 0.000 title claims abstract description 20
- 239000012634 fragment Substances 0.000 claims abstract description 66
- 238000004590 computer program Methods 0.000 claims description 16
- 238000004364 calculation method Methods 0.000 claims description 6
- 238000004458 analytical method Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 15
- 230000006835 compression Effects 0.000 description 11
- 238000007906 compression Methods 0.000 description 11
- 230000008520 organization Effects 0.000 description 9
- 230000008569 process Effects 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 238000005192 partition Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012856 packing Methods 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 101100242890 Quaranfil virus (isolate QrfV/Tick/Afghanistan/EG_T_377/1968) PA gene Proteins 0.000 description 1
- 101100247669 Quaranfil virus (isolate QrfV/Tick/Afghanistan/EG_T_377/1968) PB1 gene Proteins 0.000 description 1
- 101100242901 Quaranfil virus (isolate QrfV/Tick/Afghanistan/EG_T_377/1968) PB2 gene Proteins 0.000 description 1
- 101150025928 Segment-1 gene Proteins 0.000 description 1
- 101150082826 Segment-2 gene Proteins 0.000 description 1
- 101150027881 Segment-3 gene Proteins 0.000 description 1
- 101100242902 Thogoto virus (isolate SiAr 126) Segment 1 gene Proteins 0.000 description 1
- 101100194052 Thogoto virus (isolate SiAr 126) Segment 2 gene Proteins 0.000 description 1
- 101100242891 Thogoto virus (isolate SiAr 126) Segment 3 gene Proteins 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书提供了一种基于完美哈希的数据存储方法及相关设备。该方法包括:将待存储的目标数据集划分为与其包含的key‑value数据的数据量相匹配的多个数据片段,每个数据片段中包含所述目标数据集中的部分key‑value数据;计算与每个数据片段中包括的多个key‑value数据分别对应的完美哈希槽位,将每个数据片段划分为与其包含的key‑value数据的数据量相匹配的多个数据块,每个数据块中包含按序排列的若干完美哈希槽位,每个完美哈希槽位中包含与其对应的至少一个key‑value数据;将多个数据片段依次存储至磁盘中,且在存储每个数据片段时,按照完美哈希槽位的排列顺序依次存储其中的多个数据块。
Description
技术领域
本说明书一个或多个实施例涉及数据库技术领域,尤其涉及一种基于完美哈希的数据存储方法及相关设备。
背景技术
键值对(key-value,KV)存储系统作为很多服务系统的后端存储,其每次更新数据时会指定相应的key以及对应的 value 数据。在后续的查找过程中,可以通过输入的key来获取此前写入的 value 数据。
通常情况下,KV存储系统往往包含了海量的 KV数据集合,如何高效的组织并存储这些 KV数据,既关系到整体数据集的最终存储空间大小,也会影响到整个KV存储系统的数据查询效率。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种基于完美哈希的数据存储方法及相关设备。
第一方面,本说明书提供了一种基于完美哈希的数据存储方法,所述方法包括:
将待存储的目标数据集划分为与其包含的key-value数据的数据量相匹配的多个数据片段,每个数据片段中包含所述目标数据集中的部分key-value数据;
计算与每个数据片段中包含的多个key-value数据分别对应的完美哈希槽位,并将每个数据片段划分为与其包含的key-value数据的数据量相匹配的多个数据块;其中,每个数据块中包含按序排列的若干完美哈希槽位,每个完美哈希槽位中包含与其对应的至少一个key-value数据;
将所述多个数据片段依次存储至磁盘中,并且,在存储每个数据片段时,按照完美哈希槽位的排列顺序依次存储其中的多个数据块。
第二方面,本说明书提供了一种基于完美哈希的数据存储装置,所述装置包括:
数据片段划分单元,用于将待存储的目标数据集划分为与其包含的key-value数据的数据量相匹配的多个数据片段,每个数据片段中包含所述目标数据集中的部分key-value数据;
完美哈希计算单元,用于计算与每个数据片段中包含的多个key-value数据分别对应的完美哈希槽位,并将每个数据片段划分为与其包含的key-value数据的数据量相匹配的多个数据块;其中,每个数据块中包含按序排列的若干完美哈希槽位,每个完美哈希槽位中包含与其对应的至少一个key-value数据;
存储单元,用于将所述多个数据片段依次存储至磁盘中,并且,在存储每个数据片段时,按照完美哈希槽位的排列顺序依次存储其中的多个数据块。
第三方面,本说明书提供了一种基于完美哈希的数据查询方法,所述方法包括:
解析接收到的查询语句,得到所述查询语句中包含的与待查询的key-value数据对应的目标key;
计算所述目标key的目标哈希值,并在磁盘中存储的多个数据片段中确定出与所述目标哈希值对应的目标数据片段;
获取所述目标数据片段中包含的完美哈希参数,并基于所述完美哈希参数,计算与所述目标key对应的目标完美哈希槽位;以及,
从所述目标数据片段包含的多个数据块中读取出所述目标完美哈希槽位所在的目标数据块,并从所述目标数据块的所述目标完美哈希槽位中获取所述待查询的key-value数据。
第四方面,本说明书提供了一种基于完美哈希的数据查询装置,所述装置包括:
语句解析单元,用于解析接收到的查询语句,得到所述查询语句中包含的与待查询的key-value数据对应的目标key;
确定单元,用于计算所述目标key的目标哈希值,并在磁盘中存储的多个数据片段中确定出与所述目标哈希值对应的目标数据片段;
完美哈希计算单元,用于获取所述目标数据片段中包含的完美哈希参数,并基于所述完美哈希参数,计算与所述目标key对应的目标完美哈希槽位;以及,
获取单元,用于从所述目标数据片段包含的多个数据块中读取出所述目标完美哈希槽位所在的目标数据块,并从所述目标数据块的所述目标完美哈希槽位中获取所述待查询的key-value数据。
相应地,本说明书还提供了一种计算机设备,包括:存储器和处理器;所述存储器上存储有可由所述处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行上述第一方面所述的基于完美哈希的数据存储方法,或者第三方面所述的基于完美哈希的数据查询方法。
相应地,本说明书还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行如上述第一方面所述的基于完美哈希的数据存储方法,或者第三方面所述的基于完美哈希的数据查询方法。
相应地,本说明书还提供了一种计算机程序产品,所述计算机程序产品包括计算机程序/指令,所述计算机程序/指令被处理器执行时,执行如上述第一方面所述的基于完美哈希的数据存储方法,或者第三方面所述的基于完美哈希的数据查询方法。
综上所述,本申请基于待存储的KV数据集中的数据量大小,将其切分为多个数据片段。进一步地,针对每个数据片段内的多个key-value数据分别计算与其对应的完美哈希槽位。并且,根据每个数据片段中包含的key-value数据的数据量大小,按照完美哈希槽位的顺序,将每个数据片段中相邻的若干哈希槽位中的key-value数据打包成一个数据块。如此,本申请在存储上述KV数据集时,可以按照完美哈希槽位的顺序,依次将每个数据块存入磁盘,从而实现整体数据集以顺序追加写入的方式存储至磁盘中。后续进行数据查询时,可以根据输入的key计算与其对应的完美哈希槽位,并根据该完美哈希槽位从磁盘中读取出相应的数据块,从而实现了索引空间大小和查询效率之间的合理优化。
附图说明
图1是一示例性实施例提供的一种基于完美哈希的数据存储方法的流程示意图;
图2是一示例性实施例提供的一种数据集的分段示意图;
图3是一示例性实施例提供的一种数据片段的内部结构示意图;
图4是一示例性实施例提供的一种数据块的内部结构示意图;
图5是一示例性实施例提供的一种完美哈希槽位的内部数据组织示意图;
图6是一示例性实施例提供的另一种完美哈希槽位的内部数据组织示意图;
图7是一示例性实施例提供的一种基于完美哈希的数据存储装置的结构示意图;
图8是一示例性实施例提供的一种计算机设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
需要说明的是,本申请中所述的“多个”是指两个或者两个以上。
在一示出的实施方式中,常规的基于日志结构合并树(The Log-StructuredMerge Tree,LSM-Tree)来组织数据集的存储引擎,通常采用排序队列表 (Sorted StringTable,SST)格式,将KV数据集中的所有key-value数据按照 key的前缀进行排序,并顺序存储所有的 key-value数据,以便后续采用二分查找的方式进行数据查询。然而,二分查找的复杂度较高,需要消耗较多的CPU 资源,并且查找过程中可能存在索引和实际 key-value数据的多次IO操作,效率低下,无法满足用户的实际需求。
基于此,本说明书提供了一种技术方案,将全量的KV数据集划分为多个数据片段,并针对每个数据片段中的多个key-value数据计算完美哈希索引,并且将每个数据片段细分为合适的多个数据块依次保存,从而实现索引空间大小和查询效率之间的合理优化。
在实现时,本申请先获取待存储的目标数据集,该目标数据集中可以包含多个key-value数据。然后将待存储的目标数据集划分为与其包含的key-value数据的数据量相匹配的多个数据片段,每个数据片段可以包括目标数据集中的部分key-value数据。进一步地,本申请可以计算与每个数据片段中包括的多个key-value数据分别对应的完美哈希槽位,并将每个数据片段划分为与其包含的key-value数据的数据量相匹配的多个数据块;其中,每个数据块中包含按序排列的若干完美哈希槽位,每个完美哈希槽位中包含与其对应的至少一个key-value数据。最后,本申请可以将上述多个数据片段依次存储至磁盘中,并且,在存储每个数据片段时,按照完美哈希槽位的顺序依次存储其中的多个数据块。
在以上技术方案中,本申请基于待存储的KV数据集中的数据量大小,将其切分为多个数据片段。进一步地,针对每个数据片段内的多个key-value数据分别计算与其对应的完美哈希槽位。并且,根据每个数据片段中包含的key-value数据的数据量大小,按照完美哈希槽位的顺序,将每个数据片段中相邻的若干哈希槽位中的key-value数据打包成一个数据块。如此,本申请在存储上述KV数据集时,可以按照完美哈希槽位的顺序,依次将每个数据块存入磁盘,从而实现整体数据集以顺序追加写入的方式存储至磁盘中。后续进行数据查询时,可以根据输入的key计算与其对应的完美哈希槽位,并根据该完美哈希槽位从磁盘中读取出相应的数据块,从而实现了索引空间大小和查询效率之间的合理优化。
请参阅图1,图1是一示例性实施例提供的一种基于完美哈希的数据存储方法的流程示意图。该方法可以应用于基于完美哈希索引的存储引擎中。如图1所示,该方法具体可以包括如下步骤S101-步骤S103。
步骤S101,将待存储的目标数据集划分为与其包含的key-value数据的数据量相匹配的多个数据片段,每个数据片段中包含所述目标数据集中的部分key-value数据。
首先,数据库中的存储引擎可以先获取当前待存储的目标数据集,该目标数据集中包含的多个key-value数据可以为当前待存储的全量key-value数据。
需要说明的是,本说明书对上述数据库的具体类型不作特别限定,在一示出的实施方式中,该数据库可以是以key-value结构存储数据的任何类型的数据库,比如图数据库,等等,本说明书对此不做具体限定。
在一示出的实施方式中,该待存储的目标数据集可以位于存储引擎管理的内存中,以待写入磁盘中实现数据的持久化。
需要说明的是,上述磁盘可以是存储引擎管理的本地磁盘,也可以是基于分布式文件系统的云磁盘,等等,本说明书对此不做具体限定。
进一步地,存储引擎可以将待存储的目标数据集划分为与其包含的key-value数据的数据量相匹配的多个数据片段(Segment),或者说多个分区。其中,每个数据片段中可以包含目标数据集中的部分key-value数据。
在一示出的实施方式中,存储引擎具体可以将目标数据集划分为2N个数据片段,其中,N可以为大于或者等于0的整数,也就是说,存储引擎可以将数据集划分为2个、4个、8个或者16个数据片段,等等,本说明书对此不做具体限定。
应理解,一般情况下,目标数据集中包含的数据量越大,划分的数据片段可以越多,以避免单个数据片段数据过多的问题;相应的,目标数据集中包含的数据量越小,划分的数据片段可以越少,甚至在目标数据集极小的情况下,可以不对其进行划分,或者说仅将其划分为单个数据片段(即N等于0)。
在一示出的实施方式中,存储引擎可以计算与目标数据集中的每个key-value数据的key对应的哈希值。需要说明的是,本申请对计算哈希值的具体算法不作特别限定。
进一步地,存储引擎可以根据计算得到的哈希值,确定与每个key-value数据对应的数据片段,并将每个key-value数据划分到对应的数据片段中。
在一示出的实施方式中,本申请可以选取与每个key-value数据的key对应的哈希值中的若干个比特(bit)为作为索引,将每个key-value数据划分到对应的数据片段中,等等,本说明书对此不做具体限定。
请参阅图2,图2是一示例性实施例提供的一种数据集的分段示意图。如图2所示,存储引擎可以将目标数据集划分为4个数据片段,分别为Segment0、Segment1、Segment2、Segment3。
如图2所示,该多个Segment可以存储于磁盘的一个文件中,并且,在该文件的尾部,即最后一个数据片段后面,可以存储与该多个数据片段对应的脚注信息(Footer)。
在一示出的实施方式中,该脚注信息可以包括该多个数据片段的数量,每个数据片段在文件中的偏移地址(offset)或者说起始地址,每个数据片段的长度,等等,本说明书对此不做具体限定。
示例性的,图2所示的脚注信息具体可以包含如下信息:
Footer {
uint32_t SegmentCount = 4;
uint32_t Segment0Offset = 0;
uint32_t Segment0Length = 10240;
uint32_t Segment1Offset = 10240;
uint32_t Segment1Length = 4096;
uint32_t Segment2Offset = 14336;
uint32_t Segment2Length = 8192;
uint32_t Segment3Offset = 22528;
uint32_t Segment3Length = 16384;
};
如上所述,脚注信息描述了数据片段的总数量为4,第一个数据片段的偏移地址为0,长度为10240字节;第二个数据片段的偏移地址为10240,长度为4096字节;第三个数据片段的偏移地址为14336,长度为8192字节;第四个数据片段的偏移地址为22528,长度为16384字节。
基于上述对目标数据集的划分,相应的,在存储该目标数据集时,可以依次将每个数据片段存储至磁盘中,并在已存储的最后一个数据片段后面进一步存储相应的脚注信息。
进一步地,在完成上述多个数据片段的存储之后,存储引擎可以根据查询时输入的key计算其哈希值,然后根据该哈希值在多个数据片段中确定出对应的数据片段,并在该数据片段内部查找与输入的key对应的数据,具体可参考后续实施例的描述,此处不再展开详述。
步骤S102,计算与每个数据片段中包括的多个key-value数据分别对应的完美哈希槽位,并将每个数据片段划分为与其包含的key-value数据的数据量相匹配的多个数据块;其中,每个数据块中包含按序排列的若干完美哈希槽位,每个完美哈希槽位中包含与其对应的至少一个key-value数据。
进一步地,在每个数据片内部,存储引擎可以基于该数据片段内的多个key-value数据的key进行完美哈希计算,具体可以计算与该多个key-value数据分别对应的完美哈希槽位(slot)。示例性的,若当前数据片段中包含M 个 key-value数据,则完美哈希映射表的完美哈希槽位的数量应该大于或者等于 M,可以将完美哈希槽位的总数标记为SlotCount。
需要说明的是,本申请对完美哈希映射的具体实现方法不作特别限定,本申请主要阐述基于完美哈希映射后的数据组织和存储方式。
在一示出的实施方式中,本申请可以先计算与每个key-value数据的key对应的普通哈希值,该普通哈希值例如可以为上述步骤S101中计算得到的哈希值。进一步地,本申请可以在该普通哈希值的基础上进行进一步计算,从而得到与每个key-value数据对应的完美哈希槽位,也就是说,本申请可以将计算得到的普通哈希值作为新的key来计算完美哈希。
通常情况下,完美哈希映射可以使得每个key-value数据对应的完美哈希槽位互不冲突,但是,在一些极端情况下,若多个key的普通哈希值相同,则与这多个key对应的完美哈希槽位也会相同,即一个完美哈希槽位会对应多个key-value数据。
综上,每个数据片段中可以包含按序排列的多个哈希槽位,例如slot0、slot1、slot2、slot3,等等,每个哈希槽位中可以包含至少一个key-value数据,具体地,可以包含对至少一个key-value数据进行编码后得到的编码数据(EncodedKVM)。其中,M代表与KV数据对应的元数据(meta)。
相应的,在一示出的实施方式中,本申请在存储每个数据片段时,可以顺序保存每个完美哈希槽位中的key-value数据。进一步地,在具体的保存过程中,存储引擎可以将多个哈希槽位中的key-value数据统一打包成一个数据块(DataBlock),示例性的,可以将连续的 2k个哈希槽位中的所有key-value数据打包为一个数据块。其中,k可以为大于或者等于0的整数,例如,k为 2,即表示将每四个连续的完美哈希槽位打包成一个数据块。
在一示出的实施方式中,存储引擎可以根据每个数据片段中包含的key-value数据的数据量,例如每个数据片段中包含的所有key-value数据的平均长度,确定应该把数据片段划分为多少个数据块,相当于确定数据片段中的每个数据块所包含的完美哈希槽位的数量。示例性的,若 key-value数据较小,则可以尽可能地将更多的哈希槽位打包到单个DataBlock内,即划分更少的数据块,从而实现更高的压缩效率,降低整体的内存索引空间的大小。示例性的,若key-value数据较大,则可以尽可能地将更少的哈希槽位打包到单个DataBlock内,即划分更多的数据块,以避免查询时单次 IO 过大,从而导致查询效率降低的问题。
如上所述,本申请在将目标数据集划分为多个数据片段的基础上,还可以将每个数据片段划分为多个数据块,在数据片段内部,所有的key-value数据将以数据块为单位顺序存放,每个数据块中可以包括按序排列的多个完美哈希槽位,每个完美哈希槽位中可以包含至少一个key-value数据。相应的,在存储每个数据片段时,可以依次保存其中的DataBlock0、DataBlock1、DataBlock2……,等等。
请参阅图3,图3是一示例性实施例提供的一种数据片段的内部结构示意图。如图3所示,每个数据片段内部可以包括按序排列的多个数据区域(或者说字段),具体可以包括:完美哈希索引区、多个数据块、数据分片区、数据块偏移地址(DataBlockOffsets)区、哈希值区和数据片段脚注信息(Segmentfooter)区。
如图3所示,位于头部的完美哈希索引区中保存了与该数据片段中的多个key-value数据对应的完美哈希参数(phcontext),该完美哈希参数用于计算与该多个key-value数据分别对应的完美哈希槽位。
如图3所示,完美哈希索引区之后包括多个按序排列的数据块,例如DataBlock1、DataBlock2等。在一示出的实施方式中,存储引擎保存每个数据块时还可以对数据块进行整体压缩或者对数据块中的部分key-value数据单独进行压缩,等等,以减少占用的存储空间,本说明书对此不做具体限定。
如图3所示,在最后一个数据块之后紧跟着一个附加数据(ExtraData)区域,该附加数据区域可以作为数据分片区,用于存储较大的key-value数据。在一示出的实施方式中,响应于上述目标数据集中的目标key-value数据的长度大于预设阈值(例如256字节或者1024字节等),存储引擎可以对该目标key-value数据进行切分,得到多个数据分片。其中,该多个数据分片中的目标数据分片(例如目标key-value数据中长度未超出预设阈值的部分)存储于与该目标key-value数据对应的完美哈希槽位中,而该多个数据分片中的其他数据分片可以存储于该ExtraData区域中。进一步地,与该目标key-value数据对应的完美哈希槽位中还可以保存其他数据分片在该ExtraData区域中的偏移地址。
示例性的,如果某条key-value数据小于所有 key-value数据的平均长度的两倍,则可以将该key-value数据直接顺序保存在数据块的完美哈希槽位中。若某条key-value数据超过所有 key-value数据的平均长度的两倍,则可以将其进行截断,仅在数据块的完美哈希槽位中保留部分数据,并将额外的被截断的多余数据分片保存到 ExtraData 区域,以及在其完美哈希槽位中记录该被截断的多余数据分片在 ExtraData 区域的偏移地址。
如图3所示,哈希值区中保存前面每个完美哈希槽位中的key-value数据中的key的哈希值(即普通哈希值)。在一示出的实施方式中,每个哈希值的长度具体可以是32bit或者 64bit,等等,本说明书对此不做具体限定。
如图3所示,在数据片段的尾部,存储了与该数据片段对应的脚注信息。在一示出的实施方式中,该脚注信息中可以包含以下示出的一个或多个信息的组合:前面各个数据区域(包括完美哈希索引区、各个DataBlock、ExtraData区域和哈希值区)在该数据片段中的偏移地址以及长度;每个数据块是否被压缩的信息;每个哈希槽位中的key-value数据是否被独立压缩的信息,等等,本说明书对此不做具体限定。通过该脚注信息中汇总的各项信息,可以获取数据片段中各个数据区域的偏移地址,从而可以在该数据片段中快速读取出各个数据区域中具体的数据内容。
进一步地,请参阅图4,图4是一示例性实施例提供的一种数据块的内部结构示意图。如图4所示,每个数据块内部可以包括按序排列的多个数据区域(或者说字段),具体可以包括:按序排列的多个完美哈希槽位、哈希槽位偏移地址区、哈希槽位压缩标识(slotCompressFlags)区和数据块控制信息区。
如图4所示,在每个数据块内部,首先顺序存入了与每个完美哈希槽位对应的key-value数据。在一示出的实施方式中,每个完美哈希槽位中存储的key-value数据具体可以是基于预设的编码规则将key-value数据进行编码后得到的编码数据,即EncodedKVM。
如图4所示,在最后一个哈希槽位之后可以紧跟着哈希槽位偏移地址区,该哈希槽位偏移地址区中保存了前面所有完美哈希槽位在该数据块中的偏移地址。在一示出的实施方式中,完美哈希槽位偏移地址的大小可以是 1 字节,2 字节,或者 4 字节,等等,本说明书对此不做具体限定。若所有 EncodedKVM 的总长度小于256字节,则每个offset可以仅占1个字节,足以表示所有完美哈希槽位的偏移地址;若所有 EncodedKVM 的总长度大于或等于256字节,且小于或等于65536字节,则每个offset可以占2 个字节;否则,若所有EncodedKVM 的总长度大于65536字节,则每个offset占4个字节,如此可以根据实际需求减少偏移地址对内存的占用。
如图4所示,在哈希槽位偏移地址区之后可以紧跟着哈希槽位压缩标识区,该哈希槽位压缩标识区中包括的多个哈希槽位压缩标识可以用于指示每个完美哈希槽位中的key-value数据是否被压缩。其中,每个完美哈希槽位的压缩标识可以对应一个bit,标识为0可以指示该完美哈希槽位的数据未被压缩,标识为1可以指示该完美哈希槽位的数据已被压缩,本说明书对此不做具体限定。
如图4所示,位于数据块尾部的数据块控制信息区(CtrlByte)中可以存储整个数据块的控制信息。在一示出的实施方式中,该CtrlByte可以占据1个字节。
如图4所示,CtrlByte中的最低两比特(bit1和bit0)可以表示前述哈希槽位压缩标记区的总长度,若bit1和bit0为00(即0x0),则表示不存在哈希槽位压缩标记,相当于表示该数据块内的所有key-value数据均未被压缩;若bit1和bit0为01(即0x1),则表示哈希槽位压缩标记区总共占据 1 个字节,相当于表示每个数据块中包含了8个完美哈希槽位;若bit1和bit0为 10(即0x2),则表示哈希槽位压缩标记区总共占据2个字节,相当于表示每个数据块中包含了16个完美哈希槽位;若bit1和bit0为11(即0x3),则表示哈希槽位压缩标记区总共占据4个字节,相当于表示每个数据块中包含了32个完美哈希槽位。
如图4所示,CtrlByte中的第4和第3个比特位(bit3和bit2)可以用于记录每个哈希槽位偏移地址所占的空间大小。如图4所示,bit3和bit2为00(即0x0)可以表示每个哈希槽位偏移地址占 1 个字节;bit3和bit2为01(即0x1)可以表示每个哈希槽位偏移地址占2个字节;bit3和bit2为10(即0x2)可以表示每个哈希槽位偏移地址占4个字节。
如图4所示,CtrlByte中剩余的第8至第5个比特位(bit7至bit4)为预留(reserved)区,可以用于描述其他任何可能的信息,本说明书对此不做具体限定。
进一步地,请参阅图5,图5是一示例性实施例提供的一种完美哈希槽位的内部数据组织示意图。如图5所示,若单个完美哈希槽位仅对应一条key-value数据,则该完美哈希槽位存储的编码数据中具体可以包括以下多个内容:控制信息区、键数据区、分片信息区、值数据区、元数据区。
如图5所示,控制信息区中包含与该完美哈希槽位中的编码数据所包含的key-value数据对应的控制信息。在一示出的实施方式中,该控制信息可以占据1个字节。
示例性的,控制信息中的最高比特位(即bit7)可以用于指示该完美哈希槽位中是否仅包含一个key-value数据。示例性的,若该bit7为0,则表示该完美哈希槽位中仅包含一个key-value数据,若该bit7为1,则表示该完美哈希槽位中包含多个key-value数据。应理解,图5所示为单个完美哈希槽位仅对应一条key-value数据时的数据组织示意图,因此图5中的bit7应为0。
示例性的,控制信息中的bit6可以用于指示该完美哈希槽位中包含的key-value数据是否具有对应的元数据,该元数据例如为key-value数据的写入时间,等等,本说明书对此不做具体限定。示例性的,若该bit6为0,则表示该完美哈希槽位中的key-value数据不包含对应的元数据,若该bit6为1,则表示该完美哈希槽位中的key-value数据包含对应的元数据。
示例性的,控制信息中的bit5可以用于指示该完美哈希槽位中包含的key-value数据是否为切分过的数据分片。示例性的,若该bit5为0,则表示该完美哈希槽位中的key-value数据不是切分过的数据分片,相应的,数据片段中可能不包含ExtraData区域;若该bit5为1,则表示该完美哈希槽位中的key-value数据是切分过的数据分片,相应的,数据片段中包含ExtraData区域。
示例性的,控制信息中的bit4可以用于指示键数据区中的键数据长度(keysize)字段所占用的长度,0 表示keysize字段占1个字节,1 表示keysize字段占2个字节。
示例性的,控制信息中的bit2和bit3可以用于表示其他任何可能的信息,本说明书对此不做具体限定。
示例性的,控制信息中的bit0和bit1可以用于表示与当前value对应的类型(ValueType),如图4所示,bit0和bit1为00可以表示该value是更新(update)的数据;bit0和bit1为01可以表示该value是改写(overwrite)的数据;bit0和bit1为10可以表示该value是删除(delete)的数据,本说明书对此不做具体限定。
如图5所示,在控制信息区之后紧跟着键数据区,该键数据区中依次包括用于描述key的长度的keysize字段,以及key数据本身。
如图5所示,在键数据区之后紧跟着分片信息区,该分片信息区中可以存储前述对key-value数据进行切分后得到的数据分片数量(ExtraCnt),以及每个数据分片在ExtraData 区域中的偏移地址(ExtraDataOffsets)。相应的,在进行数据查询时,可以通过这些分片信息(即数据分片的元数据信息)获取完整的key-value数据。应理解,若该完美哈希槽位中的 key-value数据不是特别大,则不会进行数据切分,相应的,编码数据中也不会存在该分片信息区。
如图5所示,在分片信息区之后紧跟着值数据区,该值数据区中依次包括用于描述经变长编码后的value的长度的VarValueSize字段,以及value数据本身。
如图5所示,在值数据区之后紧跟着元数据区,该元数据区中可以存储与该完美哈希槽位中的 key-value数据对应的元数据,例如key-value数据的写入时间,等等,本说明书对此不做具体限定。应理解,若该完美哈希槽位中的key-value数据不包含对应的元数据(即上述控制信息中的bit6为0),则可以不存在该元数据区。
进一步地,请参阅图6,图6是一示例性实施例提供的另一种完美哈希槽位的内部数据组织示意图。如图6所示,若单个完美哈希槽位对应多个key-value数据,则该完美哈希槽位存储的数据中具体可以包括以下多个内容:控制信息区,以及多个key-value数据各自的编码数据(可参考上述图5对应实施例的描述),并且,在每个key-value数据的编码数据之前还包含用于描述该编码数据的长度的KVsize字段。示例性的,如图6所示,每个KVsize字段可以占据4个字节,本说明书对此不做具体限定。
如图6所示,该控制信息区中包含与该完美哈希槽位中的编码数据所包含的key-value数据对应的控制信息。在一示出的实施方式中,该控制信息可以占据一个字节。
如图6所示,控制信息中的最高比特位(即bit7)可以用于指示该完美哈希槽位中是否仅包含一个key-value数据。示例性的,若该bit7为0,则表示该完美哈希槽位中仅包含一个key-value数据,若该bit7为1,则表示该完美哈希槽位中包含多个key-value数据。应理解,图6所示为单个完美哈希槽位对应多条key-value数据时的数据组织示意图,因此图6中的bit7应为1。
如图6所示,控制信息中的bit0至bit3可以表示该完美哈希槽位包含的 key-value数据的数量。此外,控制信息中的bit4至bit6可以表示任何可能的信息,本说明书对此不做具体限定。
步骤S103,将所述多个数据片段依次存储至磁盘中,并且,在存储每个数据片段时,按照完美哈希槽位的排列顺序依次存储其中的多个数据块。
按照上述数据组织方式,本申请可以将目标数据集的多个数据片段依次存储至磁盘中,并且,在存储每个数据片段时,可以按照完美哈希槽位的顺序依次将其中的多个数据块存储至磁盘中,从而实现整体数据集以顺序追加写入的方式存储至磁盘中。
下面,将基于上述数据组织和存储方式,对本申请提供的数据查询方法进行阐述。
首先,本申请可以接收用户发起的查询语句,并对该查询语句进行解析,得到该查询语句中包含的与待查询的key-value数据对应的目标key。
然后,存储引擎可以采用上述划分数据片段时相同的哈希计算方法,计算该目标key的目标哈希值,并在磁盘中已存储的多个数据片段中确定出与该目标哈希值对应的目标数据片段。示例性的,可以选取与该目标key的哈希值中的若干个比特(bit)作为索引,确定与该目标哈希值对应的目标数据片段,等等,本说明书对此不做具体限定。
进一步地,存储引擎可以先读取该目标数据片段的完美哈希索引区中存储的完美哈希参数,并基于该完美哈希参数,计算与该目标key对应的目标完美哈希槽位,例如SlotIndex。
进一步地,存储引擎可以读取该目标数据片段的哈希值区中存储的与该目标完美哈希槽位对应的哈希值,即Hashes[SlotIndex]。
在一示出的实施方式中,存储引擎可以先读取该目标数据片段尾部的脚注信息(Segmentfooter),并根据该脚注信息中记录的哈希值区在该数据片段中的偏移地址以及长度,在该目标数据片段中定位哈希值区,并进一步从该哈希值区中获取与该目标完美哈希槽位对应的哈希值Hashes[SlotIndex],等等,本说明书对此不做具体限定。
进一步地,存储引擎可以确定当前读取出的哈希值Hashes[SlotIndex]与上述计算得到的目标哈希值是否一致。
在一示出的实施方式中,若读取出的哈希值Hashes[SlotIndex]与计算得到的目标哈希值不一致,则说明该数据集中并不存在待查询的目标key,查询失败。
在一示出的实施方式中,若读取出的哈希值Hashes[SlotIndex]与计算得到的目标哈希值一致,则进一步地,存储引擎可以从该目标数据片段包含的多个数据块中确定出该目标完美哈希槽位所在的目标数据块。
进一步地,存储引擎可以从该数据片段的数据块偏移地址区中获取该目标数据块在该数据片段中的偏移地址,以根据该偏移地址读取出该目标数据块。
例如,若将每4个哈希槽位打包成一个数据块,可以通过 DataBlockOffsets[SlotIndex/4-1]获取数据块的起始位置,DataBlockOffsets[SlotIndex/4]-DataBlockOffsets[SlotIndex/4 - 1]则表示该数据块的长度。
进一步地,存储引擎在读取出该目标数据块后,便可以从该目标数据块的目标完美哈希槽位中获取待查询的key-value数据。具体地,存储引擎可以先获取目标数据块中存储的与该目标完美哈希槽位对应的偏移地址,并根据该偏移地址从目标数据块中读取出该目标完美哈希槽位中的编码数据EncodedKVM。
进一步地,存储引擎可以基于与上述编码规则相对应的解码规则,对该编码数据EncodedKVM进行解码,获得该目标完美哈希槽位中包含的至少一个key-value数据。
进一步地,存储引擎可以确定该至少一个key-value数据中的key是否与查询输入的目标key相同。
在一示出的实施方式中,若该目标完美哈希槽位中仅包含一个key-value数据,则可以直接比较该key-value数据中保存的key是否与输入的目标key相匹配,即比较二者是否相同。示例性的,若该key-value数据中的key与输入的目标key相匹配,则可以确定该key-value数据即为本次需要查询的key-value数据,直接返回其中的Value和 Meta 数据等。否则,若该key-value数据中的key与输入的目标key不匹配,则查询失败,返回查询失败的指示信息。
在一示出的实施方式中,若该目标完美哈希槽位中包含多个key-value数据,则依次比较每个key-value数据中的key是否与输入的目标Key相匹配。若任一key-value数据中的key与输入的目标Key相匹配,则可以确定该key-value数据即为本次需要查询的key-value数据,直接返回其中的Value和 Meta 数据等。若多个key-value数据中的key均与目标Key不匹配,则查询失败,返回查询失败的指示信息。
与上述方法流程实现对应,本说明书的实施例还提供了一种基于完美哈希的数据存储装置。请参阅图7,图7是一示例性实施例提供的一种基于完美哈希的数据存储装置的结构示意图,该装置70可以应用于数据库中的存储引擎。如图7所示,该装置70包括:
数据片段划分单元701,用于将待存储的目标数据集划分为与其包含的key-value数据的数据量相匹配的多个数据片段,每个数据片段中包含所述目标数据集中的部分key-value数据;
完美哈希计算单元702,用于计算与每个数据片段中包含的多个key-value数据分别对应的完美哈希槽位,并将每个数据片段划分为与其包含的key-value数据的数据量相匹配的多个数据块;其中,每个数据块中包含按序排列的若干完美哈希槽位,每个完美哈希槽位中包含与其对应的至少一个key-value数据;
存储单元703,用于将所述多个数据片段依次存储至磁盘中,并且,在存储每个数据片段时,按照完美哈希槽位的排列顺序依次存储其中的多个数据块。
在一示出的实施方式中,所述数据片段划分单元701,具体用于:
根据待存储的目标数据集包含的key-value数据的数据量,确定与其相匹配的数据片段的数量;
计算与所述目标数据集中包含的每个key-value数据的key对应的哈希值;
根据计算得到的哈希值,将每个key-value数据划分到对应的数据片段中。
在一示出的实施方式中,所述装置70还包括脚注信息存储单元704,用于:
在磁盘中已存储的最后一个数据片段之后,存储与所述多个数据片段对应的脚注信息;其中,所述脚注信息包括以下示出的一个或多个信息的组合:所述多个数据片段的数量、每个数据片段的偏移地址、每个数据片段的长度。
在一示出的实施方式中,每个数据片段中还包括位于第一个数据块之前的完美哈希索引区;其中,所述完美哈希索引区中包含用于计算与该数据片段中的多个key-value数据分别对应的完美哈希槽位的完美哈希参数。
在一示出的实施方式中,每个数据片段中还包括:位于最后一个数据块之后的数据块偏移地址区和哈希值区;其中,所述数据块偏移地址区中包含每个数据块在该数据片段中的偏移地址;哈希值区中包含与每个数据片段中的多个key-value数据的key分别对应的哈希值。
在一示出的实施方式中,所述数据片段中还包括数据分片区;所述装置70还包括数据分片单元705,用于:
响应于所述目标数据集中的目标key-value数据的长度大于预设阈值,对所述目标key-value数据进行切分,得到多个数据分片;其中,所述多个数据分片中的目标数据分片存储于与所述目标key-value数据对应的完美哈希槽位中,其他分片存储于所述数据分片区中。
在一示出的实施方式中,每个完美哈希槽位中包含的至少一个key-value数据包括:基于预设的编码规则对该至少一个key-value数据进行编码后得到的编码数据。
在一示出的实施方式中,每个完美哈希槽位中的编码数据中包含与key-value数据对应的控制信息,所述控制信息包含以下示出的一个或多个信息的组合:
该完美哈希槽位中是否仅包含一个key-value数据;
该完美哈希槽位中包含的key-value数据是否具有对应的元数据;
该完美哈希槽位中包含的key-value数据是否为切分过的数据分片。
在一示出的实施方式中,每个数据块中还包括:位于最后一个完美哈希槽位之后的哈希槽位偏移地址区;其中,所述哈希槽位偏移地址区包含每个完美哈希槽位在该数据块中的偏移地址。
在一示出的实施方式中,所述装置70还包括数据查询单元706,用于:
解析接收到的查询语句,得到所述查询语句中包含的与待查询的key-value数据对应的目标key;
计算所述目标key的目标哈希值,并在所述多个数据片段中确定出与所述目标哈希值对应的目标数据片段;
获取所述目标数据片段中的完美哈希索引区中存储的完美哈希参数,并基于所述完美哈希参数,计算与所述目标key对应的目标完美哈希槽位;以及,
从所述目标数据片段包含的多个数据块中读取出所述目标完美哈希槽位所在的目标数据块,并从所述目标数据块的所述目标完美哈希槽位中获取所述待查询的key-value数据。
在一示出的实施方式中,所述数据查询单元706,具体用于:
获取所述目标数据块中存储的与所述目标完美哈希槽位对应的偏移地址,并基于所述偏移地址从所述目标数据块中读取出所述目标完美哈希槽位中的编码数据;
基于与所述编码规则相对应的解码规则,对所述编码数据进行解码,获得至少一个key-value数据;
确定所述至少一个key-value数据中的key是否与所述目标key相同;
若任一key-value数据中的key与所述目标key相同,则确定该key-value数据为待查询的key-value数据。
上述装置70中各个单元的功能和作用的实现过程具体详见上述图1-图6对应实施例的描述,在此不再进行赘述。应理解,上述装置70可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为逻辑意义上的装置,是通过所在设备的处理器(CPU)将对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,除了CPU以及存储器之外,上述装置所在的设备通常还包括用于进行无线信号收发的芯片等其他硬件,和/或用于实现网络通信功能的板卡等其他硬件。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部单元或模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例阐明的装置、单元、模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备、车载计算机或者这些设备中的任意几种设备的组合。
与上述方法实施例相对应,本说明书的实施例还提供了一种计算机设备。请参阅图8,图8是一示例性实施例提供的一种计算机设备的结构示意图。如图8所示,该计算机设备包括处理器1001和存储器1002,进一步还可以包括输入设备1004(例如键盘等)和输出设备1005(例如显示器等)。处理器1001、存储器1002、输入设备1004和输出设备1005之间可以通过总线或其他方式连接。如图8所示,存储器1002包括计算机可读存储介质1003,该计算机可读存储介质1003存储有能够由处理器1001运行的计算机程序。处理器1001可以是CPU,微处理器,或用于控制以上方法实施例执行的集成电路。处理器1001在运行存储的计算机程序时,可以执行本说明书实施例中基于完美哈希的数据存储方法的各个步骤,包括:将待存储的目标数据集划分为与其包含的key-value数据的数据量相匹配的多个数据片段,每个数据片段中包含所述目标数据集中的部分key-value数据;计算与每个数据片段中包含的多个key-value数据分别对应的完美哈希槽位,并将每个数据片段划分为与其包含的key-value数据的数据量相匹配的多个数据块;其中,每个数据块中包含按序排列的若干完美哈希槽位,每个完美哈希槽位中包含与其对应的至少一个key-value数据;将所述多个数据片段依次存储至磁盘中,并且,在存储每个数据片段时,按照完美哈希槽位的排列顺序依次存储其中的多个数据块,等等。
对上述基于完美哈希的数据存储方法的各个步骤的详细描述请参见之前的内容,此处不再进行赘述。
与上述方法实施例相对应,本说明书的实施例还提供了一种计算机可读存储介质,该存储介质上存储有计算机程序,这些计算机程序在被处理器运行时,执行本说明书实施例中基于完美哈希的数据存储方法的各个步骤。具体请参见上述图1-图6对应实施例的描述,此处不再进行赘述。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。
在一个典型的配置中,终端设备包括一个或多个CPU、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。
计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书的实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书的实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
Claims (17)
1.一种基于完美哈希的数据存储方法,其特征在于,所述方法包括:
将待存储的目标数据集划分为与其包含的key-value数据的数据量相匹配的多个数据片段,每个数据片段中包含所述目标数据集中的部分key-value数据;
计算与每个数据片段中包含的多个key-value数据分别对应的完美哈希槽位,并将每个数据片段划分为与其包含的key-value数据的数据量相匹配的多个数据块;其中,每个数据块中包含按序排列的若干完美哈希槽位,每个完美哈希槽位中包含与其对应的至少一个key-value数据;
将所述多个数据片段依次存储至磁盘中,并且,在存储每个数据片段时,按照完美哈希槽位的排列顺序依次存储其中的多个数据块。
2.根据权利要求1所述的方法,其特征在于,所述将待存储的目标数据集划分为与其包含的key-value数据的数据量相匹配的多个数据片段,包括:
根据待存储的目标数据集包含的key-value数据的数据量,确定与其相匹配的数据片段的数量;
计算与所述目标数据集中包含的每个key-value数据的key对应的哈希值;
根据计算得到的哈希值,将每个key-value数据划分到对应的数据片段中。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在磁盘中已存储的最后一个数据片段之后,存储与所述多个数据片段对应的脚注信息;其中,所述脚注信息包括以下示出的一个或多个信息的组合:所述多个数据片段的数量、每个数据片段的偏移地址、每个数据片段的长度。
4.根据权利要求2所述的方法,其特征在于,每个数据片段中还包括位于第一个数据块之前的完美哈希索引区;其中,所述完美哈希索引区中包含用于计算与该数据片段中的多个key-value数据分别对应的完美哈希槽位的完美哈希参数。
5.根据权利要求4所述的方法,其特征在于,每个数据片段中还包括:位于最后一个数据块之后的数据块偏移地址区和哈希值区;其中,所述数据块偏移地址区中包含每个数据块在该数据片段中的偏移地址;哈希值区中包含与每个数据片段中的多个key-value数据的key分别对应的哈希值。
6.根据权利要求5所述的方法,其特征在于,所述数据片段中还包括数据分片区;所述方法还包括:
响应于所述目标数据集中的目标key-value数据的长度大于预设阈值,对所述目标key-value数据进行切分,得到多个数据分片;其中,所述多个数据分片中的目标数据分片存储于与所述目标key-value数据对应的完美哈希槽位中,其他分片存储于所述数据分片区中。
7.根据权利要求6所述的方法,其特征在于,每个完美哈希槽位中包含的至少一个key-value数据包括:基于预设的编码规则对该至少一个key-value数据进行编码后得到的编码数据。
8.根据权利要求7所述的方法,其特征在于,每个完美哈希槽位中的编码数据中包含与key-value数据对应的控制信息,所述控制信息包含以下示出的一个或多个信息的组合:
该完美哈希槽位中是否仅包含一个key-value数据;
该完美哈希槽位中包含的key-value数据是否具有对应的元数据;
该完美哈希槽位中包含的key-value数据是否为切分过的数据分片。
9.根据权利要求7所述的方法,其特征在于,每个数据块中还包括:位于最后一个完美哈希槽位之后的哈希槽位偏移地址区;其中,所述哈希槽位偏移地址区包含每个完美哈希槽位在该数据块中的偏移地址。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
解析接收到的查询语句,得到所述查询语句中包含的与待查询的key-value数据对应的目标key;
计算所述目标key的目标哈希值,并在所述多个数据片段中确定出与所述目标哈希值对应的目标数据片段;
获取所述目标数据片段中的完美哈希索引区中存储的完美哈希参数,并基于所述完美哈希参数,计算与所述目标key对应的目标完美哈希槽位;以及,
从所述目标数据片段包含的多个数据块中读取出所述目标完美哈希槽位所在的目标数据块,并从所述目标数据块的所述目标完美哈希槽位中获取所述待查询的key-value数据。
11.根据权利要求10所述的方法,其特征在于,所述从所述目标数据块的所述目标完美哈希槽位中获取所述待查询的key-value数据,包括:
获取所述目标数据块中存储的与所述目标完美哈希槽位对应的偏移地址,并基于所述偏移地址从所述目标数据块中读取出所述目标完美哈希槽位中的编码数据;
基于与所述编码规则相对应的解码规则,对所述编码数据进行解码,获得至少一个key-value数据;
确定所述至少一个key-value数据中的key是否与所述目标key相同;
若任一key-value数据中的key与所述目标key相同,则确定该key-value数据为待查询的key-value数据。
12.一种基于完美哈希的数据存储装置,其特征在于,所述装置包括:
数据片段划分单元,用于将待存储的目标数据集划分为与其包含的key-value数据的数据量相匹配的多个数据片段,每个数据片段中包含所述目标数据集中的部分key-value数据;
完美哈希计算单元,用于计算与每个数据片段中包含的多个key-value数据分别对应的完美哈希槽位,并将每个数据片段划分为与其包含的key-value数据的数据量相匹配的多个数据块;其中,每个数据块中包含按序排列的若干完美哈希槽位,每个完美哈希槽位中包含与其对应的至少一个key-value数据;
存储单元,用于将所述多个数据片段依次存储至磁盘中,并且,在存储每个数据片段时,按照完美哈希槽位的排列顺序依次存储其中的多个数据块。
13.一种基于完美哈希的数据查询方法,其特征在于,所述方法包括:
解析接收到的查询语句,得到所述查询语句中包含的与待查询的key-value数据对应的目标key;
计算所述目标key的目标哈希值,并在磁盘中存储的多个数据片段中确定出与所述目标哈希值对应的目标数据片段;
获取所述目标数据片段中包含的完美哈希参数,并基于所述完美哈希参数,计算与所述目标key对应的目标完美哈希槽位;以及,
从所述目标数据片段包含的多个数据块中读取出所述目标完美哈希槽位所在的目标数据块,并从所述目标数据块的所述目标完美哈希槽位中获取所述待查询的key-value数据。
14.一种基于完美哈希的数据查询装置,其特征在于,所述装置包括:
语句解析单元,用于解析接收到的查询语句,得到所述查询语句中包含的与待查询的key-value数据对应的目标key;
确定单元,用于计算所述目标key的目标哈希值,并在磁盘中存储的多个数据片段中确定出与所述目标哈希值对应的目标数据片段;
完美哈希计算单元,用于获取所述目标数据片段中包含的完美哈希参数,并基于所述完美哈希参数,计算与所述目标key对应的目标完美哈希槽位;以及,
获取单元,用于从所述目标数据片段包含的多个数据块中读取出所述目标完美哈希槽位所在的目标数据块,并从所述目标数据块的所述目标完美哈希槽位中获取所述待查询的key-value数据。
15.一种计算机设备,其特征在于,包括:存储器和处理器;所述存储器上存储有可由所述处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行如权利要求1至11或13任意一项所述的方法。
16.一种计算机可读存储介质,其特征在于,其上存储有计算机程序/指令,所述计算机程序/指令被处理器执行时实现如权利要求1至11或13任意一项所述的方法。
17.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现如权利要求1至11或13任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410295896.4A CN117891414A (zh) | 2024-03-14 | 2024-03-14 | 一种基于完美哈希的数据存储方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410295896.4A CN117891414A (zh) | 2024-03-14 | 2024-03-14 | 一种基于完美哈希的数据存储方法及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117891414A true CN117891414A (zh) | 2024-04-16 |
Family
ID=90647647
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410295896.4A Pending CN117891414A (zh) | 2024-03-14 | 2024-03-14 | 一种基于完美哈希的数据存储方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117891414A (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104536958A (zh) * | 2014-09-26 | 2015-04-22 | 杭州华为数字技术有限公司 | 一种复合索引方法,及装置 |
CN105359142A (zh) * | 2014-05-23 | 2016-02-24 | 华为技术有限公司 | 哈希连接方法、装置和数据库管理系统 |
US20190243563A1 (en) * | 2018-02-02 | 2019-08-08 | Fujitsu Limited | Storage control device, storage control method, and recording medium |
CN113595965A (zh) * | 2020-04-30 | 2021-11-02 | 中兴通讯股份有限公司 | 业务数据处理、交换、提取方法及设备、计算机可读介质 |
CN116010362A (zh) * | 2023-03-29 | 2023-04-25 | 世优(北京)科技有限公司 | 文件存储和文件读取的方法、装置及系统 |
CN116401258A (zh) * | 2023-06-06 | 2023-07-07 | 支付宝(杭州)信息技术有限公司 | 数据索引方法、数据查询方法及对应装置 |
CN116450656A (zh) * | 2023-06-16 | 2023-07-18 | 北京数巅科技有限公司 | 数据处理方法、装置、设备及存储介质 |
-
2024
- 2024-03-14 CN CN202410295896.4A patent/CN117891414A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105359142A (zh) * | 2014-05-23 | 2016-02-24 | 华为技术有限公司 | 哈希连接方法、装置和数据库管理系统 |
CN104536958A (zh) * | 2014-09-26 | 2015-04-22 | 杭州华为数字技术有限公司 | 一种复合索引方法,及装置 |
US20190243563A1 (en) * | 2018-02-02 | 2019-08-08 | Fujitsu Limited | Storage control device, storage control method, and recording medium |
CN113595965A (zh) * | 2020-04-30 | 2021-11-02 | 中兴通讯股份有限公司 | 业务数据处理、交换、提取方法及设备、计算机可读介质 |
CN116010362A (zh) * | 2023-03-29 | 2023-04-25 | 世优(北京)科技有限公司 | 文件存储和文件读取的方法、装置及系统 |
CN116401258A (zh) * | 2023-06-06 | 2023-07-07 | 支付宝(杭州)信息技术有限公司 | 数据索引方法、数据查询方法及对应装置 |
CN116450656A (zh) * | 2023-06-16 | 2023-07-18 | 北京数巅科技有限公司 | 数据处理方法、装置、设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
唐林;: "哈希查找算法研究与实现", 电脑编程技巧与维护, no. 09, 18 September 2018 (2018-09-18) * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110149803B (zh) | 数据存储方法、系统及终端设备 | |
US8838551B2 (en) | Multi-level database compression | |
US5991862A (en) | Modified indirect addressing for file system | |
US10678654B2 (en) | Systems and methods for data backup using data binning and deduplication | |
CN106874348B (zh) | 文件存储和索引方法、装置及读取文件的方法 | |
US20110040761A1 (en) | Estimation of postings list length in a search system using an approximation table | |
CN116450656B (zh) | 数据处理方法、装置、设备及存储介质 | |
US20200409915A1 (en) | Database key compression | |
CN114610708A (zh) | 一种向量数据处理方法及装置、电子设备及存储介质 | |
CN111625531B (zh) | 基于可编程装置的合并装置、数据合并方法及数据库系统 | |
KR102071072B1 (ko) | 데이터 저장장치의 주소 맵핑 테이블 운용 방법 | |
CN116048396B (zh) | 基于日志结构化合并树的数据存储装置和存储控制方法 | |
US10311026B2 (en) | Compressed data layout for optimizing data transactions | |
CN116414304B (zh) | 基于日志结构化合并树的数据存储装置和存储控制方法 | |
CN117891414A (zh) | 一种基于完美哈希的数据存储方法及相关设备 | |
CN114969034A (zh) | LSM-Tree架构数据库有序表的查询方法和装置 | |
CN114489481A (zh) | 硬盘存储数据并访问的方法及系统 | |
CN111258955A (zh) | 一种文件读取方法和系统、存储介质、计算机设备 | |
CN111382120A (zh) | 一种小文件管理方法、系统和计算机设备 | |
CN117785889A (zh) | 一种针对图数据库的索引管理方法及相关设备 | |
CN114138552B (zh) | 数据动态重删方法、系统、终端及存储介质 | |
CN118034612B (zh) | 一种数据处理方法、装置和存储介质 | |
US20240061823A1 (en) | Memory-frugal index design in storage engine | |
CN117271440B (zh) | 一种基于freeRTOS文件信息存储方法、读取方法及相关设备 | |
CN116055589B (zh) | 数据管理方法、装置及计算机设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |