一种基于LSM-Tree存储引擎的文件管理方法和装置与流程

文档序号:26938815发布日期:2021-10-12 14:11阅读:62来源:国知局
一种基于LSM-Tree存储引擎的文件管理方法和装置与流程
一种基于lsm-tree存储引擎的文件管理方法和装置
技术领域
1.本发明涉及计算机技术领域,特别涉及一种基于lsm-tree存储引擎的文件管理方法和装置。


背景技术:

2.叠瓦式磁盘(shingled magnetic recording,简称smr磁盘)是一种将磁道部分重叠以提高存储密度的存储介质,内部可以包括若干重叠磁道组成的顺序存储区和普通的随机存储区域。将smr磁盘应用于云存储平台,可以有效降低云存储平台的产品成本,然而云存储平台的原有操作系统的性能目前还无法满足smr磁盘的io吞吐需求。
3.lsm-tree存储引擎是一种可以有效支持smr磁盘的嵌入式存储系统。进行数据存储时,lsm-tree存储引擎可以将写入的key-value形式的业务数据保存在内存表中,在内存表写满后再将其中的数据flush到sst文件,最终通过登记sst文件的版本来提交并生效sst文件。而当sst文件的数量到达定值时,会进一步对多个sst文件执行compaction,以将多个sst文件压缩成一个文件,compaction新生成的sst文件也可以通过登记版本来提交并生效。从而lsm-tree存储引擎可以查询到生效后的sst文件。
4.lsm-tree存储引擎还支持kv分离的数据存储方式,即将业务数据中数据量较大的value值分离出lsm-tree,单独存储在blob文件中,而sst文件可以保存业务数据中的key值,以及value值在blob文件的存储位置,从而可以将key值与value值进行关联。
5.blob文件同样是通过版本登记来生效文件的,且blob文件的版本是单独管理的,为了保证数据查询的安全性,blob文件的版本需要先于sst文件的版本进行登记,否则可能会出现数据不一致的问题。然而在系统异常情况下,可能会导致blob文件版本生效但sst版本未生效问题,这样,blob文件将因没有有效的sst文件与之对应而处于异常阶段,故而会导致smr磁盘的存储空间泄露。


技术实现要素:

