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

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

Info

Publication number
CN105468298A
CN105468298A CN201510802190.3A CN201510802190A CN105468298A CN 105468298 A CN105468298 A CN 105468298A CN 201510802190 A CN201510802190 A CN 201510802190A CN 105468298 A CN105468298 A CN 105468298A
Authority
CN
China
Prior art keywords
key
value pair
component
data storage
storage component
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201510802190.3A
Other languages
English (en)
Other versions
CN105468298B (zh
Inventor
岳银亮
刘帆
李宇哲
王伟平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Information Engineering of CAS
Original Assignee
Institute of Information Engineering of CAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institute of Information Engineering of CAS filed Critical Institute of Information Engineering of CAS
Priority to CN201510802190.3A priority Critical patent/CN105468298B/zh
Publication of CN105468298A publication Critical patent/CN105468298A/zh
Application granted granted Critical
Publication of CN105468298B publication Critical patent/CN105468298B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0674Disk device
    • G06F3/0676Magnetic disk device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于日志结构合并树的键值存储方法。本方法为:1)为每一数据存储组件在内存中设置一缓存组件,并对每一缓存组件设置一布隆过滤器;为每个SSTable的每一数据块设置一布隆过滤器;2)对于待合并的数据存储组件Ci,采用布隆过滤器逐级对Ci当前数据块的每一键值对进行跳转判断:若跳跃至Ci+M,则Ci+M及其之前各级组件中没有对应键任何版本的键值对,而Bi+M+1中包含对应版本的键值对;然后将该键值对置于Bi+M中;若跳跃至Bi+N,则Bi+N及其之前各级组件中没有对应键任何版本的键值对,而Ci+N中包含对应版本的键值对;3)对于Bi中待合并的键值对采用相似方法进行处理。

Description

