System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于键差值分离完善LSM树的键值存储方法及系统技术方案_技高网

一种基于键差值分离完善LSM树的键值存储方法及系统技术方案

技术编号:40966496 阅读:1 留言:0更新日期:2024-04-18 20:47
本发明专利技术提供一种基于键差值分离完善LSM树的键值存储方法及系统,包括:步骤S1,通过独立的键值存储中间件存储键差值对,获取差值库,所述键差值对指的是键和和差值进行合并后得到的数据对;步骤S2,将所述差值库的存储空间分成了一个个桶,每个桶之间通过追加写的方式写入数据,并将同一个键所对应的键差值对以哈希函数的方法映射至同一个桶中,实现基于桶的差值放置过程;步骤S3,通过在桶中追加写入清除标记,实现基于差值的垃圾回收过程;步骤S4,对差值放置过程的崩溃或垃圾回收过程的崩溃进行恢复。本发明专利技术能够在RMW操作密集的工作负载下实现快速读取,有效地减小读取延迟,并同时保持快速的RMW操作,适用范围广。

【技术实现步骤摘要】

本专利技术涉及一种键值存储方法,尤其涉及一种基于键差值分离完善lsm树的键值存储方法,并进一步涉及采用了该基于键差值分离完善lsm树的键值存储方法的键值存储系统。


技术介绍

1、键值(key-value)存储将数据抽象为键值对,并成为支持大规模结构化存储的重要存储范式。它所支持的基本语义包括写入和读取,写入指的是把新的键值对插入到存储系统中,或用新值覆盖现有的键值对,存储指的是从存储中检索现有的键值对。虽然在实际应用中观察到了读密集和写密集的工作负载,但研究显示,读-修改-写(rmw)也很常见。rmw指的是从存储中读取现有的键值对,根据当前值完全或部分地进行修改,并写回存储,简称读-修改-写操作。例如,在facebook的高效数据库软件rocksdb生产系统中,有报告显示92.5%的所有请求是rmw操作,被用于人工智能/机器学习(ai/ml)服务中;在事务数据库的基准测试中,超过90%的事务请求是rmw操作;在ycsb基准测试的工作负载之一(workloadf)里面,50%的请求是rmw操作。rmw操作也在nosql存储、实时数据处理和社群图数据库中广泛存在。

2、现有技术的键值存储方案中,普遍基于被广泛采用的索引结构和日志结构合并树(log-structured merge tree, lsm树)来进行键值存储,也就是本申请所述的lsm树,log-structured merge tree,也称日志结构的合并树。lsm树在多个树层次中以日志结构的方式排列键值对,对新的键值对进行顺序写入实现快速写入,同时还在每个树层次内以有序方式维护键值对,以实现高效读取和范围查询。为了支持高效的rmw操作,数据库软件rocksdb提供了merge()运算符:与简单的读取和修改键值对不同,该merge()运算符会在不进行读取的情况下,写入键值对的差值。因此, lsm树是适合于rmw密集工作负载的一种索引结构。

3、然而,merge()运算符会增加对带有差值的键的后续读取开销。为了实现快速的rmw,merge()运算符仅将差值写入lsm树而不会将差值与其关联的键值对进行合并。因此,读取键值对不仅会检索当前值,还会检索一长串的差值,以便计算出最新版本的值,而这些差值可能跨越树的若干层。通过实验得知,在rmw密集的工作负载下,与简单地读取和修改键值对相比,merge()运算符虽然可以降低rmw延迟,但是,也会增加高达70.2%左右的读取延迟。


技术实现思路

1、本专利技术所要解决的技术问题是需要提供一种基于键差值分离完善lsm树的键值存储方法,能够在rmw操作密集的工作负载下实现快速读取,有效地减小读取延迟,并同时保持快速的rmw操作。在此基础上,还进一步提供采用了该基于键差值分离完善lsm树的键值存储方法的键值存储系统。

2、对此,本专利技术提供一种基于键差值分离完善lsm树的键值存储方法,包括以下步骤:

3、步骤s1,通过独立的键值存储中间件存储键差值对,获取差值库,所述键差值对指的是键和差值进行合并后得到的数据对;

4、步骤s2,将所述差值库的存储空间分成了一个个桶,每个桶之间通过追加写的方式写入数据,并将同一个键所对应的键差值对以哈希函数的方法映射至同一个桶中,实现基于桶的差值放置过程;

5、步骤s3,通过在桶中追加写入清除标记,实现基于差值的垃圾回收过程;

