一种文件读取方法和系统、存储介质、计算机设备与流程

专利2022-06-29  64


本发明涉及存储技术,尤其涉及一种文件读取方法和系统、存储介质、计算机设备。



背景技术:

存储系统中索引的设计以减少内存成本和降低i/o开销为目的,但这两方面有矛盾的地方,要降低i/o开销就要使索引的尽量准确,而这样又必然会导致索引的容量增加。这种情形在存储系统中小文件的场景中尤为明显。

现有技术主流采用将小文件合并存储的方式,然后在内存中分别建立这些小文件的索引。

这样做的缺点是,小文件数目较多时,建立的索引所占用的容量会很大,尤其在当下短视频和图片服务发展迅猛的场景中,海量小文件存储建立的索引的容量会使得单机内存容量难以负担。

内存容量难以负担时,需要将索引分层,将全量索引写入到磁盘,只在内存中存储全量索引的索引。这样带来的问题是查找文件时必须要经过2次i/o,一次读取全量索引,一次读取文件。



技术实现要素:

本发明旨在解决上面描述的问题。

根据本发明的第一方面,提供了一种文件读取方法,包括:

根据待读取的第一文件信息,查找所述第一文件归属的第二文件,所述第一文件为第一类型,所述第二文件包含至少两个第一类型的文件,所述第二文件为第二类型的文件;

读取所述第二文件;

从所述第二文件中查找得到所述第一文件。

优选的,根据待读取的第一文件信息,查找所述第一文件归属的第二文件的步骤之前,还包括:

将多个第一类型的文件组成至少一个第二类型的文件写入存储。

优选的,所述第一类型为小文件类型,所述第二类型为大文件类型,将多个第一类型的文件组成至少一个第二类型的文件写入存储的步骤包括:

为第一类型的文件添加包含该文件元信息的头部;

将多个第一类型的文件按照预置的第二类型的文件容量进行组合,构成所述第二类型的文件;

将所述第二类型的文件写入存储,并为所述第二类型的文件建立索引。

优选的,将多个第一类型的文件按照预置的第二类型的文件容量进行组合,构成所述第二类型的文件的步骤包括:

对所述多个第一类型的文件进行排序;

依序截取多个第一类型的文件分组,每个文件分组的总数据量达到或接近达到预置的第二类型的文件容量;

以每个文件分组构成一个第二类型的文件,所述第二类型的文件的名称为对应的文件分组中第一个第一类型的文件的名称。

优选的,根据待读取的第一文件信息,查找所述第一文件归属的第二文件的步骤包括:

对比所述第一文件的元信息与各个第二类型的文件的索引,确定包含所述第一文件的第二类型的文件为所述第一文件归属的第二文件。

根据本发明的另一方面,还提供了一种文件读取系统,包括:

文件查找模块,用于根据待读取的第一文件信息,查找所述第一文件归属的第二文件,所述第一文件为第一类型,所述第二文件包含至少两个第一类型的文件,所述第二文件为第二类型的文件;

数据读取模块,用于读取所述第二文件;

数据查找模块,用于从所述第二文件中查找得到所述第一文件。

优选的,该系统还包括:

文件整合写入模块,用于将多个第一类型的文件组成至少一个第二类型的文件写入存储。

优选的,所述第一类型为小文件类型,所述第二类型为大文件类型,所述文件整合写入模块包括:

元信息添加单元,用于为第一类型的文件添加包含该文件元信息的头部;

文件构建单元,用于将多个第一类型的文件按照预置的第二类型的文件容量进行组合,构成所述第二类型的文件;

存储单元,用于将所述第二类型的文件写入存储,并为所述第二类型的文件建立索引。

优选的,所述文件查找模块具体用于对比所述第一文件的元信息与各个第二类型的文件的索引,确定包含所述第一文件的第二类型的文件为所述第一文件归属的第二文件。

根据本发明的另一方面,还提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述文件读取方法的步骤。

根据本发明的另一方面,还提供了一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现上述文件读取方法的步骤。

