基于键值数据库的数据处理方法与装置以及数据存储系统的制作方法

文档序号:6400189阅读:540来源:国知局
专利名称:基于键值数据库的数据处理方法与装置以及数据存储系统的制作方法
技术领域
本发明涉及一种基于键值数据库的数据处理方法与装置以及数据存储系统。
背景技术
键值数据库是一种常用的数据库,其中的数据条目以键名-键值(Key-Value)方式保存。在存储海量数据的情况下,通常采用图1所示的存储系统的形式,图1是根据现有技术中的存储系统的基本结构的示意图。如图1所示,存储系统10划分为多个存储单元
11、12......1N,每个存储单元中包含索引文件和数据文件。索引文件中保存多个数据条目的
元数据块,数据文件中保存多个数据条目的键值。随着数据条目的不断保存,数据文件的大小也在增加。为了避免单个数据文件过大,可以设定数据文件的大小,到达该大小时新建数据文件。参考图1,例如存储单元11中包含两个数据文件111、112。在对数据库进行随机读写时,对于需要读写的数据条目,首先找到包含键名的元数据块,再根据该元数据块中的内容访问数据条目。为此,在保存元数据块时,对键名进行数值计算例如取哈希值,得到一个正整数,然后按预设的方式取其中的两段数字来确定元数据块被保存到的存储单元和元数据块在索引文件中的位置。在这里,索引文件被预先划分为若干个位置。这样,例如某订单数据条目,以订单号作为其键名,订单号为H12345,对H12345进行哈希计算得到87276292,则将其保存到第92个存储单元的第762号位置上。这里预设的取两段数字的方式具体是取末两位作为存储单元号以及取末第三至第五位作为位置号。可以通过取模计算来得到。有两个数据条目的键名经过数值计算后发现它们所在的元数据块需要保存到同一个索引文件的同一个位置上,例如数值计算的结果分别是87276292和95176292,则在第92个存储单元的第762号位置上保存其中一个键名所在的元数据块,在索引文件的末尾建立一个新位置,将另一个键名所在的元数据块保存在该新位置上,并且在第92个存储单元的第762号位置上的元数据块中记录上述新位置的地址,即以“原位置指向新位置”的方式链式保存两个元数据块。在有N个数据条目的元数据块需要保存到同一个索引文件的同一个位置上的情况下,按上述链式保存的方式导致的“跳越式读取”的跳跃次数为N-1。目前通常的数据库中,数据条目一般都具有很大的数量,导致往往有多个数据条目的元数据块需要保存到同一个索引文件的同一个位置上,从而上述的跳跃次数巨大,存储装置的磁盘指针移动频繁,导致数据库的文件访问效率低下,并影响磁盘寿命。

发明内容
有鉴于此,本发明提供一种基于键值数据库的数据处理方法与装置以及数据存储系统,能够提高键值数据库的文件访问效率,并有助于延长磁盘寿命。为实现上述目的,根据本发明的一个方面,提供了一种基于键值数据库的数据处理方法。
本发明的基于键值数据库的数据处理方法包括:按照预先设置的槽与数据条目的键名之间的对应关系,在索引文件中查找对应于当前待存储的数据条目的键名的槽,将所述当前待存储的数据条目的元数据块向该槽中保存,在所述对应关系中,一个槽对应于多个数据条目的键名;一个槽对应的数据条目的数量预先设定,并且每个槽中包含记录区域,用来记录与本槽链接的扩展槽的地址;在所述该槽已满的情况下,将所述当前待存储的数据条目的元数据块保存在所述该槽的未满的扩展槽中。可选地,还包括:根据需要访问的数据条目的键名和所述对应关系确定槽,遍历该槽中的元数据块以确定包含有该键名的元数据块;在该槽中没有所述包含有该键名的元数据块的情况下,遍历该槽的扩展槽中的元数据块以确定包含有该键名的元数据块;根据所述包含有该键名的元数据块中的信息确定需要访问的数据条目的位置。可选地,所述对应关系包括:槽的编号以及该槽所在存储单元的编号与数据条目的键名经过数值计算得到的正整数中的预定位置的两段数字之间的对应关系。根据本发明的另一方面,提供了 一种基于键值数据库的数据处理装置。本发明的基于键值数据库的数据处理装置包括:查找模块,用于按照预先设置的槽与数据条目的键名之间的对应关系,在索引文件中查找对应于当前待存储的数据条目的键名的槽;其中一个槽对应的数据条目的数量预先设定,并且每个槽中包含记录区域,用来记录与本槽链接的扩展槽的地址;在所述对应关系中,一个槽对应于多个数据条目的键名;元数据块保存模块,用于将所述当前待存储的数据条目的元数据块向所述查找模块查找到的槽中保存,并且在该槽已满的情况下,将该元数据块保存在该槽的未满的扩展槽中。可选地,还包括遍历模块和访问模块,其中,所述遍历模块,用于:根据需要访问的数据条目的键名和所述对应关系确定槽,遍历该槽中的元数据块以确定包含有该键名的元数据块,在该槽中没有所述包含有该键名的元数据块的情况下,遍历该槽的扩展槽中的元数据块以确定包含有该键名的元数据块;所述访问模块,用于根据所述遍历模块确定出的元数据块中的信息确定需要访问的数据条目的位置。可选地,所述对应关系包括:槽的编号以及该槽所在存储单元的编号与数据条目的键名经过数值计算得到的正整数中的预定位置的两段数字之间的对应关系。根据本发明的又一方面,提供了 一种基于键值数据库的数据存储系统。在本发明的基于键值数据库的数据存储系统中,所述数据存储系统包含多个存储单元,各个所述存储单元包含索引文件和数据文件;各个所述索引文件中包含多个用于保存数据条目的元数据块的槽以及一个或多个链式链接的扩展槽,每个槽保存的元数据块由预先设置的槽与数据条目的键名之间的对应关系确定,并且每个槽保存的元数据块的数量预先设定,各个槽中包含记录区域,用来记录与本槽链接的扩展槽的地址,所述扩展槽用于在所述本槽已满的情况下代替该本槽保存元数据块。可选地,所述索引文件中包含记录区域,用来记录当前新增扩展槽时该扩展槽在索引文件中的偏移量。可选地,各个槽的槽头中记录与本槽链接的扩展槽的地址以及本槽保存的元数据块的数量。可选地,所述对应关系包括:槽的编号以及该槽所在存储单元的编号与数据条目的键名经过数值计算得到的正整数中的预定位置的两段数字之间的对应关系。
根据本发明的技术方案,在键值数据库的索引文件中建立槽,根据预设的对应关系,将多个元数据块保存到同一个槽中,这样在保存和查找元数据块时,在同一个槽中是顺序进行,只有查找和保存涉及一个以上的槽地才发生跳转,有助于减少磁盘指针的跳转次数,从而提高对于索引文件的访问效率并且延长磁盘的使用寿命。


附图用于更好地理解本发明,不构成对本发明的不当限定。其中:图1是根据现有技术中的存储系统的基本结构的示意图;图2是根据本发明实施例的槽以及扩展槽之间的关系的示意图;图3是根据本发明实施例的槽的结构的示意图;图4是根据本发明实施例的基于键值数据库的数据处理方法的一种流程的示意图;图5A是根据现有技术中的访问元数据块时磁盘指针跳转的示意图;图5B是根据本发明实施例的访问元数据块时磁盘指针跳转的示意图;图6是根据本发明实施例的访问元数据块的基本步骤的示意图;图7是根据本发明实施例的元数据块的一种结构的示意图;图8是根据本发明实施例的一个数据文件的结构的示意图;图9是根据本发明实施例的索引文件的结构的示意图;图10是根据本发明实施例的基于键值数据库的数据处理装置的基本结构的示意图。
具体实施例方式以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识至IJ,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。在本发明实施例中,采用类似于图1所示的存储系统的基本结构,但在索引文件中,采用槽来保存数据条目的元数据块。槽的大小固定,用来保存确定数量(例如1000个)的元数据块,可以看作是一群元数据块的集合。这样用槽来代替图1中的索引文件111内的单独的元数据块,在槽内按一定方式存储元数据块,当某个槽满了以后,在索引的末尾动态的开辟空间作为该槽的扩展槽,当扩展槽满了之后,同样再开辟空间作为该槽的扩展槽,并且使各个槽前后链式链接,即一个槽只与一个扩展槽链接,可以在槽头记录扩展槽的地址。参考图2和图3,图2是根据本发明实施例的槽以及扩展槽之间的关系的示意图,其中索引文件20中的槽21链接到扩展槽22,后者又链接到扩展槽23。图3是根据本发明实施例的槽的结构的示意图。各个槽的结构类似,例如槽21的槽头210中有槽21的扩展槽22的地址2101和元数据块数目2102,槽的主体是用来储存N个元数据块,即元数据块211,212......21N。在将一个新的元数据块写入索引文件时,可以采用图4所示的步骤。图4是根据本发明实施例的基于键值数据库的数据处理方法的一种流程的示意图。该流程主要是用于在数据库的索引文件中保存元数据块。步骤S41:按照预先设置的槽与数据条目的键名之间的对应关系,在索引文件中查找对应于当前待存储的数据条目的键名的槽。这里的对应关系可以灵活设定,可以是槽的编号以及该槽所在存储单元的编号与数据条目的键名经过数值计算得到的正整数中的预定位置的两段数字之间的对应关系。例如,采用哈希法作为数值计算的方法,对两个键名计算得到的哈希值分别是531082和671082,并且设定的对应关系是末两位对应于存储单元的编号,从末位起第三至四位是槽的编号,则包含上述两个键名的元数据块都要存放到第82号存储单元的第10号槽内。但是在存放时可能遇到第10号槽已满的情况,因此在步骤S42中要进行判断。步骤S42:判断查找到的槽是否已满。如果未满,进入步骤S43 ;否则进入步骤S44。以下将上述查找到的槽称作槽A。步骤S43:将当前待存储的数据条目的元数据块保存到槽A中。本步骤之后即结束流程。步骤S44:判断槽A是否链接了扩展槽。若是,进入步骤S45,否则进入步骤S46。步骤S45:判断从槽A起依次链接的位于末位的扩展槽X是否已满。若是,进入步骤S46,否则进入步骤S48。步骤S46:开辟一个扩展槽M,将其链接到槽X上。然后转入步骤S47。步骤S47:将当前待存储的数据条目的元数据块保存到扩展槽M中。本步骤之后即结束流程。步骤S48:将当前待存储的数据条目的元数据块保存到扩展槽X中。本步骤之后即结束流程。

从上述步骤中可以看出,因为总是等到当前已有的槽(包括槽A及其扩展槽)满之后再开辟扩展槽,所以在步骤S45中是访问位于末位的扩展槽X。应用图4所示的流程存储元数据块,有助于使访问元数据块时减小磁盘指针跳转的次数。以下结合图5A和图5B加以说明。图5A是根据现有技术中的访问元数据块时磁盘指针跳转的示意图;图5B是根据本发明实施例的访问元数据块时磁盘指针跳转的示意图。例如有16个数据条目的键名经过数值计算后发现它们所在的元数据块需要保存到同一个索引文件的同一个位置上,例如计算结果是87276292、95176292……等,则如图5A所示,如要访问第16个元数据块,则磁盘指针500需要从位置501起依次跳过位置502、503……直至位置516,共跳转15次;而如图5B所示,对于容量为储存1000个元数据块的槽,如上例计算结果是87276292、95176292……等的情形,则这些元数据块531、532……546它们都被先后储存到第92号槽550中,如果92号槽中还剩16个以上的空位置,则在该92号槽中能够直接访问到16个数据条目的键名所在的元数据块;即使92号槽中的空位置少于16个,磁盘指针500也只需跳转I次到92号槽链接的98号槽560中即可。访问元数据块的流程可参考图6,图6是根据本发明实施例的访问元数据块的基本步骤的示意图。步骤S61:根据需要访问的数据条目的键名确定槽。此处的确定槽即根据步骤S41中的对应关系来确定。以下将本步骤中确定出的槽称作槽E,上述键名为K。槽E即为保存了需要访问的数据条目的元数据块的槽。步骤S62:遍历槽E中的元数据块以确定包含有K的元数据块。本步骤之后根据遍历结果进行判断。即进入步骤S63。步骤S63:判断槽E中是否有包含K的元数据块。若是,进入步骤S64,否则进入步骤 S65。步骤S64:从槽E中读取包含K的元数据块。步骤S65:遍历槽E的扩展槽直到找到包含有K的元数据块。在本步骤中,依次遍历可能不止一个扩展槽,但在各槽内的遍历是顺序进行,磁盘指针不发生跳转,因此效率较高。因为一个槽可以容纳很多元数据块,所以槽的数目一般不大,因此磁盘指针跳转次数总的来说比较少。本步骤之后进入步骤S66。步骤S66:从槽E的扩展槽中读取包含K的元数据块。元数据块内可以采用图7所示的结构。图7是根据本发明实施例的元数据块的一种结构的示意图。如图7所示,元数据块70中包含6个字节,其中字节71表示键名的长度;字节72表示键值所在的数据文件;字节73表示键值在其所在数据文件中的位置;字节74表示键值的数据量;字节75表示该键值是否被删除;字节76是键名。读取元数据块之后,可以根据其中的键名来访问数据文件中的键值。数据文件的一种可选结构如图8所示,图8是根据本发明实施例的一个数据文件的结构的示意图。在图8中,数据文件80中包含数据块81、82、83和84,每个数据块是一个数据条目的键值。每次保存数据块时,直接将数据块追加保存在数据文件末尾。这样数据文件的大小就会不断增加,当增加到一个预设值时,新建一个数据文件,然后向该新建的数据文件中保存数据块。这样,一个存储单元中可能有多个数据文件,各个数据文件具有编号,有关数据文件的一些信息记录在索引文件中。索引文件的一种可选结构如图9所示,图9是根据本发明实施例的索引文件的结构的示意图。图9中示出了索引文件90中包含的索引头91、第O槽92、第I槽93......第N槽
94,以及与第O槽92链接的第O扩展槽95、与第O扩展槽链接的第I扩展槽96、与第I槽92链接的第2扩展槽97……第N扩展槽98。图9中的链接关系仅为示例。索引头中包含3个字段,第1个字段表示编号最大的数据文件的编号;第2个字段表示编号最大的数据文件末尾的位置,从而使新的数据块追加到该位置;第3个字段表示当前新增扩展槽时该扩展槽在索引文件中的偏移量,即接下来要新增的扩展槽在索引文件中的位置,因为扩展槽也是不断地追加在索引文件的当前末尾。经过测试,采用本发明实施例的技术方案得到的相关数据如表I所示。从表I可以看出,该技术方案在读写 小数据时的性能尤为突出。表权利要求
1.一种基于键值数据库的数据处理方法,其特征在于,包括: 按照预先设置的槽与数据条目的键名之间的对应关系,在索引文件中查找对应于当前待存储的数据条目的键名的槽,将所述当前待存储的数据条目的元数据块向该槽中保存,在所述对应关系中,一个槽对应于多个数据条目的键名; 一个槽对应的数据条目的数量预先设定,并且每个槽中包含记录区域,用来记录与本槽链接的扩展槽的地址;在所述该槽已满的情况下,将所述当前待存储的数据条目的元数据块保存在所述该槽的未满的扩展槽中。
2.根据权利要求1所述的方法,其特征在于,还包括: 根据需要访问的数据条目的键名和所述对应关系确定槽,遍历该槽中的元数据块以确定包含有该键名的元数据块; 在该槽中没有所述包含有该键名的元数据块的情况下,遍历该槽的扩展槽中的元数据块以确定包含有该键名的元数据块; 根据所述包含有该键名的元数据块中的信息确定需要访问的数据条目的位置。
3.根据权利要求1或2所述的方法,其特征在于,所述对应关系包括:槽的编号以及该槽所在存储单元的编号与数据条目的键名经过数值计算得到的正整数中的预定位置的两段数字之间的对应关系。
4.一种基于键值数据库的数据处理装置,其特征在于,包括: 查找模块,用于按照预先设置的槽与数据条目的键名之间的对应关系,在索引文件中查找对应于当前待存储的数据条目的键名的槽;其中一个槽对应的数据条目的数量预先设定,并且每个槽中包含记录区域,用来记录与本槽链接的扩展槽的地址;在所述对应关系中,一个槽对应于多个数据条目的键名; 元数据块保存模块,用于将所述当前待存储的数据条目的元数据块向所述查找模块查找到的槽中保存,并且在该槽已满的情况下,将该元数据块保存在该槽的未满的扩展槽中。
5.根据权利要求4所述的装置,其特征在于,还包括遍历模块和访问模块,其中, 所述遍历模块,用于: 根据需要访问的数据条目的键名和所述对应关系确定槽,遍历该槽中的元数据块以确定包含有该键名的元数据块, 在该槽中没有所述包含有该键名的元数据块的情况下,遍历该槽的扩展槽中的元数据块以确定包含有该键名的元数据块; 所述访问模块,用于根据所述遍历模块确定出的元数据块中的信息确定需要访问的数据条目的位置。
6.根据权利要求4或5所述的装置,其特征在于,所述对应关系包括:槽的编号以及该槽所在存储单元的编号与数据条目的键名经过数值计算得到的正整数中的预定位置的两段数字之间的对应关系。
7.一种基于键值数据库的数据存储系统,其特征在于,所述数据存储系统包含多个存储单元,各个所述存储单元包含索引文件和数据文件;各个所述索引文件中包含 多个用于保存数据条目的元数据块的槽以及一个或多个链式链接的扩展槽,每个槽保存的元数据块由预先设置的槽与数据条目的键名之间的对应关系确定,并且每个槽保存的元数据块的数量预先设定,各个槽中包含记录区域,用来记录与本槽链接的扩展槽的地址,所述扩展槽用于在所述本槽已满的情况下代替该本槽保存元数据块。
8.根据权利要求7所述的数据存储系统,其特征在于,所述索引文件中包含记录区域,用来记录当前新增扩展槽时该扩展槽在索引文件中的偏移量。
9.根据权利要求7所述的数据存储系统,其特征在于,各个槽的槽头中记录与本槽链接的扩展槽的地址以及本槽保存的元数据块的数量。
10.根据权利要求7,8或9所述的数据存储系统,其特征在于,所述对应关系包括:槽的编号以及该槽所在存储单元的编号与数据条目的键名经过数值计算得到的正整数中的预定位置的两段数字 之间的对应关系。
全文摘要
本发明提供一种基于键值数据库的数据处理方法与装置以及数据存储系统,能够提高键值数据库的文件访问效率,并有助于延长磁盘寿命。该方法包括按照预先设置的槽与数据条目的键名之间的对应关系,在索引文件中查找对应于当前待存储的数据条目的键名的槽,将所述当前待存储的数据条目的元数据块向该槽中保存,在所述对应关系中,一个槽对应于多个数据条目的键名;一个槽对应的数据条目的数量预先设定,并且每个槽中包含记录区域,用来记录与本槽链接的扩展槽的地址;在所述该槽已满的情况下,将所述当前待存储的数据条目的元数据块保存在所述该槽的未满的扩展槽中。
文档编号G06F17/30GK103186668SQ20131007654
公开日2013年7月3日 申请日期2013年3月11日 优先权日2013年3月11日
发明者唐平, 崔大莲, 樊奕峰 申请人:北京京东世纪贸易有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1