一种基于LSM-tree的KV存储系统读性能的缓存优化方法技术方案

技术编号:33244075 阅读:12 留言:0更新日期:2022-04-27 17:51
本发明专利技术公开了一种基于LSM

【技术实现步骤摘要】
一种基于LSM

tree的KV存储系统读性能的缓存优化方法


[0001]本专利技术涉及一种基于LSM

tree的KV存储系统读性能的缓存优化方法,属于存储系统的


技术介绍

[0002]现如今很多KV存储系统是基于LSM

tree(Log

Structured

Merge Tree)设计的,如LevelDB、RocksDB等。LSM

tree主要有三部分组成:MemTable、Immutable MemTable、SSTable(即SST),如图1所示。MemTable和Immutable MemTable是存在在内存中的组件。最新更新的数据保存在MemTable中,当MemTable达到一定大小后,会转化成Immutable MemTable。因为数据暂时保存在内存中,内存并不是可靠存储,如果断电会丢失数据,因此通常会通过WAL(Write

ahead logging)的方式来保证数据的可靠性。然后Immutable MemTable会刷到磁盘上变成L0上的SST。SST(Sorted String Table)是有序键值对集合,SST在磁盘上,并且分为很多层,每一层都有多个SST,每个SST的数据容量是固定的。每一层的数据都是按照键大小排好序的,除了L0层以外,是为了Immutable MemTable中的数据能快速的刷到磁盘上面。为了加快SST的读取,可以通过建立键的索引以及布隆过滤器来加快键的查找。需要注意的是,数据永远是从低层流向高层的。
[0003]KV对的查找操作最先搜索MemTable然后是Immutable MenTable,若内存中搜索不到,则搜索磁盘上的SST,搜索也从低层往高层进行的,因为最新的数据存放在低层中的。因为L0层SST的键是重叠的,所以L0层每一个SST都要被检查。由于KV对的查找是逐层进行的,且会搜索多个SST,读取数据时会产生多余的I/O,造成读放大。甚至如果查找失败的情况下会遍历整个LSM

tree的每一层,造成比较严重的读放大。在SST中加入布隆过滤器可以加快读的速度,但对读放大改善并不够显著。
[0004]基于LSM树的KV存储的主要问题是由于分层的结构特征和压缩操作等造成的较大的写放大和读取放大。以前的研究表明,LevelDB的写放大可能会达到50倍。例如,当合并一个从Li到Li+1的SST时,在最坏的情况下,LevelDB最多可以从Li+1读取10个SST,然后在对KV对进行合并和排序后将这些SST写回到Li+1。因此,当某些KV对最终通过一系列压缩从L0到L6时,可能会经历很多次读取和写入。
[0005]由于以下两个原因,读放大问题可能比写放大问题更加严重。首先,每个KV对没有内存索引,因此查找需要从最低到最高的级别搜索多个SST。其次,查询SST还需要读取SST中的多个索引块和布隆过滤器。因此,当存在更多级别时,读取放大将更为严重,甚至可能超过300倍。

技术实现思路

[0006]为了解决LSM

tree由于其独特的结构特征和压实操作带来的读放大问题,本专利技术提供一种基于LSM

tree的KV存储系统读性能的缓存优化方法,提高KV存储系统的读取性能,从而实现高读取性能。
[0007]本专利技术具体采用以下技术方案解决上述技术问题:
[0008]一种基于LSM

tree的KV存储系统读性能的缓存优化方法,包括以下步骤:
[0009]步骤1、在KV存储系统的内存中加入缓存KeyRange Cache和BF Cache,其中KeyRange Cache的分层结构与磁盘上SSTable的分层结构相同,使得KeyRange Cache中每一层的条目都与磁盘上相应层的SST一一对应,并且KeyRange Cache中每一层的每一个条目缓存磁盘上所对应SST的键范围(min,max)、记录磁盘上所对应SST最近一次被访问的次序的计序值count和一个指向缓存中BF Cache或指向空的BFPointer指针,其中计序值count用来判断数据热度;所述BF Cache缓存只有含热数据的SST的布隆过滤器;
[0010]步骤2、对数据进行冷热分离,判别出热数据和冷数据;若判别为热数据则将对应的布隆过滤器缓存至BFCache中,并将BFPointer指针指向BFCache;若判别为冷数据,则将BFPointer指针设为NULL;
[0011]步骤3、对指定键为k1进行查询,包括:
[0012]步骤3

1、先依次查询内存中的MemTable和Immutable MenTable,若找到直接返回k1的value,若未找到则继续搜索缓存的KeyRange Cache中条目的缓存信息,搜索KeyRange Cache时从低往高逐层搜索,若在第i层的条目找到包含k1的键范围,则执行步骤3

2;若此层未找到包含k1的键范围,则继续往下一层进行搜索;
[0013]步骤3

2、判断第i层找到包含k1键范围的条目在磁盘上对应的SST是否存储有热数据:
[0014]若该条目的BFPointer指针指向BFCache,即磁盘上对应的SST存储有热数据,那么从BFCache中对应布隆过滤器判断k1是否存在,如果存在则直接从磁盘上对应的SST中读出k1的value,如果不存在则在KeyRange Cache中搜索下一层;
[0015]若该条目的BFPointer指针指向空,即磁盘上对应的SST存储的都是冷数据,只能在磁盘对应的SST中读取布隆过滤器信息判断k1是否存在,若存在则读出k1的value,不存在则继续查询KeyRange Cache中的下一层;
[0016]步骤3

3、查找成功后更新KeyRange Cache的条目中记录的计序值count,使得k1所对应的磁盘上的SST被标为热;若一直搜索到KeyRange Cache的最后一层都未找到k1,则查找失败。
[0017]进一步地,作为本专利技术的一种优选技术方案,所述步骤2中对数据进行冷热分离,具体为:
[0018]利用KeyRange Cache的条目中计序值count记录所对应SST最近一次被访问的次序,设置一个全局变量GET_Count记录整个LSM_tree最近被访问的次数,并设定一个固定值,判断计序值count与Get_Count的差值若小于设定的固定值,则认为该SST最近有被访问过,表示此SST中的数据为热数据,否则为冷数据。
[0019]进一步地,作为本专利技术的一种优选技术方案,所述步骤3

1中从低往高逐层搜索KeyRange Cache,包括:
[0020]在KeyRange Cache中用k1顺序对第0层每个本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于LSM

tree的KV存储系统读性能的缓存优化方法,其特征在于,包括以下步骤:步骤1、在KV存储系统的内存中加入缓存KeyRange Cache和BF Cache,其中KeyRange Cache的分层结构与磁盘上SSTable的分层结构相同,使得KeyRange Cache中每一层的条目都与磁盘上相应层的SST一一对应,并且KeyRange Cache中每一层的每一个条目缓存磁盘上所对应SST的键范围(min,max)、记录磁盘上所对应SST最近一次被访问的次序的计序值count和一个指向缓存中BF Cache或指向空的BFPointer指针,其中计序值count用来判断数据热度;所述BF Cache缓存只有含热数据的SST的布隆过滤器;步骤2、对数据进行冷热分离,判别出热数据和冷数据;若判别为热数据则将对应的布隆过滤器缓存至BFCache中,并将BFPointer指针指向BFCache;若判别为冷数据,则将BFPointer指针设为NULL;步骤3、对指定键为k1进行查询,包括:步骤3

1、先依次查询内存中的MemTable和Immutable MenTable,若找到直接返回k1的value,若未找到则继续搜索缓存的KeyRange Cache中条目的缓存信息,搜索KeyRange Cache时从低往高逐层搜索,若在第i层的条目找到包含k1的键范围,则执行步骤3

2;若此层未找到包含k1的键范围,则继续往下一层进行搜索;步骤3

2、判断第i层找到包含k1键范围的条目在磁盘上对应的SST是否存储有热数据:若该条目的BFPointer指针指向BFCache,即磁盘上对应的SST存储有热数据,那么从BFCache中对应布隆过滤器判断k1是否存在,如果存在则直接从磁盘上对应的SST中读出k1的value,如果不存在则在KeyRange Cache中搜索下一层;若该条目的BFPointer指针指向空,即磁盘上对应的SST存储的都是冷数据,只能在磁盘对应的SST中读取布隆过滤器信息判断k1是否存在,若存在则读出k1的value,不存在则继续查询KeyRange Cache中的下一层;步骤3

3、查找成功后更新KeyRange Cache的条目中记录的计序值count,使得k1所对应的磁盘上的SST被标为热;若一直搜索到KeyRange Cache的最后一层都未找到k1,则查找失败。2.根据权利要求1所述基于LSM

tree的KV存储系统读性能的缓存优化方法,其特征在于,所述步骤2中...

【专利技术属性】
技术研发人员:陈思晔陈珊珊
申请(专利权)人:南京邮电大学
类型:发明
国别省市:

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

1