本发明提供了一种文件读取方法和系统、存储介质、计算机设备,根据待读取的第一文件信息,查找所述第一文件归属的第二文件,然后读取所述第二文件,再从第二文件中查找得到所述第一文件。提供了新的小文件存储架构,实现了高效高资源利用率的小文件存储管理,解决了读取小文件索引压力大及i/o开销高的问题。

参照附图来阅读对于示例性实施例的以下描述,本发明的其他特性特征和优点将变得清晰。

附图说明

并入到说明书中并且构成说明书的一部分的附图示出了本发明的实施例,并且与描述一起用于解释本发明的原理。在这些附图中,类似的附图标记用于表示类似的要素。下面描述中的附图是本发明的一些实施例,而不是全部实施例。对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,可以根据这些附图获得其他的附图。

图1示例性地示出了本发明的一实施例提供的一种文件读取方法的流程;

图2示例性地示出了图1中步骤101的具体流程;

图3示例性地示出了本发明的一实施例提供的又一种文件读取方法的流程;

图4示例性地示出了本发明的一实施例中的文件存储结构;

图5示例性地示出了本发明的一实施例提供的一种文件读取系统的结构;

图6示例性地示出了图5中文件整合写入模块503的结构。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

小文件数目较多时,建立的索引所占用的容量会很大,尤其在当下短视频和图片服务发展迅猛的场景中,海量小文件存储建立的索引的容量会使得单机内存容量难以负担。而对大量索引分层管理,刚会增加i/o次数,增加i/o开销。

为了解决上述问题,本发明的实施例提供了一种文件读取方法和系统、存储介质、计算机设备,可以平衡减少内存和降低i/o开销这两个部分,以谋求系统整体的最大优化。

本发明的一实施例提供了一种文件读取方法,使用该方法完成小文件读取的流程如图1所示,包括:

步骤101、将多个第一类型的文件组成至少一个第二类型的文件写入存储。

所述第一类型为小文件类型,所述第二类型为大文件类型。

本步骤具体如图2所示,包括:

步骤1011、为第一类型的文件添加包含该文件元信息的头部。

步骤1012、将多个第一类型的文件按照预置的第二类型的文件容量进行组合,构成所述第二类型的文件。

本步骤中,首先对所述多个第一类型的文件进行排序,排序的规则包括但不限于:文件名、元信息、编号。排序可为升序或降序。在完成排序后,即得到了第一类型的文件的一个序列。

然后,依序截取多个第一类型的文件分组,每个文件分组的总数据量达到或接近达到预置的第二类型的文件容量。即,假设前n个第一类型的文件大小刚好达到第二类型的文件容量,则这n个第一类型的文件就能够作为一个文件分组,构成一个第二类型的文件;如果前n个第一类型的文件大小不到第二类型的文件容量,但前n 1个第一类型的文件的大小超过了第二类型的文件容量,则仍取前n个第一类型的文件作为一个文件分组,未达到第二类型的文件容量的部分留空。

在完成分组后,以每个文件分组构成一个第二类型的文件,所述第二类型的文件的名称为对应的文件分组中第一个第一类型的文件的名称。由于存在排序规律,因此相邻的第二类型的文件的名称就表明了第二类型文件包含的第一类型的文件的名称区间,据此即可确定第一类型的文件归属的第二类型的文件。

步骤1013、将所述第二类型的文件写入存储,并为所述第二类型的文件建立索引。

本步骤中,将多个小文件组成一个大文件,只为大文件添加索引,减小了索引的数据量,以此来减小内存成本。

索引是按照大文件名排序过的,而大文件名等于它所包含的小文件的第一个小文件名。

步骤102、根据待读取的第一文件信息,查找所述第一文件归属的第二文件。

所述第一文件为第一类型,所述第二文件包含至少两个第一类型的文件,所述第二文件为第二类型的文件。例如,需要读取的第一文件为小文件,包含该第一文件的第二文件为大文件。

本步骤中,对比所述第一文件的元信息与各个第二类型的文件的索引,确定包含所述第一文件的第二类型的文件为所述第一文件归属的第二文件。所以假如索引是升序排序则能够找到一个大文件名,使得要查找的小文件名大于等于它,而大于该大文件名的其他大文件名都大于要查找的小文件名,这样的一个大文件是唯一的。这样的大文件就是包含要查找的小文件的大文件,将其加载到内存即可

步骤103、读取所述第二文件。

本步骤中,将第二文件通过一次i/o操作读取至内存。

步骤104、从所述第二文件中查找得到所述第一文件。

本步骤中,根据第一文件的元信息,从所述第二文件内查找对比各个第一类型的文件的头部,得到第一文件。

本发明的一实施例还提供了一种文件读取方法,使用该方法完成小文件读取的流程如图3所示,包括:

1、将小文件写成大文件,存储大文件并添加索引。

在小文件的场景中,一个文件的大小是远远小于1mb的(比如10kb)。为实现一条索引查询一段较大的数据,本步骤中,将多个小文件写成一个大文件。每一个小文件在合并成大文件之前,都生成一个存储本小文件元信息的头部,作为小文件的一部分写入大文件。例如,将100个这样的10kb的小文件写成一个1mb的大文件,然后对每一个这样的1mb的大文件建立索引,存储结构如图4所示。在小文件查找时,会先索引到一个1mb的范围,然后使用一次i/o读出1mb这样大的数据量。

小文件与大文件的数据量大小差异并不会对i/o操作耗时产生很大影响。

2、查找小文件。

例如,需要从1mb的大文件中,找到10kb的小文件。查找时,从1mb的大文件中先读出小文件的元信息,然后与要查找的信息比对,若符合则找到,不符则利用元信息指示的小文件size跳转到下一个小文件头,重复进行。

本发明的实施例还提供了一种文件读取系统,其结构如图5所示,包括:

文件查找模块501,用于根据待读取的第一文件信息,查找所述第一文件归属的第二文件,所述第一文件为第一类型,所述第二文件包含至少两个第一类型的文件,所述第二文件为第二类型的文件;

数据读取模块502,用于读取所述第二文件;

数据查找模块503,用于从所述第二文件中查找得到所述第一文件。

优选的,该系统还包括:

文件整合写入模块504,用于将多个第一类型的文件组成至少一个第二类型的文件写入存储。

优选的,所述第一类型为小文件类型,所述第二类型为大文件类型,所述文件整合写入模块504的结构如图6所示,包括:

元信息添加单元5041,用于为第一类型的文件添加包含该文件元信息的头部;

文件构建单元5042,用于将多个第一类型的文件按照预置的第二类型的文件容量进行组合,构成所述第二类型的文件;

存储单元5043,用于将所述第二类型的文件写入存储,并为所述第二类型的文件建立索引。

优选的,所述文件查找模块501具体用于对比所述第一文件的元信息与各个第二类型的文件的索引,确定包含所述第一文件的第二类型的文件为所述第一文件归属的第二文件。

本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明的实施例所述的文件读取方法的步骤。

本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现本发明的实施例所述的文件读取方法的步骤。

本发明的实施例提供了一种文件读取方法和系统、存储介质、计算机设备,根据待读取的第一文件信息,查找所述第一文件归属的第二文件,然后读取所述第二文件,再从第二文件中查找得到所述第一文件。提供了新的小文件存储架构,实现了高效高资源利用率的小文件存储管理,解决了读取小文件索引压力大及i/o开销高的问题。

小文件合并成大文件时,将小文件的元信息也作为大文件的一部分。建立索引时,只对大文件建立索引,查找小文件时只索引到一个大文件的范围。

现有技术在存储小文件的问题上,选择将减少内存成本和降低i/o开销这两个方面对立,择其一优化到最佳。本发明的实施例提供的技术方案则是将将减少内存成本和降低i/o开销这两个方面统一考虑。一方面减小索引的数据量,以此来减小内存成本,同时利用一次i/o操作读取尽量多的数据,以此来减小i/o开销,找到二者之间的一个平衡点,从而使整体得到最大的优化。相比现有技术,在存储小文件减少i/o次数的同时,将小文件的索引存储在磁盘,从而解决了小文件索引数据量大的问题。