6.为了解决现有技术的问题,本发明实施例提供了一种基于lsm-tree存储引擎的文件管理方法和装置。所述技术方案如下:
7.第一方面,提供了一种基于lsm-tree存储引擎的文件管理方法,所述方法包括:
8.在生成blob文件和sst文件的过程中,监测所述sst文件的版本登记状态;
9.根据所述sst文件不同的版本登记状态,利用不同的阶段信息,对所述sst文件对应的已生效的blob文件进行标记;
10.定期根据所述阶段信息,对已生效的blob文件进行异常文件处理。
11.第二方面,提供了一种基于lsm-tree存储引擎的文件管理装置,所述装置包括:
12.文件生成模块,用于在生成blob文件和sst文件的过程中,监测所述sst文件的版本登记状态;
13.阶段标记模块,用于根据所述sst文件不同的版本登记状态,利用不同的阶段信
息,对所述sst文件对应的已生效的blob文件进行标记;
14.文件处理模块,用于定期根据所述阶段信息,对已生效的blob文件进行异常文件处理。
15.第三方面,提供了一种网络设备,所述网络设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如第一方面所述的基于lsm-tree存储引擎的文件管理方法。
16.第四方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如第一方面所述的基于lsm-tree存储引擎的文件管理方法。
17.本发明实施例提供的技术方案带来的有益效果是:
18.本发明实施例中,在生成blob文件和sst文件的过程中,监测sst文件的版本登记状态;根据sst文件不同的版本登记状态,利用不同的阶段信息,对sst文件对应的已生效的blob文件进行标记;定期根据阶段信息,对已生效的blob文件进行异常文件处理。这样,在sst文件不同的版本登记状态下,分别以不同阶段信息来标记已生效的blob文件,从而在定期处理异常文件时,通过阶段信息可以很容易识别哪些blob文件处于异常阶段,再通过对异常文件的处理可以释放出smr磁盘中无效的blob文件,可以有效避免smr磁盘的存储空间发生泄漏。
附图说明
19.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
20.图1是本发明实施例提供的一种基于lsm-tree存储引擎的文件管理方法流程图;
21.图2是本发明实施例提供的一种基于lsm-tree存储引擎的文件管理流程示意图;
22.图3是本发明实施例提供的一种blob文件的阶段变化原理图;
23.图4是本发明实施例提供的一种基于lsm-tree存储引擎的文件管理装置结构图;
24.图5是本发明实施例提供的一种网络设备的结构示意图。
具体实施方式
25.为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
26.本发明实施例提供了一种基于lsm-tree存储引擎的文件管理方法,该方法可以应用在配置有lsm-tree存储引擎的存储集群,并主要由lsm-tree存储引擎来执行。其中,存储集群具体可以是云存储平台,存储集群可以利用smr磁盘来存储业务数据,并通过lsm-tree存储引擎来管理smr磁盘内的数据读写、更新和删除等。lsm-tree存储引擎可以支持kv分离的存储方式,通过blob文件和sst文件分别存储业务数据的value值和key值。lsm-tree存储
引擎生成blob文件和sst文件后,可以以登记文件版本的方式来生效blob文件和sst文件,并可以将生效后的blob文件和sst文件分别存储在smr磁盘中的顺序存储区和随机存储区中。每个生效的blob文件对应一个生效的sst文件,在执行多个sst文件的compaction后,多个生效的blob文件可以对应一个生效的sst文件。本实施例中以存储集群为云存储平台为例进行说明,其它情况与之类似,不再一一举例说明。
27.下面将结合具体实施方式,对图1所示的处理流程进行详细的说明,内容可以如下:
28.步骤101,在生成blob文件和sst文件过程中,监测sst文件的版本登记状态。
29.在实施中,云存储平台在对外提供云存储服务时,lsm-tree存储引擎可以获取用户上传的业务数据,并对业务数据的数据内容进行解析,以读取其中的key-value形式的数据。之后,lsm-tree存储引擎可以将key-value数据保存在内存表中,当内存表写满时,可以对内存表中的数据进行flush处理,从而可以生成业务数据对应的sst文件和blob文件。具体的,lsm-tree存储引擎可以将业务数据的key值和value值对应存储在blob文件里,并在sst文件中存储业务数据的key值,和对应的value值在blob文件中的存储位置。基于blob文件存储在smr磁盘中的顺序存储区,一个blob文件对应一个顺序存储区,则sst文件中记录的内容可以是key值和顺序存储区的编号的形式的数据。除了上述对业务数据进行flush的过程之外,lsm-tree存储引擎在对sst文件进行compaction时,可以基于多个sst文件生成新的sst文件,故而也存在sst文件的生成过程。而在生成blob文件和sst文件的过程中,lsm-tree存储引擎可以对sst文件的版本登记状态进行监测。
30.步骤102,根据sst文件不同的版本登记状态,利用不同的阶段信息,对sst文件对应的已生效的blob文件进行标记。
31.在实施中,sst文件不同的版本登记状态可以对应不同的blob文件的阶段信息。在flush业务数据的过程中,blob文件将先于sst文件生成完成,相应的,也将先于sst文件进行登记而生效。而在compaction的过程中,一般情况下blob文件始终为已生效状态。因此,在上述两种处理过程中,blob文件处于生效状态下时,其对应的sst文件将会出现多种版本登记状态。进一步的,可以设定sst文件不同的版本登记状态对应不同的blob文件的阶段信息,如版本登记状态为已登记对应阶段信息a,版本登记状态为未登记对应阶段信息b。故而lsm-tree存储引擎可以根据sst文件不同的版本登记状态,利用不同的阶段信息,对sst文件对应的已生效的blob文件进行标记。其中,标记的方式可以是在blob文件的元信息中添加阶段信息。
32.步骤103,定期根据阶段信息,对已生效的blob文件进行异常文件处理。
33.在实施中,在blob文件和sst文件登记和生效后,lsm-tree存储引擎可以定期检测smr磁盘中已生效的blob文件对应的阶段信息。之后,lsm-tree存储引擎可以根据检测到的阶段信息,对已生效的blob文件进行异常文件处理。具体可以是先将标记的阶段信息不属于指定阶段信息的blob文件,确定为待处理的异常文件,再对异常文件进行处理。进一步的,lsm-tree存储引擎中可以运行有专用于文件清理的gc loop程序,并由gc loop来执行步骤103中的异常文件处理。
34.可选的,可以视sst文件的登记与否,将blob文件标记为中间或最终状态,相应的,步骤102的处理可以如下:若sst文件未登记版本,则将sst文件对应的blob文件标记为中间
阶段,否则标记为最终阶段。
35.在实施中,lsm-tree存储引擎在生成blob文件时,由于一般情况下blob文件先于sst文件生成,则此时blob文件对应的sst文件将会处于未登记版本的状态。故而,lsm-tree存储引擎可以将blob文件标记为中间阶段。同时,lsm-tree存储引擎可以监测sst文件的版本登记状态,若sst文件处于已登记版本状态,则可以将blob文件标记为最终阶段。
36.可选的,基于上述中间阶段和最终阶段的标记方式,下述将分别就flush过程和compaction过程分别进行描述,具体内容可以如下:
37.(一)flush过程:在完成业务数据的flush处理,生成blob文件时,标记blob文件为中间阶段;在blob文件对应的sst文件生成并登记后,将blob文件的切换标记为最终阶段。
38.在实施中,lsm-tree存储引擎在对业务数据进行flush处理时,可以从内存表中逐个提取业务数据的key值和value值,然后对应存储在blob文件中。在存储完成后,lsm-tree存储引擎可以以key值作为标识,记录value值在blob文件中的存储位置,然后将key值和该存储位置对应存储在blob文件对应的sst文件中。例如,业务数据为“手机号1-15011112222”,其中key值为“手机号1”、value值为“15011112222”,那么blob文件中的存储内容为“手机号-15011112222”,该数据在blob文件的存储位置假设为第一个blob文件的第50m-51m的偏移位置,则sst文件中的存储内容可以为“手机号1-blob文件1.50m-51m”。可以理解,一个blob文件中可以存储有大量的key-value数据,sst文件也可以存储有大量的“key-存储位置”数据。
39.这样,在flush处理过程中,lsm-tree存储引擎可以先生成blob文件,并在此时标记blob文件为中间阶段。之后,当监测到blob文件对应的sst文件生成,并完成登记后,lsm-tree存储引擎则可以将blob文件的标记从中间阶段切换为最终阶段。
40.(二)compaction过程:在开始执行sst文件的compaction时,将sst文件对应的blob文件切换标记为中间阶段;在完成sst文件的compaction处理,生成并登记新sst文件后,将sst文件对应的blob文件切换标记为最终阶段。
41.在实施中,当生成的sst文件的数量达到一定阈值时,lsm-tree存储引擎可以开始执行sst文件的compaction处理。此时,lsm-tree存储引擎可以确定需要执行compaction处理的所有sst文件,并将这些sst文件对应的blob文件的标记从最终阶段切换为中间阶段。之后,lsm-tree存储引擎可以执行sst文件的compaction处理,生成新stt文件,并对其进行版本登记。此时,由于新sst文件对应的blob文件,即为执行compaction处理的所有stt文件对应的blob文件,lsm-tree存储引擎则可以将上述sst文件对应的blob文件切换标记为最终阶段。
42.可选的,基于上述中间阶段和最终阶段的标记方式,步骤103的处理可以为:定期对标记为中间阶段的已生效的目标blob文件,进行异常文件处理。
43.在实施中,若sst文件未登记版本,sst文件对应的blob文件将被标记为中间阶段,则可以认为标记为中间阶段的blob文件属于垃圾文件,lsm-tree存储引擎中的gc loop程序可以定期对标记为中间阶段的已生效的目标blob文件,进行异常文件处理。
44.可选的,进行异常文件处理时,需要考虑是否保留blob文件的数据内容,相应的处理可以如下:若不存在目标blob文件对应的已生效的目标sst文件,则删除目标blob文件,否则重新创建目标blob文件。
45.在实施中,gc loop程序若检测到目标blob文件被标记为中间阶段,则可以先判断lsm-tree存储引擎中是否存在目标blob文件对应的已生效的目标sst文件。具体的判断过程可以是,先读取目标blob文件中的key值,然后检索lsm-tree存储引擎中是否存在key值对应的存储位置。如果存在,则可以认为lsm-tree存储引擎中存在该key值对应的已生效的sst文件,但还需进一步判断该sst文件是否与目标blob文件对应,即可以判断该存储位置是否为目标blob文件中该key值对应的存储位置。如果是,则代表该sst文件是目标blob文件对应的已生效的目标sst文件。此时,目标blob文件的阶段信息记录错误,lsm-tree存储引擎中不存在目标sst文件对应的其它blob文件,gcloop程序则可以重新创建目标blob文件。
46.而如果检索到的存储位置不是指向目标blob文件的,则可以认为上述sst文件与已生效的其它blob文件相对应,且其它blob文件记录了目标blob文件中key-value数据,故而可以判定目标blob文件为多余的文件,gcloop程序可以直接删除目标blob文件,而无需重新创建目标blob文件。
47.而如果lsm-tree存储引擎中不存在key值对应的存储位置,则可以认为key值仍存储在内存表中,也即相关业务数据的flush处理未执行完成,这样,lsm-tree存储引擎将会继续执行相应的flush处理,也即lsm-tree存储引擎会重新生成blob文件和对应的sst文件。故而可以判定目标blob文件为多余的文件,gcloop程序可以直接删除目标blob文件,而无需重新创建目标blob文件。
48.可选的,blob文件的重建过程可以至少存在如下两种方式:
49.方式一:根据目标blob文件创建新blob文件和新sst文件,并删除目标blob文件和目标sst文件。
50.在实施中,gc loop程序在重新创建目标blob文件时,可以读取目标blob文件中key-value数据,将key-value数据写入新blob文件中,并同时创建新sst文件。值得一提的是,在新blob文件创建完成后,新sst文件创建完成前,可以将新blob文件标记中间阶段,而在新sst文件创建完成后,可以将新blob文件切换标记为最终阶段。这样,gc loop程序可以将新blob文件和新sst文件分别存储在smr磁盘的顺序存储区和随机存储区,同时可以删除目标blob文件和目标sst文件。
51.方式二,根据目标blob文件创建新blob文件,并将新blob文件标记为中间阶段;将新blob文件与目标sst文件建立关联,将新blob文件标记为最终阶段,并删除目标blob文件。
52.在实施中,gc loop程序在重新创建目标blob文件时,可以读取目标blob文件中key-value数据,将key-value数据写入新blob文件中,并将新blob文件标记为中间阶段。之后,gc loop程序可以将新blob文件与目标sst文件重新建立关联,再将新blob文件切换标记为最终阶段,同时可以删除smr磁盘中的目标blob文件,以释放存储空间。
53.值得一提的是,lsm-tree存储引擎生成的sst文件的数据量较小,存储在smr磁盘中的随机存储区中,blob文件存储在smr磁盘中的顺序存储区中,且可以将blob文件的数据量大小设置为一个顺序存储区的空间大小,从而一个blob文件可以对应一个顺序存储区。在进行异常文件处理时,可以以顺序存储区为单位执行处理,更加便于smr磁盘的存储空间回收。
54.上述整体处理流程可以如图2所示:
55.1.执行flush或compaction时生成sst文件及关联的blob文件;
56.2.blob文件版本登记生效,标记为中间阶段
57.3.sst文件版本登记生效;
58.4.blob文件标记为最终阶段;
59.5.gc loop程序定期处理异常blob文件。
60.为了便于理解,图3示出了本实施例中blob文件的阶段变化原理,其中:
61.1.blob文件的初始化阶段,是临时状态,不进行标记。
62.2.flush处理先生成blob文件,blob文件由初始化阶段切换到中间阶段;
63.3.flush完成,生成sst文件且登记生效后,blob文件由中间阶段切换到最终阶段;
64.4.lsm-tree存储引擎满足compaction条件时,执行compaction前blob文件由最终阶段切换到中间阶段;
65.5.compaction完成,生成sst文件且登记生效后,blob文件由中间阶段切换到最终阶段;
66.6.gcloop程序发现异常blob文件,根据异常blob文件生成新blob文件,新blob处于中间阶段,异常blob文件阶段不变;
67.7.gcloop程序将新blob文件与sst文件关联后,新blob文件由中间阶段切换到最终阶段,并删除异常阶段的blob文件;
68.本发明实施例中,在生成blob文件和sst文件的过程中,监测sst文件的版本登记状态;根据sst文件不同的版本登记状态,利用不同的阶段信息,对sst文件对应的已生效的blob文件进行标记;定期根据阶段信息,对已生效的blob文件进行异常文件处理。这样,在sst文件不同的版本登记状态下,分别以不同阶段信息来标记已生效的blob文件,从而在定期处理异常文件时,通过阶段信息可以很容易识别哪些blob文件处于异常阶段,再通过对异常文件的处理可以释放出smr磁盘中无效的blob文件,可以有效避免smr磁盘的存储空间发生泄漏。
69.基于相同的技术构思,本发明实施例还提供了一种基于lsm-tree存储引擎的文件管理装置,如图4所示,所述装置包括:
70.文件生成模块401,用于在生成blob文件和sst文件的过程中,监测所述sst文件的版本登记状态;
71.阶段标记模块402,用于根据所述sst文件不同的版本登记状态,利用不同的阶段信息,对所述sst文件对应的已生效的blob文件进行标记;
72.文件处理模块403,用于定期根据所述阶段信息,对已生效的blob文件进行异常文件处理。
73.可选的,所述阶段标记模块402,具体用于:
74.若所述sst文件未登记版本,则将所述sst文件对应的blob文件标记为中间阶段,否则标记为最终阶段。
75.可选的,所述文件处理模块403,具体用于:
76.定期对标记为中间阶段的已生效的目标blob文件,进行异常文件处理。
77.图5是本发明实施例提供的网络设备的结构示意图。该网络设备500可因配置或性
能不同而产生比较大的差异,可以包括一个或一个以上中央处理器522(例如,一个或一个以上处理器)和存储器532,一个或一个以上存储应用程序542或数据544的存储介质530(例如一个或一个以上海量存储设备)。其中,存储器532和存储介质530可以是短暂存储或持久存储。存储在存储介质530的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对网络设备500中的一系列指令操作。更进一步地,中央处理器522可以设置为与存储介质530通信,在网络设备500上执行存储介质530中的一系列指令操作。
78.网络设备500还可以包括一个或一个以上电源529,一个或一个以上有线或无线网络接口550,一个或一个以上输入输出接口558,一个或一个以上键盘556,和/或,一个或一个以上操作系统541,例如windows server,mac os x,unix,linux,freebsd等等。
79.网络设备500可以包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行上述基于lsm-tree存储引擎的文件管理的指令。
80.本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是硬盘,磁盘(如smr磁盘)或光盘等。
81.以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1