一种基于日志结构合并树的键值存储方法
技术领域
本发明属于计算机软件技术领域,涉及到一种基于日志结构合并树的键值存储方法。
背景技术
在当前的数据中心,键值存储系统已经成为大规模数据密集型网络应用的核心。许多研究致力于设计高性能和高扩展性的键值存储系统。日志结构的合并树(Log-StructuredMerge-tree,LSM-tree)以其同时支持增量写、低写延迟和基于范围的扫描等特点,广泛应用于当前的新兴互联网应用。但基于LSM-tree的键值存储系统存在严重的写放大,为了提高系统的写性能,bLSM采用置换选择排序算法降低排序合并(Compaction)频率(R.SearsandR.Ramakrishnan.bLSM:AGeneralPurposeLogSturcturedMergeTree.inSIGMOD’2012),PCP提出一种流水线排序合并过程充分利用多CPU和IO,加快排序合并过程(Z.Zhang,Y.Yue,B.He,et.al.PipelinedCompactionfortheLSM-tree.inIPDPS’2014)。
在基于日志结构合并树的键值存储系统中,传统的排序合并过程是每个键值对从更小的组件向相邻的更大组件逐层流动,直到达到最大的组件。这种逐层流动机制导致了严重的写放大。bLSM和PCP的研究致力于降低排序合并频率或加快写速度,但是忽略了键值对的逐层流动是导致严重写放大的根本原因。
发明内容
本发明的目的在于提供一种基于日志结构合并树的键值存储方法,减少排序合并过程中键值对的读写I/O数,降低写放大,从而提高基于日志结构合并树的键值存储系统的吞吐量。
本发明的技术方案为:
一种基于日志结构合并树的键值存储方法,其步骤为:
1)为磁盘上的每一数据存储组件在内存中设置一对应的缓存组件,并对每一缓存组件设置一布隆过滤器;为每个数据存储组件中每个磁盘键值对表(SSTable)的每一数据块(Block)设置一布隆过滤器;
2)对于数据存储组件Ci中待合并的键值对,采用对应的布隆过滤器在数据存储组件和缓存组件中逐级对该数据存储组件Ci当前数据块的每一键值对进行跳转判断,确定其能跳至的数据存储组件Ci+M或缓存组件Bi+N;其中M大于或等于0,N大于或等于1;跳转条件为:若跳跃至数据存储组件Ci+M,则跳跃条件为Bi+1、Ci+1、Bi+2、Ci+2……Bi+M、Ci+M各级组件中没有包含待跳键值对中键key对应的任何版本的键值对,而缓存组件Bi+M+1中包含待跳键值对中键key对应的某一版本的键值对;然后将跳跃到数据存储组件Ci+M的键值对置于对应的缓存Bi+M中;如果缓存Bi+M中的键值对数量达到对应的设定条件,则将其中的键值对写入数据存储组件Ci+M中;若跳跃至缓存组件Bi+N,则跳跃条件为Bi+1、Ci+1、Bi+2、Ci+2……Bi+N-1、Ci+N-1、Bi+N各级组件中没有包含待跳键值对中键key对应的任何版本的键值对,而数据存储组件Ci+N中包含待跳键值对中键key对应的某一版本的键值对;然后将待跳键值对跳跃到缓存组件Bi+N中;
3)对于缓存组件Bi中待合并的键值对,采用相应的布隆过滤器在数据存储组件和缓存组件中逐级对该键值对进行跳转判断,确定其能跳至的数据存储组件Ci+M或缓存组件Bi+N-1;其中M大于或等于0,N大于或等于1;跳转条件为:若跳跃至数据存储组件Ci+M,则跳跃条件为数据存储组件Ci+M及其之前各级数据存储组件、缓存组件中没有包含待跳键值对中键key对应的任何版本的键值对,而缓存组件Bi+M+1中包含待跳键值对中键key一对应版本的键值对;然后将跳跃到数据存储组件Ci+M的键值对置于对应的缓存组件Bi+M中;如果缓存组件Bi+M中的键值对数量达到对应的设定条件,则将其中的键值对写入数据存储组件Ci+M中;若跳跃至缓存组件Bi+N-1,则跳跃条件为缓存组件Bi+N-1及其之前各级数据存储组件、缓存组件中没有包含待跳键值对中键key对应的任何版本的键值对,而数据存储组件Ci+N-1中包含待跳键值对中键key一对应版本的键值对;然后将待跳键值对跳跃到缓存组件Bi+N-1中。
进一步的,所述步骤2)中,确定出其跳至的数据存储组件Ci+M或缓存组件Bi+N并根据该键值对的来源标记该键值对的状态、跳转动作和路径;所述步骤3)中,确定其能跳至的数据存储组件Ci+M或缓存组件Bi+N-1并标记该键值对的状态、跳转动作和路径;所述状态包括InSSTable、InBuffer,InSSTable表示键值对存储在磁盘上的SSTable文件内,InBuffer表示键值对存储在内存中的缓存内。
进一步的,所述跳转动作包括:从SSTable跳跃到SSTable、从SSTable跳跃到Buffer、从Buffer跳跃到SSTable和从Buffer跳跃到Buffer。
进一步的,所述N值小于或等于设定的最大值Nmax。
进一步的,在内存中划定一设定大小的缓存空间,将该缓存空间在逻辑上分成多个缓存作为各数据存储组件的缓存组件,属于同一缓存组件的键值对放在一起缓存,每一缓存组件中的内容是以链表形式实现。
进一步的,当所有的缓存组件空间耗尽时,统计动作为从Buffer跳跃到Buffer的键值对中,将跳出键值对热度最高的缓存组件中的键值对持久化到数据存储组件。
进一步的,对动作为从SSTable跳跃到SSTable的键值对、从Buffer跳跃到SSTable的键值对,采用原始LSM-tree的writeaheadlog可靠性恢复机制进行恢复;对于动作为从SSTable跳跃到Buffer的键值对、从Buffer跳跃到Buffer的键值对进行恢复时,按日志记录的顺序和内容,重放每一次排序合并过程对在Buffer中存储的键值对的修改操作进行恢复。
进一步的,所述数据存储组件Ci+M的缓存组件Bi+M位于所述数据存储组件Ci+M的上层。
本发明的主要内容包括:
1、采用布隆过滤器(BloomFilter)判断某个数据块是否含有特定的键;
2、采用基于缓存的延迟插入机制,根据排序合并过程中键值对的存储位置将键值对划分为在磁盘的磁盘键值对表SSTable中(记为InSSTable)和在内存的缓存组件中(记为InBuffer)两种状态,重新定义排序合并过程的输入、输出,并实现排序(sort)与合并(merge);
3、为每个磁盘上的数据存储组件在内存中设置对应的缓存(buffer),对缓存采用按需分配与智能回收的管理机制;
4、设置缓存之后,对不跳入缓存的键值对采用原始LSM-tree的预写式日志(writeaheadlog,WAL)可靠性恢复机制;对于缓存中键值对实现额外的日志记录与可靠性恢复。
本发明提供的基于日志结构合并树的键值存储系统,在排序合并过程中通过跳过一些数据存储组件实现排序合并的输出键值对跳跃到更大的不相邻组件。
本发明发现传统的每个键值对逐层流动直到最大数据存储组件的机制导致了严重的写放大,提出对不经常更新的键值对,通过排序合并过程一层一层进行流动是很没有必要的。首先,特定的键值对在满足版本新旧约束的前提下,在排序合并过程中跨越多个数据存储组件,从而减小写放大。该方法采用布隆过滤器判断特定的键值对是否满足版本约束,即一个数据块中是否包含该键(Key)对应的任何版本的键值对。其次,特定键值对能跳过的数据存储组件数取决于该键值对的版本分布情况,并且该方法限制了所能跳过的数据存储组件数的最大值。键值对所能跳过的数据存储组件数不能大于预先定义的最大值。最后,该方法采用基于缓存的延迟机制实现键值对与跳跃到的目标数据存储组件排序合并。该方法为每个数据存储组件设置一定大小的缓存(buffer),将原本要跳跃到该数据存储组件的键值对置于该组件的缓存中,在后续将该缓存也作为排序合并过程的输入进行排序(sort)与合并(merge)。
与现有技术相比,本发明的积极效果为:
利用本发明提供的基于日志结构合并树的键值存储系统,具有以下优点:
1、发现键值对逐层流动机制的不必要性,提出键值对在满足版本约束的前提下跳跃多层数据存储组件的机制,减少了排序合并过程中键值对的读写I/O操作,降低了写放大问题,提高了基于日志结构合并树的键值存储系统的吞吐量。
2、采用基于布隆过滤器的特定键的版本存在性判断,避免了从数据块中读出每个键,并与特定键进行比较的操作,降低了磁盘I/O操作。
3、采用基于缓存的延迟排序与合并机制,将跳跃的键值对置于缓存中,避免了跳跃的键值对与目标数据存储组件的合并,目标组件中所有的键值对不需要从磁盘读出,也不需要与跳跃的键值对合并后再写入磁盘,避免了大量额外的I/O操作,降低了写放大问题。
4、采用日志记录与恢复操作,实现系统容错机制,保证了系统的可靠性。
附图说明
图1为日志结构合并树体系结构图;
图2为排序合并过程中键值对在InSSTable和InBuffer之间的状态转换图;
图3为排序合并过程的数据流原理图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明做进一步说明。
实例1基于日志结构合并树的键值存储系统
1)基于布隆过滤器(BloomFilter,BF)的键值对版本存在性判断
该方法中如果特定的键值对(key-valuepair,记为kv)要下跳,首先要确保的一点是:被跳过的数据存储组件没有该kv对应的任何版本的键值对。
以两相邻的数据存储组件Ci和数据存储组件Ci+1进行排序合并之后的键值对为例,典型的基于LSM-tree的键值存储系统将键值对置于数据存储组件Ci+1,本方法尝试将其置于数据存储组件Ci+M,M大于或等于1,且M尽可能的大。
该方法采用逐级判断的机制,逐级判断是否可以跳至数据存储组件Ci+M。可以跳至数据存储组件Ci+M的条件是:数据存储组件Ci+M相应的键范围(keyrange)对应的SSTable中没有包含待跳键(key)对应的任何版本的键值对。为此,我们为每个磁盘键值对表(SSTable)的每个数据块(Block)设置一个布隆过滤器,用来近似地判断某个数据块(Block)中是否含有特定的键。利用布隆过滤器进行判断时,当判断一个键不存在时,则一定不存在;但由于布隆过滤器具有误报(falsepositive)的特征,即判断存在时,有可能不在。此时虽然可进一步通过将磁盘键值对表从磁盘读出,解析出全部键值对并进行比对之后,判断是否有相同key在该磁盘键值对表,但由于磁盘I/O代价很大,并且设置合适的哈希函数个数时,出现误报的概率很小,因此本文在利用布隆过滤器判断磁盘键值对表中有键值对时,就不再进一步判断和确认磁盘键值对表中是否真的存在相同的键,而近似的认为该磁盘键值对表中包含该键。
2)基于缓存的延迟插入机制
本方法为磁盘上的每个数据存储组件设置一定大小的缓存(buffer),即,为ComponentCi设置BufferBi,将跳跃到Ci的键值对(key-valuepairs)置于BufferBi中,在后续将其作为排序合并过程的输入对其进行排序(sort)和合并(merge);C0是在内存中的内存键值对表(Memtable)和不可更改内存键值对表(ImmutableMemTable),故不设置缓存。在层次上,将Bi置于Ci的相邻的上层,原因在于Bi的作用是存储从C1,...,Ci-1跳跃到Ci组件中的键值对,而存储在C1,...,Ci-1的键值对版本相对较新,存储在Bi上的键值对不能违反新旧版本约束,因此将Bi至于Ci上。同时为每一BufferBi设置一布隆过滤器,用于确定缓存中的键值对要跳转到的组件,包括数据存储组件和缓存组件。
由于缓存组件的加入,排序合并过程与传统的排序合并过程存在不同的地方。
在图1中就描述了一次日志结构合并树的排序合并过程,
(1)排序合并过程的键范围为[Ks,Ke],其中Ks<Ke。
(2)作为排序合并过程输入的键值对包括:分别来自C3和C4的SSTable中的键值对:T33、T34和T43、T44;在[Ks,Ke]范围内的,B3、B4的键值对;
(3)排序合并过程输出的键值对跳跃到不同的地方:①保留在数据存储组件C4的SSTable文件中,包括T46、T47、T48、T49;②下跳到更下层的缓存组件B5和B6中。
3)排序合并过程
缓存组件中的键值对(记为BKV)经过不同排序合并过程从不同的SSTable和Buffer中跳跃而来,每个BKV之间没有直接关联关系。
针对跳跃的键值对即参与排序合并过程的键值对,根据键值对的存储位置将键值对划分为两种状态:InSSTable和InBuffer。InSSTable表示键值对存储在磁盘上的SSTable文件内,InBuffer表示键值对存储在内存中的缓存组件内。如图2所示,作为排序合并过程输入的键值对,在排序合并过程中会进行以下四种动作(Actions)的一种:
设输入来自Bi、Ci、Bi+1和Ci+1
A1,表示键值对从SSTable跳跃到SSTable中的动作,即代表作为输入的键值对来自于SSTable,经过排序合并后输出(跳跃)到SSTable中。进行A1动作的键值对没有满足下跳的条件,而是留在了输出数据存储组件中,即键值对跳跃到Ci+1的SSTable文件中。
A2,表示键值对从SSTable跳跃到Buffer中的动作,即代表作为输入的键值对来自于SSTable,经过排序合并过程后输出(跳跃)到Buffer中。
A3,表示键值对从Buffer跳跃到SSTable中的动作,即代表作为输入的k键值对来自于Buffer,经过排序合并过程后输出(跳跃)到SSTable中。
A4,表示键值对从Buffer跳跃到Buffer中的动作,即代表作为输入的键值对来自于Buffer,经过排序合并过程后输出(跳跃)到Buffer中。A4与A2相类似,不同在于A4的键值对来自于Buffer,而A2的键值对来自于SSTable。
图3为将C3和C4以及B3和B4作为输入进行的一次排序合并过程。
排序合并过程的键范围为[Ks,Ke]。输入:T33,T34,T43,T44以及B3和B4在键范围中的键值对;输出:T46、T47、T48、T49以及跳跃到B5组件的键值对。
来自SSTable和Buffer中,作为输入的键值对在排序合并过程完成后,会分别跳跃到新的SSTable和Buffer组件中。
在该实例中标记了几个特定的键值对。如,K4V4和K5V5来自SSTableT43,在排序合并过程完成后,跳跃到B5中,对应图2中的A2;K3V3来自B3,排序合并过程完成后跳跃到SSTableT46中,对应图2中的A3;K6V6来自B4,排序合并过程完成后跳跃到B5中,对应图2中的A4。值得注意的是,由于从SSTable跳到SSTable与buffer无关,因此本实例并未重点研究键值对从SSTable跳到SSTable相应的动作。
4)缓存管理
(1)缓存空间“按需分配”机制
本实例没有对每层缓存组件的大小进行限制,而是对所有缓存组件的总大小进行限制。只要有空余的缓存空间,就将键值对置于其中。一方面,由于无法确定每层缓存组件的大小,所以无法对其进行预分配空间;另一方面,对总大小限制而不是给每层缓存组件预分配空间,可以更有效的利用和更好的共享存储空间。
在逻辑上,将属于同一缓存组件的键值对放在一起;在逻辑上分成几个缓存组件,缓存组件中的内容是以链表等形式实现。
在具体实现中,同一缓存组件的键值对放在一个跳表(SkipList)中,它是一个轻量级的、高效的数据结构,已被用于googleleveldb和facebookRocksDB中。为了加快检索速度,我们给每个缓存组件配备了一个布隆过滤器。随着键值对在缓存组件中的跳入跳出,会加大布隆过滤器的误判率,因此周期性的对所有的键重新产生新的布隆过滤器。由于键值对均存在于缓存组件中,因此重构速度非常快,带来的开销比较小。
(2)缓存空间“智能回收”机制
当所有的缓存空间耗尽后,没有键值对可以跳进缓存组件中。只有对缓存空间进行有效回收后,键值对才可以再次跳入到缓存组件中。本实例提出Heatest-Out的智能回收策略,统计从S-BUF(表示跳跃过程中,键值对原来所在的缓存组件)到D-SST(表示跳跃过程中,键值跳跃到的缓存组件)过程中S-BUF热度(Heat)最高的缓存组件,将该层缓存组件所处的数据存储组件选为输入。这里的热度(Heat)是指在近段时间内从S-BUF跳到D-SST的键值对个数。这样做的原因是该层缓存组件中存储的键值对从总体上而言,离开Buffer到SSTable的比率是最大的,就是系统提前将该层缓存组件中的键值对持久化到磁盘上。
5)可靠性恢复机制
系统的故障是无法避免的,有可能是人为原因(如:强制结束系统)或不可抗逆的自然因素(如:断电、硬件松动、系统死机等)导致系统宕机。那么当系统宕机或正常关闭后再次启动系统时,系统就需要进行恢复操作,使得系统可以恢复到系统宕机或关闭前的状态。原始LSM-tree数据结构已经有其可靠性恢复的机制,利用其WAL的写数据方式,所有未持久化到SSTable的键值对,即存储在内存键值对表(Memtable)中的键值对,均以WAL的方式在日志中有记录,恢复时直接顺序读取这些数据进行重写即可恢复内存键值对表(Memtable)中的键值对。对于本实例中不跳入缓存组件中的键值对,可直接使用原始LSM-tree的WAL机制进行恢复;而对于跳入缓存组件的恢复并不在LSM-tree的恢复流程内,本实例实现额外的日志记录与恢复操作。
基于日志结构合并树的键值存储系统在日志中记录排序合并过程中进行的A1、A2、A3、A4四种动作。在对缓存组件进行恢复时,系统按日志记录的顺序和内容,重放每一次排序合并过程对在缓存组件中存储的键值对的修改操作,从而恢复到系统宕机或关闭前的状态。

