一种小文件存储方法、装置、设备及介质与流程

文档序号:20772245发布日期:2020-05-19 20:24阅读:210来源:国知局
一种小文件存储方法、装置、设备及介质与流程

本申请涉及存储技术领域,特别涉及一种小文件存储方法、装置、设备及介质。



背景技术:

机械硬盘在存储系统中大量采用,而机械硬盘在读写过程中会有寻道时间,因此,对于一些小文件存储需求较多的用户场景,小文件的读写效率很低,速度仅为几mb/s,成为小文件存储效率的瓶颈。所以,针对小文件的应用场景,业界提出了小文件聚合方案,把小文件先放入内存或ssd(solidstatedisk,固态硬盘)硬盘等高速介质中,然后把小文件聚合成一个大文件,然后下刷到机械硬盘中,这样会减少机械硬盘对小文件的io瓶颈,大大增加系统对小文件的处理速度。

目前,在分布式对象存储中,通常的文件读取过程为将读取请求中的桶名和文件名组成一个对象名名称,发给底层rados存储集群,获取数据。因此,在把小文件聚合成一个大文件的场景下,通常需要中间添加一个大文件的查找过程,通过桶名和文件名以及元数据目录来查找聚合后的大文件,然后从查找到的大文件中读出小文件数据并返回。这样,会存在一个问题,对于分布式海量存储来说,一个桶内可能存在上千万个对象,甚至上亿个对象,这会导致大文件的查找过程十分漫长,成为小文件的读性能的瓶颈。



技术实现要素:

有鉴于此,本申请的目的在于提供一种小文件存储方法、装置、设备及介质,能够提升小文件的读取速率。其具体方案如下:

第一方面,本申请公开了一种小文件存储方法,包括:

利用小文件对应的桶名和文件名生成对应的文件标识;

利用所述文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表;其中,所述聚合信息包括所述文件标识以及对应的大文件的名称、所述小文件在对应的所述大文件中的偏移位置,并且,所述大文件为所述小文件对应的聚合文件;

当获取到用户终端发送的针对所述小文件的读请求,则查找对应的所述元数据表,以及从查找到的所述元数据表中查询对应的所述聚合信息,然后利用所述聚合信息读取对应的所述大文件中的所述小文件的数据。

可选的,所述利用所述文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表,包括:

针对任一所述小文件对应的聚合信息,查找是否存在数据表名与所述文件标识对应的所述元数据表;

若存在,则将当前小文件对应的聚合信息添加至对应的所述元数据表;

若不存在,则将当前小文件对应的聚合信息添加至空的所述元数据表,并利用所述文件标识生成该元数据表的数据表名。

可选的,所述将当前小文件对应的聚合信息添加至空的所述元数据表,包括:

将当前小文件对应的聚合信息添加至预先创建的空的所述元数据表;

或,实时创建空的所述元数据表,然后将当前小文件对应的聚合信息添加至该元数据表。

可选的,所述利用小文件对应的桶名和文件名生成对应的文件标识,包括:

将小文件对应的桶名和文件名生成对应的字符串;

对所述字符串进行哈希运算,得到对应的所述文件标识。

可选的,所述利用所述文件标识生成该元数据表的数据表名,包括:

读取所述文件标识的首字符;

利用所述首字符和对应的所述桶名生成所述数据表名。

可选的,所述当获取到用户终端发送的针对所述小文件的读请求,则查找对应的所述元数据表,以及从查找到的所述元数据表中查询对应的所述聚合信息,包括:

将所述读请求中的桶名和文件名生成对应的目标字符串;

对所述目标字符串进行哈希运算,得到对应的目标文件标识;

提取所述目标文件标识的目标首字符;

利用所述目标首字符和所述读请求中的桶名查找对应的所述元数据表;

从查找到的所述元数据表中查询对应的所述聚合信息。

可选的,所述利用小文件对应的桶名和文件名生成对应的文件标识之前,还包括:

获取文件聚合指令,以触发所述利用小文件对应的桶名和文件名生成对应的文件标识的步骤。

第二方面,本申请公开了一种小文件存储装置,包括:

文件标识生成模块,用于利用小文件对应的桶名和文件名生成对应的文件标识;

聚合信息添加模块,用于利用所述文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表;其中,所述聚合信息包括所述文件标识以及对应的大文件的名称、所述小文件在对应的所述大文件中的偏移位置,并且,所述大文件为所述小文件对应的聚合文件;

文件数据读取模块,用于当获取到用户终端发送的针对所述小文件的读请求,则查找对应的所述元数据表,以及从查找到的所述元数据表中查询对应的所述聚合信息,然后利用所述聚合信息读取对应的所述大文件中的所述小文件的数据。

第三方面,本申请公开了一种小文件存储设备,包括处理器和存储器;其中,

所述存储器,用于保存计算机程序;

所述处理器,用于执行所述计算机程序,以实现前述的小文件存储方法。

第四方面,本申请公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述小文件存储方法。

可见,本申请先利用小文件对应的桶名和文件名生成对应的文件标识,然后利用所述文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表;其中,所述聚合信息包括所述文件标识以及对应的大文件的名称、所述小文件在对应的所述大文件中的偏移位置,并且,所述大文件为所述小文件对应的聚合文件,当获取到用户终端发送的针对所述小文件的读请求,则查找对应的所述元数据表,以及从查找到的所述元数据表中查询对应的所述聚合信息,然后利用所述聚合信息读取对应的所述大文件中的所述小文件的数据。也即,本申请利用文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表,这样,能够提升从元数据表中查询对应的聚合信息的速率,从而提升小文件的读取速率。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请公开的一种小文件存储方法流程图;

图2为本申请公开的一种具体的小文件存储方法流程图;

图3为本申请公开的一种小文件存储装置结构示意图;

图4为本申请公开的一种小文件存储设备结构图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

目前,在分布式对象存储中,通常的文件读取过程为将读取请求中的桶名和文件名组成一个对象名名称,发给底层rados存储集群,获取数据。因此,在把小文件聚合成一个大文件的场景下,通常需要中间添加一个大文件的查找过程,通过桶名和文件名以及元数据目录来查找聚合后的大文件,然后从查找到的大文件中读出小文件数据并返回。这样,会存在一个问题,对于分布式海量存储来说,一个桶内可能存在上千万个对象,甚至上亿个对象,这会导致大文件的查找过程十分漫长,成为小文件的读性能的瓶颈。为此,本申请提供了一种小文件存储方案,能够提升小文件的读取速率。

参见图1所示,本申请实施例公开了一种小文件存储方法,包括:

步骤s11:利用小文件对应的桶名和文件名生成对应的文件标识。

在具体的实施方式中,本实施例可以获取文件聚合指令,以触发所述利用小文件对应的桶名和文件名生成对应的文件标识的步骤。也即,当获取到文件聚合指令,则利用小文件对应的桶名和文件名生成对应的文件标识。

当然,在一些实施例中,也可以预先利用小文件对应的桶名和文件名生成对应的文件标识,这样,当获取到文件聚合指令,则可以读取预先生成的文件标识,进行相应的后续步骤。

其中,小文件为文件大小小于第一预设阈值的文件。

步骤s12:利用所述文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表;其中,所述聚合信息包括所述文件标识以及对应的大文件的名称、所述小文件在对应的所述大文件中的偏移位置,并且,所述大文件为所述小文件对应的聚合文件。

在具体的实施方式中,本实施例可以针对任一所述小文件对应的聚合信息,查找是否存在数据表名与所述文件标识对应的所述元数据表;若存在,则将当前小文件对应的聚合信息添加至对应的所述元数据表;若不存在,则将当前小文件对应的聚合信息添加至空的所述元数据表,并利用所述文件标识生成该元数据表的数据表名。

并且,在一些实施例中,可以将当前小文件对应的聚合信息添加至预先创建的空的所述元数据表。在另一些实施例中,可以实时创建空的所述元数据表,然后将当前小文件对应的聚合信息添加至该元数据表。

也即,本实施例可以对全部小文件对应的聚合信息进行数据分片存储,利用小文件的文件标识将不同小文件对应的聚合信息存储在不同的元数据表中,这样每个元数据表的长度是相对较短的,以便聚合信息的快速查找。其中,聚合信息中的小文件在对应的大文件中的偏移位置,可以包括小文件在对应的文件中的起始位置和结束位置,并且,结束位置为根据起始位置和小文件的长度确定的。

