一种基于日志结构合并树的键值存储方法_3

文档序号:9708005阅读:来源:国知局
其进行预分配空间;另一方面,对总大小限制而不是给每层缓存组件预分配空间,可以更有效的利用和更好的共享存储空间。
[0061]在逻辑上,将属于同一缓存组件的键值对放在一起;在逻辑上分成几个缓存组件,缓存组件中的内容是以链表等形式实现。
[0062]在具体实现中,同一缓存组件的键值对放在一个跳表(SkipList)中,它是一个轻量级的、高效的数据结构,已被用于google leveldb和facebook RocksDB中。为了加快检索速度,我们给每个缓存组件配备了一个布隆过滤器。随着键值对在缓存组件中的跳入跳出,会加大布隆过滤器的误判率,因此周期性的对所有的键重新产生新的布隆过滤器。由于键值对均存在于缓存组件中,因此重构速度非常快,带来的开销比较小。
[0063 ] (2)缓存空间“智能回收”机制
[0064]当所有的缓存空间耗尽后,没有键值对可以跳进缓存组件中。只有对缓存空间进行有效回收后,键值对才可以再次跳入到缓存组件中。本实例提出Heatest-Out的智能回收策略,统计从S-BUF(表示跳跃过程中,键值对原来所在的缓存组件)到D_SST(表示跳跃过程中,键值跳跃到的缓存组件)过程中S-BUF热度(Heat)最高的缓存组件,将该层缓存组件所处的数据存储组件选为输入。这里的热度(Heat)是指在近段时间内从S-BUF跳到D-SST的键值对个数。这样做的原因是该层缓存组件中存储的键值对从总体上而言,离开Buffer到SSTable的比率是最大的,就是系统提前将该层缓存组件中的键值对持久化到磁盘上。
[0065]5)可靠性恢复机制
[0066]系统的故障是无法避免的,有可能是人为原因(如:强制结束系统)或不可抗逆的自然因素(如:断电、硬件松动、系统死机等)导致系统宕机。那么当系统宕机或正常关闭后再次启动系统时,系统就需要进行恢复操作,使得系统可以恢复到系统宕机或关闭前的状态。原始LSM-tree数据结构已经有其可靠性恢复的机制,利用其WAL的写数据方式,所有未持久化到SSTab 1 e的键值对,即存储在内存键值对表(Memtab 1 e)中的键值对,均以WAL的方式在日志中有记录,恢复时直接顺序读取这些数据进行重写即可恢复内存键值对表(Memtable)中的键值对。对于本实例中不跳入缓存组件中的键值对,可直接使用原始LSM-tree的WAL机制进行恢复;而对于跳入缓存组件的恢复并不在LSM-tree的恢复流程内,本实例实现额外的日志记录与恢复操作。
[0067]基于日志结构合并树的键值存储系统在日志中记录排序合并过程中进行的A1、A2、A3、A4四种动作。在对缓存组件进行恢复时,系统按日志记录的顺序和内容,重放每一次排序合并过程对在缓存组件中存储的键值对的修改操作,从而恢复到系统宕机或关闭前的状态。
【主权项】
1.一种基于日志结构合并树的键值存储方法,其步骤为: 1)为磁盘上的每一数据存储组件在内存中设置一对应的缓存组件,并对每一缓存组件设置一布隆过滤器;为每个磁盘键值对表SSTable的每一数据块设置一布隆过滤器; 2)对于数据存储组件Q中待合并的键值对,采用相应的布隆过滤器在数据存储组件和缓存组件中逐级对该数据存储组件G当前数据块的每一键值对进行跳转判断,确定其能跳至的数据存储组件C1+M或缓存组件B1+n ;其中Μ大于或等于Ο,N大于或等于1;跳转条件为:若跳跃至数据存储组件C1+M,则数据存储组件(:1+[?及其之前各级数据存储组件、缓存组件中没有包含待跳键值对中键key对应的任何版本的键值对,而缓存组件Bi+M+i中包含待跳键值对中键key—对应版本的键值对;然后将跳跃到数据存储组件C1+M的键值对置于对应的缓存组件Bi+M中;如果缓存组件Bi+M中的键值对数量达到对应的设定条件,则将其中的键值对写入数据存储组件C1+M中;若跳跃至缓存组件B1+N,则跳跃条件为缓存组件队+N及其之前各级数据存储组件、缓存组件中没有包含待跳键值对中键key对应的任何版本的键值对,而数据存储组件Ci+N中包含待跳键值对中键key—对应版本的键值对;然后将待跳键值对跳跃到缓存组件Buffer Bi+N中; 3)对于缓存组件m中待合并的键值对,采用相应的布隆过滤器在数据存储组件和缓存组件中逐级对该键值对进行跳转判断,确定其能跳至的数据存储组件c1+M或缓存组件B1+N-1;其中Μ大于或等于0,N大于或等于1;跳转条件为:若跳跃至数据存储组件(:1+[?,则跳跃条件为数据存储组件C1+M及其之前各级数据存储组件、缓存组件中没有包含待跳键值对中键key对应的任何版本的键值对,而缓存组件Bi+M+i中包含待跳键值对中键key—对应版本的键值对;然后将跳跃到数据存储组件C1+M的键值对置于对应的缓存组件队+M中;如果缓存组件B1+M中的键值对数量达到对应的设定条件,则将其中的键值对写入数据存储组件C1+M中;若跳跃至缓存组件Bm,则跳跃条件为缓存组件队+^及其之前各级数据存储组件、缓存组件中没有包含待跳键值对中键key对应的任何版本的键值对,而数据存储组件(^+吣中包含待跳键值对中键key—对应版本的键值对;然后将待跳键值对跳跃到缓存组件队+吣中。2.如权利要求1所述的方法,其特征在于,所述步骤2)中,确定出其跳至的数据存储组件(:1+[?或缓存组件B1+N并根据该键值对的来源标记该键值对的状态、跳转动作和路径;所述步骤3)中,确定其能跳至的数据存储组件C1+M或缓存组件队+^并标记该键值对的状态、跳转动作和路径;所述状态包括InSSTable、InBuffer,InSSTable表示键值对存储在磁盘上的SSTab 1 e文件内,InBuf f er表示键值对存储在内存中的缓存内。3.如权利要求2所述的方法,其特征在于,所述跳转动作包括:从SSTable跳跃到SSTable、从SSTable 跳跃到Buffer、从 Buffer跳跃到SSTable和从 Buffer跳跃到Buffer。4.如权利要求1或2或3所述的方法,其特征在于,所述N值小于或等于设定的最大值Nmaxo5.如权利要求1或2或3所述的方法,其特征在于,在内存中划定一设定大小的缓存空间,将该缓存空间在逻辑上分成多个缓存作为各数据存储组件的缓存组件,属于同一缓存组件的键值对放在一起缓存,每一缓存组件中的内容是以链表形式实现。6.如权利要求5所述的方法,其特征在于,当所有的缓存组件空间耗尽时,统计动作为从Buffer跳跃到Buffer的键值对中,将跳出键值对热度最高的缓存组件中的键值对持久化到数据存储组件。7.如权利要求3所述的方法,其特征在于,对动作为从SSTable跳跃到SSTable的键值对、从Buffer跳跃到SSTable的键值对,采用原始LSM-tree的write ahead log可靠性恢复机制进行恢复;对于动作为从SSTable跳跃到Buffer的键值对、从Buffer跳跃到Buffer的键值对进行恢复时,按日志记录的顺序和内容,重放每一次排序合并过程对在Buff er中存储的键值对的修改操作进行恢复。8.如权利要求1或2或3所述的方法,其特征在于,所述数据存储组件C1+M的缓存组件B1+m位于所述数据存储组件(:1+[?的上层。
【专利摘要】本发明公开了一种基于日志结构合并树的键值存储方法。本方法为:1)为每一数据存储组件在内存中设置一缓存组件,并对每一缓存组件设置一布隆过滤器;为每个SSTable的每一数据块设置一布隆过滤器;2)对于待合并的数据存储组件Ci,采用布隆过滤器逐级对Ci当前数据块的每一键值对进行跳转判断:若跳跃至Ci+M,则Ci+M及其之前各级组件中没有对应键任何版本的键值对,而Bi+M+1中包含对应版本的键值对;然后将该键值对置于Bi+M中;若跳跃至Bi+N,则Bi+N及其之前各级组件中没有对应键任何版本的键值对,而Ci+N中包含对应版本的键值对;3)对于Bi中待合并的键值对采用相似方法进行处理。
【IPC分类】G06F3/06
【公开号】CN105468298
【申请号】CN201510802190
【发明人】岳银亮, 刘帆, 李宇哲, 王伟平
【申请人】中国科学院信息工程研究所
【公开日】2016年4月6日
【申请日】2015年11月19日
当前第3页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1