CN105468298B - 一种基于日志结构合并树的键值存储方法 - Google Patents
一种基于日志结构合并树的键值存储方法 Download PDFInfo
- Publication number
- CN105468298B CN105468298B CN201510802190.3A CN201510802190A CN105468298B CN 105468298 B CN105468298 B CN 105468298B CN 201510802190 A CN201510802190 A CN 201510802190A CN 105468298 B CN105468298 B CN 105468298B
- Authority
- CN
- China
- Prior art keywords
- key
- value pair
- component
- data storage
- caching
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0613—Improving I/O performance in relation to throughput
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0643—Management of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic 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-Structured Merge-tree,LSM-tree)以其同时支持增量写、低写延迟和基于范围的扫描等特点,广泛应用于当前的新兴互联网应用。但基于LSM-tree的键值存储系统存在严重的写放大,为了提高系统的写性能,bLSM采用置换选择排序算法降低排序合并(Compaction)频率(R.Sears and R.Ramakrishnan.bLSM:A General Purpose Log Sturctured MergeTree.in SIGMOD’2012),PCP提出一种流水线排序合并过程充分利用多CPU和IO,加快排序合并过程(Z.Zhang,Y.Yue,B.He,et.al.Pipelined Compaction for the LSM-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的write ahead log可靠性恢复机制进行恢复;对于动作为从SSTable跳跃到Buffer的键值对、从Buffer跳跃到Buffer的键值对进行恢复时,按日志记录的顺序和内容,重放每一次排序合并过程对在Buffer中存储的键值对的修改操作进行恢复。
进一步的,所述数据存储组件Ci+M的缓存组件Bi+M位于所述数据存储组件Ci+M的上层。
本发明的主要内容包括:
1、采用布隆过滤器(Bloom Filter)判断某个数据块是否含有特定的键;
2、采用基于缓存的延迟插入机制,根据排序合并过程中键值对的存储位置将键值对划分为在磁盘的磁盘键值对表SSTable中(记为InSSTable)和在内存的缓存组件中(记为InBuffer)两种状态,重新定义排序合并过程的输入、输出,并实现排序(sort)与合并(merge);
3、为每个磁盘上的数据存储组件在内存中设置对应的缓存(buffer),对缓存采用按需分配与智能回收的管理机制;
4、设置缓存之后,对不跳入缓存的键值对采用原始LSM-tree的预写式日志(writeahead log,WAL)可靠性恢复机制;对于缓存中键值对实现额外的日志记录与可靠性恢复。
本发明提供的基于日志结构合并树的键值存储系统,在排序合并过程中通过跳过一些数据存储组件实现排序合并的输出键值对跳跃到更大的不相邻组件。
本发明发现传统的每个键值对逐层流动直到最大数据存储组件的机制导致了严重的写放大,提出对不经常更新的键值对,通过排序合并过程一层一层进行流动是很没有必要的。首先,特定的键值对在满足版本新旧约束的前提下,在排序合并过程中跨越多个数据存储组件,从而减小写放大。该方法采用布隆过滤器判断特定的键值对是否满足版本约束,即一个数据块中是否包含该键(Key)对应的任何版本的键值对。其次,特定键值对能跳过的数据存储组件数取决于该键值对的版本分布情况,并且该方法限制了所能跳过的数据存储组件数的最大值。键值对所能跳过的数据存储组件数不能大于预先定义的最大值。最后,该方法采用基于缓存的延迟机制实现键值对与跳跃到的目标数据存储组件排序合并。该方法为每个数据存储组件设置一定大小的缓存(buffer),将原本要跳跃到该数据存储组件的键值对置于该组件的缓存中,在后续将该缓存也作为排序合并过程的输入进行排序(sort)与合并(merge)。
与现有技术相比,本发明的积极效果为:
利用本发明提供的基于日志结构合并树的键值存储系统,具有以下优点:
1、发现键值对逐层流动机制的不必要性,提出键值对在满足版本约束的前提下跳跃多层数据存储组件的机制,减少了排序合并过程中键值对的读写I/O操作,降低了写放大问题,提高了基于日志结构合并树的键值存储系统的吞吐量。
2、采用基于布隆过滤器的特定键的版本存在性判断,避免了从数据块中读出每个键,并与特定键进行比较的操作,降低了磁盘I/O操作。
3、采用基于缓存的延迟排序与合并机制,将跳跃的键值对置于缓存中,避免了跳跃的键值对与目标数据存储组件的合并,目标组件中所有的键值对不需要从磁盘读出,也不需要与跳跃的键值对合并后再写入磁盘,避免了大量额外的I/O操作,降低了写放大问题。
4、采用日志记录与恢复操作,实现系统容错机制,保证了系统的可靠性。
附图说明
图1为日志结构合并树体系结构图;
图2为排序合并过程中键值对在InSSTable和InBuffer之间的状态转换图;
图3为排序合并过程的数据流原理图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明做进一步说明。
实例1基于日志结构合并树的键值存储系统
1)基于布隆过滤器(Bloom Filter,BF)的键值对版本存在性判断
该方法中如果特定的键值对(key-value pair,记为kv)要下跳,首先要确保的一点是:被跳过的数据存储组件没有该kv对应的任何版本的键值对。
以两相邻的数据存储组件Ci和数据存储组件Ci+1进行排序合并之后的键值对为例,典型的基于LSM-tree的键值存储系统将键值对置于数据存储组件Ci+1,本方法尝试将其置于数据存储组件Ci+M,M大于或等于1,且M尽可能的大。
该方法采用逐级判断的机制,逐级判断是否可以跳至数据存储组件Ci+M。可以跳至数据存储组件Ci+M的条件是:数据存储组件Ci+M相应的键范围(key range)对应的SSTable中没有包含待跳键(key)对应的任何版本的键值对。为此,我们为每个磁盘键值对表(SSTable)的每个数据块(Block)设置一个布隆过滤器,用来近似地判断某个数据块(Block)中是否含有特定的键。利用布隆过滤器进行判断时,当判断一个键不存在时,则一定不存在;但由于布隆过滤器具有误报(false positive)的特征,即判断存在时,有可能不在。此时虽然可进一步通过将磁盘键值对表从磁盘读出,解析出全部键值对并进行比对之后,判断是否有相同key在该磁盘键值对表,但由于磁盘I/O代价很大,并且设置合适的哈希函数个数时,出现误报的概率很小,因此本文在利用布隆过滤器判断磁盘键值对表中有键值对时,就不再进一步判断和确认磁盘键值对表中是否真的存在相同的键,而近似的认为该磁盘键值对表中包含该键。
2)基于缓存的延迟插入机制
本方法为磁盘上的每个数据存储组件设置一定大小的缓存(buffer),即,为Component Ci设置Buffer Bi,将跳跃到Ci的键值对(key-value pairs)置于Buffer Bi中,在后续将其作为排序合并过程的输入对其进行排序(sort)和合并(merge);C0是在内存中的内存键值对表(Memtable)和不可更改内存键值对表(Immutable MemTable),故不设置缓存。在层次上,将Bi置于Ci的相邻的上层,原因在于Bi的作用是存储从C1,...,Ci-1跳跃到Ci组件中的键值对,而存储在C1,...,Ci-1的键值对版本相对较新,存储在Bi上的键值对不能违反新旧版本约束,因此将Bi至于Ci上。同时为每一Buffer Bi设置一布隆过滤器,用于确定缓存中的键值对要跳转到的组件,包括数据存储组件和缓存组件。
由于缓存组件的加入,排序合并过程与传统的排序合并过程存在不同的地方。
在图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来自SSTable T43,在排序合并过程完成后,跳跃到B5中,对应图2中的A2;K3V3来自B3,排序合并过程完成后跳跃到SSTable T46中,对应图2中的A3;K6V6来自B4,排序合并过程完成后跳跃到B5中,对应图2中的A4。值得注意的是,由于从SSTable跳到SSTable与buffer无关,因此本实例并未重点研究键值对从SSTable跳到SSTable相应的动作。
4)缓存管理
(1)缓存空间“按需分配”机制
本实例没有对每层缓存组件的大小进行限制,而是对所有缓存组件的总大小进行限制。只要有空余的缓存空间,就将键值对置于其中。一方面,由于无法确定每层缓存组件的大小,所以无法对其进行预分配空间;另一方面,对总大小限制而不是给每层缓存组件预分配空间,可以更有效的利用和更好的共享存储空间。
在逻辑上,将属于同一缓存组件的键值对放在一起;在逻辑上分成几个缓存组件,缓存组件中的内容是以链表等形式实现。
在具体实现中,同一缓存组件的键值对放在一个跳表(SkipList)中,它是一个轻量级的、高效的数据结构,已被用于google leveldb和facebook RocksDB中。为了加快检索速度,我们给每个缓存组件配备了一个布隆过滤器。随着键值对在缓存组件中的跳入跳出,会加大布隆过滤器的误判率,因此周期性的对所有的键重新产生新的布隆过滤器。由于键值对均存在于缓存组件中,因此重构速度非常快,带来的开销比较小。
(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)对于第i个数据存储组件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一对应版本的键值对;然后将待跳键值对跳跃到缓存组件Bi+N中;
3)对于第i个缓存组件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;其中,Buffer表示缓存组件。
4.如权利要求1或2或3所述的方法,其特征在于,所述N值小于或等于设定的最大值Nmax。
5.如权利要求3所述的方法,其特征在于,在内存中划定一设定大小的缓存空间,将该缓存空间在逻辑上分成多个缓存作为各数据存储组件的缓存组件,属于同一缓存组件的键值对放在一起缓存,每一缓存组件中的内容是以链表形式实现。
6.如权利要求5所述的方法,其特征在于,当所有的缓存组件空间耗尽时,统计动作为从Buffer跳跃到Buffer的键值对中,将跳出键值对热度最高的缓存组件中的键值对持久化到数据存储组件。
7.如权利要求3所述的方法,其特征在于,对动作为从SSTable跳跃到SSTable的键值对、从Buffer跳跃到SSTable的键值对,采用原始LSM-tree的write ahead log可靠性恢复机制进行恢复;对于动作为从SSTable跳跃到Buffer的键值对、从Buffer跳跃到Buffer的键值对进行恢复时,按日志记录的顺序和内容,重放每一次排序合并过程对在Buffer中存储的键值对的修改操作。
8.如权利要求1或2或3所述的方法,其特征在于,所述数据存储组件Ci+M的缓存组件Bi+M位于所述数据存储组件Ci+M的上层。
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 CN105468298A (zh) | 2016-04-06 |
CN105468298B true 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) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106681665B (zh) * | 2016-12-29 | 2020-04-24 | 北京奇虎科技有限公司 | 缓存数据的持久化存储方法及装置 |
CN108287840B (zh) * | 2017-01-09 | 2022-05-03 | 北京大学 | 一种基于矩阵哈希的数据存储和查询方法 |
CN107038206B (zh) * | 2017-01-17 | 2021-04-27 | 创新先进技术有限公司 | Lsm树的建立方法、lsm树的数据读取方法和服务器 |
CN106844650A (zh) * | 2017-01-20 | 2017-06-13 | 中国科学院计算技术研究所 | 一种日志合并树的合并方法及系统 |
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结构的数据存储方法、装置及存储引擎 |
CN112527735A (zh) * | 2018-07-24 | 2021-03-19 | 华为技术有限公司 | 一种应用于键值存储系统中的数据合并方法和装置 |
CN109542339B (zh) * | 2018-10-23 | 2021-09-03 | 拉扎斯网络科技(上海)有限公司 | 数据分层访问方法、装置、多层存储设备和存储介质 |
CN109947775B (zh) * | 2019-03-13 | 2021-03-23 | 北京微步在线科技有限公司 | 数据处理方法、装置、电子设备及计算机可读介质 |
CN113326262B (zh) * | 2021-05-14 | 2022-06-24 | 锐掣(杭州)科技有限公司 | 基于键值数据库的数据处理方法、装置、设备及介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104915145A (zh) * | 2014-03-11 | 2015-09-16 | 华为技术有限公司 | 一种降低LSM Tree写放大的方法和装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9727598B2 (en) * | 2012-12-19 | 2017-08-08 | Salesforce.Com, Inc. | Systems, methods, and apparatuses for fixing logical or physical corruption in databases using LSM trees |
US9311252B2 (en) * | 2013-08-26 | 2016-04-12 | Globalfoundries Inc. | Hierarchical storage for LSM-based NoSQL stores |
-
2015
- 2015-11-19 CN CN201510802190.3A patent/CN105468298B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104915145A (zh) * | 2014-03-11 | 2015-09-16 | 华为技术有限公司 | 一种降低LSM Tree写放大的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN105468298A (zh) | 2016-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105468298B (zh) | 一种基于日志结构合并树的键值存储方法 | |
US20220164285A1 (en) | Compensating for dram activation penalties | |
CN104238962B (zh) | 向缓存中写入数据的方法及装置 | |
CN107168657B (zh) | 一种基于分布式块存储的虚拟磁盘分层缓存设计方法 | |
CN102129458B (zh) | 关系型数据库的存储方法及装置 | |
CN105117351B (zh) | 向缓存写入数据的方法及装置 | |
TW202122993A (zh) | 記憶體式處理器 | |
CN103136243B (zh) | 基于云存储的文件系统去重方法及装置 | |
CN102541757B (zh) | 写缓存方法、缓存同步方法和装置 | |
CN106066890A (zh) | 一种分布式高性能数据库一体机系统 | |
CN111159176A (zh) | 一种海量流数据的存储和读取的方法和系统 | |
CN106469123A (zh) | 一种基于nvdimm的写缓存分配、释放方法及其装置 | |
CN112486994A (zh) | 一种基于日志结构合并树的键值存储的数据快速读取方法 | |
WO2015183316A1 (en) | Partially sorted log archive | |
CN100580669C (zh) | 在Flash存储介质上的关于文件分配表的缓存实现方法 | |
WO2014025097A1 (ko) | 비휘발성 램 기반의 b+ 트리 데이터베이스화 방법 | |
Doekemeijer et al. | Key-Value Stores on Flash Storage Devices: A Survey | |
US7308448B1 (en) | Method and apparatus for implementing a lock-free skip list that supports concurrent accesses | |
Kuno et al. | Deferred maintenance of indexes and of materialized views | |
CN114461635A (zh) | 一种MySQL数据库数据存储方法、装置和电子设备 | |
CN108228801B (zh) | 一种基于多核处理器的跳跃表多线程优化方法及设备 | |
US11163642B2 (en) | Methods, devices and computer readable medium for managing a redundant array of independent disks | |
US10606757B2 (en) | Method, device and computer program product for flushing metadata in multi-core system | |
WO2024169683A1 (zh) | 数据存储方法、系统、计算设备及存储介质 | |
US20130290378A1 (en) | Adaptive probabilistic indexing with skip lists |
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 |