其中,大文件为文件大小大于第二预设阈值的文件。

步骤s13:当获取到用户终端发送的针对所述小文件的读请求,则查找对应的所述元数据表,以及从查找到的所述元数据表中查询对应的所述聚合信息,然后利用所述聚合信息读取对应的所述大文件中的所述小文件的数据。

在具体的实施过程中,当获取到用户终端发送的针对所述小文件的读请求,则利用读请求中的桶名和文件名,生成对应的目标文件标识,由于元数据的数据表名为根据文件标识创建,所以可以先根据目标文件标识查找对应的元数据表,然后根据所述目标文件标识从查找到的所述元数据表中查询对应的所述聚合信息,然后利用所述聚合信息查找到相应的大文件的名称和小文件在对应的所述大文件中的偏移位置,然后利用查找到的大文件的名称从存储系统底层查找对应的大文件,根据偏移位置中包括的起始位置和结束位置读取查找到的大文件中的所述小文件的数据,将读取到的数据返回至对应的用户终端。可以理解的是,聚合信息中包括小文件的文件标识,因此可以根据文件标识查询到对应的聚合信息。并且,本实施例可以将文件标识作为聚合信息的索引值,以提升查询速度。

在一些实施例中,存储在元数据表中的聚合信息可以包括所述文件标识以及对应的大文件的名称、所述小文件在对应的所述大文件中的起始位置、小文件的长度,那么,在利用所述聚合信息读取对应的所述大文件中的所述小文件的数据时,可以利用查找到的起始位置和小文件的长度对大文件中的小文件的数据进行读取。

可见,本申请实施例先利用小文件对应的桶名和文件名生成对应的文件标识,然后利用所述文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表;其中,所述聚合信息包括所述文件标识以及对应的大文件的名称、所述小文件在对应的所述大文件中的偏移位置,并且,所述大文件为所述小文件对应的聚合文件,当获取到用户终端发送的针对所述小文件的读请求,则查找对应的所述元数据表,以及从查找到的所述元数据表中查询对应的所述聚合信息,然后利用所述聚合信息读取对应的所述大文件中的所述小文件的数据。也即,本申请利用文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表,这样,能够提升从元数据表中查询对应的聚合信息的速率,从而提升小文件的读取速率。

参见图2所示,本申请实施例公开了一种具体的小文件存储方法,包括:

步骤s21:将小文件对应的桶名和文件名生成对应的字符串。

步骤s22:对所述字符串进行哈希运算,得到对应的所述文件标识。

也即,本实施可以将小文件对应的桶名和文件名生成对应的hash散列,以hash散列作为对应的文件标识,这样得到固定长度的文件标识,以便利用文件标识进行信息查找。

步骤s23:利用所述文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表;其中,所述聚合信息包括所述文件标识以及对应的大文件的名称、所述小文件在对应的所述大文件中的偏移位置,并且,所述大文件为所述小文件对应的聚合文件。

在具体的实施方式中,本实施例可以针对任一所述小文件对应的聚合信息,查找是否存在数据表名与所述文件标识对应的所述元数据表;若存在,则将当前小文件对应的聚合信息添加至对应的所述元数据表;若不存在,则将当前小文件对应的聚合信息添加至空的所述元数据表,并利用所述文件标识生成该元数据表的数据表名,本实施例可以将文件标识的首字符和桶名生成相应的数据表名,比如,桶名+首字符,这样,针对任一所述小文件对应的聚合信息,可以利用其文件标识的首字符和桶名查找对应的元数据表,然后将聚合信息添加至相应的元数据表中,也即,本实施例中,文件标识首字符和桶名相同的小文件的聚合信息均添加至相应的数据表名为对应的桶名和首字符的元数据表。

步骤s24:当获取到用户终端发送的针对所述小文件的读请求,则查找对应的所述元数据表,以及从查找到的所述元数据表中查询对应的所述聚合信息,然后利用所述聚合信息读取对应的所述大文件中的所述小文件的数据。

在具体的实施过程中,当获取到用户终端发送的针对所述小文件的读请求,将读请求中的桶名和文件名生成对应的目标字符串,对所述目标字符串进行哈希运算,得到对应的目标文件标识,提取所述目标文件标识的目标首字符,利用所述目标首字符和所述读请求中的桶名查找对应的所述元数据表从查找到的所述元数据表中查询对应的所述聚合信息,然后利用所述聚合信息读取对应的所述大文件中的所述小文件的数据。

参见图3所示,本申请公开了一种小文件存储装置,包括:

文件标识生成模块11,用于利用小文件对应的桶名和文件名生成对应的文件标识。

聚合信息添加模块12,用于利用所述文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表;其中,所述聚合信息包括所述文件标识以及对应的大文件的名称、所述小文件在对应的所述大文件中的偏移位置,并且,所述大文件为所述小文件对应的聚合文件。

文件数据读取模块13,用于当获取到用户终端发送的针对所述小文件的读请求,则查找对应的所述元数据表,以及从查找到的所述元数据表中查询对应的所述聚合信息,然后利用所述聚合信息读取对应的所述大文件中的所述小文件的数据。

可见,本申请实施例先利用小文件对应的桶名和文件名生成对应的文件标识,然后利用所述文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表;其中,所述聚合信息包括所述文件标识以及对应的大文件的名称、所述小文件在对应的所述大文件中的偏移位置,并且,所述大文件为所述小文件对应的聚合文件,当获取到用户终端发送的针对所述小文件的读请求,则查找对应的所述元数据表,以及从查找到的所述元数据表中查询对应的所述聚合信息,然后利用所述聚合信息读取对应的所述大文件中的所述小文件的数据。也即,本申请利用文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表,这样,能够提升从元数据表中查询对应的聚合信息的速率,从而提升小文件的读取速率。

其中,聚合信息添加模块12,具体用于针对任一所述小文件对应的聚合信息,查找是否存在数据表名与所述文件标识对应的所述元数据表;若存在,则将当前小文件对应的聚合信息添加至对应的所述元数据表;若不存在,则将当前小文件对应的聚合信息添加至空的所述元数据表,并利用所述文件标识生成该元数据表的数据表名。

在一种具体的实施方式中,聚合信息添加模块12,用于将当前小文件对应的聚合信息添加至预先创建的空的所述元数据表。

在一种具体的实施方式中,聚合信息添加模块12,用于实时创建空的所述元数据表,然后将当前小文件对应的聚合信息添加至该元数据表。

所述,文件标识生成模块11,具体用于将小文件对应的桶名和文件名生成对应的字符串;对所述字符串进行哈希运算,得到对应的所述文件标识。相应的,所述聚合信息添加模块12,用于读取所述文件标识的首字符;利用所述首字符和对应的所述桶名生成所述数据表名。

相应的,所述文件数据读取模块13,具体用于将所述读请求中的桶名和文件名生成对应的目标字符串;对所述目标字符串进行哈希运算,得到对应的目标文件标识;提取所述目标文件标识的目标首字符;利用所述目标首字符和所述读请求中的桶名查找对应的所述元数据表;从查找到的所述元数据表中查询对应的所述聚合信息。

进一步的,小文件存储装置还包括聚合指令获取模块,用于获取文件聚合指令,以触发所述利用小文件对应的桶名和文件名生成对应的文件标识的步骤。

参见图4所示,本申请实施例公开了一种小文件存储设备,包括处理器21和存储器22;其中,所述存储器22,用于保存计算机程序;所述处理器21,用于执行所述计算机程序,以实现以下步骤:

利用小文件对应的桶名和文件名生成对应的文件标识;利用所述文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表;其中,所述聚合信息包括所述文件标识以及对应的大文件的名称、所述小文件在对应的所述大文件中的偏移位置,并且,所述大文件为所述小文件对应的聚合文件;当获取到用户终端发送的针对所述小文件的读请求,则查找对应的所述元数据表,以及从查找到的所述元数据表中查询对应的所述聚合信息,然后利用所述聚合信息读取对应的所述大文件中的所述小文件的数据。

可见,本申请实施例先利用小文件对应的桶名和文件名生成对应的文件标识,然后利用所述文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表;其中,所述聚合信息包括所述文件标识以及对应的大文件的名称、所述小文件在对应的所述大文件中的偏移位置,并且,所述大文件为所述小文件对应的聚合文件,当获取到用户终端发送的针对所述小文件的读请求,则查找对应的所述元数据表,以及从查找到的所述元数据表中查询对应的所述聚合信息,然后利用所述聚合信息读取对应的所述大文件中的所述小文件的数据。也即,本申请利用文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表,这样,能够提升从元数据表中查询对应的聚合信息的速率,从而提升小文件的读取速率。

