数据的存取方法和装置的制造方法

文档序号:9564699阅读:416来源:国知局
数据的存取方法和装置的制造方法
【技术领域】
[0001] 本发明涉及数据库技术领域,尤其涉及数据的存取方法和装置。
【背景技术】
[0002] 随着大数据时代的到来,数据库性能成为人们关注的重点。在众多因素中,数据库 中数据的存取性能是影响数据库性能的重要因素之一,而数据常以key/value (关键字/数 据值)的形式存储于数据库中。因此,key/value数据的存取方法成为研究重点。
[0003] 目前,数据常以哈希方式进行存储,获取到key/value数据后,计算key的哈希值, 将哈希值、key、value存储在内存中,当内存中存储的数据数量超过系统内存总量时,将内 存中的数据存储到磁盘中保存。但由于磁盘中查找数据时速度较慢,因此基于上述哈希存 储方法的key/value数据存取方法为:在系统初始化时,将磁盘中的数据读取到内存中,获 取数据的存取方式后,在内存中按照存取方式存取该数据。其中,数据的存取方式包括:读 取、写入、修改或删除等。
[0004] 上述方式数据存取过程在内存中进行,对内存配置要求较高。初始化时需要将磁 盘中数据读回内存,读回过程需要消耗大量时间,增加了方法的初始化时间。

【发明内容】