上面描述的内容可以单独地或者以各种方式组合起来实施,而这些变型方式都在本发明的保护范围之内。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制。尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。


技术特征:

1.一种文件读取方法,其特征在于,包括:

根据待读取的第一文件信息,查找所述第一文件归属的第二文件,所述第一文件为第一类型,所述第二文件包含至少两个第一类型的文件,所述第二文件为第二类型的文件;

读取所述第二文件;

从所述第二文件中查找得到所述第一文件。

2.根据权利要求1所述的文件读取方法,其特征在于,根据待读取的第一文件信息,查找所述第一文件归属的第二文件的步骤之前,还包括:

将多个第一类型的文件组成至少一个第二类型的文件写入存储。

3.根据权利要求2所述的文件读取方法,其特征在于,所述第一类型为小文件类型,所述第二类型为大文件类型,将多个第一类型的文件组成至少一个第二类型的文件写入存储的步骤包括:

为第一类型的文件添加包含该文件元信息的头部;

将多个第一类型的文件按照预置的第二类型的文件容量进行组合,构成所述第二类型的文件;

将所述第二类型的文件写入存储,并为所述第二类型的文件建立索引。

4.根据权利要求3所述的文件读取方法,其特征在于,将多个第一类型的文件按照预置的第二类型的文件容量进行组合,构成所述第二类型的文件的步骤包括:

对所述多个第一类型的文件进行排序;

依序截取多个第一类型的文件分组,每个文件分组的总数据量达到或接近达到预置的第二类型的文件容量;

以每个文件分组构成一个第二类型的文件,所述第二类型的文件的名称为对应的文件分组中第一个第一类型的文件的名称。

5.根据权利要求3或4所述的文件读取方法,其特征在于,根据待读取的第一文件信息,查找所述第一文件归属的第二文件的步骤包括:

对比所述第一文件的元信息与各个第二类型的文件的索引,确定包含所述第一文件的第二类型的文件为所述第一文件归属的第二文件。

6.一种文件读取系统,其特征在于,包括:

文件查找模块,用于根据待读取的第一文件信息,查找所述第一文件归属的第二文件,所述第一文件为第一类型,所述第二文件包含至少两个第一类型的文件,所述第二文件为第二类型的文件;

数据读取模块,用于读取所述第二文件;

数据查找模块,用于从所述第二文件中查找得到所述第一文件。

7.根据权利要求6所述的文件读取系统,其特征在于,该系统还包括:

文件整合写入模块,用于将多个第一类型的文件组成至少一个第二类型的文件写入存储。

8.根据权利要求7所述的文件读取系统,其特征在于,所述第一类型为小文件类型,所述第二类型为大文件类型,所述文件整合写入模块包括:

元信息添加单元,用于为第一类型的文件添加包含该文件元信息的头部;

文件构建单元,用于将多个第一类型的文件按照预置的第二类型的文件容量进行组合,构成所述第二类型的文件;

存储单元,用于将所述第二类型的文件写入存储,并为所述第二类型的文件建立索引。

9.根据权利要求8所述的文件读取系统,其特征在于,所述文件查找模块具体用于对比所述第一文件的元信息与各个第二类型的文件的索引,确定包含所述第一文件的第二类型的文件为所述第一文件归属的第二文件。

10.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述程序被处理器执行时实现权利要求1至5任意一项所述方法的步骤。

11.一种计算机设备,其特征在于,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现权利要求1至5中任意一项所述方法的步骤。

技术总结
本发明提供了一种文件读取方法和系统。涉及存储技术,解决了读取小文件索引压力大及I/O开销高的问题。该方法包括:根据待读取的第一文件信息,查找所述第一文件归属的第二文件,所述第一文件为第一类型,所述第二文件包含至少两个第一类型的文件,所述第二文件为第二类型的文件;读取所述第二文件;从所述第二文件中查找得到所述第一文件。本发明提供的技术方案适用于海量小文件存储,实现了高效高资源利用率的小文件存储管理。

技术研发人员:李文博;吴义谱;张炎泼
受保护的技术使用者:北京白山耘科技有限公司
技术研发日:2018.11.30
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-26124.html

最新回复(0)