KV项有效性获取方法以及装置与流程

文档序号:12733762阅读:326来源:国知局
KV项有效性获取方法以及装置与流程

本申请涉及存储领域,特别是涉及一种KV项有效性获取方法以及装置。



背景技术:

键值存储,即Key-Value存储,简称KV存储。KV存储是按照索引和文件组合的形式进行组织,索引和文件的组合称为KV项。其中,索引用于标识KV项,文件用于存储数据,KV项的大小可以变化,KV项的大小主要取决于文件的大小。所以,KV存储适合不涉及过多数据关系业务关系的业务数据,例如,网络社交平台和电商产生的业务数据,能够有效减少读写磁盘的次数。

KV项通常存储在持久化存储介质中。当需要对持久化存储介质进行垃圾回收时,先将进行垃圾回收的存储空间中的有效KV项迁移到有效的区域中或者确定进行垃圾回收的存储空间中没有有效KV项。而要将需要进行垃圾回收的存储空间中有效KV项迁移到有效的区域,或者,确定需要进行垃圾回收的存储空间中没有有效KV项,都必须首先获得需要进行垃圾回收的存储空间中的KV项的有效性。

如图1所示,现有技术提供了一种KV项有效性获取方法,将固态硬盘(Solid State Drives,SSD)中的存储空间划分为多个大小相同的数据单元110。每个KV项使用整数个数据单元110进行存储,即,当KV项的大小小于或者等于1个数据单元110的大小时,1个KV项使用1个数据单元110进行存储,当KV项的大于1个数据单元110的大小,而小于或者等于2个数据单元110的大小时,1个KV项使用2个数据单元110进行存储,依此类推。在存储级内存(Store Class Memory,SCM)中存储有位图(bitmap)120。位图120包括多个位121,位图120中的每个位120与SSD中的一个数据单元110对应。当位图120中的位121的值为“1”(图中用黑块进行表示)时,表示位121对应的数据单元110为有效状态(图中用带条纹的方块表示),当位图120中的位121的值为“0”(图中用白块进行表示)时,表示位121对应的数据单元110为无效状态(图中用带散点的方块表示)。如图1中所示,位图120中的第1个位对应第1个数据单元110,第2个位对应第2个数据单元110,第3个位对应第3个数据单元110,……。第1个KV项存储在第1个数据单元110中,第2个KV项存储在第2个数据单元110以及第3个数据单元110中,第3个KV项存储在第4个数据单元110中,第4个KV项存储在第5个数据单元110、第6个数据单元110以及第7个KV数据单元中,……。第1个KV项为无效数据,第2个KV项为有效数据,第3个KV项为无效数据,第4个KV项为有效数据,……。所以,位图120的第1个位121被设置成0,第2个位121被设置为1,第3个位121被设置为1,第4个位121被设置为0,第5个位121被设置为1,第6个位121被设置为1,第7个位121被设置为1,……。通过读取位图120中的各个位121的状态,就能够获知各个数据单元110的有效性。但是,在这种方式中,如果KV项的大小不是刚好为整数个块110的大小时,就会导致存储空间被浪费。



技术实现要素:

本申请提供一种KV项有效性获取方法以及装置,能够提高存储空间的利用率。

第一方面,提供了一种KV项有效性获取方法,包括:

获取第i个页面的起始KV项的编号以及结束KV项的编号,其中,KV项包括索引、数据项以及元数据,所述页面为读取单位,所述KV项连续存储于部分、一个或多个块中;

根据所述起始KV项的编号以及结束KV项的编号计算得到第i个页面的KV项的编号范围;

根据所述第i个页面的KV项的编号查找有效性存储空间以获取所述第i个页面中的KV项的有效性,其中,所述有效性存储空间包括多个与KV项对应的存储单元,所述存储单元用于存储对应KV项的有效性,所述有效性为有效状态或者无效状态。

结合第一方面,本发明第一方面的第一种可能的实施方式中,在获取第i个页面的起始KV项的编号以及结束KV项的编号之前,还包括:对KV项进行编号,并将KV项的编号存储到哈希表和/或所述KV项中。

结合第一方面的第一种可能的实施方式,本发明第一方面的第二种可能的实施方式中,所述方法还包括:在删除或者更改KV项时,从哈希表和/或需要删除或者更改的KV项中获取所述需要删除或者更改的KV项的编号;根据所述需要删除或者更改的KV项的编号在所述有效性存储单元中查找到对应的存储单元;将所述对应的存储单元标记为无效状态。

结合第一方面或第一方面的第一种或第二种可能的实施方式,本发明第一方面的第三种可能的实施方式中,获取第i个页面的起始KV项的编号以及结束KV项的编号具体包括:获取第i个页面的页面信息以及第i+1个页面的页面信息,其中,第i个页面的页面信息包括第i个页面的起始KV项的编号;根据所述第i个页面的页面信息获得第i个页面的起始KV项的编号;根据所述第i+1个页面的页面信息获取第i+1个页面的起始KV项的编号,并根据第i+1个页面的起始KV项的编号获得所述第i个页面的结束KV项的编号;或者,获取第i-1个页面的页面信息以及第i个页面的页面信息,其中,第i个页面的页面信息包括第i个页面的结束KV项的编号;根据所述第i个页面的页面信息获得第i个页面的结束KV项的编号;根据所述第i-1个页面的页面信息获取第i-1个页面的结束KV项的编号,并根据第i-1个页面的结束KV项的编号获得所述第i个页面的开始KV项的编号;或者,获取第i个页面的页面信息,其中,第i个页面的页面信息包括第i个页面的开始和结束KV项的编号。

结合第一方面或第一方面的第一种至第三种可能的实施方式中的任意一种,本发明第一方面的第四种可能的实施方式中,所述有效性存储空间为位图,所述位图中的位的序号与KV项的编号对应,所述位图中的位的值用于表示对应的KV项的有效性。

结合第一方面或第一方面的第一种至第四种可能的实施方式中的任意一种,本发明第一方面的第五种可能的实施方式中,所述页面信息还包括第i个页面的起始KV项的偏移量,所述根据所述第i个页面的KV项的编号查找有效性存储空间以获取所述第i个页面中的KV项的有效性之后,还包括:根据第i个页面的起始KV项的偏移量查找到第i个页面的起始KV项的地址,并进而找到第i个页面中有效性为有效状态的KV项的地址;将第i个页面中有效性为有效状态的KV项拷贝到有效数据区域。

第二方面,提供了一种KV项有效性获取装置,包括:获取模块、计算模块以及查找模块,所述获取模块用于获取第i个页面的起始KV项的编号以及结束KV项的编号,其中,KV项包括索引、数据项以及元数据,所述页面为读取单位,所述KV项连续存储于部分、一个或多个块中;所述计算模块用于根据所述起始KV项的编号以及结束KV项的编号计算得到第i个页面的KV项的编号的范围;所述查找模块用于根据所述第i个页面的KV项的编号查找有效性存储空间以获取所述第i个页面中的KV项的有效性,其中,所述有效性存储空间包括多个与KV项对应的存储单元,所述存储单元用于存储对应KV项的有效性,所述有效性为有效状态或者无效状态。

结合第二方面,本发明第二方面的第一种可能的实施方式中,所述装置还包括存储模块,所述存储模块用于对KV项进行编号,并将KV项的编号存储到哈希表和/或所述KV项中。

结合第二方面的第一种可能的实施方式,本发明第二方面的第二种可能的实施方式中,所述装置还包括标记模块,所述获取模块用于在删除或者更改KV项时,从哈希表和/或需要删除或者更改的KV项中获取所述需要删除或者更改的KV项的编号;所述查找模块用于根据所述需要删除或者更改的KV项的编号在所述有效性存储单元中查找到对应的存储单元;所述标记模块用于将所述对应的存储单元标记为无效状态。

结合第二方面或第二方面的第一种或第二种可能的实施方式,本发明第二方面的第三种可能的实施方式中,所述获取模块具体用于获取第i个页面的页面信息以及第i+1个页面的页面信息,其中,第i个页面的页面信息包括第i个页面的起始KV项的编号;根据所述第i个页面的页面信息获得第i个页面的起始KV项的编号;根据所述第i+1个页面的页面信息获取第i+1个页面的起始KV项的编号,并根据第i+1个页面的起始KV项的编号获得所述第i个页面的结束KV项的编号;或者,获取第i-1个页面的页面信息以及第i个页面的页面信息,其中,第i个页面的页面信息包括第i个页面的结束KV项的编号;根据所述第i个页面的页面信息获得第i个页面的结束KV项的编号;根据所述第i-1个页面的页面信息获取第i-1个页面的结束KV项的编号,并根据第i-1个页面的结束KV项的编号获得所述第i个页面的开始KV项的编号;或者,获取第i个页面的页面信息,其中,第i个页面的页面信息包括第i个页面的开始和结束KV项的编号。

结合第二方面或第二方面的第一种至第三种可能的实施方式中的任意一种,本发明第二方面的第四种可能的实施方式中,所述有效性存储空间为位图,所述位图中的位的序号与KV项的编号对应,所述位图中的位的值用于表示对应的KV项的有效性。

结合第二方面或第二方面的第一种至第四种可能的实施方式中的任意一种,本发明第二方面的第五种可能的实施方式中,所述页面信息还包括第i个页面的起始KV项的偏移量,所述装置还包括查址模块以及拷贝模块,所述查址模块用于根据第i个页面的起始KV项的偏移量查找到第i个页面的起始KV项的地址,并进而找到第i个页面中有效性为有效状态的KV项的地址;所述拷贝模块用于将第i个页面中有效性为有效状态的KV项拷贝到有效数据区域。

通过上述方案,一方面,在第i个页面中的KV项连续存储,并且对第i个页面中的KV项进行了编号,另一方面,在有效性存储空间中的对应的存储单元存储了第i个页面的KV项的有效性。所以,能够通过获取第i个页面的起始KV项的编号以及结束KV项的编号计算得到第i个页面的KV项的编号,并根据第i个页面的KV项的编号查找对应的存储单元,从而获得第i个页面的KV项的有效性。

附图说明

图1是现有技术中通过位图与SSD中块的映射关系的示意图;

图2是本发明提供的一种KV项有效性获取方法的流程图;

图3a是本发明提供的一种KV项有效性获取方法中KV项的编号的存储方式一的示意图;

图3b是本发明提供的一种KV项有效性获取方法中KV项的编号的存储方式二的示意图;

图3c是本发明提供的一种KV项有效性获取方法中KV项的编号的存储方式三的示意图;

图4是本发明提供的一种KV项有效性获取方法中通过位图查找到KV项的有效性的示意图;

图5是本发明提供的一种KV项有效性获取装置的结构示意图。

具体实施方式

需要说明的是,在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”指两者中的至少一种,例如“A和/或B”包括单独A、单独B、A和B三种情况。如无特别声明,“A、B和/或C”包括单独A、单独B、单独C,以及以上A、B、C的任意组合。

参考图2,图2是本发明提供的一种KV项有效性获取方法的流程图。本实施方式的KV项有效性获取方法包括:

210:对KV项进行编号,并将KV项的编号存储到哈希表和/或KV项中。

请一并参阅图3a,存储空间可以分成多个块,每个块包含多个页面310。在一个页面310中,可以存储一个或者多个KV项320,或者可以在多个页面310中,存储一个KV项320,具体由KV项320的大小决定。KV项320在存储空间的部分、一个或多个块中连续不间断存储。其中,存储空间可以是SSD等等。可以理解的是,KV项320是存储在页面310中的,但是,为了便于表示,图中将KV项320和页面310分开进行表示。

在将KV项320存储到存储空间时,对KV项320按照一定的规则进行编号。其中,编号可以是数字编号、字母编号等等。例如,对KV项320按照1,2,3……的规律进行编号。KV项320的编号可以存储在KV项320自身中(如图3a所示),可以存储在哈希表340中(如图3b所示),也可以同时存储在哈希表340以及KV项320自身中(如图3c所示)。其中,哈希表340存储在SCM或者DRAM中,包括多个项341,每个项341与一个KV项320对应,KV项320的编号可以存储到哈希表340对应的项341中。此外,还将每个页面中的第一个完整的KV项的编号以及第一个完整的KV项的偏移地址存储到页面信息中。其中,页面信息存储在SCM。

SCM中还设置有有效性存储空间。在一具体的实施例中,有效性存储空间可以是位图330,位图330包括多个位331,位图330中的位331的序号与KV项320的编号对应,位图330中的位331的值用于表示对应的KV项320的有效性。KV项320的有效性包括有效状态或者无效状态,当位图330中的位331的值为“1”时,表示对应的KV项320的有效性为有效状态,当位图330中的位331的值为“0”时,表示对应的KV项320的有效性为无效状态。或者,当位图330中的位331的值为“0”时,表示对应的KV项320的有效性为有效状态,当位图330中的位331的值为“1”时,表示对应的KV项320的有效性为无效状态。在另一具体的实施例中,有效性存储空间可以是存储空间的一部分,包括多个字段,每个字段与一个KV项320对应,用于存储对应的KV项320的有效性。当字段的值为第一值时,表示对应的KV项320的有效性为无效状态;当字段的值为第二值时,表示对应的KV项320的有效性为有效状态。

220:判断是否删除或者更改KV项。

删除KV项为使被删除的KV项转化为无效状态,更改KV项为使原来的KV项处于无效状态,并将新的KV项写到新的位置。所以,当删除或者更改了KV项后,原来的KV项都会处于无效状态。判断是否删除或者更改KV项,如果删除或者更改了KV项,进入步骤230;如果没有删除或者更改KV项,进步步骤240。

230:对对应的存储单元标记。

在删除或者更改KV项时,原来的KV项都会处于无效状态,所以,需要对对应的存储单元进行标记,以将对应的存储单元的有效性从有效状态更改为无效状态。标记时,如果被删除或者被修改的KV项的编号存储在自身中,则可以直接从自身中读取编号,并根据KV项的编号与有效性存储单元的对应关系查找到对应的存储单元,并将对应的存储单元标记为无效状态。如果被删除或者被修改的KV项的编号存储在哈希表中,则可以根据被删除或者被修改的KV项与哈希表的项的对应关系,查找到对应的项,并从对应的项中读取被删除或者被修改的KV项的编号,根据KV项的编号与有效性存储单元的对应关系查找到对应的存储单元,并将对应的存储单元标记为无效状态。

240:获取第i个页面的起始KV项的编号以及结束KV项的编号。

第i个页面的起始KV项为第i个页面中的第一个完整的KV项。第i个页面的结束KV项为第i个页面中的最后一个KV项,最后一个KV项可以是完整的KV项,也可以是不完整的KV项(即最后一个KV项的一部分存储在下一个页面中)。

获取第i个页面的起始KV项的编号以及结束KV项的编号的方法为:

(1)在SCM中存储各个页面的页面信息,其中,第i个页面的页面信息包括第i个页面的起始KV项的编号。获取第i个页面的页面信息,并从第i个页面的页面信息中获取第i个页面的起始KV项的编号。然后,从第i+1个页面的页面信息中获取第i+1个页面的起始KV项的编号。第i+1个页面的起始KV项的编号的上一个编号即为第i个页面的结束KV项的编号。

(2)在SCM中存储各个页面的页面信息,其中,第i个页面的页面信息包括第i个页面的结束KV项的编号。获取第i个页面的页面信息,并从第i个页面的页面信息中获取第i个页面的结束KV项的编号。然后,从第i-1个页面的页面信息中获取第i-1个页面的结束KV项的编号。第i-1个页面的起始KV项的编号的下一个编号即为第i个页面的起始KV项的编号。

(3)在SCM中存储各个页面的页面信息,其中,第i个页面的页面信息包括第i个页面的起始KV项的编号以及第i个页面的结束KV项的编号。获取第i个页面的页面信息,并从第i个页面的页面信息中获取第i个页面的起始KV项的编号以及第i个页面的结束KV项的编号。

250:根据起始KV项的编号以及结束KV项的编号计算得到第i个页面的KV项的编号的范围。

在获得第i个页面的起始KV项的编号以及结束KV项的编号后,根据编号的规则就可以计算出第i个页面的KV项的编号。例如,以图4为例,第1个页面310的起始KV项320的编号为0,结束KV项320的编号为1,且编号的规律为1,2,3,……,所以,第1个页面310的KV项320的编号为0,1。第2个页面310的起始KV项320的编号为0,结束KV项320的编号为1,且编号的规律为1,2,3,……,所以,第2个页面310的KV项320的编号为2,3。

260:根据第i个页面的KV项的编号查找有效性存储空间以获取第i个页面中的KV项的有效性。

在获得第i个页面的KV项后,根据KV项和有效性存储空间的对应关系,查找到第i个页面中的KV项的有效性。继续以图4为例,第一个页面310的KV项320的编号分别为编号0和编号1,所以,第一个页面310的KV项320对应位图330的第一个位331,以及第二个位331。第一个位331的值为0(图中以白块表示),第二个位331的值为1(图中以黑块表示),所以,查询位图331后可以知道,编号为0的KV项320的有效性为无效状态,编号为1的KV项320的有效性为有效状态。

270:判断第i个页面是否具有有效KV项。

如果第i个页面不存在有效KV项,则指向下一个页面,并返回步骤240,如果第i个页面存在有效KV项,则进入步骤280。

280:将第i个页面中有效性为有效状态的KV项拷贝到有效数据区域。

在一具体的实施例中,页面信息还包括第i个页面的起始KV项的偏移量。所以,可以根据第i个页面的起始KV项的偏移量查找到第i个页面的起始KV项的地址,并进而找到第i个页面中有效性为有效状态的KV项的地址。然后,将第i个页面中有效性为有效状态的KV项拷贝到有效数据区域。其中,有效数据区域是存储空间中的一部分存储区域且能够用于从存储数据。

290:进行擦除操作。

重复执行步骤240至步骤280,直到需要进行垃圾回收的页面都处理完毕。然后,对需要进行垃圾回收的页面进行擦除操作,擦除完成后,这些页面又可以重新用于存储数据。

可以理解的是,如果只需要对KV项的有效性进行标记,可以只执行步骤210至步骤230。如果只需要根据标记的结果进行垃圾回收,则可以只执行步骤240至步骤290。

通过上述方案,一方面,在第i个页面中的KV项连续存储,并且对第i个页面中的KV项进行了编号,另一方面,在有效性存储空间中的对应的存储单元存储了第i个页面的KV项的有效性。所以,能够通过获取第i个页面的起始KV项的编号以及结束KV项的编号计算得到第i个页面的KV项的编号,并根据第i个页面的KV项的编号查找对应的存储单元,从而获得第i个页面的KV项的有效性。

参阅图5,图5是本发明提供的一种KV项有效性获取装置的结构示意图。本实施例的KV项有效性获取装置包括:获取模块510、计算模块520以及查找模块530。

所述获取模块510用于获取第i个页面的起始KV项的编号以及结束KV项的编号,其中,KV项包括索引、数据项以及元数据,所述页面为存储单位,所述KV项连续存储于部分、一个或多个块中;

所述计算模块520用于根据所述起始KV项的编号以及结束KV项的编号计算得到第i个页面的KV项的编号范围;

所述查找模块530用于根据所述第i个页面的KV项的编号查找有效性存储空间以获取所述第i个页面中的KV项的有效性,其中,所述有效性存储空间包括多个与KV项对应的存储单元,所述存储单元用于存储对应KV项的有效性,所述有效性为有效状态或者无效状态。

可选地,所述装置还包括存储模块540,所述存储模块540用于对KV项进行编号,并将KV项的编号存储到哈希表和/或所述KV项中。

可选地,所述装置还包括标记模块550,所述获取模块510用于在删除或者更改KV项时,从哈希表和/或需要删除或者更改的KV项中获取所述需要删除或者更改的KV项的编号;所述查找模块530用于根据所述需要删除或者更改的KV项的编号在所述有效性存储单元中查找到对应的存储单元;所述标记模块550用于将所述对应的存储单元标记为无效状态。

可选地,所述获取模块510具体用于获取第i个页面的页面信息以及第i+1个页面的页面信息,其中,第i个页面的页面信息包括第i个页面的起始KV项的编号;根据所述第i个页面的页面信息获得第i个页面的起始KV项的编号;根据所述第i+1个页面的页面信息获取第i+1个页面的起始KV项的编号,并根据第i+1个页面的起始KV项的编号获得所述第i个页面的结束KV项的编号;或者,获取第i-1个页面的页面信息以及第i个页面的页面信息,其中,第i个页面的页面信息包括第i个页面的结束KV项的编号;根据所述第i个页面的页面信息获得第i个页面的结束KV项的编号;根据所述第i-1个页面的页面信息获取第i-1个页面的结束KV项的编号,并根据第i-1个页面的结束KV项的编号获得所述第i个页面的开始KV项的编号;或者,获取第i个页面的页面信息,其中,第i个页面的页面信息包括第i个页面的开始和结束KV项的编号。

可选地,所述有效性存储空间为位图,所述位图中的位的序号与KV项的编号对应,所述位图中的位的值用于表示对应的KV项的有效性。

可选地,所述页面信息还包括第i个页面的起始KV项的偏移量,所述装置还包括查址模块560以及拷贝模块570,所述查址模块560用于根据第i个页面的起始KV项的偏移量查找到第i个页面的起始KV项的地址,并进而找到第i个页面中有效性为有效状态的KV项的地址;所述拷贝模块570用于将第i个页面中有效性为有效状态的KV项拷贝到有效数据区域。

本实施例的装置与图1所示的方法对应,具体请参阅图1以及相关描述,此处不再展开描述。

通过上述方案,一方面,在第i个页面中的KV项连续存储,并且对第i个页面中的KV项进行了编号,另一方面,在有效性存储空间中的对应的存储单元存储了第i个页面的KV项的有效性。所以,能够通过获取第i个页面的起始KV项的编号以及结束KV项的编号计算得到第i个页面的KV项的编号,并根据第i个页面的KV项的编号查找对应的存储单元,从而获得第i个页面的KV项的有效性。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1