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

文档序号:9708005阅读:493来源:国知局
一种基于日志结构合并树的键值存储方法
【技术领域】
[0001]本发明属于计算机软件技术领域,涉及到一种基于日志结构合并树的键值存储方法。
【背景技术】
[0002]在当前的数据中心,键值存储系统已经成为大规模数据密集型网络应用的核心。许多研究致力于设计高性能和高扩展性的键值存储系统。日志结构的合并树(Log-Structured Merge-tree,LSM_tree)以其同时支持增量写、低写延迟和基于范围的扫描等特点,广泛应用于当前的新兴互联网应用。但基于LSM-tree的键值存储系统存在严重的写放大,为了提高系统的写性能,bLSM采用置换选择排序算法降低排序合并(Compact1n)频率(R.Sears and R.Ramakrishnan.bLSM:A General Purpose Log Sturctured MergeTree, in SIGM0D’2012),PCP提出一种流水线排序合并过程充分利用多CPU和10,加快排序合并过程(Z.Zhang,Y.Yue,B.He,et.al.Pipelined Compact1n for the LSM-tree.1nIPDPS’2014)。
[0003]在基于日志结构合并树的键值存储系统中,传统的排序合并过程是每个键值对从更小的组件向相邻的更大组件逐层流动,直到达到最大的组件。这种逐层流动机制导致了严重的写放大。bLSM和PCP的研究致力于降低排序合并频率或加快写速度,但是忽略了键值对的逐层流动是导致严重写放大的根本原因。

【发明内容】