Claims (8)

1.一种基于日志结构合并树的键值存储方法,其步骤为:
1)为磁盘上的每一数据存储组件在内存中设置一对应的缓存组件,并对每一缓存组件设置一布隆过滤器;为每个磁盘键值对表SSTable的每一数据块设置一布隆过滤器;
2)对于数据存储组件Ci中待合并的键值对,采用相应的布隆过滤器在数据存储组件和缓存组件中逐级对该数据存储组件Ci当前数据块的每一键值对进行跳转判断,确定其能跳至的数据存储组件Ci+M或缓存组件Bi+N;其中M大于或等于0,N大于或等于1;跳转条件为:若跳跃至数据存储组件Ci+M,则数据存储组件Ci+M及其之前各级数据存储组件、缓存组件中没有包含待跳键值对中键key对应的任何版本的键值对,而缓存组件Bi+M+1中包含待跳键值对中键key一对应版本的键值对;然后将跳跃到数据存储组件Ci+M的键值对置于对应的缓存组件Bi+M中;如果缓存组件Bi+M中的键值对数量达到对应的设定条件,则将其中的键值对写入数据存储组件Ci+M中;若跳跃至缓存组件Bi+N,则跳跃条件为缓存组件Bi+N及其之前各级数据存储组件、缓存组件中没有包含待跳键值对中键key对应的任何版本的键值对,而数据存储组件Ci+N中包含待跳键值对中键key一对应版本的键值对;然后将待跳键值对跳跃到缓存组件BufferBi+N中;
3)对于缓存组件Bi中待合并的键值对,采用相应的布隆过滤器在数据存储组件和缓存组件中逐级对该键值对进行跳转判断,确定其能跳至的数据存储组件Ci+M或缓存组件Bi+N-1;其中M大于或等于0,N大于或等于1;跳转条件为:若跳跃至数据存储组件Ci+M,则跳跃条件为数据存储组件Ci+M及其之前各级数据存储组件、缓存组件中没有包含待跳键值对中键key对应的任何版本的键值对,而缓存组件Bi+M+1中包含待跳键值对中键key一对应版本的键值对;然后将跳跃到数据存储组件Ci+M的键值对置于对应的缓存组件Bi+M中;如果缓存组件Bi+M中的键值对数量达到对应的设定条件,则将其中的键值对写入数据存储组件Ci+M中;若跳跃至缓存组件Bi+N-1,则跳跃条件为缓存组件Bi+N-1及其之前各级数据存储组件、缓存组件中没有包含待跳键值对中键key对应的任何版本的键值对,而数据存储组件Ci+N-1中包含待跳键值对中键key一对应版本的键值对;然后将待跳键值对跳跃到缓存组件Bi+N-1中。
2.如权利要求1所述的方法,其特征在于,所述步骤2)中,确定出其跳至的数据存储组件Ci+M或缓存组件Bi+N并根据该键值对的来源标记该键值对的状态、跳转动作和路径;所述步骤3)中,确定其能跳至的数据存储组件Ci+M或缓存组件Bi+N-1并标记该键值对的状态、跳转动作和路径;所述状态包括InSSTable、InBuffer,InSSTable表示键值对存储在磁盘上的SSTable文件内,InBuffer表示键值对存储在内存中的缓存内。
3.如权利要求2所述的方法,其特征在于,所述跳转动作包括:从SSTable跳跃到SSTable、从SSTable跳跃到Buffer、从Buffer跳跃到SSTable和从Buffer跳跃到Buffer。
4.如权利要求1或2或3所述的方法,其特征在于,所述N值小于或等于设定的最大值Nmax。
5.如权利要求1或2或3所述的方法,其特征在于,在内存中划定一设定大小的缓存空间,将该缓存空间在逻辑上分成多个缓存作为各数据存储组件的缓存组件,属于同一缓存组件的键值对放在一起缓存,每一缓存组件中的内容是以链表形式实现。
6.如权利要求5所述的方法,其特征在于,当所有的缓存组件空间耗尽时,统计动作为从Buffer跳跃到Buffer的键值对中,将跳出键值对热度最高的缓存组件中的键值对持久化到数据存储组件。
7.如权利要求3所述的方法,其特征在于,对动作为从SSTable跳跃到SSTable的键值对、从Buffer跳跃到SSTable的键值对,采用原始LSM-tree的writeaheadlog可靠性恢复机制进行恢复;对于动作为从SSTable跳跃到Buffer的键值对、从Buffer跳跃到Buffer的键值对进行恢复时,按日志记录的顺序和内容,重放每一次排序合并过程对在Buffer中存储的键值对的修改操作进行恢复。
8.如权利要求1或2或3所述的方法,其特征在于,所述数据存储组件Ci+M的缓存组件Bi+M位于所述数据存储组件Ci+M的上层。
CN201510802190.3A 2015-11-19 2015-11-19 一种基于日志结构合并树的键值存储方法 Active CN105468298B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510802190.3A CN105468298B (zh) 2015-11-19 2015-11-19 一种基于日志结构合并树的键值存储方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510802190.3A CN105468298B (zh) 2015-11-19 2015-11-19 一种基于日志结构合并树的键值存储方法

