CN112307016B - 一种数据单元的合并方法及装置 - Google Patents
一种数据单元的合并方法及装置 Download PDFInfo
- Publication number
- CN112307016B CN112307016B CN201911102593.1A CN201911102593A CN112307016B CN 112307016 B CN112307016 B CN 112307016B CN 201911102593 A CN201911102593 A CN 201911102593A CN 112307016 B CN112307016 B CN 112307016B
- Authority
- CN
- China
- Prior art keywords
- data
- block
- data unit
- host
- unit
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供一种数据单元的合并方法及装置,涉及计算机技术领域,减少了数据单元合并操作的时间,降低了合并操作对主机资源及主机与持久存储设备之间宽带的占用。具体包括:主机读取持久存储设备中Li层的待合并第一数据单元的索引块及Li+1层的待合并第一数据单元的索引块;主机将Li层的待合并第一数据单元的索引块中的key及对应的地址信息,以及Li+1层的待合并第一数据单元的索引块中与Li层的待合并第一数据单元的索引块中不同的key及对应的地址信息,作为第二数据单元的索引块;主机将第二数据单元的索引块写入Li+1层;主机通过第二数据单元的索引块访问第二数据单元的数据块中的数据。
Description
本申请要求于2019年07月29日提交国家知识产权局、申请号为201910691230.X、发明名称为“加速键值存储系统中合并操作的方法、计算机设备和系统”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据单元的合并方法及装置。
背景技术
在键值存储技术成为大型存储系统关键组件的技术趋势下,键值存储系统的性能成为存储系统性能的重要影响因素。现有键值存储系统广泛采用基于日志归并树(logstructured merge tree,LSM-Tree)的设计。
如图1所示的LSM-Tree结构,LSM-Tree是将索引树结构拆分成一大一小两颗树,较小的树C0常驻内存,较大的树(C1、C2……Ck)持久化到磁盘数据。数据写入操作时首先将数据写入内存中的树C0中,随着C0层的数据不断变大,则触发向下层合并。随着写数据的增加,索引树结构中不同层的数据不断变大,会不断向下层合并。
通常,合并时先将待合并的数据块与索引块读取到主机中进行合并,合并完成后再写入持久存储设备。整个过程进行了两次数据块的搬运,耗时长、阻塞写请求时间长、且长时间占用主机与持久存储设备间的大量带宽以及主机内存。
基于此,业界在进行键值存储系统的合并操作时采用下述两种方法:一种是仅将键值(key value,KV)重叠的数据块读取到主机内存进行合并再写入。另一种是将要合并的数据块一部分在主机内存合并再写入,其余部分在持久存储设备内部合并。
但是上述两种方案的合并过程中,仍需将部分数据块读取到主机进行合并再写入。处理过程中仍存在两次数据的搬运,键值存储的合并时间仍然较长,因此,键值存储的合并依然会长时间阻塞写请求、且长时间占用主机与持久存储设备间的大量带宽以及主机内存,影响了键值存储系统的性能。
发明内容
本申请提供一种数据单元的合并方法及装置,缩短了键值存储合并操作的时间以及阻塞写请求的时间,实现合并操作仅在短时间内占用主机与持久存储设备间的少量带宽以及少量主机内存。
为了达到上述目的,本申请采用如下技术方案:
第一方面,提供一种数据单元的合并方法,应用于键值存储系统中的主机,键值存储系统还包括持久存储设备。持久存储设备存储多个数据单元,数据单元包括数据块和索引块;数据块包括键key及key对应的数据,索引块包括数据块中存储的数据的key及key对应的数据所在数据块的地址信息;该方法可以包括:主机读取持久存储设备中Li层的待合并第一数据单元的索引块及Li+1层的待合并第一数据单元的索引块,Li层的待合并第一数据单元的索引块与Li+1层的待合并第一数据单元的索引块存在相同的key;其中,i为大于等于0的整数;主机将Li层的待合并第一数据单元的索引块中的key及对应的地址信息,以及Li+1层的待合并第一数据单元的索引块中与Li层的待合并第一数据单元的索引块中不同的key及对应的地址信息,作为第二数据单元的索引块;主机将第二数据单元的索引块写入Li+1层;主机通过第二数据单元的索引块访问第二数据单元的数据块中的数据。
通过本申请提供一种数据单元的合并方法,主机仅对数据单元的索引块进行合并,通过合并后的索引块来访问数据,达到数据单元合并的效果。合并的整个过程无需将数据块读取到主机,减少主机处理的数据量,缩短了键值存储合并的时间以及阻塞写请求的时间,实现合并仅在短时间内占用主机与持久存储设备间的少量带宽以及少量主机内存。
具体的,现有技术的数据单元的合并过程中,主机将待合并的数据单元的索引块和数据块一起读取到主机内存,在主机内存中完成索引与数据的合并后写入持久存储设备,本申请提供的数据单元的合并方法,主机通过仅对待合并的数据单元的索引块进行合并,替代了现有技术中合并索引块和数据块,通过仅读取待合并的数据单元的索引块到主机内存替代现有技术中将索引块和数据块一起读取到主机内存,无需将数据块读取到主机,也就减少了主机处理的数据量,减少了读取数据占用系统带宽,同时缩短了键值存储合并的时间以及阻塞写请求的时间。
其中,主机读取持久存储设备中Li层的待合并第一数据单元的索引块及Li+1层的待合并第一数据单元的索引块可以包括:主机确定持久存储设备中Li层的待合并第一数据单元;主机选取Li+1层中与Li层的待合并第一数据单元具有相同key的第一数据单元作为Li+1层的待合并第一数据单元;主机读取确定的持久存储设备中Li层的待合并第一数据单元的索引块及Li+1层的待合并第一数据单元的索引块。
一种可能的实现方式中,主机通过第二数据单元的索引块访问第二数据单元的数据块中的数据,可以替代为:主机禁止访问Li层的待合并第一数据单元的索引块,和禁止访问Li+1层的待合并第一数据单元的索引块。
可选的,可以在生成的第二数据单元的索引块中加入标记信息,以指示该数据单元区别于第一数据单元。
结合第一方面,在一种可能的实现方式中,主机通过第二数据单元的索引块访问第二数据单元的数据块中的数据,具体可以实现为:主机将Li层的待合并第一数据单元的索引块的位置信息以及Li+1层的待合并第一数据单元的索引块的位置信息加入回收链表;其中,回收链表用于禁止访问其内部地址信息指向的空间。
结合第一方面,在一种可能的实现方式中,该方法还可以包括:主机禁止访问Li+1层的待合并第一数据单元中未被第二数据单元的索引块中的地址信息指向的数据块。
结合第一方面,在一种可能的实现方式中,主机禁止访问Li+1层的待合并第一数据单元中未被第二数据单元的索引块中的地址信息指向的数据块,具体可以实现为:主机将包含在Li+1层的待合并第一数据单元的索引块中且未被第二数据单元的索引块包含的地址信息加入回收链表。
结合第一方面及上述任一种可能的实现方式,在另一种可能的实现方式中,该方法还可以包括:主机确定持久存储设备中的待整理的第二数据单元;主机指示持久存储设备将待整理的第二数据单元的数据块中的数据,移动至持久存储设备中的连续区域。
其中,主机确定持久存储设备中的待整理的第二数据单元可以包括:主机通过确定Li层的数据量大于或等于第三预设阈值时,从Li层的数据单元中选取待整理的第二数据单元。其中,第三预设阈值可以为用户设置的经验值或其他。
或者,主机接收访问Li层的数据的读请求时,从Li层的数据单元中选取待整理的第二数据单元。
或者,主机接收管理员输入的Li层的待整理的第二数据单元。
结合第一方面及上述任一种可能的实现方式,在另一种可能的实现方式中,主机指示持久存储设备将待整理的第二数据单元的数据块中的数据,移动至持久存储设备中的连续区域,可以包括:主机向持久存储设备发送第一指令,第一指令用于指示持久存储设备将待整理的第二数据单元的数据块中的数据,迁移至持久存储设备中的连续区域。
结合第一方面及上述任一种可能的实现方式,在另一种可能的实现方式中,主机指示持久存储设备将待整理的第二数据单元的数据块中的数据,移动至持久存储设备中的连续区域,可以包括:主机删除待整理的第二数据单元的数据块中的旧数据;其中,旧数据为待整理的第二数据单元的数据块中未被待整理的第二数据单元的索引块指向的数据;主机将删除旧数据后的待整理的第二数据单元的数据块中的数据,写入持久存储设备中的连续区域。在该可能的实现方式中,将待整理的第二数据单元的数据块中包含的部分旧数据,进一步进行了删除,提高了键值存储系统的存储效率。
结合第一方面及上述任一种可能的实现方式,在另一种可能的实现方式中,键值存储系统还可以包括加速器;主机删除待整理的第二数据单元的数据块中的旧数据,可以包括:主机向持久存储设备发送第二指令,第二指令用于指示持久存储设备通过加速器删除待整理的第二数据单元的数据块中的旧数据;对应的,主机将删除旧数据后的待整理的第二数据单元的数据块中的数据,写入持久存储设备中的连续区域,可以包括:主机向加速器发送第三指令,第三指令用于指示加速器将删除旧数据后的待整理的第二数据单元的数据块中的数据写入至持久存储设备的连续区域。
在该可能的实现方式中,持久存储系统根据主机的指示直接将待整理的第二数据单元的数据块发送给加速器,加速器加速删除旧数据,可以进一步实现数据单元的加速合并,减少主机处理的数据量,缩短了键值存储合并的时间以及阻塞写请求的时间,实现合并仅在短时间内占用主机与持久存储设备间的少量带宽以及少量主机内存。
结合第一方面及上述任一种可能的实现方式,在另一种可能的实现方式中,该方法还可以包括:主机将移动数据前的待整理的第二数据单元的数据块的地址信息以及移动数据前的待整理的第二数据单元的索引块的位置信息加入回收链表;主机根据待整理的第二数据单元中的数据块移动至持久存储设备的地址信息,更新待整理的第二数据单元的索引块中的地址信息;主机将更新了地址信息的待整理的第二数据单元的索引块写入连续区域。
其中,主机加入回收链表的待整理的第二数据单元的数据块的地址信息为移动至持久存储设备之前的待整理的第二数据单元的数据块的地址信息,主机加入回收链表的待整理的第二数据单元的索引块的位置信息为移动至持久存储设备之前的待整理的第二数据单元的索引块的位置信息。
一种可能的实现方式中,主机将更新了地址信息的待整理的第二数据单元的索引块写入连续区域中,与第二数据单元的数据块在该连续区域连续存储。
结合第一方面及上述任一种可能的实现方式,一种可能的实现方式中,本申请提供的数据单元的合并方法还可以包括:主机将待整理的第二数据单元移动至连续区域后,将待整理的第二数据单元恢复为第一数据单元。
一种可能的实现方式中,主机可以将待整理的第二数据单元中的标记信息删除,以恢复为第一数据单元。
需要说明的是,本申请提供的数据单元的合并方法还可以包括:将第二数据单元恢复的第一数据单元作为待整理的第一数据单元,可以参照主机对待整理的第二数据单元的整理方案,对待整理的第一数据单元进行整理。
结合第一方面及上述任一种可能的实现方式,一种可能的实现方式中,该方法还可以包括:主机向持久存储设备发送第四指令,第四指令用于指示持久存储设备清空回收链表中的地址信息指向的空间。主机完成索引块合并之后,主机可以在预设时机对持久存储设备中的数据块进行整理,以节约空间提高存储效率。
具体的,预设时机可以为主机负载小于或等于第二负载预设阈值,或者,预设时机可以为周期性执行,或者,预设时机可以为应用程度访问到时,或者其他,本申请对此不进行限定。其中,第二负载预设阈值的取值,可以根据实际需求配置,本申请不予限定。
结合第一方面及上述任一种可能的实现方式,在另一种可能的实现方式中,主机通过确定Li层的数据量大于或等于第一预设阈值时,从Li层的第一数据单元中选取待合并第一数据单元。其中,第一预设阈值可以为用户设置的经验值或其他。
结合第一方面及上述任一种可能的实现方式,在另一种可能的实现方式中,主机接收访问Li层的数据的读请求时,从Li层的第一数据单元中选取待合并第一数据单元。
结合第一方面及上述任一种可能的实现方式,在另一种可能的实现方式中,主机接收管理员输入的Li层的待合并第一数据单元。
第二方面,提供一种数据单元的合并装置,该装置可以是键值存储系统的主机中的装置或者芯片系统,或者是能够和键值存储系统中的主机匹配使用的装置。该数据单元的合并装置可以实现上述各方面或者各可能的设计中所执行的功能,所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个上述功能相应的模块。如:该数据单元的合并装置可以包括:读取单元、生成单元、写入单元及访问单元。
其中,读取单元,用于读取持久存储设备中Li层的待合并第一数据单元的索引块及Li+1层的待合并第一数据单元的索引块,Li层的待合并第一数据单元的索引块与Li+1层的待合并第一数据单元的索引块存在相同的key;其中,i为大于等于0的整数。
生成单元,将Li层的待合并第一数据单元的索引块中的key及对应的地址信息,以及Li+1层的待合并第一数据单元的索引块中与Li层的待合并第一数据单元的索引块中不同的key及对应的地址信息,作为第二数据单元的索引块。
写入单元,用于将第二数据单元的索引块写入Li+1层。
访问单元,用于通过第二数据单元的索引块访问第二数据单元的数据块中的数据。
需要说明的是,第二方面提供的数据单元的合并装置,用于执行上述第一方面提供的数据单元的合并方法,具体实现可以参考上述第一方面的具体实现。
第三方面,本申请实施例提供一种数据单元的合并装置,该数据单元的合并装置可以包括:处理器,存储器;处理器,存储器耦合,存储器可用于存储计算机程序代码,计算机程序代码包括计算机指令,当计算机指令被数据单元的合并装置执行时,使得数据单元的合并装置执行如第一方面或任一种可能的实现方式面所述的数据单元的合并方法。
第四方面,提供一种键值存储系统,包括上述任一方面或任一种可能的实现方式所述的数据单元的合并装置。
第五方面,本申请实施例提供一种计算机可读存储介质,该计算机可读存储介质可以包括:计算机软件指令;当计算机软件指令在计算机中运行时,使得该计算机执行如第一方面或第一方面的可能实现方式中任一项所述的数据单元的合并方法。
第六方面,本申请实施例提供一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得该计算机执行如权利要求第一方面或任一种可能的实现方式中任一项所述的数据单元的合并方法。
第七方面,本申请实施例提供一种芯片系统,该芯片系统应用于键值存储系统中的主机;芯片系统包括接口电路和处理器;接口电路和处理器通过线路互联;接口电路用于从键值存储系统的主机中的存储器接收信号,并向处理器发送信号,信号包括存储器中存储的计算机指令;当处理器执行该计算机指令时,芯片系统执行如第一方面或任一种可能的实现方式中任一项所述的数据单元的合并方法。
应当理解的是,本申请中对技术特征、技术方案、有益效果或类似语言的描述并不是暗示在任意的单个实施例中可以实现所有的特点和优点。相反,可以理解的是对于特征或有益效果的描述意味着在至少一个实施例中包括特定的技术特征、技术方案或有益效果。因此,本说明书中对于技术特征、技术方案或有益效果的描述并不一定是指相同的实施例。进而,还可以任何适当的方式组合本实施例中所描述的技术特征、技术方案和有益效果。本领域技术人员将会理解,无需特定实施例的一个或多个特定的技术特征、技术方案或有益效果即可实现实施例。在其他实施例中,还可在没有体现所有实施例的特定实施例中识别出额外的技术特征和有益效果。
附图说明
图1为现有技术提供的一种LSM-Tree结构示意图;
图2为现有技术提供的一种leveldb数据库的结构示意图;
图3为现有技术提供的一种SSTable的结构示意图;
图4为现有技术提供的一种SSTable合并场景示意图;
图5为一种键值存储系统的软件架构示意图;
图6为一种键值存储系统的硬件架构示意图;
图7为另一种键值存储系统的硬件架构示意图;
图8为本申请实施例提供的一种数据单元的合并装置示意图;
图9为本申请实施例提供的一种数据单元的合并方法流程示意图;
图10为本申请实施例提供的另一种数据单元的合并方法流程示意图;
图11为本申请实施例提供的一种数据单元的浅层整理方案的流程示意图;
图12为本申请实施例提供的一种数据单元的深度整理方案的流程示意图;
图13为本申请实施例提供的一种数据单元的加速整理方案的流程示意图;
图14为本申请实施例提供的一种SSTable的合并信息流动示意图;
图15为本申请实施例提供的一种leveldb数据库中SSTable的合并过程示意图;
图16为本申请实施例提供的一种SSTable的浅层整理过程示意图;
图17为本申请实施例提供的一种SSTable的深度整理过程示意图;
图18为本申请实施例提供的一种数据单元的合并装置示意图;
图19为本申请实施例提供的另一种数据单元的合并装置示意图。
具体实施方式
本申请说明书和权利要求书及上述附图中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于限定特定顺序。
在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
在本申请实施例的描述中,除非另有说明,“/”表示前后关联的对象是一种“或”的关系,例如,A/B可以表示A或B;本申请中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,其中A,B可以是单数或者复数。并且,在本申请的描述中,除非另有说明,“多个”是指两个或多于两个。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。
在本申请实施例中,至少一个还可以描述为一个或多个,多个可以是两个、三个、四个或者更多个,本申请不做限制。
为了便于理解,先对本申请涉及的名词进行解释。
键值存储,即Key-Value存储,简称KV存储,是非关系型的数据库存储的一种方式,该方式中数据按照键值对的形式进行组织,索引和存储。一个键值对中的数据,称之为该键值对中的key对应的数据。
键(key),用于指向数据,可以通过key来查找其对应的数据。key的形式可以为字符串、数字或其他,本申请对此不予限定。
键值存储系统,可以指使用KV存储方式存取数据的系统。例如,键值存储系统可以包括主机和持久存储设备。
持久存储设备,可以指键值存储系统中用于数据持久化存储的装置或系统。例如单机文件系统、分布式文件系统等,本申请对此不作具体的限定。
数据单元,可以指键值存储系统将KV持久化到持久存储设备时组织KV的形式。数据单元可以包括索引块与数据块。数据块可以用于存储KV,索引块可以用于存储该数据单元的数据块中的key及该key对应的数据所在的数据块的地址信息。一个地址信息可以唯一指向一个数据块。在不同类型的键值存储系统中,数据单元可以有不同的名称。例如,采用键值存储的leveldb数据库中的数据单元可以为有序字符串标(sorted string table,SSTable),或者HBase键值存储系统中数据单元可以为HFile。
索引块指向的数据,可以指该索引块中的地址信息指向的数据块中,该索引块中的key对应的数据。
索引块中的地址信息,可以指索引块中包含的地址信息。
索引块的位置信息,可以用于指示该索引块在持久化存储设备中的存储位置(也是地址信息),可以通过索引块的位置信息访问到索引块。
第一数据单元,可以指现有键值存储系统存储数据的KV的形式,第一数据单元的索引块与第一数据单元的数据块在持久化存储设备中连续存储,第一数据单元的索引块中的地址信息为局部指针类型,指向第一数据单元内的数据块。示例性的,leveldb数据库中的第一数据单元可以称为原生SSTable。
第二数据单元,可以指将第一数据单元仅进行索引块合并得到的数据单元,第二数据单元包括第一数据单元进行索引块合并后,合并后的索引块与其内部的地址信息指向的数据块。第二数据单元的索引块与第二数据单元的数据块在持久化存储设备中分散存储,第二数据单元的索引块中的地址信息为全局指针类型,指向持久化存储设备内数据块。示例性的,leveldb数据库中第二数据单元,可以是将原生SSTable进行索引块合并后得到的SSTable(可以称之为浅层SSTable),浅层SSTable可以包括原生SSTable进行索引块合并后的索引块与其内部的地址信息指向的数据块。其中,可以在第二数据单元的索引块中加入标记信息,指示该数据单元为第二数据单元,以区别于第一数据单元。
新/旧数据,当键值存储系统采用LSM-Tree的设计分层存储时,若在多层中存在同一个key对应的数据,这些层中的最上层存储的该key对应的数据为新数据(后写入,也可以称为有效数据),这些层中的最上层以下的层中存储的该key对应的数据为旧数据(先写入,也可以称为无效数据)。
回收链表,是一种用于实现禁止访问的记录结构,其内部记录了禁止访问的空间的地址信息。
现有键值存储系统广泛采用LSM-Tree的设计,为了方便理解本方案,首先对LSM-Tree的设计做简单解释。
如图1所示的LSM-Tree结构,LSM-Tree是将索引树结构拆分成一大一小两部分,较小的一个常驻内存(C0),较大的一个持久化到磁盘(C1、C2…Ck),他们共同维护一个有序的键(key)空间。
如图2所示,示意了leveldb数据库的结构,该结构可以分为主机内存结构(内存表(memtable)、不可变内存表(immutable))和持久存储设备结构(SSTable)。主机内存结构(memtable、immutable)相当于图1所示LSM-Tree的C0,持久存储设备结构的每一层(L0……Ln)相当于图1所示的LSM-Tree的Ci。数据在持久存储设备的L0、L1到Ln中的存储KV数据的数据单元格式为SSTable。
下面结合图3对leveldb数据库中的数据单元(SSTable)的结构进行说明。其他类型的数据单元结构相似,不再赘述。
图3示意了一种SSTable的结构,SSTable由数据块和索引块组成。其中,数据块用于存储KV数据,KV成对存储,例如,数据块中包含key和key对应的值(value)。索引块用于对数据块中的KV进行了索引,用以快速定位目标key存在于SSTable的哪个数据块中。例如,索引块包含key及每个key对应的地址信息,一个key对应的地址信息是该key对应的数据所在的数据块的地址信息。进一步的,索引块中还可以包括其内部的地址信息指向的数据块中存储的数据的大小。
一种可能实施方式中索引块中还可以包括过滤器,用于快速判断某个key是否在该SSTable中。索引块中还可以包括其它用于统计该SSTable的状态和使用情况、保障数据可靠性的辅助结构,数据块中也可以包括其它用于保障数据可靠性的辅助结构,本申请不再一一赘述。
以数据单元为SSTable为例,描述数据读取以及写入的过程。
当业务需要访问某一key(称为目标key)对应的数据(目标数据)时,业务对应的应用向键值存储系统的主机发送携带该key的读请求,主机在接收到读请求后,通过下述步骤1至步骤3完成数据的读取。
步骤1、主机确定目标key对应的数据存储的目标SSTable。
其中,在步骤1中,主机逐层查找持久存储设备中SSTable的索引块,命中包括目标key的索引块,确定目标key对应的数据存储于该索引块所在的目标SSTable。具体的,在步骤1中,主机也可以通过索引块中的过滤器快速判断读请求中的key对应的数据是否存在于SSTable中。
需要说明的是,在步骤1中,主机可以逐层将持久存储设备中SSTable的索引块读取到主机内存中进行确定,对于读取索引块的过程本申请实施例不予限定及赘述。
进一步的,在步骤1中,若遍历到最下层的Ln层仍然没有命中包括目标key的索引块,则表示查找的目标key不存在于本键值存储系统中。
步骤2、主机根据目标SSTable的索引块中目标key对应的地址信息,确定出存储目标数据的目标数据块。
步骤3、主机遍历目标数据块中的数据,获取目标数据。
示例性的,如图3所示,根据业务的访问需求读取key为1的数据时,主机接收到携带key=1的读请求。首先,根据上述步骤1的方法确定目标key=1对应的数据存储的目标SSTable,为图3示意的SSTable。然后主机确定图3示意的SSTable的索引块中与key=1对应的地址信息为该SSTable的数据块1的地址信息,即确定要访问的数据存储于数据块1中。然后主机根据数据块1的地址信息,将数据块1中存储的数据读取到主机内存。主机在数据块1中存储的数据中,通过key=1遍历查找,查找到key为1对应的数据A,则完成了读取key为1的数据A的过程。
当业务需要存储某一数据时,先为该数据配置key,将key与要存储的数据组成KV对,再向键值存储系统的主机发送携带KV对的写请求。主机在接收到写请求后,将写请求中的KV对先写入主机内存。再根据预设机制,当主机内存满足条件时,将主机内存中存储的KV对移动至持久存储设备中。
需要说明的是,数据写入时,首先会写入到主机内存结构的内存表(memtable)中,随着数据的不断写入,memtable中的数据量不断增加,当memtable中的数据量超过了预设的阈值时,会将当前memtable冻结成一个不可变内存表(immutable),并且创建一个新的memtable供系统继续使用。immutable会在后台将内存数据库中的数据存储到持久存储设备中,在持久存储设备中数据以SSTable的格式存储于L0……Ln中。
具体的,随着数据的不断写入,持久存储设备中每层存储的数据会不断增加,当某一层存储的数据超过对应的预设存储阈值时,会触发该层向下层的合并操作,将其与下一层的数据单元合并。
下面以Li层与Li+1层的SSTable合并为例,对数据单元的合并过程做具体说明,该过程可以包括但不限于下述步骤a至步骤c。
步骤a、主机确定出待合并的SSTable。
其中,待合并SSTable为Li层与Li+1层具有相同key的SSTable。
示例性的,如图4示意的SSTable合并场景,假设待合并的SSTable(具有相同key的SSTable)为图4中示意的Li层与Li+1层中3个SSTable,待合并的SSTable中相同key的范围2~12和15~25。
步骤b、主机将待合并的SSTable的索引块和数据块读取到主机内存。
示例性的,基于图4示意的场景,主机将Li和Li+1层的SSTable索引块2~37、1~12和15~25,和对应的数据块从持久存储设备中全部读取到主机内存中。
步骤c、主机对待合并的SSTable进行合并生成新SSTable。
其中,步骤c中生成新SSTable具体可以实现为:待合并的SSTable中相同key对应的数据保留Li层的数据,不同key对应的数据均保留,将保留的数据按key的顺序排列得到新SSTable,并根据新SSTable的数据块更新索引块作为新SSTable的索引块。
示例性的,基于图4示意的场景,待合并的SSTable中相同key的范围2~12和15~25,待合并的SSTable中相同key(2~12和15~25)对应的KV数据保留Li层SSTable中的KV数据,不同key(1、13、14、26-37)对应的KV数据均保留,保留的数据包括Li层SSTable的所有KV数据与Li+1层SSTable中key范围在1对应的KV数据。然后对保留的数据进行排序,得到图4中示意的新SSTable的数据。最后根据数据块的大小对排序后的数据进行存储,得到新SSTable的数据块,并根据新SSTable的数据块更新索引块,新的SSTable的索引块中key范围为1~14和15-37。
步骤d、主机将新SSTable写入持久存储设备的Li+1层。
从上述合并过程可知,合并时先将待合并的数据块与索引块读取到主机中进行合并,合并完成后再写入持久存储设备。整个过程进行了两次数据块的搬运,耗时长、阻塞写请求时间长、且长时间占用主机与持久存储设备间的大量带宽以及主机内存。
基于此,本申请实施例提供一种数据单元的合并方法,主机仅对数据单元的索引块进行合并,并禁止访问旧数据,达到数据单元合并的效果。合并的整个过程无需将数据块读取到主机,减少主机处理的数据量,缩短了键值存储合并的时间以及阻塞写请求的时间,实现合并仅在短时间内占用主机与持久存储设备间的少量带宽以及少量主机内存。
下面将结合附图对本申请实施例的实施方式进行详细描述。
本申请实施例提供的数据单元的合并方法可以应用于如图5示意的键值存储系统的软件架构中。如图5所示,在键值存储系统中,KV数据以数据单元格式存储于持久存储设备中,应用程序通过KV接口访问键值存储系统内部存储的KV数据。
本申请实施例提供的数据单元的合并方法可以应用于如图6或图7示意的键值存储系统的硬件架构。
如图6所示,该键值存储系统60可以由主机601、持久化存储设备602等组成。
如图7所示,该键值存储系统60在图6示意的包括主机601、持久存储设备602的基础上,还可以包括加速器603。
其中,主机601与持久存储设备602之间可以使用高速串行计算机扩展总线(peripheral component interconnect express,PCIe)总线或者网络进行连接。主机601与加速器603之间可以使用PCIe总线或者网络进行连接。持久存储设备602与加速器603之间可以使用PCIe总线或者网络进行连接。
其中,主机601可以为计算机系统,含有计算器件(例如但不限于中央处理器(central processing unit,CPU))和存储器件(例如但不限于内存)等组件。主机601主要用于指示持久存储设备602和/或加速器603进行相关的数据操作。
持久存储设备602是将数据持久化的装置或系统,用于存储数据、提供内部数据迁移等。例如,持久存储设备602可以为单机文件系统、分布式文件系统等。
示例性的,持久存储设备602可以为基于开放通道(open channel)架构的非易失性存储器标准(non-volatile memory express,NVMe)的固态硬盘(solid state drives,SSD)。其中,OpenChannel架构提供了在SSD内部进行数据迁移的接口,主机向SSD发送复制(copy)指令即可实现数据在SSD内部的迁移。持久存储设备可以将SSD内部的闪存转换层(Flash translation layer,FTL)给主机的定制化SSD,该SSD的控制器及FTL算法需要进行相应的编程,使之提供在SSD内部进行数据迁移的功能,主机发送定制的指令,实现数据在SSD内部的迁移。或者,持久存储设备602也可以为分布式存储系统。
加速器603可以为主机601的计算和内存之外的具有数据处理能力的装置或系统。加速器603可以直接与主机和持久存储设备进行数据交互。其中,加速器603主要用于接收主机601的指令,按照指令通过其内部的多个单元模块实现对相关数据的并行处理,提高处理速度。
示例性的,加速器603可以为图形处理器(graphics processing unit,GPU),GPU可以使用自身特性(例如GPUDirect特性)直接与NVMe设备进行数据交互。加速器603也可以为片上系统(system on chip,SOC)、应用型专用集成电路(application-specificintegrated circuits,ASICS)、现场可编程门阵列(field programmable gate array,FPGA)、嵌入式装备(embedded devices)或者其他。
在图6或图7所示的键值存储系统的硬件架构下,数据读取时,主机601先读取数据单元的索引块,然后命中包含目标key的目标索引块。接下来,主机601获取目标索引块中与目标key对应的地址信息,作为存储目标key对应的数据存储位置。主机601向持久存储设备602请求该地址信息指向的数据块中存储的数据。主机601从该地址信息指向的数据块中存储的数据中,遍历查找到目标key对应的数据,完成数据读取。
在图6或图7所示的键值存储系统的硬件架构下,在数据写入的过程中,主机601接收到写入请求,主机601将请求写入的KV数据写入到主机内存中。待主机内存中的数据增加到阈值时,主机601将其写入到持久存储设备602中。
下面结合附图,对本申请的实施例进行具体阐述。
一方面,本申请实施例提供一种数据单元的合并装置,用于执行本申请提供的数据单元的合并方法。数据单元的合并装置可以部署在键值存储系统的主机中,数据单元的合并装置可以为主机的部分或者全部。本申请实施例对数据单元的合并装置的具体形态不进行具体限定。
图8示出的是与本申请各实施例相关的一种数据单元的合并装置80。数据单元的合并装置80可以为图6或图7所示的架构中的主机601或主机601的功能单元或者芯片系统。如图8所示,数据单元的合并装置80可以包括:处理器801、存储器802、收发器803。
下面结合图8对数据单元的合并装置80的各个构成部件进行具体的介绍:
其中,存储器802可以是易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);或者非易失性存储器(non-volatile memory),例如只读存储器(read-only memory,ROM),快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);或者上述种类的存储器的组合,用于存储可实现本申请方法的程序代码、配置文件或其他内容。
处理器801是数据单元的合并装置80的控制中心。例如,处理器801可以是一个中央处理器(central processing unit,CPU),也可以是特定集成电路(applicationspecific integrated circuit,ASIC),或者是被配置成实施本申请实施例的一个或多个集成电路,例如:一个或多个微处理器(digital singnal processor,DSP),或,一个或者多个现场可编程门阵列(field programmable gate array,FPGA)。
收发器803用于与其他设备进行通信。示例性的,收发器803可以为数据单元的合并装置80的收发端口。
具体的,处理器801通过运行或执行存储在存储器802内的软件程序和/或模块,以及调用存储在存储器802内的数据,执行如下功能:
主机读取持久存储设备中Li层的待合并第一数据单元的索引块及Li+1层的待合并第一数据单元的索引块,Li层的待合并第一数据单元的索引块与Li+1层的待合并第一数据单元的索引块存在相同的key;其中,i为大于等于0的整数;主机将Li层的待合并第一数据单元的索引块中的key及对应的地址信息,以及Li+1层的待合并第一数据单元的索引块中与Li层的待合并第一数据单元的索引块中不同的key及对应的地址信息,作为第二数据单元的索引块;主机将第二数据单元的索引块写入Li+1层;主机通过第二数据单元的索引块访问第二数据单元的数据块中的数据。
以下实施例中的方法均可以在具有上述硬件结构的数据单元的合并装置中实现。
另一方面,本申请实施例提供一种数据单元的合并方法,由上述数据单元的合并装置执行。如图9所示,该方法可以包括:
S901、主机读取持久存储设备中Li层的待合并第一数据单元的索引块及Li+1层的待合并第一数据单元的索引块。
其中,i为大于等于0的整数。
具体的,S901中读取的持久存储设备中Li层的待合并第一数据单元以及Li+1层的待合并第一数据单元,是主机确定的进行合并的数据单元,Li层的待合并第一数据单元的索引块与Li+1层的待合并第一数据单元的索引块存在相同的key。应理解,主机确定的待合并的数据单元,是持久存储设备中不同层中具有相同key的数据单元(索引块和/或数据块中具有相同key)。
一种可能的实现方式中,确定的待合并的数据单元可以是连续的不同层的数据单元。
其中,S901中主机读取持久存储设备中Li层的待合并第一数据单元的索引块及Li+1层的待合并第一数据单元的索引块可以实现为下述步骤1-1和步骤1-3。
步骤1-1、主机确定持久存储设备中Li层的待合并第一数据单元。
步骤1-2、主机选取Li+1层中与Li层的待合并第一数据单元具有相同key的第一数据单元作为Li+1层的待合并第一数据单元。
步骤1-3、主机读取确定的持久存储设备中Li层的待合并第一数据单元的索引块及Li+1层的待合并第一数据单元的索引块。
具体的,步骤1-1中主机确定持久存储设备中Li层的待合并第一数据单元,可以包括但不限于下述实现一到实现三。
实现一:主机通过确定Li层的数据量大于或等于第一预设阈值时,从Li层的第一数据单元中选取待合并第一数据单元。
其中,第一预设阈值可以为用户设置的经验值或其他。
一种可能的实现方式中,从Li层的第一数据单元中选取的待合并第一数据单元,可以为Li层中轮询到的第一数据单元。
具体的,可以通过键值存储系统中建立的轮询机制来确定具体的Li层的待合并第一数据单元。例如,轮询机制可以为:将Li层的所有第一数据单元分为N组,每组分配有固定个数的第一数据单元,按组循环轮询。
另一种可能的实现方式中,从Li层中选取的待合并第一数据单元,可以为Li层中访问且未命中的次数大于或等于第二预设阈值的第一数据单元。
其中,第二预设阈值可以为用户设置的经验值或其他。
具体的,可以通过检查Li层的每个第一数据单元的访问信息,确定出进入该第一数据单元查找目标KV、但是没有命中的次数超过第二预设阈值的第一数据单元,为Li层的待合并第一数据单元。
实现二:主机接收访问Li层的数据的读请求时,从Li层的第一数据单元中选取待合并第一数据单元。
在实现二中,主机从Li层的第一数据单元中选取待合并第一数据单元的选取方式,可以参照实现一中的选取方法,本申请在此不做具体的限定。
实现三:主机接收管理员输入的Li层的待合并第一数据单元。
具体的,在S901中,主机可以调用与持久存储设备通信时的相应接口读取Li层的待合并第一数据单元的索引块及Li+1层的待合并第一数据单元的索引块到主机内存。
S902、主机将Li层的待合并第一数据单元的索引块中的key及对应的地址信息,以及Li+1层的待合并第一数据单元的索引块中与Li层的待合并第一数据单元的索引块中不同的key及对应的地址信息,作为第二数据单元的索引块。
其中,第二数据单元的索引块包括Li层的待合并第一数据单元的索引块及Li+1层的待合并第一数据单元的索引块中的所有key及key对应的新数据所在数据块的地址信息。
一种可能的实施方式中,主机可以将新生成的第二数据单元的索引块按key顺序放置。其中,key顺序可以为单调递增的顺序或者单调递减的顺序。
例如,假设S901读取的Li层的待合并第一数据单元的索引块中key范围为2~37,读取的Li+1层的待合并第一数据单元的索引块中key范围为1~12和15~25,两者存在的相同key的范围为2~12和15~25,不同key的范围为13~14、26~37,和1。合并后生成的第二数据单元的索引块的key范围为1~37,合并后生成的第二数据单元的索引块中每个key(1~37)对应的地址信息,为该key对应的新数据在持久存储设备中所在的数据块的地址信息。
具体的,对于第二数据单元的索引块中包括的相同key(指Li层的待合并第一数据单元的索引块与Li+1层的待合并第一数据单元的索引块具有的相同key),其在第二数据单元的索引块中对应的地址信息,为其在Li层的待合并第一数据单元的索引块中对应的地址信息。对于第二数据单元的索引块中包括的不同key(指Li层的待合并第一数据单元的索引块与Li+1层的待合并第一数据单元的索引块具有的不同key),其在第二数据单元的索引块中对应的地址信息,为其在Li层或Li+1层的待合并第一数据单元的索引块中对应的地址信息。
通过S902的操作,生成的第二数据单元的索引块指向了其内部包含的key对应的最新数据。
S903、主机将第二数据单元的索引块写入Li+1层。
具体的,S903中主机可以调用与持久存储设备通信时的相应接口,将第二数据单元的索引块写入持久存储设备中的Li+1层。
S904、主机通过第二数据单元的索引块访问第二数据单元的数据块中的数据。
具体的,主机访问第二数据单元的数据块中的数据时,根据前述键值存储系统中数据读取过程,通过key命中第二数据单元的索引块,确定读取的数据在第二数据单元中,进行数据读取。
一种可能的实现方式中,主机访问第二数据单元的数据块中的数据时,根据前述键值存储系统中数据读取过程,通过key还命中了第二数据单元的索引块之外的其他索引块,主机依然通过第二数据单元的索引块访问第二数据单元的数据块中的数据。
另一种可能的实现方式中,S904中主机通过第二数据单元的索引块访问第二数据单元的数据块中的数据,可以实现为:主机禁止访问Li层的待合并第一数据单元的索引块以及禁止访问Li+1层的待合并第一数据单元的索引块。这样一来,S904中主机访问第二数据单元的数据块中的数据时,通过key只命中第二数据单元的索引块。
一种可能的实现方式中,可以通过将地址信息加入回收链表实现禁止访问。回收链表用于禁止访问其内部地址信息指向的空间。
具体的,主机禁止访问Li层的待合并第一数据单元的索引块以及Li+1层的待合并第一数据单元的索引块,可以实现为:主机将Li层的待合并第一数据单元的索引块的位置信息以及Li+1层的待合并第一数据单元的索引块的位置信息加入回收链表。
进一步可选的,本申请实施例提供的方法还可以包括:主机禁止访问Li+1层的待合并第一数据单元中未被第二数据单元的索引块中的地址信息指向的数据块(全部存储旧数据的数据块)。
一种可能的实现方式中,主机禁止访问Li+1层的待合并第一数据单元中未被第二数据单元的索引块中的地址信息指向的数据块,具体可以实现为:主机将包含在Li+1层的待合并第一数据单元的索引块中且未被第二数据单元的索引块包含的地址信息加入回收链表。
需要说明的是,将通过S901到S904过程生成的第二数据单元的索引块以及第二数据单元的索引块中的地址信息指向的数据块作为第二数据单元。
示例性的,可以通过在生成的第二数据单元的索引块中加入标记信息,以指示该数据单元为区别于第一数据单元。
还需要说明的是,在上述S901到S904过程中,仅对数据单元的索引块进行了读取、合并及写入操作,对应的数据块不进行任何处理,也不将其读取至主机内存。
通过本申请提供的数据单元的合并方法,在合并操作的过程中,主机对待合并第一数据单元的索引块进行合并生成第二数据单元的索引块,主机通过第二数据单元的索引块访问第二数据单元的数据块中的数据,达到了无需对数据块进行任何操作但实现数据单元合并的效果。由于合并的整个过程无需将数据块读取到主机,主机处理的数据量较少,缩短了键值存储合并的时间以及阻塞写请求的时间,实现合并仅在短时间内占用主机与持久存储设备间的少量带宽以及少量主机内存。
进一步的,如图10所示,本申请实施例提供的数据单元的合并方法还可以包括S905。
S905、主机向持久存储设备发送第四指令。
其中,第四指令用于指示持久存储设备清空回收链表中的地址信息指向的空间。
一种可能的实现方式中,S905中主机向持久存储设备发送第四指令可以实现为:主机的负载小于或等于第一负载预设阈值时,主机向持久存储设备发送第四指令。
其中,第一负载预设阈值的取值,可以根据实际需求配置,本申请实施例不予限定。
另一种可能的实现方式中,S905中主机向持久存储设备发送第四指令可以实现为:主机周期性的向持久存储设备发送第四指令。具体的,发送第四指令的周期可以根据实际需求配置。
进一步的,在上述S901至S904进行索引块合并之后,主机可以在预设时机对持久存储设备中的数据块进行整理,以节约空间提高存储效率。
具体的,预设时机可以为主机负载小于或等于第二负载预设阈值,或者,预设时机可以为周期性执行,或者,预设时机可以为应用程度访问到时,或者其他,本申请实施例对此不进行限定。
其中,第二负载预设阈值的取值,可以根据实际需求配置,本申请实施例不予限定。
如图10所示,本申请实施例提供的数据单元的合并方法还可以包括S906和S907进行数据块整理。在S906和S907的过程中,主机整理的数据单元可以为一个或多个,S906和S907中主机整理每个待整理的数据单元的过程相同。本申请实施例在S906和S907中仅描述主机整理一个待整理的数据单元的过程,其他不再一一说明。
S906、主机确定持久存储设备中的待整理的第二数据单元。
具体的,S906中主机确定持久存储设备中的待整理的第二数据单元的方法,可以参考S901的步骤1-1中主机确定持久存储设备中Li层的待合并第一数据单元的三种实现,此处不再赘述。
S907、主机指示持久存储设备将待整理的第二数据单元的数据块中的数据,移动至持久存储设备中的连续区域。
具体的,S907中主机指示持久存储设备将待整理的第二数据单元的数据块中的数据,移动至持久存储设备中的连续区域,可以通过但不限于下述三种方案实现(方案A到方案C)。
方案A、浅层整理方案。
具体的,在方案A中,主机向持久存储设备发送第一指令,第一指令用于指示持久存储设备将待整理的第二数据单元的数据块中的数据,迁移至连续区域。
一种可能的实现方式中,在方案A中,待整理的第二数据单元可以仅为第二数据单元。如前所述,第二数据单元的索引块以及每个数据块在持久化存储设备中分散存储,通过方案A将其整理为第一数据单元的形式,可以将该过程称之为浅层整理过程。方案A的具体实现过程可以参照下述图11示意的浅层整理过程。
进一步的,在方案A中,将第二数据单元的数据块中的数据迁移至连续区域后,可以将其恢复为第一数据单元。
例如,在方案A中,将第二数据单元的数据块中的数据迁移至连续区域后,可以将其索引块中的标记信息删除,以恢复为第一数据单元。
方案B、深度整理方案。
具体的,在方案B中,主机先删除待整理的第二数据单元的数据块中的旧数据,再将删除旧数据后的待整理的第二数据单元的数据块中的数据,写入持久存储设备中的连续区域。方案B的具体实现过程可以参照下述图12示意的深度整理过程。
其中,旧数据为待整理的第二数据单元的数据块中未被待整理的第二数据单元的索引块指向的数据。
进一步的,在方案B中,将第二数据单元的数据块中的数据移动至连续区域后,可以将其恢复为第一数据单元。例如,可以将第二数据单元的索引块中的标记信息删除,以恢复为第一数据单元。
方案C、加速整理方案。
具体的,在方案C中,键值存储系统还包括加速器。加速整理方案是指,主机通过加速器以实现深度整理的目的,达到方案B深度整理的效果。
具体的,在方案C中,主机向持久存储设备发送第二指令,第二指令用于指示持久存储设备通过加速器删除待整理的第二数据单元的数据块中的旧数据;主机向加速器发送第三指令,第三指令用于指示加速器将删除旧数据后的待整理的第二数据单元的数据块中的数据写入至持久存储设备的连续区域。方案C的具体实现过程可以参照下述图13示意的加速整理过程。
进一步的,在上述方案A至方案C中任一方案中,主机将待整理的第二数据单元(包括未删除旧数据(对应方案A)或者删除了旧数据(对应方案B及方案C))的数据块中的数据移动至持久存储设备中的连续区域时,主机先统计待整理数据单元的数据块中的数据的总大小,然后向持久存储设备申请大于或等于该总大小的连续区域,然后将待整理数据单元的数据块中的数据移动至申请的连续区域。
其中,数据单元的索引块中包括了该数据单元的每个数据块中的数据大小,主机统计待整理数据单元的数据块中的数据的总大小,具体可以实现为:主机将待整理的第二数据单元的索引块中记录的每个数据块中的数据大小累加,得到待整理数据单元的数据块中的数据的总大小。
需要说明的是,对于S907中的具体实现,可以根据实际需要来选择上述一种或多种整理方案,本申请实施例不予限定。
进进一步的,如图10所示,在S907之后,本申请实施例提供的数据单元的合并方法还可以包括S908到S910。
S908、主机将移动数据前的待整理的第二数据单元的数据块的地址信息以及移动数据前的待整理的第二数据单元的索引块的位置信息加入回收链表。
需要说明的是,主机加入回收链表的待整理的第二数据单元的数据块的地址信息及待整理的第二数据单元的索引块的位置信息,为执行S907之前待整理的第二数据单元的数据块的地址信息及待整理的第二数据单元的索引块的位置信息。
S909、主机根据待整理的第二数据单元中的数据块移动至持久存储设备的地址信息,更新待整理的第二数据单元的索引块中的地址信息。
具体的,S909中主机将待整理的第二数据单元的索引块中key对应的地址信息,更新为该key对应的数据在持久存储设备的连续区域中所在数据块的地址信息。
S910、主机将更新了地址信息的待整理的第二数据单元的索引块写入连续区域。
一种可能的实现中,S910中主机将更新了地址信息的待整理的第二数据单元的索引块写入持久化存储设备的连续区域中,待整理的第二数据单元移动后的数据块之后(新写入的第二数据单元的索引块与数据块连续放置)。
需要说明的是,本申请提供的数据单元的合并方法还可以包括:将第二数据单元恢复的第一数据单元作为待整理的第一数据单元,可以参照主机对待整理的第二数据单元的整理方案,对待整理的第一数据单元进行整理。
下面对S907中的方案A(浅层整理方案)、方案B(深度整理方案)以及方案C(加速整理方案)分别进行说明。
如图11所示,数据单元的浅层整理方案的流程可以包括S1101至S1112。
S1101、主机确定待整理的数据单元。
其中,S1101中确定的待整理的数据单元可以包括第二数据单元。
具体的,S1101的具体实现可以参考S906的具体实现,此处不再赘述。
S1102、主机将待整理的数据单元的索引块读取到主机内存。
具体的,主机调用与持久存储设备通信的相应接口,读取S1101确定的待整理的数据单元的索引块。
S1103、主机将待整理的数据单元的数据块中的数据的大小累加,得到待整理数据块总大小。
其中,数据单元的索引块中记录了该数据单元的每个数据块的数据大小。
具体的,S1103具体可以实现为:主机将待整理的数据单元的索引块中记录的该待整理的数据单元的每个数据块的数据大小,累加得到待整理数据块总大小。
S1104、主机向持久存储设备请求连续区域。
其中,连续区域的大于或等于待整理数据块总大小。
一种可能的实现中,连续区域的大小为S1103中得到的数据块的总大小与索引块的大小之和。索引块的大小可以为预配置的固定大小或者其他。
另一种可能的实现中,连续区域的大小为S1103中得到的数据块的总大小。
S1105、持久存储设备分配连续区域。
具体的,S1105中持久存储设备根据S1104中主机请求的区域大小,分配连续区域,对于具体分配过程,本申请实施例不予限定。
S1106、持久存储设备向主机发送响应消息。
其中,响应消息中包括S1105中分配的连续区域的地址信息。
S1107、主机向将持久存储设备发送第一指令。
其中,第一指令用于指示持久存储设备将待整理的数据单元的数据块中的数据迁移至连续区域。
具体的,S1107具体可以实现为:主机向持久存储设备发送第一指令,指示持久存储设备将待整理的数据单元的数据块中的数据迁移至S1104请求的连续区域。
一种可能的实施方式中,第一指令中包含待整理的数据单元的数据块中的数据迁移前后的地址信息。
S1108、持久存储设备接收第一指令。
S1109、持久存储设备根据第一指令,将待整理的数据单元的数据块中的数据迁移至连续区域。
具体的,在S1109中,持久存储设备可以根据第一指令中包含的待整理的数据单元的数据块中的数据迁移前后的地址信息,将数据迁移前的地址信息指向的数据块中的数据,迁移至数据迁移后的地址信息指向的数据块中。
S1110、主机将移动数据前的待整理的数据单元的数据块的地址信息及移动数据前的待整理的数据单元的索引块的位置信息加入回收链表。
其中,待整理的数据单元的数据块的地址信息为待整理的数据单元的索引块中包含的地址信息。
S1111、主机根据待整理的数据单元中的数据块迁移至持久存储设备的地址信息,更新待整理的数据单元的索引块中的地址信息。
进一步,S1111中主机还可以将第二数据单元的索引块中的标记信息删除,以恢复为第一数据单元。
需要说明的是,S1111的具体实现可以参照S909的具体实现,此处不再赘述。
S1112、主机将更新了地址信息的待整理的数据单元的索引块写入的连续区域。
需要说明的是,S1112的具体实现可以参照S910的具体实现,此处不再赘述。
如图12所示,数据单元的深度整理方案的流程可以包括S1201至S1211。
S1201、主机确定待整理的数据单元。
其中,S1201中确定的待整理的数据单元可以包括第二数据单元和/或第一数据单元,分别称之为待整理的第二数据单元、待整理的第一数据单元。
需要说明的是,待整理的第一数据单元可以为通过本申请提供的数据单元的合并方法生成的第二数据单元恢复的第一数据单元。
S1202、主机将待整理的数据单元的索引块和数据块读取到主机内存。
具体的,主机调用与持久存储设备通信的相应接口,将S1201确定的待整理的数据单元的索引块和数据块读取到主机内存。
S1203、主机删除待整理的数据单元的数据块中的旧数据。
其中,S1203可以实现为:主机遍历待整理的数据单元中的数据块,将数据块中未被待整理的数据单元的索引块指向的旧数据删除。
进一步的,S1203中主机还可以将删除旧数据后的数据块中的KV按顺序排列,该顺序可以为key单调递增的顺序或者key单调递减的顺序或者其他。
S1204、主机将待整理的数据单元的数据块中的数据大小累加,得到待整理数据块总大小。
其中,S1204中待整理的数据单元的数据块中的数据大小,为删除旧数据后的待整理的数据单元的数据块中的数据大小。
具体的,S1204具体可以实现为:主机统计删除旧数据后的待整理的数据单元的每个数据块中的数据的大小,累加得到待整理数据块总大小。
S1205、主机向持久存储设备请求连续区域。
需要说明的是,S1205的具体实现可以参照S1104的具体实现,此处不再赘述。
S1206、持久存储设备分配连续区域。
具体的,S1206中持久存储设备根据S1205中主机请求的区域大小,分配连续区域,对于具体分配过程,本申请实施例不予限定。
S1207、持久存储设备向主机发送响应消息。
其中,响应消息中包括S1206中分配的连续区域的地址信息。
S1208、主机将删除旧数据后的待整理的数据单元中的数据块中的数据写入连续区域。
具体的,主机通过持久存储设备提供的相应接口将删除旧数据后的待整理的数据单元中的数据块中的数据,写入至S1206中持久存储设备分配的连续区域。
S1209、主机将移动数据前的待整理的数据单元的数据块的地址信息及移动数据前的待整理的数据单元的索引块的位置信息加入回收链表。
需要说明的是,S1209的具体实现可以参照S1110的具体实现,此处不再赘述。
S1210、主机根据待整理的数据单元中的数据块写入至连续区域的地址信息,更新待整理的数据单元的索引块中的地址信息。
需要说明的是,S1210的具体实现可以参照S909的具体实现,此处不再赘述。
S1211、主机将更新了地址信息的待整理的数据单元的索引块写入连续区域。
需要说明的是,S1211的具体实现可以参照S910的具体实现,此处不再赘述。
如图13所示,数据单元的加速整理方案的流程可以包括S1301至S1316。其中,进行加速整理方案时,键值存储系统还可以包括加速器。
S1301、主机确定待整理的数据单元。
需要说明的是,S1301的具体实现可以参照S1201的具体实现,此处不再赘述。
S1302、主机将待整理的数据单元的索引块读取到主机内存。
具体的,主机调用其基于的持久存储设备的相应接口,将S1301确定的待整理的数据单元中的索引块读取到主机内存。
S1303、主机向持久存储设备发送第二指令。
其中,第二指令包括S1301中确定的待整理的数据单元的索引块,第二指令用于指示持久存储设备通过加速器删除待整理的数据单元的数据块中的旧数据。
S1304、持久存储设备接收第二指令。
S1305、持久存储设备向加速器发送待整理的数据单元的数据块中的数据。
具体的,S1305中持久存储设备将第二指令中包括的待整理的数据单元的索引块中的地址信息指向的数据块中的数据,发送给加速器。
S1306、加速器接收持久存储设备发送的待整理的数据单元的数据块中的数据。
S1307、加速器并行删除待整理的数据单元的数据块中的旧数据。
具体的,加速器中包括多个并行处理单元,S1306中加速器中的每个处理单元分别处理待整理的数据单元的不同数据块,删除其中的旧数据。
进一步的,加速器可以将删除旧数据后的数据按顺序排列,该顺序可以为key递增的顺序或者key递减的顺序或者其他。
S1308、加速器向主机发送完成指令。
其中,完成指令用于指示加速器已完成旧数据删除。完成指令中可以包括删除旧数据后的待整理的数据单元中的数据块中数据的总大小,或者,完成指令包括删除数据后的待整理的数据单元中索引块。一种可能的实现方式中,S1308中加速器可以直接向主机发送完成指令。
另一种可能的实现方式中,S1308中加速器可以向持久储存设备发送完成指令,持久存储设备向主机转发完成指令。
S1309、主机接收完成指令。
S1310、主机向持久存储设备请求连续区域。
需要说明的是,S1310的具体实现可以参照S1104至S1106的具体实现,此处不再赘述。
S1311、主机向加速器发送第三指令。
其中,第三指令用于指示加速器将删除旧数据后的待整理的数据单元的数据块中的数据写入连续区域。
S1312、加速器接收第三指令。
S1313、加速器根据第三指令,将删除旧数据后的待整理的数据单元的数据块中的数据,写入S1310请求的连续区域。
具体的,S1313中,加速器可以根据第三指令,调用对应的接口,将删除旧数据后的待整理的数据单元的数据块中的数据,写入S1310请求的连续区域。
S1314、主机将移动数据前的待整理的数据单元的数据块的地址信息及移动数据前的待整理的数据单元的索引块的位置信息加入回收链表。
需要说明的是,S1314的具体实现可以参照S1110的具体实现,此处不再赘述。
S1315、主机根据待整理的数据单元中的数据块写入至连续区域的地址信息,更新待整理的数据单元的索引块中的地址信息。
需要说明的是,S1315的具体实现可以参照S909的具体实现,此处不再赘述。
S1316、主机将更新了地址信息的待整理的数据单元的索引块写入连续区域。
需要说明的是,S1316的具体实现可以参照S910的具体实现,此处不再赘述。
下面以键值存储系统为leveldb数据库为例,通过具体的示例,描述leveldb数据库中SSTable的合并方法,以对本申请提供的数据单元的合并方法进行详细说明。
键值存储系统中主机与持久存储设备之间信息(索引块、数据)的流动如图14所示。如图14所示的SSTable的合并信息流动示意图,主机同时处理SSTable合并操作与其他应用,持久存储设备与主机在数据传输的过程中受最大宽带限制。具体的,主机从持久存储设备中读取数据时,持久存储设备可以将SSTable中的数据读取到高速缓存空间(buffer/cache),通过对应的接口传给主机进行数据的访问与处理。主机读取持久存储设备中的待合并的SSTable的索引块时,持久存储设备可以经高速缓存空间(buffer/cache)通过对应的接口将SSTable的索引块传给主机内存。
实施例1
图15示意了一种leveldb数据库中SSTable的合并过程,leveldb数据库包括主机与持久存储设备,KV数据在持久存储设备中以SSTable的格式存储。
如图15所示,leveldb数据库中持久存储设备的Li层存储了SSTable1,其索引块中的key范围为2~25,SSTable1的索引块如表1所示。leveldb数据库中持久存储设备的Li+1层存储了SSTable2和SSTable3,SSTable2的索引块中的key范围为1~12,SSTable3的索引块中的key范围为15~37,SSTable2的索引块如表2所示,SSTable3的索引块如表3所示。其中,表1至表3中示意的索引块中的地址信息S11指向SSTable1中的第一个数据块,地址信息S12指向SSTable1中的第二个数据块,地址信息S21指向SSTable2中的第一个数据块,地址信息S22指向SSTable2中的第二个数据块,地址信息S31指向SSTable3中的第一个数据块,地址信息S32指向SSTable3中的第二个数据块。
表1
键 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
对应的地址信息 | S11 | S11 | S11 | S11 | S11 | S11 | S11 | S11 |
键 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
对应的地址信息 | S11 | S11 | S11 | S11 | S11 | S12 | S12 | S12 |
键 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
对应的地址信息 | S12 | S12 | S12 | S12 | S12 | S12 | S12 | S12 |
表2
键 | 1 | 2 | 3 | 4 | 5 | 6 |
对应的地址信息 | S21 | S21 | S21 | S21 | S21 | S21 |
键 | 7 | 8 | 9 | 10 | 11 | 12 |
对应的地址信息 | S22 | S22 | S22 | S22 | S22 | S22 |
表3
键 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
对应的地址信息 | S31 | S31 | S31 | S31 | S31 | S31 | S31 | S31 |
键 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
对应的地址信息 | S31 | S31 | S31 | S32 | S32 | S32 | S32 | S32 |
键 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | |
对应的地址信息 | S32 | S32 | S32 | S32 | S32 | S32 | S32 |
需要说明的是,表1至表3只是对索引块的示例描述,并不是对其形式以及内容的限定。
在持久存储设备中Li层的存储数据大于第一预设阈值时,主机启动Li层与Li+1层的SSTable合并。假设通过轮询机制确定的Li层的待合并的原生SSTable为SSTable1,将SSTable1作为Li层的待合并原生SSTable;Li+1层中与Li层的待合并原生SSTable具有相同key的SSTable2和SSTable3作为Li+1层的待合并原生SSTable。
主机调用与持久存储设备通信时的相应接口读取SSTable1的索引块、SSTable2及SSTable3的索引块到主机内存。
主机对SSTable1的索引块、SSTable2和SSTable3的索引块进行合并(key相同的使用SSTable1的索引块中对应的地址信息,key不同的使用SSTable2或SSTable3的索引块中对应的地址信息),主机将SSTable1索引块中的key及对应的地址信息,以及SSTable2和SSTable3索引块中与SSTable1的索引块中不同的key及对应的地址信息,作为SSTable4的索引块(表4所示)和SSTable5的索引块(表5所示)。具体的,SSTable4中的key范围为1~14,SSTable5中的key范围为15~37。同时,主机在SSTable4的索引块和SSTable5的索引块中加入标记信息。
表4
键 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
对应的地址信息 | S21 | S11 | S11 | S11 | S11 | S11 | S11 |
键 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
对应的地址信息 | S11 | S11 | S11 | S11 | S11 | S11 | S11 |
表5
键 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
对应的地址信息 | S12 | S12 | S12 | S12 | S12 | S12 | S12 | S12 |
键 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
对应的地址信息 | S12 | S12 | S12 | S32 | S32 | S32 | S32 | S32 |
键 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | |
对应的地址信息 | S32 | S32 | S32 | S32 | S32 | S32 | S32 |
主机调用与持久存储设备通信时的相应接口,将SSTable4的索引块和SSTable5的索引块写入持久存储设备中Li+1层。其中,SSTable4中的索引块存储在地址信息S43指向的数据块中,SSTable5中的索引块存储在地址信息S53指向的数据块中。SSTable4的索引块和SSTable4的索引块中的地址信息指向的数据块则作为浅层SSTable4,SSTable5的索引块和SSTable5的索引块中的地址信息指向的数据块作为浅层SSTable5。
主机将地址信息S22(SSTable2中第二个数据块(全部包含旧数据)的地址信息)、地址信息S31(SSTable3中第一个数据块(全部包含旧数据)的地址信息)、地址信息S13(SSTable1中的索引块的位置信息)、地址信息S23(SSTable2中的索引块的位置信息)和地址信息S33(SSTable3中的索引块的位置)加入回收链表,禁止访问。
其中,SSTable2中第1个数据块中key 1对应的数据为新数据,key2-6对应的数据为旧数据,无法禁止访问,待后续深度整理时处理。
实施例2
图16示意了一种SSTable的浅层整理过程。基于实施例1的描述,主机接收访问Li+1层的数据的读请求时,若读取到的SSTable4的索引块时,通过其中的标记信息,确定SSTable4是浅层SSTable,可以触发对SSTable4启动浅层整理。
具体的,主机根据访问的数据信息确定的待整理的SSTable为SSTable4。主机调用与持久存储设备通信的相应接口,读取SSTable4的索引块到主机内存,主机将SSTable4中的地址信息S21指向的数据块、地址信息S11指向的数据块中的数据大小累加,得到待整理数据块总大小,主机向持久存储设备请求大于或等于该待整理数据块总大小的连续区域,主机指示持久存储设备将SSTable4的数据块(SSTable1中第一个数据块和SSTable2中第一个数据块)中的数据迁移至申请的连续区域。假设SSTable4中的数据块中的数据迁移至连续区域中S41与S42指向的数据块,主机删除SSTable4的索引块中的标记信息,并对应更新SSTable4中的索引块中的地址信息、并将更新了地址信息后的索引块写入地址信息S44指向的空间中,与数据快对应,生成原生SSTable,将生成的原生SSTable记录为SSTable6。
然后,主机将SSTable4的数据块的地址信息(地址信息S11和地址信息S21)、SSTable4的索引块的位置信息(地址信息S43)加入回收链表,禁止访问。
需要说明的是,实施例2中,主机也可以对SSTable5进行浅层整理,过程相似,不再赘述。
实施例3
图17示意了一种SSTable的深度整理过程。基于实施例2的描述,当主机接收应用程序访问Li+1层的数据时,可以触发启动深度整理。
具体的,假设主机根据访问的数据信息确定的待整理的SSTable为SSTable6。主机将SSTable6的索引块与数据块读取到主机内存。主机根据读取的索引块及数据块,确定SSTable6中第一个数据块中key范围在2-6的数据为旧数据,主机删除SSTable6中的旧数据。
然后,主机根据删除旧数据后的SSTable6中数据块中的数据大小,向持久存储设备申请连续区域,将删除旧数据后的SSTable6的数据块中的数据写入持久存储设备的连续区域(假设地址信息为S45、S46)。主机根据数据写入持久存储设备的数据块的地址信息,更新SSTable6的索引块,主机将更新地址信息后的索引块写入持久存储设备的S47,与SSTable6的数据块对应,生成SSTable7。
主机将地址信息S41(SSTable6中第一个数据块的地址信息)、地址信息S42(SSTable6中第二个数据块的地址信息)和地址信息S44(SSTable6的索引块的位置信息)加入回收链表,禁止访问。
需要说明的是,实施例3中,主机也可以对SSTable4、SSTable5进行深度整理,过程相似,不再赘述。
需要说明的是,图17示意的深度整理过程,当键值存储系统还包括加速器时,可以通过加速器完成旧数据的删除,具体实现如前述加速整理方案的内容,此处不再赘述。
上述主要从键值存储系统中的主机的角度对本申请实施例提供的方案进行了介绍。可以理解的是,键值存储系统中的主机为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对键值存储系统中的主机进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,如图18所示为本申请实施例提供的一种数据单元的合并装置180,用于实现上述方法中键值存储系统中的主机的功能。该数据单元的合并装置180可以是该主机中的装置,也可以是能够和该主机匹配使用的装置。其中,该数据单元的合并装置180也可以为芯片系统。本申请实施例中,芯片系统可以由芯片构成,也可以包含芯片和其他分立器件。如图18所示,数据单元的合并装置180可以包括:读取单元1801、生成单元1802、写入单元1803、访问单元1804。读取单元1801用于执行图9中的S901或图10中的S901。生成单元1802用于执行图9中的S902或图10中的S902。写入单元1803用于执行图9中的S903,或图10中的S903、S910,或图11中的S1112,或图12中的S1211,或图13中的S1316。访问单元1804用于执行图9中的S904,或图10中的S904。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
进一步的,如图18所示,数据单元的合并装置180还可以包括确定单元1805、整理单元1806、回收单元1807、更新单元1808。其中,确定单元1805用于执行图10中的S906,或图11中的S1101,或图12中的S1201,或图13中的S1301。整理单元1806用于执行图10中的S907,或图11中的S1102、S1103、S1104、S1107,或图12中的S1202、S1203、S1204、S1205、S1208,或图13中的S1302、S1303、S1309、S1310、S1311。回收单元1807用于执行图10中的S908,或图11中的S1110,或图12中的S1209,或图13中的S1314。更新单元1808用于执行图10中的S909,或图11中的S1111,或图12中的S1210,或图13中的S1315。
在采用集成划分各个功能模块的情况下,如图19所示,为本申请实施例提供的一种数据单元的合并装置190,用于实现上述方法中键值存储系统中的主机的功能。该数据单元的合并装置190可以是该主机中的装置,也可以是能够和该主机匹配使用的装置。其中,该数据单元的合并装置190可以为芯片系统。数据单元的合并装置190包括至少一个处理模块1901,用于实现本申请实施例提供的方法中键值存储系统中主机的数据单元的合并功能。示例性地,处理模块1901可以用于执行图9的S901-S904或图10中的S901-S904、S906-S910,或图11中的S1101、S1103、S1110、S1111、S1112,或图12中的S1201、S1203、S1204、S1208、S1209、S1210、S1211,或图13中的S1301、S1314、S1315、S1316。具体参见方法示例中的详细描述,此处不做赘述。
数据单元的合并装置190还可以包括至少一个存储模块1902,用于存储程序指令和/或数据。存储模块1902和处理模块1901耦合。本申请实施例中的耦合是装置、单元或模块之间的间接耦合或通信连接,可以是电性,机械或其它的形式,用于装置、单元或模块之间的信息交互。处理模块1901可能和存储模块1902协同操作。处理模块1901可能执行存储模块1902中存储的程序指令。所述至少一个存储模块中的至少一个可以包括于处理模块中。
数据单元的合并装置190还可以包括通信模块1903,用于通过传输介质和其它设备进行通信,从而用于数据单元的合并装置190中的装置可以和其它设备进行通信。其中,处理模块1901可以通过通信模块1903执行图10中的S905、或图11中的S1102、S1104、S1107,或图12中的S1202、S1205,或图13中的S1302、S1303、S1309、S1310、S1311。
当处理模块1901为处理器,存储模块1902为存储器,通信模块1903为收发器时,本申请实施例图19所涉及的数据单元的合并装置190可以为图8所示的数据单元的合并装置。
如前述,本申请实施例提供的数据单元的合并装置180或数据单元的合并装置190可以用于实施上述本申请各实施例实现的方法中键值存储系统中的主机的功能,为了便于说明,仅示出了与本申请实施例相关的部分,具体技术细节未揭示的,请参照本申请各实施例。
本申请另一些实施例还提供一种计算机可读存储介质,该计算机可读存储介质可包括计算机软件指令,当该计算机软件指令在人工智能设备上运行时,使得该主机执行上述图9至图13所示实施例中该主机执行的各个步骤。
本申请另一些实施例还提供一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得该计算机执行上述图9至图13所示实施例中该主机执行的各个步骤。
本申请另一些实施例还提供一种芯片系统,该芯片系统可以应用于键值存储系统的主机。芯片系统包括接口电路和处理器;接口电路和处理器通过线路互联;接口电路用于从键值存储系统的主机中的存储器接收信号,并向处理器发送信号,信号包括存储器中存储的计算机指令;当处理器执行该计算机指令时,芯片系统执行如上述图9至图13所示实施例中该主机执行的各个步骤。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (16)
1.一种数据单元的合并方法,其特征在于,应用于键值存储系统中的主机,所述键值存储系统还包括持久存储设备,所述持久存储设备存储多个数据单元,所述数据单元包括数据块和索引块;所述数据块包括键key及key对应的数据,所述索引块包括数据块中存储的数据的key及key对应的数据所在数据块的地址信息;所述方法包括:
所述主机读取所述持久存储设备中L i 层的待合并第一数据单元的索引块及L i+1层的待合并第一数据单元的索引块,所述L i 层的待合并第一数据单元的索引块与所述L i+1层的待合并第一数据单元的索引块存在相同的key;其中,所述i为大于等于0的整数;
所述主机将所述L i 层的待合并第一数据单元的索引块中的key及对应的地址信息,以及所述L i+1层的待合并第一数据单元的索引块中与所述L i 层的待合并第一数据单元的索引块中不同的key及对应的地址信息,作为第二数据单元的索引块;
所述主机将所述第二数据单元的索引块写入所述L i+1层;
所述主机通过所述第二数据单元的索引块访问所述第二数据单元的数据块中的数据。
2.根据权利要求1所述的方法,其特征在于,所述主机通过所述第二数据单元的索引块访问所述第二数据单元的数据块中的数据,包括:
所述主机将所述L i 层的待合并第一数据单元的索引块的位置信息以及所述L i+1层的待合并第一数据单元的索引块的位置信息加入回收链表;
其中,所述回收链表用于禁止访问其内部地址信息指向的空间。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
所述主机确定所述持久存储设备中的待整理的第二数据单元;
所述主机指示所述持久存储设备将所述待整理的第二数据单元的数据块中的数据,移动至所述持久存储设备中的连续区域。
4.根据权利要求3所述的方法,其特征在于,所述主机指示所述持久存储设备将所述待整理的第二数据单元的数据块中的数据,移动至所述持久存储设备中的连续区域,包括:
所述主机删除所述待整理的第二数据单元的数据块中的旧数据;其中,所述旧数据为所述待整理的第二数据单元的数据块中未被所述待整理的第二数据单元的索引块指向的数据;
所述主机将删除旧数据后的所述待整理的第二数据单元的数据块中的数据,写入所述持久存储设备中的连续区域。
5.根据权利要求4所述的方法,其特征在于,所述键值存储系统还包括加速器;
所述主机删除所述待整理的第二数据单元的数据块中的旧数据,包括:所述主机向所述持久存储设备发送第二指令,所述第二指令用于指示所述持久存储设备通过加速器删除所述待整理的第二数据单元的数据块中的旧数据;
对应的,所述主机将删除旧数据后的所述待整理的第二数据单元的数据块中的数据,写入所述持久存储设备中的连续区域,包括:
所述主机向所述加速器发送第三指令,所述第三指令用于指示所述加速器将删除旧数据后的所述待整理的第二数据单元的数据块中的数据写入至所述持久存储设备的连续区域。
6.根据权利要求3所述的方法,其特征在于,所述方法还包括:
所述主机将移动数据前的所述待整理的第二数据单元的数据块的地址信息以及移动数据前的所述待整理的第二数据单元的索引块的位置信息加入回收链表;
所述主机根据待整理的第二数据单元中的数据块移动至所述持久存储设备的地址信息,更新所述待整理的第二数据单元的索引块中的地址信息;
所述主机将更新了地址信息的所述待整理的第二数据单元的索引块,写入所述连续区域。
7.根据权利要求4或5所述的方法,其特征在于,所述方法还包括:
所述主机将移动数据前的所述待整理的第二数据单元的数据块的地址信息以及移动数据前的所述待整理的第二数据单元的索引块的位置信息加入回收链表;
所述主机根据待整理的第二数据单元中的数据块移动至所述持久存储设备的地址信息,更新所述待整理的第二数据单元的索引块中的地址信息;
所述主机将更新了地址信息的所述待整理的第二数据单元的索引块,写入所述连续区域。
8.一种数据单元的合并装置,其特征在于,部署于键值存储系统的主机中,所述键值存储系统还包括持久存储设备,所述持久存储设备存储多个数据单元,所述数据单元包括数据块和索引块;所述数据块包括键key及key对应的数据,所述索引块包括数据块中存储的数据的key及key对应的数据所在数据块的地址信息;所述装置包括:
读取单元,用于读取所述持久存储设备中L i 层的待合并第一数据单元的索引块及L i+1层的待合并第一数据单元的索引块,所述L i 层的待合并第一数据单元的索引块与所述L i+1层的待合并第一数据单元的索引块存在相同的key;其中,所述i为大于等于0的整数;
生成单元,用于将所述L i 层的待合并第一数据单元的索引块中的key及对应的地址信息,以及所述L i+1层的待合并第一数据单元的索引块中与所述L i 层的待合并第一数据单元的索引块中不同的key及对应的地址信息,作为第二数据单元的索引块;
写入单元,用于将所述第二数据单元的索引块写入所述L i+1层;
访问单元,用于通过所述第二数据单元的索引块访问所述第二数据单元的数据块中的数据。
9.根据权利要求8所述的装置,其特征在于,所述访问单元具体用于:
将所述L i 层的待合并第一数据单元的索引块的位置信息以及所述L i+1层的待合并第一数据单元的索引块的位置信息加入回收链表。
10.根据权利要求8或9所述的装置,其特征在于,所述装置还包括:
确定单元,用于确定所述持久存储设备中的待整理的第二数据单元;
整理单元,用于指示所述持久存储设备将所述待整理的第二数据单元的数据块中的数据,移动至所述持久存储设备中的连续区域。
11.根据权利要求10所述的装置,其特征在于,所述整理单元具体用于:
删除所述待整理的第二数据单元的数据块中的旧数据;所述旧数据为所述待整理的第二数据单元的数据块中未被所述待整理的第二数据单元的索引块指向的数据;
将删除旧数据后的所述待整理的第二数据单元的数据块中的数据,写入所述持久存储设备中的连续区域。
12.根据权利要求11所述的装置,其特征在于,所述键值存储系统还包括加速器;所述整理单元具体用于:
向所述持久存储设备发送第二指令,所述第二指令用于指示所述持久存储设备通过加速器删除所述待整理的第二数据单元的数据块中的旧数据;
向所述加速器发送第三指令,所述第三指令用于指示所述加速器将删除旧数据后的所述待整理的第二数据单元的数据块中的数据写入至所述持久存储设备的连续区域。
13.根据权利要求10所述的装置,其特征在于,所述装置还包括:
回收单元,用于将移动数据前的所述待整理的第二数据单元的数据块的地址信息以及移动数据前的所述待整理的第二数据单元的索引块的位置信息加入回收链表;
更新单元,用于根据待整理的第二数据单元中的数据块移动至所述持久存储设备的地址信息,更新所述待整理的第二数据单元的索引块中的地址信息;
所述写入单元,还用于将更新了地址信息的所述待整理的第二数据单元的索引块,写入所述连续区域。
14.根据权利要求11或12所述的装置,其特征在于,所述装置还包括:
回收单元,用于将移动数据前的所述待整理的第二数据单元的数据块的地址信息以及移动数据前的所述待整理的第二数据单元的索引块的位置信息加入回收链表;
更新单元,用于根据待整理的第二数据单元中的数据块移动至所述持久存储设备的地址信息,更新所述待整理的第二数据单元的索引块中的地址信息;
所述写入单元,还用于将更新了地址信息的所述待整理的第二数据单元的索引块,写入所述连续区域。
15.一种数据单元的合并装置,其特征在于,所述装置包括:处理器,存储器;所述处理器和所述存储器耦合,所述存储器用于存储计算机程序代码,所述计算机程序代码包括计算机指令,当所述计算机指令被所述数据单元的合并装置执行时,使得所述装置执行如权利要求1-7中任一项所述的数据单元的合并方法。
16.一种计算机可读存储介质,其特征在于,包括:计算机软件指令;
当计算机软件指令在计算机中运行时,使得所述计算机执行如权利要求1-7中任一项所述的数据单元的合并方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2020/094942 WO2021017647A1 (zh) | 2019-07-29 | 2020-06-08 | 一种数据单元的合并方法及装置 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910691230X | 2019-07-29 | ||
CN201910691230 | 2019-07-29 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112307016A CN112307016A (zh) | 2021-02-02 |
CN112307016B true CN112307016B (zh) | 2022-08-26 |
Family
ID=74336244
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911102593.1A Active CN112307016B (zh) | 2019-07-29 | 2019-11-12 | 一种数据单元的合并方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112307016B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104424204A (zh) * | 2013-08-21 | 2015-03-18 | 华为技术有限公司 | 索引机制合并方法、搜索方法、装置及设备 |
CN105447059A (zh) * | 2014-09-29 | 2016-03-30 | 华为技术有限公司 | 一种数据处理方法及装置 |
CN106844650A (zh) * | 2017-01-20 | 2017-06-13 | 中国科学院计算技术研究所 | 一种日志合并树的合并方法及系统 |
WO2018133762A1 (zh) * | 2017-01-17 | 2018-07-26 | 广州市动景计算机科技有限公司 | 文件合并方法和装置 |
CN108733306A (zh) * | 2017-04-14 | 2018-11-02 | 华为技术有限公司 | 一种文件合并方法及装置 |
CN109213432A (zh) * | 2017-07-04 | 2019-01-15 | 华为技术有限公司 | 利用日志结构合并树将数据写入的存储设备及其方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11042328B2 (en) * | 2015-06-01 | 2021-06-22 | Samsung Electronics Co., Ltd. | Storage apparatus and method for autonomous space compaction |
US10909074B2 (en) * | 2017-04-18 | 2021-02-02 | Microsoft Technology Licensing, Llc | File table index aggregate statistics |
-
2019
- 2019-11-12 CN CN201911102593.1A patent/CN112307016B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104424204A (zh) * | 2013-08-21 | 2015-03-18 | 华为技术有限公司 | 索引机制合并方法、搜索方法、装置及设备 |
CN105447059A (zh) * | 2014-09-29 | 2016-03-30 | 华为技术有限公司 | 一种数据处理方法及装置 |
WO2018133762A1 (zh) * | 2017-01-17 | 2018-07-26 | 广州市动景计算机科技有限公司 | 文件合并方法和装置 |
CN106844650A (zh) * | 2017-01-20 | 2017-06-13 | 中国科学院计算技术研究所 | 一种日志合并树的合并方法及系统 |
CN108733306A (zh) * | 2017-04-14 | 2018-11-02 | 华为技术有限公司 | 一种文件合并方法及装置 |
CN109213432A (zh) * | 2017-07-04 | 2019-01-15 | 华为技术有限公司 | 利用日志结构合并树将数据写入的存储设备及其方法 |
Non-Patent Citations (2)
Title |
---|
游理通等.一个基于日志结构的非易失性内存键值存储系统.《计算机研究与发展》.2018,(第09期), * |
翁海星等.集群环境下分布式索引的实现.《计算机应用》.2016,(第01期), * |
Also Published As
Publication number | Publication date |
---|---|
CN112307016A (zh) | 2021-02-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107209714B (zh) | 分布式存储系统及分布式存储系统的控制方法 | |
US10620862B2 (en) | Efficient recovery of deduplication data for high capacity systems | |
KR101977575B1 (ko) | 디렉토리 엔트리 조회 장치, 그 방법 및 디렉토리 엔트리 조회 프로그램이 기록된 기록 매체 | |
US9886464B2 (en) | Versioned bloom filter | |
CN105190573B (zh) | 存储数据的减少冗余 | |
US9367448B1 (en) | Method and system for determining data integrity for garbage collection of data storage systems | |
CN108604165B (zh) | 存储装置 | |
KR102050723B1 (ko) | 컴퓨팅 시스템 및 그 데이터 관리 방법 | |
CN104978151A (zh) | 基于应用感知的重复数据删除存储系统中的数据重构方法 | |
US10503424B2 (en) | Storage system | |
US11048757B2 (en) | Cuckoo tree with duplicate key support | |
CN108121813B (zh) | 数据管理方法、装置、系统、存储介质及电子设备 | |
CN102782643A (zh) | 使用布隆过滤器的索引搜索 | |
EP3316150B1 (en) | Method and apparatus for file compaction in key-value storage system | |
CN110858162B (zh) | 内存管理方法及装置、服务器 | |
US11061788B2 (en) | Storage management method, electronic device, and computer program product | |
US20170364300A1 (en) | Controller, flash memory apparatus, method for identifying data block stability, and method for storing data in flash memory apparatus | |
WO2022063059A1 (zh) | 键值存储系统的数据管理方法及其装置 | |
CN106469120A (zh) | 碎片整理方法、装置及设备 | |
CN111459884B (zh) | 一种数据的处理方法、装置、计算机设备和存储介质 | |
CN111522502B (zh) | 数据去重方法、装置、电子设备及计算机可读存储介质 | |
US10210067B1 (en) | Space accounting in presence of data storage pre-mapper | |
US10289345B1 (en) | Contention and metadata write amplification reduction in log structured data storage mapping | |
CN105493080A (zh) | 基于上下文感知的重复数据删除的方法和装置 | |
US10416901B1 (en) | Storage element cloning in presence of data storage pre-mapper with multiple simultaneous instances of volume address using virtual copies |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |