当前位置: 首页 > 专利查询>清华大学专利>正文

一种索引存储方法、系统和存储介质技术方案

技术编号:37707214 阅读:11 留言:0更新日期:2023-06-01 23:57
本发明专利技术公开了一种索引存储方法、系统和存储介质。包括:确定原索引中键值对数量小于设定数量的子树,将每棵所述子树的数据分别存储到对应的一页中,得到对应的SPRT索引。能够优化基数树原本不擅长的范围查询,可以有效的降低树的深度,从而全方面的提升索引操作的性能。还提出了一种运行时恢复的设置,使得SPRT在运行时,只需要持久化数据以及一部分很少被修改的元数据,有效减少了持久化开销。有效减少了持久化开销。有效减少了持久化开销。

【技术实现步骤摘要】
一种索引存储方法、系统和存储介质


[0001]本专利技术涉及存储
,特别涉及一种索引存储方法、系统和存储介质。

技术介绍

[0002]PM(Persistent Memory)持久化内存和DRAM(Dynamic Random Access Memory)之间最显著的区别是数据的持久化特性。持久化,是指写入PM的数据将被持久化在存储介质中,并且在断电后仍然存在。目前,在存储体系结构中PM位于多级CPU缓存后面,数据可以直接从CPU缓存达到PM中。但是往PM写数据时,数据并不能直接保证已经存在于PM中,有可能还留存在CPU缓存中,因此需要执行缓存行刷写指令或等待缓存行被隐式的刷写。由于PM的持久化特性、字节粒度寻址、纳秒级延迟、介于DRAM和块设备之间的存储容量,它非常适合用来存储一些索引结构,可以极大的提升系统的整体性能,因此它开始被业界的系统所使用。
[0003]常用的索引主要包括树形索引和哈希索引。树形索引天然支持范围查询。树形索引中常用的主要包括B+树索引和基数树。目前,在许多工业界系统中,都选择使用B+树作为索引。B+树支持高效的范围查询,因为多个键值对被存储在一个叶子节点中,而叶子节点的扫描不会引起指针跳转。范围查询是关系型数据库和键值存储系统的一个重要特征。与此同时,B+树的叶子节点之间还可以通过指针相连,进一步提升了范围查询的优势。在其他树形结构中,如基数树和二叉搜索树,一个节点只能存储一个键值对,数据可以存储在叶子节点中,也可以存储在非叶子节点中。对这些树的范围查询必须在树的不同层跳转,从而导致大量的指针跳转。由于PM的顺序读取和随机读取之间的性能差距比DRAM更大,更多的随机访问会恶化PM的范围查询性能。
[0004]支持变长数据存储的索引可以适用于更广泛的应用,因为业界的绝大部分的数据都是不固定长度的。然而,这种支持是有代价的。现有的许多持久化树形索引都只针对8字节长的键值对进行了深度优化。如果要使这些索引支持变长的键,一个直接的方法是分配额外的数据区域并在索引中存储键的地址。然而,这个修改会产生大量指针跳转的开销。持久化内存索引为了保证崩溃一致性,通常需要大量的持久化指令开销来保证持久化的内容是一致的。

技术实现思路