[0004]本发明的目的在于提供一种基于日志结构合并树的键值存储方法,减少排序合并过程中键值对的读写1/0数,降低写放大,从而提高基于日志结构合并树的键值存储系统的吞吐量。
[0005]本发明的技术方案为:
[0006]—种基于日志结构合并树的键值存储方法,其步骤为:
[0007]1)为磁盘上的每一数据存储组件在内存中设置一对应的缓存组件,并对每一缓存组件设置一布隆过滤器;为每个数据存储组件中每个磁盘键值对表(SSTable)的每一数据块(Block)设置一布隆过滤器;
[0008]2)对于数据存储组件G中待合并的键值对,采用对应的布隆过滤器在数据存储组件和缓存组件中逐级对该数据存储组件C,当前数据块的每一键值对进行跳转判断,确定其能跳至的数据存储组件(:1+[?或缓存组件B1+N;其中Μ大于或等于0,N大于或等于1;跳转条件为:若跳跃至数据存储组件Ci+M,则跳跃条件为Bi+1、Ci+1、Bi+2、Ci+2……Bi+M、Ci+M各级组件中没有包含待跳键值对中键key对应的任何版本的键值对,而缓存组件Bi+M+i中包含待跳键值对中键key对应的某一版本的键值对;然后将跳跃到数据存储组件Ci+M的键值对置于对应的缓存Bi+M中;如果缓存Bi+M中的键值对数量达到对应的设定条件,则将其中的键值对写入数据存储组件Ci+M中;若跳跃至缓存组件Bi+N,则跳跃条件为Bi+1、Ci+1、Bi+2、Ci+2……Bi+N—hC1.1、Bi+N各级组件中没有包含待跳键值对中键key对应的任何版本的键值对,而数据存储组件Ci+N中包含待跳键值对中键key对应的某一版本的键值对;然后将待跳键值对跳跃到缓存组件Bi+N中;
[0009]3)对于缓存组件m中待合并的键值对,采用相应的布隆过滤器在数据存储组件和缓存组件中逐级对该键值对进行跳转判断,确定其能跳至的数据存储组件C1+M或缓存组件Bm;其中Μ大于或等于0,N大于或等于1;跳转条件为:若跳跃至数据存储组件(:1+[?,则跳跃条件为数据存储组件C1+M及其之前各级数据存储组件、缓存组件中没有包含待跳键值对中键key对应的任何版本的键值对,而缓存组件Bi+M+i中包含待跳键值对中键key—对应版本的键值对;然后将跳跃到数据存储组件C1+M的键值对置于对应的缓存组件队+M中;如果缓存组件Bi+M中的键值对数量达到对应的设定条件,则将其中的键值对写入数据存储组件Ci+M中;若跳跃至缓存组件Bm,则跳跃条件为缓存组件队+^及其之前各级数据存储组件、缓存组件中没有包含待跳键值对中键key对应的任何版本的键值对,而数据存储组件Ci+N-1中包含待跳键值对中键key—对应版本的键值对;然后将待跳键值对跳跃到缓存组件队+吣中。
[0010]进一步的,所述步骤2)中,确定出其跳至的数据存储组件C1+M或缓存组件B1+N并根据该键值对的来源标记该键值对的状态、跳转动作和路径;所述步骤3)中,确定其能跳至的数据存储组件C1+M或缓存组件并标记该键值对的状态、跳转动作和路径;所述状态包括InSSTable、InBuffer,InSSTable表示键值对存储在磁盘上的SSTable文件内,InBuffer表示键值对存储在内存中的缓存内。
[0011]进一步的,所述跳转动作包括:从SSTable跳跃到SSTable、从SSTable跳跃到Buf f er、从 Buf f er 跳跃到 SSTab 1 e 和从 Buf f er 跳跃到 Buf f er。
[0012]进一步的,所述N值小于或等于设定的最大值Nmax。
[0013]进一步的,在内存中划定一设定大小的缓存空间,将该缓存空间在逻辑上分成多个缓存作为各数据存储组件的缓存组件,属于同一缓存组件的键值对放在一起缓存,每一缓存组件中的内容是以链表形式实现。
[OOM]进一步的,当所有的缓存组件空间耗尽时,统计动作为从Buffer跳跃到Buffer的键值对中,将跳出键值对热度最高的缓存组件中的键值对持久化到数据存储组件。
[0015]进一步的,对动作为从SSTable跳跃到SSTable的键值对、从Buffer跳跃到SSTable的键值对,采用原始LSM-tree的write ahead log可靠性恢复机制进行恢复;对于动作为从SSTable跳跃到Buffer的键值对、从Buffer跳跃到Buffer的键值对进行恢复时,按日志记录的顺序和内容,重放每一次排序合并过程对在Buffer中存储的键值对的修改操作进行恢复。
[0016]进一步的,所述数据存储组件C1+M的缓存组件B1+M位于所述数据存储组件(:1+[?的上层。
[0017]本发明的主要内容包括:
[0018]1、采用布隆过滤器(Bloom Filter)判断某个数据块是否含有特定的键;
[0019]2、采用基于缓存的延迟插入机制,根据排序合并过程中键值对的存储位置将键值对划分为在磁盘的磁盘键值对表SSTable中(记为InSSTable)和在内存的缓存组件中(记为InBuffer)两种状态,重新定义排序合并过程的输入、输出,并实现排序(sort)与合并(merge);
[0020]3、为每个磁盘上的数据存储组件在内存中设置对应的缓存(buffer),对缓存采用按需分配与智能回收的管理机制;
[0021]4、设置缓存之后,对不跳入缓存的键值对采用原始LSM-tree的预写式日志(writeahead log,WAL)可靠性恢复机制;对于缓存中键值对实现额外的日志记录与可靠性恢复。
[0022]本发明提供的基于日志结构合并树的键值存储系统,在排序合并过程中通过跳过一些数据存储组件实现排序合并的输出键值对跳跃到更大的不相邻组件。
[0023]本发明发现传统的每个键值对逐层流动直到最大数据存储组件的机制导致了严重的写放大,提出对不经常更新的键值对,通过排序合并过程一层一层进行流动是很没有必要的。首先,特定的键值对在满足版本新旧约束的前提下,在排序合并过程中跨越多个数据存储组件,从而减小写放大。该方法采用布隆过滤器判断特定的键值对是否满足版本约束,即一个数据块中是否包含该键(Key)对应的任何版本的键值对。其次,特定键值对能跳过的数据存储组件数取决于该键值对的版本分布情况,并且该方法限制了所能跳过的数据存储组件数的最大值。键值对所能跳过的数据存储组件数不能大于预先定义的最大值。最后,该方法采用基于缓存的延迟机制实现键值对与跳跃到的目标数据存储组件排序合并。该方法为每个数据存储组件设置一定大小的缓存(buffer),将原本要跳跃到该数据存储组件的键值对置于该组
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1