本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:针对任一所述小文件对应的聚合信息,查找是否存在数据表名与所述文件标识对应的所述元数据表;若存在,则将当前小文件对应的聚合信息添加至对应的所述元数据表;若不存在,则将当前小文件对应的聚合信息添加至空的所述元数据表,并利用所述文件标识生成该元数据表的数据表名。

本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:将当前小文件对应的聚合信息添加至预先创建的空的所述元数据表;或,实时创建空的所述元数据表,然后将当前小文件对应的聚合信息添加至该元数据表。

本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:将小文件对应的桶名和文件名生成对应的字符串;对所述字符串进行哈希运算,得到对应的所述文件标识。

本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:读取所述文件标识的首字符;利用所述首字符和对应的所述桶名生成所述数据表名。

本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:将所述读请求中的桶名和文件名生成对应的目标字符串;对所述目标字符串进行哈希运算,得到对应的目标文件标识;提取所述目标文件标识的目标首字符;利用所述目标首字符和所述读请求中的桶名查找对应的所述元数据表;从查找到的所述元数据表中查询对应的所述聚合信息。

本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:获取文件聚合指令,以触发所述利用小文件对应的桶名和文件名生成对应的文件标识的步骤。

进一步的,本申请实施例还公开了一种计算机可读存储介质,用于保存计算机程序,其中,计算机程序被处理器执行时实现以下步骤:

利用小文件对应的桶名和文件名生成对应的文件标识;利用所述文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表;其中,所述聚合信息包括所述文件标识以及对应的大文件的名称、所述小文件在对应的所述大文件中的偏移位置,并且,所述大文件为所述小文件对应的聚合文件;当获取到用户终端发送的针对所述小文件的读请求,则查找对应的所述元数据表,以及从查找到的所述元数据表中查询对应的所述聚合信息,然后利用所述聚合信息读取对应的所述大文件中的所述小文件的数据。

可见,本申请实施例先利用小文件对应的桶名和文件名生成对应的文件标识,然后利用所述文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表;其中,所述聚合信息包括所述文件标识以及对应的大文件的名称、所述小文件在对应的所述大文件中的偏移位置,并且,所述大文件为所述小文件对应的聚合文件,当获取到用户终端发送的针对所述小文件的读请求,则查找对应的所述元数据表,以及从查找到的所述元数据表中查询对应的所述聚合信息,然后利用所述聚合信息读取对应的所述大文件中的所述小文件的数据。也即,本申请利用文件标识将不同的所述小文件对应的聚合信息添加至不同的元数据表,这样,能够提升从元数据表中查询对应的聚合信息的速率,从而提升小文件的读取速率。

本实施例中,计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:针对任一所述小文件对应的聚合信息,查找是否存在数据表名与所述文件标识对应的所述元数据表;若存在,则将当前小文件对应的聚合信息添加至对应的所述元数据表;若不存在,则将当前小文件对应的聚合信息添加至空的所述元数据表,并利用所述文件标识生成该元数据表的数据表名。

本实施例中,计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:将当前小文件对应的聚合信息添加至预先创建的空的所述元数据表;或,实时创建空的所述元数据表,然后将当前小文件对应的聚合信息添加至该元数据表。

本实施例中,计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:将小文件对应的桶名和文件名生成对应的字符串;对所述字符串进行哈希运算,得到对应的所述文件标识。

本实施例中,计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:读取所述文件标识的首字符;利用所述首字符和对应的所述桶名生成所述数据表名。

本实施例中,计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:将所述读请求中的桶名和文件名生成对应的目标字符串;对所述目标字符串进行哈希运算,得到对应的目标文件标识;提取所述目标文件标识的目标首字符;利用所述目标首字符和所述读请求中的桶名查找对应的所述元数据表;从查找到的所述元数据表中查询对应的所述聚合信息。

本实施例中,计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:获取文件聚合指令,以触发所述利用小文件对应的桶名和文件名生成对应的文件标识的步骤。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本申请所提供的一种小文件存储方法、装置、设备及介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

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