Publications (2)

Publication Number Publication Date
CN105468298A true CN105468298A (zh) 2016-04-06
CN105468298B CN105468298B (zh) 2018-11-13

Family

ID=55606051

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510802190.3A Active CN105468298B (zh) 2015-11-19 2015-11-19 一种基于日志结构合并树的键值存储方法

Country Status (1)

Country Link
CN (1) CN105468298B (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106681665A (zh) * 2016-12-29 2017-05-17 北京奇虎科技有限公司 缓存数据的持久化存储方法及装置
CN106844650A (zh) * 2017-01-20 2017-06-13 中国科学院计算技术研究所 一种日志合并树的合并方法及系统
CN106886375A (zh) * 2017-03-27 2017-06-23 百度在线网络技术(北京)有限公司 存储数据的方法和装置
CN107038206A (zh) * 2017-01-17 2017-08-11 阿里巴巴集团控股有限公司 Lsm树的建立方法、lsm树的数据读取方法和服务器
CN108052643A (zh) * 2017-12-22 2018-05-18 北京奇虎科技有限公司 基于LSM Tree结构的数据存储方法、装置及存储引擎
CN108287840A (zh) * 2017-01-09 2018-07-17 北京大学 一种基于矩阵哈希的数据存储和查询方法
CN109271343A (zh) * 2018-07-24 2019-01-25 华为技术有限公司 一种应用于键值存储系统中的数据合并方法和装置
CN109542339A (zh) * 2018-10-23 2019-03-29 拉扎斯网络科技(上海)有限公司 数据分层访问方法、装置、多层存储设备和存储介质
CN109947775A (zh) * 2019-03-13 2019-06-28 北京微步在线科技有限公司 数据处理方法、装置、电子设备及计算机可读介质
CN110147359A (zh) * 2017-12-13 2019-08-20 北京奇虎科技有限公司 一种增量生成方法、装置以及一种数据更新方法、装置
CN113326262A (zh) * 2021-05-14 2021-08-31 锐掣(杭州)科技有限公司 基于键值数据库的数据处理方法、装置、设备及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140195492A1 (en) * 2012-12-19 2014-07-10 Salesforce.Com, Inc. Systems, methods, and apparatuses for fixing logical or physical corruption in databases using lsm trees
US20150058568A1 (en) * 2013-08-26 2015-02-26 International Business Machines Corporation HIERARCHICAL STORAGE FOR LSM-BASED NoSQL STORES
CN104915145A (zh) * 2014-03-11 2015-09-16 华为技术有限公司 一种降低LSM Tree写放大的方法和装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140195492A1 (en) * 2012-12-19 2014-07-10 Salesforce.Com, Inc. Systems, methods, and apparatuses for fixing logical or physical corruption in databases using lsm trees
US20150058568A1 (en) * 2013-08-26 2015-02-26 International Business Machines Corporation HIERARCHICAL STORAGE FOR LSM-BASED NoSQL STORES
CN104915145A (zh) * 2014-03-11 2015-09-16 华为技术有限公司 一种降低LSM Tree写放大的方法和装置

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106681665A (zh) * 2016-12-29 2017-05-17 北京奇虎科技有限公司 缓存数据的持久化存储方法及装置
CN108287840B (zh) * 2017-01-09 2022-05-03 北京大学 一种基于矩阵哈希的数据存储和查询方法
CN108287840A (zh) * 2017-01-09 2018-07-17 北京大学 一种基于矩阵哈希的数据存储和查询方法
CN107038206A (zh) * 2017-01-17 2017-08-11 阿里巴巴集团控股有限公司 Lsm树的建立方法、lsm树的数据读取方法和服务器
CN106844650A (zh) * 2017-01-20 2017-06-13 中国科学院计算技术研究所 一种日志合并树的合并方法及系统
CN106886375A (zh) * 2017-03-27 2017-06-23 百度在线网络技术(北京)有限公司 存储数据的方法和装置
CN106886375B (zh) * 2017-03-27 2019-11-05 百度在线网络技术(北京)有限公司 存储数据的方法和装置
CN110147359A (zh) * 2017-12-13 2019-08-20 北京奇虎科技有限公司 一种增量生成方法、装置以及一种数据更新方法、装置
CN108052643B (zh) * 2017-12-22 2021-02-23 北京奇虎科技有限公司 基于LSM Tree结构的数据存储方法、装置及存储引擎
CN108052643A (zh) * 2017-12-22 2018-05-18 北京奇虎科技有限公司 基于LSM Tree结构的数据存储方法、装置及存储引擎
CN109271343B (zh) * 2018-07-24 2020-12-15 华为技术有限公司 一种应用于键值存储系统中的数据合并方法和装置
CN109271343A (zh) * 2018-07-24 2019-01-25 华为技术有限公司 一种应用于键值存储系统中的数据合并方法和装置
CN109542339A (zh) * 2018-10-23 2019-03-29 拉扎斯网络科技(上海)有限公司 数据分层访问方法、装置、多层存储设备和存储介质
CN109542339B (zh) * 2018-10-23 2021-09-03 拉扎斯网络科技(上海)有限公司 数据分层访问方法、装置、多层存储设备和存储介质
CN109947775A (zh) * 2019-03-13 2019-06-28 北京微步在线科技有限公司 数据处理方法、装置、电子设备及计算机可读介质
CN113326262A (zh) * 2021-05-14 2021-08-31 锐掣(杭州)科技有限公司 基于键值数据库的数据处理方法、装置、设备及介质
CN113326262B (zh) * 2021-05-14 2022-06-24 锐掣(杭州)科技有限公司 基于键值数据库的数据处理方法、装置、设备及介质

Also Published As

Publication number Publication date
CN105468298B (zh) 2018-11-13

Similar Documents

Publication Publication Date Title
CN105468298A (zh) 一种基于日志结构合并树的键值存储方法
CN111399777B (zh) 一种基于数据值分类的差异化键值数据存储方法
CN103488583B (zh) 一种高性能高可靠的固态盘实现方法
CN103577121B (zh) 一种基于Nand Flash的高可靠线性文件存取方法
CN104238962B (zh) 向缓存中写入数据的方法及装置
CN102541757B (zh) 写缓存方法、缓存同步方法和装置
CN109710572B (zh) 一种基于HBase的文件分片方法
CN106066890B (zh) 一种分布式高性能数据库一体机系统
CN103577339A (zh) 一种数据存储方法及系统
CN105912687A (zh) 海量分布式数据库存储单元
CN106407224A (zh) 一种键值存储系统中文件压实的方法和装置
CN103164490A (zh) 一种不固定长度数据的高效存储实现方法和装置
CN103577513A (zh) 藉延迟节点实例化以缓存xml信息集的系统和/或方法
CN113626431A (zh) 一种基于lsm树的延迟垃圾回收的键值分离存储方法及系统
CN106445405A (zh) 一种面向闪存存储的数据访问方法及其装置
US9558123B2 (en) Retrieval hash index
CN106445740A (zh) 固态硬盘中nand闪存数据的控制方法及控制系统
CN108089825A (zh) 一种基于分布式集群的存储系统
CN107168651A (zh) 一种小文件聚合存储处理方法
CN103678571A (zh) 应用于单台多核处理器主机的多线程网络爬虫执行方法
CN105447168A (zh) Mp4格式的碎片文件恢复与重组的方法
CN106844607A (zh) 一种适用于非整型主键与空闲块合并的SQLite数据恢复方法
CN101841483B (zh) 硬件路由表管理方法、装置和通讯设备
CN105204783A (zh) 一种基于数据生存期的固态盘垃圾回收方法
CN115952195A (zh) 一种区块链数据溯源查询优化方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant