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

基于LSM树的键值分离存储引擎垃圾回收方法、系统及设备技术方案

技术编号:39156163 阅读:9 留言:0更新日期:2023-10-23 15:00
本发明专利技术公开了一种基于LSM树的键值分离存储引擎垃圾回收方法、系统及设备。本发明专利技术在基于LSM树的键值分离存储引擎基础上新增加了地址映射表,且LSM树中存储值虚拟地址来代替值在值日志(ValueLog)中的地址,而新增加的地址映射表则存储值虚拟地址与值真实地址的映射关系。本发明专利技术通过引入地址映射表实现了ValueLog与LSM树的解耦,省去了ValueLog的垃圾回收过程中回查回写LSM树所带来的额外性能开销。同时因为ValueLog垃圾回收后无需对LSM树进行更新,有效避免了回写LSM树所带来的额外IO开销以及可能出现的新值位于旧值之下的问题,保证整个LSM树键值从上至下由新到旧排列,读操作无需再遍历所有层以确保读取的键值最新,减缓了ValueLog垃圾回收的读写放大问题。题。题。

【技术实现步骤摘要】
基于LSM树的键值分离存储引擎垃圾回收方法、系统及设备


[0001]本专利技术涉及计算机存储
,特别是指一种基于LSM树的键值分离存储引擎垃圾回收方法、系统及设备。

技术介绍

[0002]目前有许多基于LSM树实现的键值存储引擎(如LevelDB、RocksDB等),其特点就是将离散的随机写入转换成批量的追加写以最大化系统的写性能。由于LSM树结构中的键值是以追加写的形式更新,就导致在当某些键值更新或删除之后LSM树中会存在大量需要回收的键值对,此时就需要对LSM树定期地进行压缩操作来移除已经过期的数据。然而压缩过程可能会带来大量的数据读取和重写从而带来写放大问题,这对基于固态硬盘存储的系统极不友好。
[0003]为了解决压缩操作所造成的写放大问题,工业界出现了将键值分离进行存储的存储引擎,其主要思想就是通过将键和值分离进行存储来大大减小LSM树的体积以及LSM树在压缩过程中需要重写的数据量。
[0004]用于存储值的值日志(ValueLog)和LSM树一样需要对旧值进行回收。同时ValueLog在垃圾回收后键值对的地址将产生变化,因此为了确保LSM树中保存的值地址能正确读取值就需要采取一定的措施在ValueLog垃圾回收完成后同步更新LSM树中的值地址。
[0005]以实现了键值分离的存储引擎BadgerDB为例,其ValueLog的垃圾回收大致可分为以下三个步骤:
[0006]1、将每个ValueLog的垃圾计数存放在DISCARD文件中,当用户更新或删除某个key值时,对应值日志的文件计数器将加1,当计数值达到某个阈值时,就会触发该ValueLog的垃圾回收。
[0007]2、遍历该ValueLog中的键值对,查询LSM树中是否存在当前所处理的键值对的键,若不存在或是已经被更新则丢弃该键值对,若存在则将该键值对写入到新的ValueLog中。
[0008]3、当新的ValueLog生成后,将保留下来的键值对的新位置重新回写到LSM树中,以此来更新键的值地址。
[0009]从以上的垃圾回收过程中可以看出,键值分离的存储引擎在垃圾回收过程会对LSM树前台写入的吞吐量造成影响,此外若键的体积较大,则回写LSM树这个过程中也会增加额外的性能开销和写放大。同时由于回写LSM树的过程中没有考虑回写的键值是否在垃圾回收过程中已经被用户更新或删除,导致了用户新写入的键值反而在旧键值之下,因此为了保证读的正确性,在读取时需要扫描所有层以确保读取的是用户最近所写入的键值对,从而造成了读放大问题影响读性能。

技术实现思路

[0010]为了解决现有技术中值日志垃圾回收对存储引擎读写性能的影响以及读写放大
的问题,本专利技术提供了一种基于LSM树的键值分离存储引擎垃圾回收方法、系统及设备。
[0011]本专利技术具体采用的技术方案如下:
[0012]第一方面,本专利技术提供了一种基于LSM树的键值分离存储引擎垃圾回收方法,所述键值分离存储引擎中包括LSM树、值日志以及地址映射表,其中LSM树中存储有键以及键对应的值虚拟地址,地址映射表中存储有值虚拟地址与值日志中值真实地址的映射关系,且地址映射表和值日志保持一一对应的关系,每个值日志都有其对应的地址映射表;
[0013]在完成LSM树的压缩操作后,将LSM树中丢弃键值对的值虚拟地址缓存于内存中,形成垃圾地址集合;
[0014]将丢弃键值对所在的值日志确定为待回收的值日志,并创建新的值日志和新的地址映射表;
[0015]扫描待回收的值日志,并从值日志的记录中解析出键值对以及键值对中键的值虚拟地址,在所述垃圾地址集合中遍历查询解析出来的每个值虚拟地址,若查询到值虚拟地址不存在于垃圾地址集合中,则将对应的键值对写入到新的值日志中,并将值虚拟地址和键值对在新的值日志中的值真实地址更新到新的地址映射表中;
[0016]遍历结束后,将新的值日志和新的地址映射表进行持久化,替换待回收的值日志和地址映射表,完成值日志的垃圾回收过程。
[0017]作为上述第一方面的优选,所述地址映射表包括:
[0018]数据块,用于存储值虚拟地址与值真实地址的映射关系;数据块中每条映射关系为一个条目,每个条目长度固定且相等,值虚拟地址按照大小从小到大顺序进行排列;
[0019]索引块,用于存储部分值虚拟地址及其所在数据块的偏移量指针;索引块内每隔预设数量的条目划分为一个数据块并为数据块建立一条索引,索引表示为该数据块中最小的虚拟地址以及该数据块在地址映射表中的偏移量;每条索引大小一致且有序排列;
[0020]元数据块,用于存储元数据;所述元数据包括地址映射表的检验和(checksum)、地址映射表中条目总数、索引块起始偏移量和数据块起始偏移量。
[0021]作为上述第一方面的优选,在所述遍历查询过程中,先在所述垃圾地址集合中查询解析出来的每个值虚拟地址,通过中间参数记录每个值虚拟地址对应的查询结果,若解析出来的值虚拟地址存在于垃圾地址集合中,则确定中间参数为第一参数值,如果解析出来的值虚拟地址不存在与垃圾地址集合中,则确定中间参数为第二参数值;然后根据中间参数判断是否将每个值虚拟地址对应的键值对写入到新的值日志,当中间参数为第一参数值时,确定该键值对已被删除或已过期,则忽略该键值对;当中间参数为第二参数值时,确定该键值对需要保留,则将该键值对写入到新的值日志中并记录写入的值真实地址用于更新新的地址映射表。
[0022]作为上述第一方面的优选,所述地址映射表同步缓存于内存中以缩短系统读操作的耗时,新的地址映射表进行持久化的同时同步更新至内存缓存的地址映射表中。
[0023]作为上述第一方面的优选,值日志和地址映射表通过相同的文件编号保持一一对应的关系;值日志和地址映射表在创建新文件时,新文件的文件编号与待回收的旧文件编号相同,但采用临时文件后缀来与旧文件的正式文件后缀相区分;在遍历结束后,将新文件的文件后缀重命名为正式文件后缀,同时删除旧文件,从而使持久化后的值日志新文件和地址映射表新文件继续保持一一对应的关系。
[0024]作为上述第一方面的优选,所述值虚拟地址总长度为128位,其中前64位表示为值日志的编号,后64位表示为虚拟偏移量。
[0025]作为上述第一方面的优选,每次键值分离存储引擎启动时通过检查地址映射表元数据块中的检验和(checksum)来判断地址映射表是否完整,若地址映射表不完整,则需要扫描值日志并解析值日志记录,以获取键值对的值虚拟地址和该键值对在值日志中的偏移量,从而通过值日志恢复重建地址映射表。
[0026]第二方面,本专利技术提供了一种基于LSM树的键值分离存储引擎垃圾回收优化系统,所述键值分离存储引擎中包括LSM树、值日志以及地址映射表,其中LSM树中存储有键以及键对应的值虚拟地址,地址映射表中存储有值虚拟地址与值日志中值真实地址的映射关系,且地址映射表和值日志保持一一对应的关系,每个值日志都有其对应的地址映射表;
[0027]本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于LSM树的键值分离存储引擎垃圾回收方法,其特征在于,所述键值分离存储引擎中包括LSM树、值日志以及地址映射表,其中LSM树中存储有键以及键对应的值虚拟地址,地址映射表中存储有值虚拟地址与值日志中值真实地址的映射关系,且地址映射表和值日志保持一一对应的关系,每个值日志都有其对应的地址映射表;在完成LSM树的压缩操作后,将LSM树中丢弃键值对的值虚拟地址缓存于内存中,形成垃圾地址集合;将丢弃键值对所在的值日志确定为待回收的值日志,并创建新的值日志和新的地址映射表;扫描待回收的值日志,并从值日志的记录中解析出键值对以及键值对中键的值虚拟地址,在所述垃圾地址集合中遍历查询解析出来的每个值虚拟地址,若查询到值虚拟地址不存在于垃圾地址集合中,则将对应的键值对写入到新的值日志中,并将值虚拟地址和键值对在新的值日志中的值真实地址更新到新的地址映射表中;遍历结束后,将新的值日志和新的地址映射表进行持久化,替换待回收的值日志和地址映射表,完成值日志的垃圾回收过程。2.如权利要求1所述的基于LSM树的键值分离存储引擎垃圾回收方法,其特征在于,所述地址映射表包括:数据块,用于存储值虚拟地址与值真实地址的映射关系;数据块中每条映射关系为一个条目,每个条目长度固定且相等,值虚拟地址按照大小从小到大顺序进行排列;索引块,用于存储部分值虚拟地址及其所在数据块的偏移量指针;索引块内每隔预设数量的条目划分为一个数据块并为数据块建立一条索引,索引表示为该数据块中最小的虚拟地址以及该数据块在地址映射表中的偏移量;每条索引大小一致且有序排列;元数据块,用于存储元数据;所述元数据包括地址映射表的检验和(checksum)、地址映射表中条目总数、索引块起始偏移量和数据块起始偏移量。3.如权利要求1所述的基于LSM树的键值分离存储引擎垃圾回收方法,其特征在于,在所述遍历查询过程中,先在所述垃圾地址集合中查询解析出来的每个值虚拟地址,通过中间参数记录每个值虚拟地址对应的查询结果,若解析出来的值虚拟地址存在于垃圾地址集合中,则确定中间参数为第一参数值,如果解析出来的值虚拟地址不存在与垃圾地址集合中,则确定中间参数为第二参数值;然后根据中间参数判断是否将每个值虚拟地址对应的键值对写入到新的值日志,当中间参数为第一参数值时,确定该键值对已被删除或已过期,则忽略该键值对;当中间参数为第二参数值时,确定该键值对需要保留,则将该键值对写入到新的值日志中并记录写入的值真实地址用于更新新的地址映射表。4.如权利要求1所述的基于LSM树的键值分离存储引擎垃圾回收方法,其特征在于,所述地址映射表同步缓存于内存中以缩短系统读操作的耗时,新的地址映射表进行持久化的同时同步更新至内存缓存的地址映射...

【专利技术属性】
技术研发人员:叶琦熠胡天磊
申请(专利权)人:浙江大学
类型:发明
国别省市:

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

1