一种小文件存储方法、小文件读取方法及系统与流程

文档序号:12034804阅读:337来源:国知局
一种小文件存储方法、小文件读取方法及系统与流程

本发明涉及数据存储技术领域,特别是涉及一种小文件存储方法、小文件读取方法及系统。



背景技术:

互联网的高速发展产生了海量的图片、文档等文件,这些文件的特点是尺寸较小(一般在100kb以下),数量巨大(数以亿计),传统的posix接口文件系统已经难以满足需求,这就是业界著名的海量小文件问题。对于这个问题,业界的通用做法是合并存储,即将小文件合并存储到一个传统的posix文件,例如facebook的haystack,linkedin的ambry和淘宝的tfs,这些系统的合并存储方式都是类似的,就是服务器端只保存部分元数据,剩余元数据编码成文件id交给客户端保存,同时给大文件里的小文件创建索引,以达到提高读取性能的目的。服务器端保存的元数据大小、类型都是固定地跟原始数据存放在大文件上。

上述存储方式有这些缺陷:(1)不支持自定义元数据,如果要支持新类型的元数据,就必须更新小文件的组织方式或者更改文件id;(2)修改已有元数据时,新的值大小有严格限制,否则会覆盖其他有效数据;(3)有些操作只需要读取元数据,仍然需要在大文件中定位到小文件的偏移量才能开始读取,理想的情况是能在内存缓存这些元数据,在现有架构下,如果要缓存这些元数据,则需要从头扫描整个大文件,效率较低。而导致这些的主要原因是,小文件以合并存储的方式存放到磁盘上,小文件之间需要严格的边界来区分,一旦写入便不能再修改边界,因此小文件在大文件中的格式有严格的限制,而无法任意修改、添加和删除元数据。



技术实现要素:

本发明的目的在于提出一种小文件存储方法、小文件读取方法及系统,以解决现有技术中由于小文件以合并存储的方式存放到磁盘上,小文件之间需要严格的边界来区分,一旦写入便不能在修改边界,因此小文件在大文件中的格式有严格的限制,而无法任意修改、添加和删除元数据的问题。

为达到上述目的,本发明提供了以下技术方案:

一种小文件存储方法,包括:

在大文件的逻辑存储单元中预设一个元数据库;

将待存储小文件的数据内容信息存储在所述大文件中,所述小文件的数据内容信息依次添加至所述大文件的末尾;

将所述待存储小文件的元数据存储在所述元数据库中。

其中,所述元数据包括:所述小文件的文件名、所述小文件的大小、所述小文件的类型、所述小文件的校验值、所述小文件的时间戳、所述小文件在所述大文件中的偏移量以及自定义元数据。

其中,所述元数据库为键值数据库rocksdb。

优选的,还包括:

将所述待存储小文件的部分元数据冗余存储在所述大文件中,所述待存储小文件的部分元数据与所述待存储小文件的数据内容信息冗余存储在一个大文件中,所述待存储小文件的部分元数据包括:所述小文件在所述大文件中的偏移量、所述小文件的文件名及长度、所述小文件的元数据所占空间大小、所述小文件的校验值以及所述小文件的数据内容信息的起始位置。

一种小文件存储系统,包括:

预设单元,用于在大文件的逻辑存储单元中预设一个元数据库;

第一存储单元,用于将待存储小文件的数据内容信息存储在所述大文件中,所述待存储小文件的数据内容信息依次添加至所述大文件的末尾;

第二存储单元,用于将所述待存储小文件的元数据存储在所述元数据库中。

其中,所述元数据包括:所述小文件的文件名、所述小文件的大小、所述小文件的类型、所述小文件的校验值、所述小文件的时间戳、所述大文件的路径、所述小文件在所述大文件中的偏移量以及自定义元数据。

其中,所述元数据库为键值数据库rocksdb。

优选的,所述第一存储单元,还用于将所述待存储小文件的部分元数据冗余存储在所述大文件中,所述待存储小文件的部分元数据与所述待存储小文件的数据内容信息冗余存储在一个大文件中,所述待存储小文件的部分元数据包括:所述小文件在所述大文件中的偏移量、所述小文件的文件名及长度、所述小文件的元数据所占空间大小、所述小文件的校验值以及所述小文件的数据内容信息的起始位置。

一种小文件读取方法,包括:

获取所述小文件的文件名;

根据所述小文件的文件名在存储所述小文件的元数据的元数据库中查找所述小文件的元数据信息,所述元数据信息包括:所述小文件的大小、所述小文件所在大文件中的路径以及所述小文件在所述大文件中的偏移量;

根据所述小文件的元数据信息在存储所述小文件的数据内容信息的所述大文件中读取所述小文件的数据内容信息;

将所述小文件的元数据信息和所述小文件的数据内容信息返回给用户。

一种小文件读取系统,包括:

获取单元,用于获取所述小文件的文件名;

查找单元,用于根据所述小文件的文件名在存储所述小文件的元数据的元数据库中查找所述小文件的元数据信息,所述元数据信息包括:所述小文件的大小、所述小文件所在大文件中的路径以及所述小文件在所述大文件中的偏移量;

读取单元,用于根据所述小文件的元数据信息在存储所述小文件的数据内容信息的所述大文件中读取所述小文件的数据内容信息;

反馈单元,用于将所述小文件的元数据信息和所述小文件的数据内容信息返回给用户。

经由上述的技术方案可知,与现有技术相比,本发明公开了一种小文件存储方法、小文件读取方法及系统,所述小文件存储方法包括:在大文件的逻辑存储单元中预设一个元数据库;将待存储小文件的数据内容信息存储在大文件中,所述待存储小文件的数据内容信息添加至大文件的末尾;将待存储小文件的元数据存储在元数据库中,元数据包括:小文件的名称、大小、类型、校验值、时间戳、小文件在大文件中的偏移量以及自定义元数据。本发明通过在大文件的逻辑存储单元中增加一个元数据库,将待存储小文件的数据内容信息和待存储小文件的元数据进行分开存储,实现了单独可以对元数据的修改、添加和删除;另外,在将元数据加载到内存进行缓存时,不需要再扫描整个大文件。

附图说明

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

图1为本发明实施例提供的一种小文件存储方法流程示意图;

图2为本发明实施例提供的多个大文件构成的文件系统示意图;

图3为本发明实施例提供的存储在元数据库中的小文件的元数据列表;

图4为本发明实施例提供的存储在大文件中的小文件的部分元数据列表;

图5为本发明实施例提供的一种小文件存储系统结构示意图;

图6为本发明实施例提供的一种小文件读取方法流程示意图;

图7为本发明实施例提供的一种小文件读取系统结构示意图。

具体实施方式

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

对于海量小文件的合并存储,包括小文件的写入和小文件的读取。以下分别从小文件的写入和小文件的读取说明海量小文件的存储方式。

请参阅附图1,图1为本发明实施例提供的一种海量小文件合并存储方法流程示意图。如图1所示,本发明公开了一种海量小文件合并存储方法,该方法具体包括如下步骤:

s101、在大文件的逻辑存储单元中预设一个元数据库;

请参阅附图2,图2为本发明实施例提供的多个大文件构成的文件系统示意图。如图2所示,需要在每个包含posix大文件的逻辑存储单元中预设一个元数据库,即该元数据库为键值数据库rocksdb。

本发明的实现不受限于任何编程语言和平台,实践中可以在linux平台上采用go语言作为实现语言。

s102、将待存储小文件的数据内容信息存储在大文件中,待存储小文件的数据内容信息依次添加至大文件的末尾;

s103、将待存储小文件的元数据存储在元数据库中。

具体的,如图3所示,元数据包括:小文件的文件名、小文件的大小、小文件的类型、小文件的校验值、小文件的时间戳、小文件在大文件中的偏移量以及自定义元数据。

其中,元数据库为键值数据库rocksdb。

同时,还可以将待存储小文件的部分元数据冗余存储在大文件中,具体的,如图4所示,将待存储小文件的部分元数据与待存储小文件的数据内容信息冗余存储在一个大文件中,待存储小文件的部分元数据包括:小文件在大文件中的偏移量、小文件的文件名及长度、小文件的元数据所占空间大小、小文件的校验值以及小文件的数据内容信息的起始位置。

本发明公开了一种小文件存储方法,所述方法包括:在大文件的逻辑存储单元中预设一个元数据库;将待存储小文件的数据内容信息存储在大文件中,所述待存储小文件的数据内容信息添加至大文件的末尾;将待存储小文件的元数据存储在元数据库中,元数据包括:小文件的名称、大小、类型、校验值、时间戳、小文件在大文件中的偏移量以及自定义元数据。本发明通过在大文件的逻辑存储单元中增加一个元数据库,将待存储小文件的数据内容信息和待存储小文件的元数据进行分开存储,实现了单独可以对元数据的修改、添加和删除;另外,在将元数据加载到内存进行缓存时,不需要再扫描整个大文件。

本发明在上述公开的方法的基础上,还公开了对应的系统。

下面对本发明实施例提供的小文件存储系统进行介绍,需要说明的是,有关该小文件存储系统的说明可参照上文提供的小文件存储方法,以下并不做赘述。

请参阅附图5,图5为本发明实施例提供的一种小文件存储系统结构示意图。如图5所示,本发明公开了一种小文件存储系统,该系统具体结构包括如下:

预设单元501,用于在大文件的逻辑存储单元中预设一个元数据库;

第一存储单元502,用于将待存储小文件的数据内容信息存储在大文件中,待存储小文件的数据内容信息依次添加至大文件的末尾;

第二存储单元503,用于将待存储小文件的元数据存储在元数据库中。

其中,元数据包括:小文件的文件名、小文件的大小、小文件的类型、小文件的校验值、小文件的时间戳、大文件的路径、小文件在大文件中的偏移量以及自定义元数据。

同时,第一存储单元502还可以将待存储小文件的部分元数据冗余存储在大文件中,待存储小文件的部分元数据与待存储小文件的数据内容信息存储在一个大文件中,待存储小文件的部分元数据包括:小文件在大文件中的偏移量、小文件的文件名及长度、小文件的元数据所占空间大小、小文件的校验值以及小文件的数据内容信息的起始位置。