[0005]专利技术人发现,在现有的持久化B+树索引FAST&FAIR中,使用了支持变长数据存储的索引方案支持变长数据后,索引的查询/插入/更新/删除/范围查询这五种操作,分别出现了3.9/1.8/2.79/2.15/1.94倍的性能下降。主要的性能降低来自于遍历过程中的指针跳转和字符串比较。同时,为了存储额外的数据区域,插入/更新等操作引入了更多的持久化开销。当同时需要可变大小的键和范围查询时,B+树可能不是持久化内存索引的最佳选择,持久化内存树形索引无法在变长数据访问和范围查询这两项常用需求上同时获得高性能。
[0006]为了解决上述问题,专利技术人做出本专利技术,通过具体实施方式,提供一种索引存储方
法、系统和存储介质。
[0007]第一方面,本专利技术实施例提供一种索引存储方法,包括:
[0008]确定原索引中键值对数量小于设定数量的子树,将每棵所述子树的数据分别存储到对应的一页中,得到对应的SPRT索引。
[0009]在一些具体的实施例中,将每棵所述子树的数据分别存储到对应的一页中,包括以下步骤:
[0010]将对应子树中的数据对应的元数据,从对应的一个页的头部开始,按照从前往后的顺序存储;将对应子树中的数据,从所述页的尾部开始,按照从后往前的顺序存储。
[0011]在一些具体的实施例中,每个所述元数据的存储格式包括SPRT节点类型、SPRT节点深度、SPRT节点版本、SPRT节点前缀、SPRT节点的锁、下一次数据插入的位置、SPRT节点中数据的个数、SPRT节点中每个数据的位置、SPRT节点中每个数据键的长度、SPRT节点中每个数据键的哈希值和SPRT节点中每个数据排序后的位置。
[0012]在一些具体的实施例中,每个所述对应子树中的数据的存储格式包括值、键、有效位、键长度和值长度。
[0013]在一些具体的实施例中,当使用所述SPRT索引进行查询时,找到对应的SPRT节点后,从SPRT节点头部到所述下一次数据插入的位置,对比SPRT节点中每个数据键的哈希值,确定哈希值匹配的数据键。
[0014]在一些具体的实施例中,当使用所述SPRT索引进行查询时,确定哈希值匹配的数据键后,读取所述数据键对应的有效位;根据所述有效位,判断对应数据是否存在;当对应数据存在时,通过所述数据的值长度,找到所述数据的值的位置,读出所述数据的值。
[0015]在一些具体的实施例中,当使用所述SPRT索引进行数据插入时,在数据存储到所述下一次数据插入的位置后,更新对应的元数据。
[0016]在一些具体的实施例中,当使用所述SPRT索引进行数据更新时,不在原数据位置更新,将更新的数据存储到所述下一次数据插入的位置。
[0017]在一些具体的实施例中,仅对所述SPRT节点类型、SPRT节点深度、SPRT节点版本和SPRT节点前缀做持久化处理,且只在创建SPRT节点时被持久化一次。
[0018]在一些具体的实施例中,在重启系统后,在运行过程中每访问到一个SPRT节点,通过从后往前扫描键值对,来重建剩余的元数据。
[0019]在一些具体的实施例中,每个所述页的大小为4KB,并按256字节对齐。
[0020]第二方面,本专利技术实施例提供一种索引存储系统,包括:
[0021]SPRT索引生成模块,用于确定原索引中键值对数量小于设定数量的子树,将每棵所述子树的数据分别存储到对应的一页中,得到对应的SPRT索引。
[0022]基于同一专利技术构思,本专利技术实施例还提供一种计算机存储介质,所述计算机存储介质中存储有计算机可执行指令,所述计算机可执行指令执行时实现前述的索引存储方法。
[0023]本专利技术实施例提供的上述技术方案的有益效果至少包括:
[0024]本专利技术公开了一种新的基于slot page的基数树(slot page radix tree,SPRT),优化了基数树原本不擅长的范围查询。同时本专利技术提出的SPRT的结构,可以有效的降低树的深度,从而全方面的提升索引操作(查询/插入/更新/删除)的性能。
[0025]本专利技术除了SPRT的结构之外,在一些具体的实施例中,还提出了一种运行时恢复设置,使得SPRT在运行时,只需要持久化数据以及一部分很少被修改的元数据,而其他所有频繁修改的元数据,都可以在第一次被访问的时候根据数据恢复,这个恢复的开销均摊后是常数,有效减少了持久化开销。
[0026]本专利技术的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本专利技术而了解。本专利技术的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
[0027]下面通过附图和实施例,对本专利技术本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种索引存储方法,其特征在于,包括以下步骤:确定原索引中键值对数量小于设定数量的子树,将每棵所述子树的数据分别存储到对应的一页中,得到对应的SPRT索引。2.如权利要求1所述的方法,其特征在于,所述将每棵所述子树的数据分别存储到对应的一页中,包括以下步骤:将对应子树中的数据对应的元数据,从对应的一个页的头部开始,按照从前往后的顺序存储;将对应子树中的数据,从所述页的尾部开始,按照从后往前的顺序存储。3.如权利要求2所述的方法,其特征在于,每个所述元数据的存储格式包括SPRT节点类型、SPRT节点深度、SPRT节点版本、SPRT节点前缀、SPRT节点的锁、下一次数据插入的位置、SPRT节点中数据的个数、SPRT节点中每个数据的位置、SPRT节点中每个数据键的长度、SPRT节点中每个数据键的哈希值和SPRT节点中每个数据排序后的位置。4.如权利要求2所述的方法,其特征在于,每个所述对应子树中的数据的存储格式包括值、键、有效位、键长度和值长度。5.如权利要求3所述的方法,其特征在于,当使用所述SPRT索引进行查询时,找到对应的SPRT节点后,从SPRT节点头部到所述下一次数据插入的位置,对比SPRT节点中每个数据键的哈希值,确定哈希值匹配的数据键。6.如权利要求4所述的方法,其特征在于,当使用所述SPRT索引进行查询时,确定哈希值匹配的数据键后,读取所述数据键对应的...

【专利技术属性】
技术研发人员:陈康武永卫姜进磊马少楠
申请(专利权)人:清华大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1