可动态适应的LSM树合并方法及系统技术方案

技术编号:12520599 阅读:84 留言:0更新日期:2015-12-17 11:23
本发明专利技术适用于文件处理技术领域,提供了一种可动态适应的LSM树合并方法,所述方法包括:将键值区间划分为若干节点,将所述节点组织为树形结构,每个所述节点对应一键值区间,每个所述键值区间包含对应该键值区间范围的文件;根据当前数据的分布动态调整树的形状;当有新写入的文件时,遍历树寻找最适节点放入;对文件进行处理时,对节点内部进行Minor Compact处理,并且只通过叶节点执行Major Compact。本发明专利技术还相应的提供一种实现上述方法的可动态适应的LSM树合并系统。借此,本发明专利技术可以实现动态适应数据的分布,提高数据合并效率。

【技术实现步骤摘要】

本专利技术涉及文件处理
,尤其涉及一种可动态适应的LSM树合并方法及系统
技术介绍
Log-structured merge树,也被称为LSM树,是目前NoSQL数据库常用的数据组织方式。它把对索引的变更进行延迟和批量处理,并通过类似归并排序的方式高效地将更新迀移到磁盘。LSM树的节点在具体实现中往往就是一个文件,文件内部有序,文件之间无序,查询时需要查询所有文件,合并每个文件的结果,从而造成性能低下,所以一般会把若干个文件合并成一个大文件,通过合并文件,减少文件数量,真正删除数据,以减少每次查询涉及到的文件数,提高数据的查询效率,即Compact。Compact过程会读多个文件合并后重新写成文件,这会占用大量磁盘I/O等相关资源,而不当的Compact或不及时的Compact又会造成查询时涉及过多文件而使它的性能下降。目前主流的合并方法:Tiered Compact、LevelDB Compact 和 Stripe Compact。1.Tiered Compact 策略如下:(I)首先将候选文件按照入库时间(Sequence ID,即顺序号)从旧到新排序,候选集为正在合并的文件之后的文件;(2)如果请求是一个Major Compact,如果目前的文件列表是所有的文件,则进行Major Compact,否则不能进行 Major Compact ;(3)如果列表文件数量小于配置的合并最小文件数量阈值,则放弃做MinorCompact ;(4)使用一个rat1参数,选取按照从老到新的顺序进行,遍历每个文件时,如果它的大小小于所有比它新的文件的和与rat1的乘积,则它是一个候选;(5)选取处理的文件个数大于配置的合并最小文件数量阈值,则进行MinorCompact,否则放弃执行。该方法和系统简单易实现,完成合并操作以后能够提升读性能,但是合并过程本身的代价是比较大的,在更新密集型的操作中,这样就会带来以下问题:(I)数据分布不一致,一行数据可能在一个文件中,也可能跨越多个文件,最坏情况下可能每个文件中都有,这样针对不同key查询时涉及到的文件数量不同,查询性能不稳定;(2)浪费大量1/0,一个文件可能执行多次合并,滚雪球似的反复被重写。没有考虑数据的分布,如不变化的key区间其实是不需要再被合并的了,但是在这个算法中仍然会执行这不必要的合并;(3)只有Major Compact时才会清除掉删除数据,而Major Compact由于需要合并重写所有文件,消耗资源比较严重,执行时间很长,所以不会频繁执行,一般一天执行一次。那么由于无法保证删除的数据要多久才能被清除,在删除密集型操作中,有大量空间可能被浪费;(4)合并过程中旧的文件只有在新的文件写入完成后才能删除,需要额外占用磁盘空间。Major Compact要将所有的文件合并重写,使得临时磁盘空间到达原来的两倍。2.LevelDB Compact 策略如下:(I)当Level-L的文件总大小超过阈值时,后台线程进行合并;(2)从Level-L中选出一个文件,从LeVel-(L+l)中选出与它的键值范围交叠的文件。Level-O比较特殊,因为Level-O的文件键值是互相交叠的,所以需要特别处理从Level-O到Level-1的合并:如果文件之间有键值交叠,可能需要从Level-O中选出多于一个文件;(3)合并线程读取这些文件内容,归并排序生成一系列Level-(L+1)文件,当生成文件的大小超过2MB的时候就转而生成一个新文件来写入,还有与当前键值范围交叠的Level-(L+2)文件超过了 10个时,那么也需要转而生成一个新文件来写入,这样可以保证后续Level-(L+1)文件的合并不会挑选出太多Level-(L+2)的文件;(4)当新文件生成并服务后,老的文件就会被舍弃;(5)对于一个Level,文件合并的顺序是轮流的,记录上次此Level合并的最大键值(end key),下次此Level合并的时候则选择此键值开始的第一个文件(如果没有则转回此Level的第一个文件);(6)合并清除同一个键的旧数据,也会清除删除标记影响的数据,当更高Level中没有此键值范围的文件就可以清除删除标记。算法的好处是在合并的过程中,仅需由两个Level的部分文件参与,而不是要对所有文件执行合并操作,这样会加快合并执行的效率。大部分的读操作有LRU特性,都会落入较低的Level上。因此,数据越“热”,Level就越低,有利于多种存储介质的合理使用。算法的主要问题是它无法动态调整Level层数,如果Level过多,在递归合并的过程中,容易造成某个区间的合并风暴,并且每次下推都需要重写文件。此外,不同Level之间的键值没有对应关系,上层Level的键值区间对应下层Level的区间事先无法预测,当上层Level的某一个文件需要与下层Level合并的时候,对下层Level的影响范围并不存在确定性,由当前的键值范围影响。3.Stripe Compact 策略如下:(I)对于Reg1n下的键值区间进行二次切分,分成更多小区间,每个区间即为Stripe ;(2) Reg1n下的数据文件分为Level-Ο和Level-Ι两层。其中Level-Ο包括整个键值区间,从内存中刷写下来的文件和批量导入产生的文件默认放在Level-O ;(3)当Level-O文件积累到阈值时,通过合并把Level-O的文件切分到Level_l,每个键值与其相交的Stripe都会形成一个文件放入相应Stripe ;(4) Stripe内部可以进行合并以防止Stripe文件数过多;(5) Stripe的切分有两种方式:基于个数的方式(Count-based)和基于大小的方式(Size-based);(6)读取时,一个键值所涉及的数据范围有内存、Level-Ο所有文件、以及Level-1中对应的Stripe的文件;(7)容错机制。在Level-1的Stripe间的键值范围应该是连续的,如果出现异常情况导致Stripe之间存在空洞,那么可将所有Level-1的文件重新放回Level-O ;Stripe合并保留了分层的优势的同时,降低了层级数量和文件个数,有利于Reg1n的分裂和合并。它的问题在于Level-1中Stripe的分布和数量很难动态调整,如果Stripe过小,从Level-O刷写下来的文件就会过小;如果Stripe过大,Stripe区间很大,每个Stripe中会遇到与Reg1n内部Tiered Compact同样的问题。现有技术无法动态适应数据的分布,数据的组织方式无法随着数据的分布不同而高效地动态调整,合并效率低下,经常做一些无用的合并,占用系统资源。综上可知,现有技术在实际使用上显然存在不便与缺陷,所以有必要加以改进。
技术实现思路
针对上述的缺陷,本专利技术的目的在于提供一种可动态适应的LSM树合并方法及系统,其可以动态适应数据的分布,提高数据合并效率。为了实现上述目的,本专利技术提供一种可动态适应的LSM树合并方法,所述方法包括:将键值区间划分为若干节点,将所述节点组织为树形结构,每个所述节点对应一键值区间,每个所述键值区间包含对应该键值区间范围的文件;根据当前数据的分布动态调整树的形状本文档来自技高网
...

【技术保护点】
一种可动态适应的LSM树合并方法,其特征在于,所述方法包括:将键值区间划分为若干节点,将所述节点组织为树形结构,每个所述节点对应一键值区间,每个所述键值区间包含对应该键值区间范围的文件;根据当前数据的分布动态调整树的形状;当有新写入的文件时,遍历树寻找最适节点放入;对文件进行处理时,对节点内部进行Minor Compact处理,并且只通过叶节点执行Major Compact。

【技术特征摘要】

【专利技术属性】
技术研发人员:程学旗张虔熙张敬亮廖华明
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:北京;11

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

1