本发明公开了一种小文件存储系统,该系统通过在大文件的逻辑存储单元中增加一个元数据库,将待存储小文件的数据内容信息和待存储小文件的元数据进行分开存储,实现了单独可以对元数据的修改、添加和删除;另外,在将元数据加载到内存进行缓存时,不需要再扫描整个大文件。

本实施例提供了一种小文件存储方法及系统,主要是将写入的小文件会被追加到大文件末尾,同时记住小文件的大小以及在大文件中的起始位置,即偏移量。其次,会将小文件的元数据,例如写入的时间戳、文件类型等,加上前面的偏移量一起写入到元数据库中。

综上,本发明公开了一种小文件存储方法及系统,在大文件的逻辑存储单元中预设一个元数据库;将待存储小文件的数据内容信息存储在大文件中,所述待存储小文件的数据内容信息添加至大文件的末尾;将待存储小文件的元数据存储在元数据库中,元数据包括:小文件的名称、大小、类型、校验值、时间戳、小文件在大文件中的偏移量以及自定义元数据。本发明通过在大文件的逻辑存储单元中增加一个元数据库,将待存储小文件的数据内容信息和待存储小文件的元数据进行分开存储,实现了单独可以对元数据的修改、添加和删除;另外,在将元数据加载到内存进行缓存时,不需要再扫描整个大文件。

本发明在上述公开的一种小文件存储方法及系统的基础上,还公开了一种小文件读取方法及系统。

请参阅附图6,图6为本发明实施例提供的一种小文件读取方法流程示意图。如图6所示,本发明公开了一种小文件读取方法,该方法具体包括如下步骤:

s601、获取小文件的文件名;

s602、根据小文件的文件名在存储小文件的元数据的元数据库中查找小文件的元数据信息,元数据信息包括:小文件的大小、小文件所在大文件中的路径以及小文件在大文件中的偏移量;

s603、根据小文件的元数据信息在存储小文件的数据内容信息的大文件中读取小文件的数据内容信息;

s604、将小文件的元数据信息和小文件的数据内容信息返回给用户。

本实施例提供了一种小文件读取方法,主要根据小文件的名字到元数据库中找到小文件的元数据信息,包括小文件的大小、所在大文件的路径以及在大文件中的偏移量,然后根据这些信息就可以读出小文件的内容,最终将这部分数据内容信息和小文件的元数据信息一起返回给用户。

请参阅附图7,图7为本发明实施例提供的一种小文件读取系统结构示意图。如图7所示,本发明公开了一种小文件读取系统,该系统具体结构包括如下:

获取单元701,用于获取小文件的文件名;

查找单元702,用于根据小文件的文件名在存储小文件的元数据的元数据库中查找小文件的元数据信息,元数据信息包括:小文件的大小、小文件所在大文件中的路径以及小文件在大文件中的偏移量;

读取单元703,用于根据小文件的元数据信息在存储小文件的数据内容信息的大文件中读取小文件的数据内容信息;

反馈单元704,用于将小文件的元数据信息和小文件的数据内容信息返回给用户。

本实施例提供了一种小文件读取系统,主要根据小文件的名字到元数据库中找到小文件的元数据信息,包括小文件的大小、所在大文件的路径以及在大文件中的偏移量,然后根据这些信息就可以读出小文件的内容,最终将这部分数据内容信息和小文件的元数据信息一起返回给用户。

本发明所实现的功能需要大文件和元数据库配合使用。在本方案中,每个大文件都会分配一个元数据库。这个元数据库是一个键值数据库,简单来说就是根据名字就可以获取到存取在数据库中的内容。在文件系统中,一个文件其实包含了两部分的内容,一部分是内容数据,例如一张照片的内容。另外一种是元数据,描述了文件的一些其他信息。以照片文件为例,例如照片拍摄的时间、地点等。在本方案中,小文件的内容数据存放在大文件中,元数据存放在数据库中。也就是说,数据库只存放了小文件的元数据。总的来说,就是大文件用来存放内容数据,数据库用来存放小文件的元数据和索引信息。

合并存储的主要用途是解决海量小文件的存储需求,常见的小文件有图片、文本等,具体的,可用于图片和一些ugc小视频、字幕文件等的存储。

综上所述,本发明公开了一种小文件存储方法、小文件读取方法及系统,所述小文件存储方法包括:在大文件的逻辑存储单元中预设一个元数据库;将待存储小文件的数据内容信息存储在大文件中,所述待存储小文件的数据内容信息添加至大文件的末尾;将待存储小文件的元数据存储在元数据库中,元数据包括:小文件的名称、大小、类型、校验值、时间戳、小文件在大文件中的偏移量以及自定义元数据。本发明通过在大文件的逻辑存储单元中增加一个元数据库,将待存储小文件的数据内容信息和待存储小文件的元数据进行分开存储,实现了单独可以对元数据的修改、添加和删除;另外,在将元数据加载到内存进行缓存时,不需要再扫描整个大文件。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括上述要素的物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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