文件合并方法和装置制造方法及图纸

技术编号:18525944 阅读:18 留言:0更新日期:2018-07-25 12:45
本发明专利技术公开了一种文件合并方法和装置。所述方法包括:在第一文件之后追加写入追加数据块,其中写入第二文件的数据块中的值;在追加数据块之后追加写入新索引块,新索引块是基于第一文件的索引块和第二文件的索引块生成的,第一文件的索引块和第二文件的索引块中的全部键及其对应的值在第一文件的数据块和追加数据块中的逻辑地址均分别记录于新B+树中的叶子节点中;在新索引块之后追加写入新文件头,以记录合并后的新文件的元数据信息。由此,在将两个文件进行合并时,将其中一个文件的值直接追加写入另一个文件即可,提高写性能,并且合并后的索引块为新的B+树,可以方便地通过查找来读取合并后的大文件中的值,可以提高读性能。

【技术实现步骤摘要】
文件合并方法和装置
本专利技术涉及数据存储
,特别是涉及存储在外部存储器中的文件的合并方法和装置。
技术介绍
纵观当今数据库的存储引擎,其底层的数据结构要么是B树或其变种B+树,要么则是LSM树。前者具有较好的读友好性,而后者具有较好的写友好性。尽管这两样东西看似鱼和熊掌不可兼得,但在贪婪的互联网世界里,却渴求能有兼容读、写皆友好的数据存储方案的出现。虽然LevelDB中采用的数据结构似乎也结合了LSM和B树,但始终不够彻底,首先在严格意义上它并非一颗B树,而只是简单的多叉树;其二,其Key(键)和Value(值)存放在一起,不利于索引的优化,这种优化在做数据合并时尤显重要。具体来说,LevelDB中存储在磁盘中的文件分为多个层级,不同层级有很多文件(SSTable文件),为了降低冗余度,提高可读性,需要对SSTable文件进行合并,由于SSTable文件中的键和对应的值是存储在一起的,因此在合并LevelDB文件时,需要取出所有的键值对一一处理,以构建新的文件,合并过程较为复杂,在提高可读性的同时会降低写性能。由此,需要一种读、写皆友好的文件合并方案。
技术实现思路
本专利技术的主要目的在于提供一种数据读、写皆友好的文件合并方法和装置。根据本专利技术的一个方面,提供了一种文件合并方法,文件存储在外部存储器中,包括文件头、数据块以及索引块,文件头用于记录文件的元数据信息,数据块用于存放值,索引块用于以B+树的形式存放值对应的键,其中,所有键及其对应的值在数据块中的逻辑地址均分别记录于B+树中的叶子节点中,该方法包括:在第一文件之后追加写入追加数据块,其中写入第二文件的数据块中的值;在追加数据块之后追加写入新索引块,新索引块是基于第一文件的索引块和第二文件的索引块生成的,第一文件的索引块和第二文件的索引块中的全部有效键及其对应的值在第一文件的数据块和追加数据块中的逻辑地址均分别记录于新B+树中的叶子节点中;在新索引块之后追加写入新文件头,以记录合并后的新文件的元数据信息。本专利技术述及的文件的键和值分开存储,键以B+树的形式进行存储。由此在将两个文件进行合并时,可以保持一个文件不动,将另一个文件的值直接追加写入即可,提高了写性能。并且合并后的索引块为新的B+树,根据新的索引块可以方便地读取合并后的文件中的值,合并后的文件的读性能也不会受到影响。优选地,元数据信息可以包括以下一项或多项:索引块中键的数量;索引块中键的范围;B+树的高度;B+树中第一个叶子节点的逻辑地址;B+树中内部节点的个数。由此,在根据请求键读取对应的目标值时,可以根据文件的文件头中的元数据信息判断请求键是否在该文件的键的范围内,判定为是的情况下,再在该文件的索引块中查找,可以减少不必要的查找。优选地,构成B+树的所有节点在物理上连续存储。由此,可以利用磁盘的局部性预加载特点,在物理上连续存储B+树,使得在重建索引块的过程中通过简单的遍历连续的磁盘块就可以获取需要合并的文件的索引块。优选地,该文件合并方法还可以包括:根据新文件头更新第一文件的文件头,以用新文件头中的元数据信息替换第一文件的文件头中的元数据信息。由于追加写入是一种破坏性写入,由此本专利技术通过设置双文件头可以避免合并过程中异常情况发生对文件造成的破坏。优选地,文件包括位于文件头部的前文件头和位于文件尾部的后文件头,前文件头和后文件头的内容相同,根据新文件头更新第一文件的前文件头,作为新文件的前文件头,而以新文件头作为新文件的后文件头。由此,合并正常完成时,新文件的前文件头和后文件头都能得到正常更新,都可以用来查看新文件中的元数据信息。优选地,该文件合并方法还可以包括:在新文件头中写入新文件的元数据信息的步骤出错的情况下,根据第一文件的文件头将新文件还原为合并前的第一文件;以及/或者在更新第一文件的文件头的步骤出错的情况下,根据新文件头重新更新第一文件的文件头。由此,在写入新文件头的过程中出错时,由于第一文件的文件头尚未得到更新,因此可以根据第一文件的文件头将合并过程中的文件还原为合并前的第一文件,在更新第一文件的文件头的过程中出错时,则可以根据新文件头重新更新。优选地,该文件合并方法还可以包括括执行以下步骤以从目标文件中读取请求键所对应的目标值:获取目标文件的文件头和索引块;根据文件头判断请求键是否在文件头所指示的键的范围内;在判定请求键在范围内的情况下,基于索引块的B+树结构,在索引块中查找对应于请求键的叶子节点;根据所查找到的叶子节点所存储的键所对应的值在目标文件中的数据块中的逻辑地址读取目标值。根据本专利技术的另一个方面,还提供了一种文件合并装置,文件存储在外部存储器中,包括文件头、数据块以及索引块,文件头用于记录文件的元数据信息,数据块用于存放值,索引块用于以B+树的形式存放值对应的键,其中,所有键及其对应的值在数据块中的逻辑地址均分别记录于B+树中的叶子节点中,该装置包括:第一写入单元,用于在第一文件之后写入追加数据块,其中写入第二文件的数据块中的值;B树生成单元,用于基于第一文件的索引块和第二文件的索引块生成新B+树,第一文件的索引块和第二文件的索引块中的全部有效键及其对应的值在第一文件的数据块和追加数据块中的逻辑地址均分别记录于新B+树中的叶子节点中;第二写入单元,用于在追加数据块之后追加写入新索引块,其中写入新B+树;第三写入单元,用于在新索引块之后追加写入新文件头,以记录合并后的新文件的元数据信息。优选地,元数据信息可以包括以下一项或多项:索引块中键的数量;索引块中键的范围;B+树的高度;B+树中第一个叶子节点的逻辑地址;B+树中内部节点的个数。优选地,该文件合并装置还可以包括:更新单元,用于根据新文件头更新第一文件的文件头,以用新文件头中的元数据信息替换第一文件的文件头中的元数据信息。优选地,文件包括位于文件头部的前文件头和位于文件尾部的后文件头,前文件头和后文件头的内容相同,更新单元根据新文件头更新第一文件的前文件头,作为新文件的前文件头,而以新文件头作为新文件的后文件头。优选地,该文件合并装置还可以包括:第一还原单元,用于在新文件头中写入新文件的元数据信息的步骤出错的情况下,根据第一文件的文件头将新文件还原为合并前的第一文件;以及/或者第二还原单元,用于在更新第一文件的文件头的步骤出错的情况下,根据新文件头重新更新第一文件的文件头。优选地,该文件合并装置还可以包括读取单元,用于从目标文件中读取请求键所对应的目标值,其中,读取单元可以包括:获取模块,获取目标文件的文件头和索引块;判断模块,根据文件头判断请求键是否在文件头所指示的键的范围内;查找模块,在判定请求键在范围内的情况下,基于索引块的B+树结构,在索引块中查找对应于请求键的叶子节点;读值模块,根据所查找到的叶子节点所存储的键所对应的值在目标文件中的数据块中的逻辑地址读取目标值。本专利技术的文件合并方法和装置中述及的文件的键和值是分开存储的,其中键是以B+树的形式进行存储的,由此在将两个文件合并时,可以保持一个文件不动,将另一个文件的值直接追加写入前一个文件,提高了写性能,并且重新构造以B+树形式存储键的索引块,根据新的索引块可以方便地读取合并后的文件中的值,合并后的文件的读性能也不会受到影响。附图说明通过本文档来自技高网...

【技术保护点】
1.一种文件合并方法,所述文件存储在外部存储器中,包括文件头、数据块以及索引块,所述文件头用于记录文件的元数据信息,所述数据块用于存放值,所述索引块用于以B+树的形式存放所述值对应的键,其中,所有键及其对应的值在所述数据块中的逻辑地址均分别记录于所述B+树中的叶子节点中,该方法包括:在第一文件之后追加写入追加数据块,其中写入第二文件的数据块中的值;在所述追加数据块之后追加写入新索引块,所述新索引块是基于所述第一文件的索引块和所述第二文件的索引块生成的,所述第一文件的索引块和所述第二文件的索引块中的全部有效键及其对应的值在所述第一文件的数据块和所述追加数据块中的逻辑地址均分别记录于新B+树中的叶子节点中;在所述新索引块之后追加写入新文件头,以记录合并后的新文件的元数据信息。

【技术特征摘要】
1.一种文件合并方法,所述文件存储在外部存储器中,包括文件头、数据块以及索引块,所述文件头用于记录文件的元数据信息,所述数据块用于存放值,所述索引块用于以B+树的形式存放所述值对应的键,其中,所有键及其对应的值在所述数据块中的逻辑地址均分别记录于所述B+树中的叶子节点中,该方法包括:在第一文件之后追加写入追加数据块,其中写入第二文件的数据块中的值;在所述追加数据块之后追加写入新索引块,所述新索引块是基于所述第一文件的索引块和所述第二文件的索引块生成的,所述第一文件的索引块和所述第二文件的索引块中的全部有效键及其对应的值在所述第一文件的数据块和所述追加数据块中的逻辑地址均分别记录于新B+树中的叶子节点中;在所述新索引块之后追加写入新文件头,以记录合并后的新文件的元数据信息。2.根据权利要求1所述的文件合并方法,其中,所述元数据信息包括以下一项或多项:所述索引块中键的数量;所述索引块中键的范围;所述B+树的高度;所述B+树中第一个叶子节点的逻辑地址;所述B+树中内部节点的个数。3.根据权利要求1所述的文件合并方法,其中,构成所述B+树的所有节点在物理上连续存储。4.根据权利要求1所述的文件合并方法,还包括:根据所述新文件头更新所述第一文件的文件头,以用所述新文件头中的元数据信息替换所述第一文件的文件头中的元数据信息。5.根据权利要求4所述的文件合并方法,其中,所述文件包括位于文件头部的前文件头和位于文件尾部的后文件头,所述前文件头和所述后文件头的内容相同,根据所述新文件头更新所述第一文件的前文件头,作为新文件的前文件头,而以所述新文件头作为新文件的后文件头。6.根据权利要求4或5所述的文件合并方法,还包括:在所述新文件头中写入新文件的元数据信息的步骤出错的情况下,根据所述第一文件的文件头将新文件还原为合并前的所述第一文件;以及/或者在更新所述第一文件的文件头的步骤出错的情况下,根据所述新文件头重新更新所述第一文件的文件头。7.根据权利要求1-5中任何一项所述的文件合并方法,还包括执行以下步骤以从目标文件中读取请求键所对应的目标值:获取目标文件的文件头和索引块;根据所述文件头判断所述请求键是否在所述文件头所指示的键的范围内;在判定所述请求键在所述范围内的情况下,基于所述索引块的B+树结构,在所述索引块中查找对应于所述请求键的叶子节点;根据所查找到的叶子节点所存储的键所对应的值在所述目标文件中的数据块中的逻辑地址读取所述目标值。8.一种文件合并装置,所述文件存储在外部存储器中,包括文件头、数据块以...

【专利技术属性】
技术研发人员:郑主能
申请(专利权)人:广州市动景计算机科技有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1