[0005] 为解决上述问题,本发明实施例提出了一种数据的存取方法和装置。
[0006] -方面,本发明实施例提供了一种数据的存取方法,所述方法包括:
[0007] 获取数据的存取方式和所述数据的第一关键字key ;
[0008] 计算所述第一 key的第一哈希值;
[0009] 根据所述第一哈希值在内存的哈希跳表中或磁盘中的哈希索引区中确定所述数 据的存取位置,所述哈希索引区按变形B+树的方式建立;
[0010] 在所述数据的存取位置处根据所述存储方式存取所述数据;
[0011] 其中,所述变形的B+树为每一层级中除最后一个节点外,其他节点都是满阶的B+ 树。
[0012] 另一方面,本发明实施例提供了一种数据的存取装置,包括:
[0013] 第一获取模块,用于获取数据的存取方式和所述数据的第一关键字key ;
[0014] 计算模块,用于计算所述第一获取模块获取到的第一 key的第一哈希值;
[0015] 第一确定模块,用于根据所述计算模块计算出的第一哈希值在内存的哈希跳表中 或磁盘中的哈希索引区中确定所述数据的存取位置,所述哈希索引区按变形B+树的方式 建立;
[0016] 存取模块,用于在所述第一确定模块确定的数据的存取位置处根据所述第一获取 模块获取到的存储方式存取所述数据;
[0017] 其中,所述变形的B+树为每一层级中除最后一个节点外,其他节点都是满阶的B+ 树。
[0018] 有益效果如下:
[0019] 获取数据的存取方式和第一 key,根据第一哈希值在内存的哈希跳表中或磁盘中 的哈希索引区中确定数据的存取位置,其中,哈希索引区按变形B+树的方式建立。磁盘中 的哈希值以变形B+树方式存储,哈希值存储提高了数据查找效率,变形B+树的方式增强了 数据存储的扩展性,该种存储方式可以提高磁盘中数据查找效率,基于该种存储方式,本发 明存取时,根据哈希值在内存或磁盘中确定数据的存取位置后,可以直接从所述存取位置 存取数据,既降低了对内存配置的要求,又避免了现有技术中将数据读回至内存的步骤。
【附图说明】
[0020] 下面将参照附图描述本发明的具体实施例,其中:
[0021] 图1示出了本发明一种实施例中提供的一种数据的存取方法的流程示意图;
[0022] 图2示出了本发明另一种实施例中提供的一种数据存储的方法的流程示意图;
[0023] 图3示出了本发明另一种实施例中提供的一种哈希跳表结构示意图;
[0024] 图4示出了本发明另一种实施例中提供的一种磁盘初始创建哈希索引区的流程 示意图;
[0025] 图5示出了本发明另一种实施例中提供的一种哈希环示意图;
[0026] 图6示出了本发明另一种实施例中提供的一种哈希索引区示意图;
[0027] 图7示出了本发明另一种实施例中提供的一种将内存中存储的数据与磁盘中存 储的数据进行合并的方法流程图;
[0028] 图8示出了本发明另一种实施例中提供的第一种磁盘存储数据结构示意图;
[0029] 图9示出了本发明另一种实施例中提供的第二种磁盘存储数据结构示意图;
[0030] 图10示出了本发明另一种实施例中提供的数据的存储位置示意图;
[0031] 图11示出了本发明另一种实施例中提供的另一种数据的存取方法的流程示意 图;
[0032] 图12示出了本发明另一种实施例中提供的另一种哈希跳表结构示意图;
[0033] 图13示出了本发明另一种实施例中提供的第三种磁盘存储数据结构示意图;
[0034] 图14示出了本发明另一种实施例中提供的第一种数据的存取装置的结构示意 图;
[0035] 图15示出了本发明另一种实施例中提供的第二种数据的存取装置的结构示意 图;
[0036] 图16示出了本发明另一种实施例中提供的第三种数据的存取装置的结构示意 图;
[0037] 图17示出了本发明另一种实施例中提供的一种第一确定模块的结构示意图;
[0038] 图18示出了本发明另一种实施例中提供的第四种数据的存取装置的结构示意 图;
[0039] 图19示出了本发明另一种实施例中提供的一种第八确定单元的结构示意图;
[0040] 图20示出了本发明另一种实施例中提供的第五种数据的存取装置的结构示意 图;
[0041] 图21示出了本发明另一种实施例中提供的一种合并模块的结构示意图。
【具体实施方式】
[0042] 为了使本发明的技术方案及优点更加清楚明白,以下结合附图对本发明的示例性 实施例进行进一步详细的说明,显然,所描述的实施例仅是本发明的一部分实施例,而不是 所有实施例的穷举。并且在不冲突的情况下,本说明中的实施例及实施例中的特征可以互 相结合。
[0043] 参见图1所示的实施例,本实施例提供了一种数据的存取方法,本实施例提供的 方法流程具体如下:
[0044] 101 :获取数据的存取方式和数据的第一关键字key ;
[0045] 102 :计算第一 key的第一哈希值;
[0046] 103:根据第一哈希值在内存的哈希跳表中或磁盘中的哈希索引区中确定数据的 存取位置,哈希索引区按变形B+树的方式建立;
[0047] 104 :在数据的存取位置处根据存储方式存取数据。
[0048] 其中,变形的B+树为每一层级中除最后一个节点外,其他节点都是满阶的B+树。
[0049] 有益效果:
[0050] 获取数据的存取方式和第一 key,根据第一哈希值在内存的哈希跳表中或磁盘中 的哈希索引区中确定数据的存取位置,其中,哈希索引区按变形B+树的方式建立。磁盘中 的哈希值以变形B+树方式存储,哈希值存储提高了数据查找效率,变形B+树的方式增强了 数据存储的扩展性,该种存储方式可以提高磁盘中数据查找效率,基于该种存储方式,本发 明存取时,根据哈希值在内存或磁盘中确定数据的存取位置后,可以直接从所述存取位置 存取数据,既降低了对内存配置的要求,又避免了现有技术中将数据读回至内存的步骤。
[0051] 为了更好的对数据进行存取,满足高性能的存取服务,上述实施例中描述的数据 存取的方法中的数据以图2所示数据存储的方法进行存储。本实施例提供的数据存储方法 具体如下:
[0052] 201 :在内存中建立哈希跳表,哈希跳表用于存储数据的哈希值、key、value ;
[0053] 本实施例不对建立哈希跳表的具体方法进行具体限定。
[0054] 例如建立图3所示的哈希跳表。
[0055] 本实施例中建立的哈希跳表内存储的哈希值均不相同。在实际应用中,存在不同 的key计算出相同的哈希值的情况,为了适应该种情况,建立哈希跳表后,当出现哈希值相 同的数据时,在内存中建立与哈希跳表关联的冲突哈希跳表,冲突哈希跳表用于存储冲突 数据,冲突数据的哈希值与哈希跳表中哈希值相同,但冲突数据对应的key与哈希跳表中 相同哈希值对应的key不同。
[0056] 202 :获取哈希值范围,根据哈希值范围在磁盘中建立哈希索引区和数据区。
[0057] 其中,数据区用于存储数据的key和value,哈希索引区用于存储索引,索引为数 据的哈希值和数据在数据区的存储位置。
[0058] 哈希索引区可以按变形B+树的方式建立,该变形B+树为树的前m-1级分别记录 下一级的开始哈希值,本级的下一个值直接以存储顺序中的位置确定,每一级中的值需要 前一个值满阶后才能有下一个值的B+树。即各层级中除了最后一个节点外,前面所有节点 都是满阶的B+树。
[0059] 获取哈希值范围的具体方法本实施例也不进行具体限定。例如:获取key范围,获 取key范围对应的哈希值范围。又例如,若已存储有相关数据,则根据相关数据的key范围 获取哈希值范围。
[0060] 本实施例中建立的哈希索引区内存储的哈希值均不相同。在实际应用中,存在不 同的key计算出相同的哈希值的情况,为了适应该种情况,建立哈希索引区后,当出现哈希 值相同的数据时,在磁盘中建立与哈希索引区关联的冲突哈希索引区,冲突哈希索引区用 于存储冲突索引,冲突索引的哈希值与哈希索引区中哈希值相同,但冲突索引对应的key 与哈希索引区中相同哈希值对应的key不同。
[0061] 如图4所示,利用本实施例提供的方法存储数据前,若系统未存储有相关数据,则 步骤202存储数据时,初始节点数为1,当该初始节点对应数据数量达到阈值时,会将该初 始节点进行分裂,并将新节点插入哈希索引区或冲突哈希索引区。随着实际存储的数据的 增多,可以建立图5所示的哈希环。
[0062] 若系统存储有相关数据,则步骤202存储数据时,根据相关数据的情况创建η个初 始节点,该初始节点数量与key对应的哈希以及阈值相关。
[0063] 另外,哈希索引区或冲突哈希索引区中各节点按顺序存储于磁盘中,其中,叶子节 点之间不预留存储位置,非叶子节点之间预留存储位置。
[0064] 以图6 (a)所示的哈希索引区为例:若节点0 (根节点)存储于位置0处,则节点1 存储于位置1处,预留出图6 (b)虚线所示的节点6的位置,则节点2存储于位置3处,节点 3存储于位置4处,节点4存储于位置5处,节点5由于是叶子节点,不预留存储位置,因此 节点5存储于位置6处。存储结果如表1所示。
[0067] 此外,数据区中数据值按照key至的哈希值顺序存在磁盘中,在哈希值相冲突时, 按照数据产生顺序依次存储。
[0068] 需要说明的是,本实施例中的冲突哈希跳表和冲突哈希索引数据区,均在有哈希 值冲突的时候才建立,如果没有冲突哈希值则不建立相应结构,如果同一个哈希值存在多 次冲突,每次冲突都会存储在新的冲突跳表和新的冲突哈希索引数据区中,冲突的跳表和 冲突的哈希索引数据区的结构及内容存放方式同哈希跳表和哈希索引数据区完全一致。
[0069] 另外,内存中是否建立冲突哈希跳表与磁盘中是否建立冲突哈希索引区也不存在 必然的联系关系。
[0070] 此外,本实施例仅以先执行步骤201在内存中建立哈希跳表再执行步骤202在磁 盘中建立哈希索引区和数据区的顺序说明本实施例提供的数据存储方法,在实际应用中, 也可以先执行步骤202再执行步骤201,或者同时执行步骤201和步骤2
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1