面向Key‑Value系统的compaction粗粒度进程级并行优化方法及系统与流程

文档序号:12034430阅读:261来源:国知局
本发明涉及数据存储
技术领域
:,尤其涉及面向key-value系统的compaction粗粒度进程级并行优化方法及系统。
背景技术
::在如搜索引擎、大数据、云计算、云存储、电子商务及社交网络等数据密集型应用的环境下,持久化的key-value存储日益发挥着不可替代的作用。针对写密集型负载,基于lsm-tree的key-value存储成为当前最先进的技术。其中,应用较为广泛的key-value存储包括google的bigtable、leveldb,facebook的cassandra等。lsm-tree数据组织由内存中的一个c0组件和磁盘中的c1~ck组成。其中c0作为在内存中的一个缓冲区,一旦c0达到阈值,会和c1进行合并排序操作,此作称为compaction。此外,当磁盘中的组件ci达到阈值的时候,也会触发ci和ci+1之间的compaction操作。随着数据量的增加,lsm-tree结构需要在组件之间频繁的进行compaction操作;这将大量占用系统资源,难以高效的服务用户请求。现有针对compaction操作的研究主要集中于降低compaction频率,减少compaction引起的频繁io或限定compaction任务在热数据的key范围内。这些研究工作虽可以较好的提高key-value存储的性能,但是没有挖掘compaction的粗粒度进程级并行性潜力,因此也没有充分发挥cpu的计算能力。因此,本发明设计了面向key-value存储系统的应用层compaction粗粒度进程级并行优化方法。本发明在现有的基础上,实现了进程级并行的处理compaction任务处理。与现有的以单一主进程为compaction处理方式相比而言,本发明充分发挥cpu的计算能力,实现了进程级(主进程和从进程)并行compaction的处理方法,提高compaction性能的同时,充分利用cpu的并行计算资源。技术实现要素:基于
背景技术
:存在的技术问题,本发明提出了面向key-value系统的compaction粗粒度进程级并行优化方法及系统。本发明提出的面向key-value系统的compaction粗粒度进程级并行优化方法,包括以下步骤:s1、主进程接收到读写请求后判断是否需要调度compaction线程,当判断结果为是时,主进程将compaction线程中的任务信息分割为主进程子任务和从进程子任务;s2、主进程提取从进程子任务中的元数据信息并发送至从进程,并对主进程子任务进行compaction操作,从进程接收主进程发送的元数据信息后对从进程子任务进行compaction操作;s3、主进程在主进程完成主进程子任务compaction操作且从进程完成从进程子任务compaction操作后对key-value系统的文件进行优化操作。优选地,步骤s1具体包括:主进程接收读请求或写请求后,根据key-value系统每一层可容纳的文件容量阈值来判断key-value系统是否需要调度compaction线程;优选地,为key-value系统每一层设置可容纳的文件容量阈值,记为qlm=aqlm-1;其中,qlm为lm层可容纳的文件容量阈值,qlm-1为lm-1层可容纳的文件容量阈值,a为预设值,ql1=a,a为预设值;当olk≥qlk时,则判定此时key-value系统需要调度compaction线程,olk为lk层当前容纳的文件容量;当主进程判定key-value系统需要调度compaction线程时,主进程根据任务分割算法将compaction线程中的任务信息分割为主进程子任务和从进程子任务;优选地,所述任务分割算法具体包括:主进程确定此次compaction选定的lk层的sstable文件sstk1、sstk2、sstk3……sstkn中的一个文件sstka;确定lk+1层中的sstable文件的key范围与sstka的key范围有重叠的所有sstable文件,记为sstv1、sstv2、sstv3……sstvm;主进程将sstable文件sstv1、sstv2、分割为主进程子任务,将sstable文件分割为从进程子任务;主进程根据sstable文件的元数据信息中指示的smallest的值y以及sstka文件中的key范围[sstka_smallest,sstka_largest]将sstka文件中的[sstka_smallest,y]文件分割为主进程子任务,将sstka文件的剩余部分分割为从进程子任务;其中,1≤a≤n,v=k+1。优选地,步骤s2具体包括:主进程提取从进程子任务所需的sstable文件元数据信息发送至从进程,并读取主进程子任务中对应的sstable文件,对上述sstable文件进行多路合并排序操作生成多个新的有序的sstable文件,且更新较新的key-value项、删除具有删除标记的key-value项,以完成主进程子任务compaction操作;从进程接收主进程发送的元数据信息后,读取从进程子任务中对应的sstable文件,对上述sstable文件进行多路合并排序操作生成多个新的有序的sstable文件,且更新较新的key-value项、删除具有删除标记的key-value项,以完成从进程子任务compaction操作。优选地,步骤s3具体包括:主进程完成主进程子任务compaction操作后,置完成标志,进入等待状态,当从进程完成从进程子任务compaction操作时,从进程判断主进程是否完成主进程子任务compaction操作,若是,从进程唤醒主进程并将从进程子任务中新生成的sstable文件的元数据信息发送至主进程,主进程对key-value系统的日志文件进行更新、过期文件进行删除,已完成对key-value系统的文件的优化操作。本发明提出的面向key-value系统的compaction粗粒度进程级并行优化系统,包括:主进程模块和从进程模块,主进程模块和从进程模块通信连接;主进程模块用于在接收到读写请求后判断是否需要调度compaction线程,且当判断结果为是时将compaction线程中的任务信息分割为主进程子任务和从进程子任务,主进程模块用于提取从进程子任务中的元数据信息并发送至从进程模块,并对主进程子任务进行compaction操作,主进程模块还用于在主进程模块完成主进程子任务compaction操作且从进程模块完成从进程子任务compaction操作后对key-value系统的文件进行优化操作;从进程模块用于在接收到主进程发送的元数据信息后对从进程子任务进行compaction操作,并在完成从进程子任务compaction操作后判断主进程子任务compaction操作是否完成,若是则向主进程模块发送已完成从进程子任务compaction操作信息。优选地,主进程模块在接收到读写请求后判断是否需要调度compaction线程具体包括:主进程模块接收读请求或写请求后,根据key-value系统每一层可容纳的文件容量阈值来判断key-value系统是否需要调度compaction线程;优选地,为key-value系统每一层设置可容纳的文件容量阈值,记为qlm=aqlm-1;其中,qlm为lm层可容纳的文件容量阈值,qlm-1为lm-1层可容纳的文件容量阈值,a为预设值,ql1=a,a为预设值;当olk≥qlk时,则判定此时key-value系统需要调度compaction线程;其中,olk为lk层当前容纳的文件容量。优选地,主进程将compaction线程中的任务信息分割为主进程子任务和从进程子任务具体包括:当主进程模块判定key-value系统需要调度compaction线程时,主进程模块根据任务分割算法将compaction线程中的任务信息分割为主进程子任务和从进程子任务;优选地,所述任务分割算法具体包括:主进程模块确定此次compaction选定的lk层的sstable文件sstk1、sstk2、sstk3……sstkn中的一个文件sstka;确定lk+1层中的sstable文件的key范围与sstka的key范围有重叠的所有sstable文件,记为sstv1、sstv2、sstv3……sstvm;主进程模块将sstable文件sstv1、sstv2、分割为主进程子任务,将sstable文件分割为从进程子任务;主进程模块根据sstable文件的元数据信息中指示的smallest的值y以及sstka文件的key范围[sstka_smallest,sstka_largest]将sstka文件中的[sstka_smallest,y]文件分割为主进程子任务,将sstka文件的剩余部分分割为从进程子任务;其中,1≤a≤n,v=k+1。优选地,主进程模块提取从进程子任务所需的元数据信息并发送至从进程模块,并对主进程子任务进行compaction操作,具体包括:主进程模块提取从进程子任务中sstable文件元数据信息发送至从进程模块,并读取主进程子任务中对应的sstable文件,对上述sstable文件进行多路合并排序操作生成多个新的有序的sstable文件,且更新较新的key-value项、删除具有删除标记的key-value项,以完成主进程子任务compaction操作。优选地,从进程模块在接收到主进程发送的元数据信息后对从进程子任务进行compaction操作具体包括:从进程模块接收主进程模块发送的数据信息后,读取从进程子任务中对应的sstable文件,对上述sstable文件进行多路合并排序操作生成多个新的有序的sstable文件,且更新较新的key-value项、删除具有删除标记的key-value项,以完成从进程子任务compaction操作。优选地,主进程模块在主进程模块完成主进程子任务compaction操作且从进程模块完成从进程子任务compaction操作后对key-value系统的文件进行优化操作具体包括:主进程模块完成主进程子任务compaction操作后,置完成标志,进入等待状态,当从进程模块完成从进程子任务compaction操作时,从进程模块判断主进程模块是否完成主进程子任务compaction操作,若是,从进程模块唤醒主进程模块并将从进程子任务中新生成的sstable文件的元数据信息发送至主进程模块,主进程模块对key-value系统的日志文件进行更新、过期文件进行删除,以完成对key-value系统的文件的优化操作。本发明兼容了key-value系统的执行操作,包括接收读写请求、compaction触发调度、数据一致性维护等功能,同时实现了key-value系统的compaction任务的粗粒度进程级并行。本发明利用主进程对compaction任务进行动态分割,使得主进程和从进程能够同时对主进程子任务和从进程子任务进行compaction操作,利用key-value系统完成compaction任务的动态分割并与从进程协同compaction处理的新模式,挖掘了compaction任务的进程级并行性,充分利用了cpu的计算资源,提高了cpu资源的利用率,且优化了compaction消耗的时间,不仅提高了数据处理的实时性,而且提高了系统性能以及吞吐量。附图说明图1为面向key-value系统的compaction粗粒度进程级并行优化方法的步骤示意图;图2为面向key-value系统的compaction粗粒度进程级并行优化系统的结构示意图;图3为面向key-value系统的compaction粗粒度进程级并行优化方法及系统的主进程工作流程图;图4为面向key-value系统的compaction粗粒度进程级并行优化方法及系统的从进程工作流程图。具体实施方式如图1-图4所示,图1-图4为本发明提出的面向key-value系统的compaction粗粒度进程级并行优化方法及系统。参照图1、图3、图4,本发明提出的面向key-value系统的compaction粗粒度进程级并行优化方法,包括以下步骤:s1、主进程接收到读写请求后判断是否需要调度compaction线程,当判断结果为是时,主进程将compaction线程中的任务信息分割为主进程子任务和从进程子任务;本实施方式中,主进程接收读请求或写请求后,根据key-value系统每一层可容纳的文件容量阈值来判断key-value系统是否需要调度compaction线程;优选地,为key-value系统每一层设置可容纳的文件容量阈值,记为qlm=aqlm-1;其中,qlm为lm层可容纳的文件容量阈值,qlm-1为lm-1层可容纳的文件容量阈值,a为预设值,ql1=a,a为预设值;当olk≥qlk时,则判定此时key-value系统需要调度compaction线程;其中,olk为lk层当前容纳的文件容量。由于key-value系统每一层可容纳的文件大小有限,例如在leveldb的默认情况下,随着层数的增加,每一层可容纳的容量是上一层可容纳容量的10倍;例如,第一层可容纳的容量阈值为10mb,第二层可容纳的容量阈值则为100mb,当lk层可容纳的容量超过阈值时,此时compaction线程将会触发,则判定key-value系统需要调度compaction线程。当主进程判定key-value系统需要调度compaction线程时,主进程根据任务分割算法将compaction线程中的任务信息分割为主进程子任务和从进程子任务;本实施方式中,所述任务分割算法具体包括:主进程确定此次compaction选定的lk层的sstable文件sstk1、sstk2、sstk3……sstkn中的一个文件sstka;确定lk+1层中的sstable文件的key范围与sstka的key范围有重叠的所有sstable文件,记为sstv1、sstv2、sstv3……sstvm;主进程将sstable文件sstv1、sstv2、分割为主进程子任务,将sstable文件分割为从进程子任务;主进程根据sstable文件的元数据信息中指示的smallest的值y以及sstka文件的key范围[sstka_smallest,sstka_largest]将sstka文件中的[sstka_smallest,y]文件分割为主进程子任务,将sstka文件的剩余部分分割为从进程子任务;其中,1≤a≤n,v=k+1。上述操作过程为当主进程判定需要调度compaction线程后,主进程在lk层选择一个sstable文件作为目标文件,并将上述目标文件与lk+1层的所有sstable文件进行key范围比较,且将所有key范围重叠的sstable文件作为compaction的输入文件,待输入文件确定完毕,主进程则对compaction任务进行动态分割,将compaction任务分割为主进程子任务和从进程子任务,使主进程和从进程分别对主进程子任务和从进程子任务进行compaction操作,具体包括s2:s2、主进程提取从进程子任务中的元数据信息并发送至从进程,并对主进程子任务进行compaction操作,从进程接收主进程发送的元数据信息后对从进程子任务进行compaction操作;主进程提取从进程子任务所需的sstable文件元数据信息发送至从进程,并读取主进程子任务中对应的sstable文件,对上述sstable文件进行多路合并排序操作生成多个新的有序的sstable文件,且更新较新的key-value项、删除具有删除标记的key-value项,以完成主进程子任务compaction操作;从进程接收主进程发送的元数据信息后,读取从进程子任务中对应的sstable文件,对上述sstable文件进行多路合并排序操作生成多个新的有序的sstable文件,且更新较新的key-value项、删除具有删除标记的key-value项,以完成从进程子任务compaction操作。s3、主进程在主进程完成主进程子任务compaction操作且从进程完成从进程子任务compaction操作后对key-value系统的文件进行优化操作;为保持key-value系统的数据一致性,主进程完成主进程子任务compaction操作后,置完成标志,进入等待状态,当从进程完成从进程子任务compaction操作时,从进程判断主进程是否完成主进程子任务compaction操作,若是,从进程唤醒主进程并将从进程子任务中新生成的sstable文件的元数据信息发送至主进程,主进程对key-value系统的文件进行优化操作,所述对key-value系统的文件的优化操作包括:对key-value系统的日志文件进行更新、过期文件进行删除等,使key-value系统系统内的日志文件和过期文件根据主进程和从进程的实际操作流程变化。参照图2-图4,本发明提出的面向key-value系统的compaction粗粒度进程级并行优化系统,包括:主进程模块和从进程模块,主进程模块和从进程模块通信连接;主进程模块用于在接收到读写请求后判断是否需要调度compaction线程,具体判断过程包括主进程模块接收读请求或写请求后,根据key-value系统每一层可容纳的文件容量阈值来判断key-value系统是否需要调度compaction线程;优选地,为key-value系统每一层设置可容纳的文件容量阈值,记为qlm=aqlm-1;其中,qlm为lm层可容纳的文件容量阈值,qlm-1为lm-1层可容纳的文件容量阈值,a为预设值,ql1=a,a为预设值;当olk≥qlk时,则判定此时key-value系统需要调度compaction线程;其中,olk为lk层当前容纳的文件容量。当判断结果为是时,主进程模块将compaction线程中的任务信息分割为主进程子任务和从进程子任务,上述任务分割过程具体包括:当主进程模块判定key-value系统需要调度compaction线程时,主进程模块根据任务分割算法将compaction线程中的任务信息分割为主进程子任务和从进程子任务;本实施方式中所述任务分割算法具体包括:主进程模块确定此次compaction选定的lk层的sstable文件sstk1、sstk2、sstk3……sstkn中的一个文件sstka;确定lk+1层中的sstable文件的key范围与sstka的key范围有重叠的所有sstable文件,记为sstv1、sstv2、sstv3……sstvm;主进程模块将sstable文件sstv1、sstv2、分割为主进程子任务,将sstable文件分割为从进程子任务;主进程模块根据sstable文件的元数据信息中指示的smallest的值y以及sstka文件的key范围[sstka_smallest,sstka_largest]将sstka文件中的[sstka_smallest,y]文件分割为主进程子任务,将sstka文件的剩余部分分割为从进程子任务;其中,1≤a≤n,v=k+1。主进程模块完成compaction任务分割后,主进程模块提取从进程子任务所需的元数据信息并发送至从进程模块,并对主进程子任务进行compaction操作,上述对主进程子任务进行compaction操作具体包括:主进程提取从进程子任务中sstable文件元数据信息发送至从进程,并读取主进程子任务中对应的sstable文件,对上述sstable文件进行多路合并排序操作生成多个新的有序的sstable文件,且更新较新的key-value项、删除具有删除标记的key-value项,以完成主进程子任务compaction操作。主进程模块还用于在主进程模块完成主进程子任务compaction操作且从进程模块完成从进程子任务compaction操作后对key-value系统的日志文件进行更新、过期文件进行删除,具体包括:主进程模块完成主进程子任务compaction操作后,置完成标志,进入等待状态,当从进程模块完成从进程子任务compaction操作时,从进程模块判断主进程模块是否完成主进程子任务compaction操作,若是,从进程模块唤醒主进程模块并将从进程子任务中新生成的sstable文件的元数据信息发送至主进程模块,主进程模块对key-value系统的日志文件进行更新、过期文件进行删除,完成对key-value系统文件的优化操作。从进程模块在接收到主进程发送的元数据信息后对从进程子任务进行compaction操作,所述对从进程子任务进行compaction操作具体包括:从进程模块接收主进程模块发送的数据信息后,读取从进程子任务中对应的sstable文件,对上述sstable文件进行多路合并排序操作生成多个新的有序的sstable文件,且更新较新的key-value项、删除具有删除标记的key-value项,以完成从进程子任务compaction操作。从进程模块在完成从进程子任务compaction操作后向主进程模块发送已完成从进程子任务compaction操作信号,以激活主进程模块,提醒主进程模块对key-value系统文件进行优化,即主进程模块对key-value系统的日志文件进行更新、过期文件进行删除。本实施方式兼容了key-value系统的执行操作,包括接收读写请求、compaction触发调度、数据一致性维护等功能,同时实现了key-value系统的compaction任务的粗粒度进程级并行。本实施方式利用主进程对compaction任务进行动态分割,使得主进程和从进程能够同时对主进程子任务和从进程子任务进行compaction操作,利用key-value系统完成compaction任务的动态分割并与从进程协同compaction处理的新模式,挖掘了compaction任务的进程级并行性,充分利用了cpu的计算资源,提高了cpu资源的利用率,且优化了compaction消耗的时间,不仅提高了数据处理的实时性,而且提高了系统性能以及吞吐量。以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1