6、步骤s4,对差值放置过程的崩溃或垃圾回收过程的崩溃进行恢复。

7、本专利技术的进一步改进在于,所述步骤s1中,将键差值对存储于差值库中,并通过硬盘维护相对应的提交日志和manifest文件。

8、本专利技术的进一步改进在于,所述步骤s2包括以下子步骤:

9、步骤s201,采用放置在内存里的前缀树来索引桶,并将同一个键所对应的键差值对映射至同一个桶;

10、步骤s202,将桶分为有序段和无序段,所述有序段仅存储按键排序的键差值对,所述无序段以追加写的方式存储键差值对和清除标记,并在内存中维护用于管理每个桶的桶表;

11、步骤s203,通过内存中的键差值缓存来暂存最近读取或写入的键差值对。

12、本专利技术的进一步改进在于,所述步骤s201中,所述前缀树采用二叉树,所述前缀树的每个叶节点代表一个二进制前缀,用于存储对应桶的位置索引;所述前缀树的每一条边为0或1,用于表示与叶节点相关联的前缀从根到叶节点的路径;设n为桶的最大数量,k为前缀树的初始高度,则n ≥ 2k;在初始化阶段,先在所述差值库中预分配2k个桶,并创建一个前缀树,该前缀树包括2k个叶节点,每个叶节点映射至所述差值库中一个对应的桶。

13、本专利技术的进一步改进在于,所述步骤s202中,所述桶表针对每个桶分别维护其对应的维护组件,所述维护组件包括桶索引、有序段的过滤器、无序段的过滤器以及桶缓冲区;对所述维护组件的维护过程为:在垃圾回收过程中创建所述桶索引,所述桶索引用于维护有序段中键的位置;在垃圾回收时重新创建所述有序段的过滤器,删除所述无序段的过滤器,并在写入新的键差值对时对所述无序段的过滤器进行更新;当键差值对从写缓存刷写到差值库中时,先将键差值对添加到所述桶缓冲区中,直到所述桶缓冲区变满时,则将所述桶缓冲区里的数据刷写到硬盘上。

14、本专利技术的进一步改进在于,所述步骤s203中,对于正在读取或写入的键差值对,如果是新的键,则将其添加到键差值缓存中;如果这个键已经存在于键差值缓存中,则将其与已经缓存的差值进行合并;对于正在写入的清除标记,将对应现有的键差值对,将现有的键差值对替换为新的空差值的键差值对。键差值缓存在以上三种情况中都可能被填满,当所述键差值缓存被填满时,删除最少被访问的键差值对。

15、本专利技术的进一步改进在于,所述步骤s3包括以下子步骤:

16、步骤s301,在将写缓存刷写到差值库的过程中实时检测,当检测到无法存储需要刷写的数据的桶时,将该桶定义为目标桶,触发垃圾回收;

17、步骤s302,将所述目标桶的键差值对和清除标记按键进行分组,对于每个键,仅保留最新清除标记后的键差值对,并对最新清除标记后的键差值对进行合并;

18、步骤s303,将合并后的有效键差值对的总大小与预设的拆分阈值进行比较,判断当前目标桶是否需要进行拆分,当有效键差值对的总大小小于或等于所述拆分阈值时,执行重写桶,将有效键差值对以排序方式重写到差值库的新桶的有序段中;当有效键差值对的总大小大于所述拆分阈值,并且当前的目标桶个数小于或等于n-2时,执行拆分桶,将根据桶内键的哈希值将有效键差值对分配至两个新桶,并将键差值按键排序之后写入到各自桶的有序段中,n为桶的最大数量;当有效键差值对的总大小大于所述拆分阈值,并且当前的目标桶个数大于n-2时,执行与vlog合并,将目标桶中的所有键差值对与vlog中的键值对合并,并释放目标桶;

19、步骤s304,根据有效键差值对的新位置更新所述桶表和前缀树;

20、本文档来自技高网...

【技术保护点】

1.一种基于键差值分离完善LSM树的键值存储方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的基于键差值分离完善LSM树的键值存储方法,其特征在于,所述步骤S1中,将键差值对存储于差值库中,并通过硬盘维护相对应的提交日志和Manifest文件。

3.根据权利要求1或2所述的基于键差值分离完善LSM树的键值存储方法,其特征在于,所述步骤S2包括以下子步骤:

4.根据权利要求3所述的基于键差值分离完善LSM树的键值存储方法,其特征在于,所述步骤S201中,所述前缀树采用二叉树,所述前缀树的每个叶节点代表一个二进制前缀,用于存储对应桶的位置索引;所述前缀树的每一条边为0或1,用于表示与叶节点相关联的前缀从根到叶节点的路径;设N为桶的最大数量,k为前缀树的初始高度,则N ≥ 2k;在初始化阶段,先在所述差值库中预分配2k个桶,并创建一个前缀树,该前缀树包括2k个叶节点,每个叶节点映射至所述差值库中一个对应的桶。

5.根据权利要求3所述的基于键差值分离完善LSM树的键值存储方法,其特征在于,所述步骤S202中,所述桶表针对每个桶分别维护其对应的维护组件,所述维护组件包括桶索引、有序段的过滤器、无序段的过滤器以及桶缓冲区;对所述维护组件的维护过程为:在垃圾回收过程中创建所述桶索引,所述桶索引用于维护有序段中键的位置;在垃圾回收时重新创建所述有序段的过滤器,删除所述无序段的过滤器,并在写入新的键差值对时对所述无序段的过滤器进行更新;当键差值对从写缓存刷写到差值库中时,先将键差值对添加到所述桶缓冲区中,直到所述桶缓冲区变满时,则将所述桶缓冲区里的数据刷写到硬盘上。

6.根据权利要求3所述的基于键差值分离完善LSM树的键值存储方法,其特征在于,所述步骤S203中,对于正在读取或写入的键差值对,如果是新的键,则将其添加到键差值缓存中;如果这个键已经存在于键差值缓存中,则将其与已经缓存的差值进行合并;对于正在写入的清除标记,将对应现有的键差值对,将现有的键差值对替换为新的空差值的键差值对;当所述键差值缓存被填满时,删除最少被访问的键差值对。

7.根据权利要求3所述的基于键差值分离完善LSM树的键值存储方法,其特征在于,所述步骤S3包括以下子步骤:

8.根据权利要求7所述的基于键差值分离完善LSM树的键值存储方法,其特征在于,所述步骤S304中,更新所述前缀树过程为:当执行拆分桶时,分配两个新桶,从原始叶节点中生成两个子节点作为新的叶节点,并让新的叶节点指向新的桶;当执行与vlog合并时,分配一个新桶,从前缀树中删除被合并的两个叶节点所对应的桶,并让被合并的两个叶节点所对应的父节点指向新的桶。

9.根据权利要求3所述的基于键差值分离完善LSM树的键值存储方法,其特征在于,所述步骤S4包括以下子步骤:

10.一种基于键差值分离完善LSM树的键值存储系统,其特征在于,采用了如权利要求1至9任意一项所述的基于键差值分离完善LSM树的键值存储方法,并包括:

...

【技术特征摘要】

1.一种基于键差值分离完善lsm树的键值存储方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的基于键差值分离完善lsm树的键值存储方法,其特征在于,所述步骤s1中,将键差值对存储于差值库中,并通过硬盘维护相对应的提交日志和manifest文件。

3.根据权利要求1或2所述的基于键差值分离完善lsm树的键值存储方法,其特征在于,所述步骤s2包括以下子步骤:

4.根据权利要求3所述的基于键差值分离完善lsm树的键值存储方法,其特征在于,所述步骤s201中,所述前缀树采用二叉树,所述前缀树的每个叶节点代表一个二进制前缀,用于存储对应桶的位置索引;所述前缀树的每一条边为0或1,用于表示与叶节点相关联的前缀从根到叶节点的路径;设n为桶的最大数量,k为前缀树的初始高度,则n ≥ 2k;在初始化阶段,先在所述差值库中预分配2k个桶,并创建一个前缀树,该前缀树包括2k个叶节点,每个叶节点映射至所述差值库中一个对应的桶。

5.根据权利要求3所述的基于键差值分离完善lsm树的键值存储方法,其特征在于,所述步骤s202中,所述桶表针对每个桶分别维护其对应的维护组件,所述维护组件包括桶索引、有序段的过滤器、无序段的过滤器以及桶缓冲区;对所述维护组件的维护过程为:在垃圾回收过程中创建所述桶索引,所述桶索引用于维护有序段中键的位置;在垃圾回收时重新创建所述有序段的过滤器,删除所述无序段的过滤器,并在写入新的键差值对时对所述无序段的过滤器进行更新...

【专利技术属性】
技术研发人员:黎金洪任彦璟李柏晴
申请(专利权)人:云链网科技广东有限公司
类型:发明
国别省市:

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

1