文件存储方法和装置的制作方法

文档序号:6356460阅读:196来源:国知局
专利名称:文件存储方法和装置的制作方法
技术领域
本发明涉及存储技术领域,尤其涉及一种文件存储方法和装置。
背景技术
操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系 统。从系统角度来看,文件系统是对文件存储器空间(例如硬盘、磁盘或分区等)进行组织 和分配,负责文件的存储并对存入的文件进行保护和检索的系统。具体地说,文件系统负责 为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文 件等。一个磁盘或分区在能够作为文件系统使用之前,需要初始化,并将记录数据结构 写到磁盘上。这个过程称为建立文件系统。文件系统建立完成后,会将磁盘或分区的存储 空间以一定的大小划分为很多个文件系统块(即磁盘空间的分块)以用于存储文件。目前,文件系统在写入文件时,为每个文件都单独分配文件系统块,进行存储。如 图1所示,大文件(即大小较大的文件)分配较多的文件系统块进行存储,而小文件(即大 小较小的文件)则分配少量的文件系统块进行存储。在写入大量大小不同的文件时,分别 向各自分配的文件系统块位置写入。而且,为各个文件分配的文件系统块的位置是随机的, 因此,各个文件的写入位置也是没有规律的。在一些场景,如云存储系统中,文件系统需要存储海量的大小不同的文件,文件系 统在处理这些海量的大小不同的文件,尤其是海量的小文件的存储时,由于这些海量的大 小不同文件的写入位置是没有规律的,因此,文件系统在写入这些海量的大小不同文件时, 磁头会不断地从一个位置转移到另一个位置,磁头位置转移需要较长的时间,从而严重影 响了文件系统的写入速度,使得文件系统的写入性能较差。

发明内容
本发明实施例提供一种文件存储方法和装置,可至少解决现有技术的文件系统在 写入海量的大小不同的文件时,写入性能较差的问题。—方面,提供了一种文件存储方法,包括将多个文件中的每个文件拆分成一个或 多个大小不同的文件块对象;将这多个文件拆分得到的多个文件块对象写入对应的对象存 储大文件,其中,存储装置中预先创建有预定数量的对象存储大文件,这预定数量的对象存 储大文件在该存储装置中占用的存储空间是连续的。另一方面,提供了一种文件存储装置,包括存储模块,用于存储文件,存储模块中 预先创建有预定数量的对象存储大文件,这预定数量的对象存储大文件在存储模块中占用 的存储空间是连续的;拆分模块,用于将多个文件中的每个文件拆分成一个或多个大小不 同的文件块对象;写入模块,用于将这多个文件经拆分模块拆分得到的多个文件块对象写 入对应的对象存储大文件。本发明实施例采用拆分聚合的方式,首先将海量的大小不同的文件中的每个文件拆分成一个或多个文件块对象,然后将拆分得到的海量的文件块对象写入到预先创建在磁 盘等存储装置中的对应的对象存储大文件中,且存储装置中的对象存储大文件的数量是固 定的、存储空间是连续的,从而将海量的大小不同的文件聚合(合并)到这些固定数量的对 象存储大文件中。由于存储装置中的对象存储大文件的数量是固定的、存储空间是连续的, 从而使得海量的大小不同的文件最终可以按照相对顺序的方式写入到固定数量的对象存 储大文件的存储空间中,进而提高了存储海量的大小不同的文件时文件系统的写入性能。


为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中 所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是本发明一部分 实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些 附图获得其他的附图。图1是根据现有技术的文件的存储示意图;图2是根据本发明实施例一的文件存储方法的流程图;图3是根据本发明实施例二的文件存储方法的具体处理流程图;图4是根据本发明实施例三的文件块对象的写入过程的示意图;图5是根据本发明实施例一的文件存储装置的结构示意图;图6是根据本发明实施例二的文件存储装置的结构示意图;图7是根据本发明实施例三的文件存储装置的结构示意图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施方式, 对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式
仅仅用于解释本发 明,并不用于限定本发明。实施例一图2是根据本发明实施例一的文件存储方法的流程图,包括以下步骤步骤S202,将多个(海量的)文件(也可称为用户文件)中的每个文件拆分成一 个或多个(即至少一个)大小不同的文件块对象;例如,可以按照预先设置的大小级别,将需要存储的海量的文件中的每个文件拆 分成一个或多个文件块对象,拆分成的每个文件块对象的大小对应一个大小级别。显然,如 果一个文件的大小正好等于一个大小级别或者小于最小的大小级别时,此时无需拆分该文 件。步骤S204,将这多个文件拆分得到的多个文件块对象(即文件的分块)写入对应 的对象存储大文件,其中,存储装置中预先创建有预定数量的对象存储大文件,预定数量的 对象存储大文件在存储装置中占用的存储空间是连续的。例如,在文件系统建立完成之后,可以首先在硬盘、磁盘或分区等存储装置中创建 预定(或固定)数量个大文件(称为对象存储大文件),这些对象存储大文件占用的存储空 间是连续的,即,将存储装置的总存储空间划分为预定数量个连续的存储空间,每个对象存 储大文件占用其中的一个存储空间。然后,在文件系统写入文件时,文件系统会将按照步骤S202拆分得到的多个文件块对象(当文件为海量时,拆分得到的文件块对象也是海量的) 写入到对应的对象存储大文件中。上述步骤S202-步骤S204可以由文件系统执行,也可以仅由文件系统执行步骤 S204,而由其他装置或模块来执行步骤S202。本发明实施例采用拆分聚合的方式,首先将海量的大小不同的文件中的每个文件 拆分成一个或多个文件块对象,然后将拆分得到的海量的文件块对象写入到预先创建在磁 盘等存储装置中的对应的对象存储大文件中,且存储装置中的对象存储大文件的数量是固 定的、存储空间是连续的,从而将海量的大小不同的文件聚合(合并)到这些固定数量的对 象存储大文件中。由于存储装置中的对象存储大文件的数量是固定的、存储空间是连续的, 从而使得海量的大小不同的文件最终可以按照相对顺序的方式写入到固定数量的对象存 储大文件的存储空间中,进而提高了存储海量的大小不同的文件时文件系统的写入性能。实施例二如图3所示,根据本发明实施例二的文件存储方法的具体处理过程可以包括以下 步骤步骤S302,预先设置N个大小级别,N为正整数;例如,这N个大小级别按照从小到大的顺序分别为=S1KB, S2KB, ... , ScKB, P1MB, P2MB,…,PdMB, Q1GB, Q2GB,…,QeGB, A1TB, A2TB,…,AfTB, C+D+E+F = N。在实际应用中,可以通过两个分级参数设置N个大小级别,一个是分级范围,一个 是分级单位。可以根据实际需求调整这两个分级参数来设置不同的N个大小级别。例如首先,确定分级范围,可以是(0,1MB), [1MB,1GB)、[1GB,1TB],也可以更少 或更多。然后,确定每个分级范围的分级单位,例如上述分级范围的分级单位可以分别为 IKBUMB和1GB,也可以分得更细或更粗。则此时,N个大小级别按照从小到大的顺序分别 为1KB,IB,. . .,1023KB, 1MB, 2MB, . . .,1023MB, 1GB,2GB,. . .,1023GB, 1TB,即,S1 = 1,& =2, Sc = 1023,P1 = 1,P2 = 2,Pd = 1023,Q1 = 1, = 2,Qe = 1023,A1 = 1,C = 1023, D = 1023,E = 1023,F=LN= 3070。在实际应用中,还可以根据实际情况以及文件的特点,来设置N个大小级别,尽量 使得更多的文件不需要进行拆分,例如,需要存储的文件正好等于某一个大小级别或者小 于最小的大小级别。这样,能够进一步提高存储效率,减少处理文件拆分占用的资源。步骤S304,建立文件系统,建立完成之后,在磁盘中创建预定数量个对象存储大文 件,这预定数量个对象存储大文件在磁盘中占用的存储空间是连续的。此时,这预定数量个 对象存储大文件是空的;创建对象存储大文件可以使用现有技术的创建方法,预定数量个对象存储大文件 占用的存储空间可以相同也可以不同,并且,磁盘的总存储空间有多大,对象存储大文件就 可以多大。一般在文件系统中,几MB以下的文件认为是小文件,几十MB以上的认为是大文 件。因此,对象存储大文件占用的存储空间可以在几十MB以上,甚至几十TB以上。显然,为了不浪费磁盘空间,上述的预定数量可以为N,这样,步骤S302中设置的N 个大小级别可以与N个对象存储大文件一一对应。步骤S306,对于海量的需要存储的大小不同的文件中的每个文件,将该文件拆分 成一个或多个文件块对象,其中,拆分得到的每一个文件块对象的大小属于步骤S302中设置的N个大小级别中的一个;例如,可以按照以下公式(1)将一个大小为Size的文件,至多划分成4个文件块 对象,大小分别为XTB、YGB、ZMB和WKB Size = XTB+YGB+ZMB+WKB(1)其中,X为以下之一 =OiA^A2,...,AF,Y为以下之一 0,0^ ,...,%,Z为以下之
一 0, P1, P2, . . .,PD,W为以下之一 0,S1, S2, ... , SC,KB表示千字节,MB表示兆字节,GB表 示千兆(或吉)字节,TB表示兆兆字节。上述步骤S302和步骤S306对应于图1中的步骤S102。步骤S308,将步骤S306中拆分得到的属于同一个大小级别的多个文件块对象,顺 序地写入到与该大小级别对应的对象存储大文件中的连续空闲空间,其中,预定数量为N,N 个对象存储大文件与N个大小级别一一对应。海量的大小不同的文件经步骤S306拆分后,同样得到了海量的文件块对象,文件 系统在写入这些海量的文件块对象时,可以将属于同一个大小级别的文件块对象顺序地写 入到与该大小级别对应的对象存储大文件中的连续空闲的存储空间,即,每次都将属于同 一个级别的新的文件块对象存储到对应的对象存储大文件中的连续空闲空间,确保顺序写 入。这样,还可以将多个小10(请求写入的数据量较小)合并成一个大10(请求写入的数 据量较大),将下发到磁盘的随机小10,转成相对顺序的大10,从而通过提高一次IO的写入 数据量,提高了单盘的IO带宽(即每次能够读写的数据量),从而进一步提高了海量的大小 不同的文件的存储(写入)性能。在上述的实施例二中,在有大量文件被删除之后,对象存储大文件中会留下很多 不连续的空闲空间,可以将对象存储大文件中的这些不连续的空闲空间合并成连续的空闲 空间,即,将这些不连续的空闲空间回收合并成连续的大块空间。此外,还可以对存储在每 个对象存储大文件中的文件块对象维护其访问频率统计信息,以便将经常被访问的文件块 对象集中存放,提高访问速度。实施例三在实施例二中,步骤S302中设置N个大小级别如下1)小于1MB的文件块对象,按1KB为单位等分为1023个级别,每个级别的大小,从 小到大分别是 1KB,2KB,3KB,4KB,. . .,1023KB ;2)大于1MB小于IGB的文件块对象,以1MB为单位分为1023个级别,每个级别的 大小,从小到大分别是 1MB, 2MB, 3MB, 4MB, · · ·,1023MB ;3)大于IGB小于或等于ITB的文件块对象,以IGB单位分为IOM个级别,每个级 别的大小,从小到大分别是1GB,2GB,3GB,4GB,. . .,1024GB(即1TB)。这样,共支持N= 1023+1023+1024 = 3070个大小级别,S卩,3070个大小级别按 照从小到大的顺序分别为1KB, 2KB, · · ·,1023KB, 1MB, 2MB, · · ·,1023MB, 1GB, 2GB, · · ·, 1023GB, ITB0文件系统可以将所有大小不同的文件先拆分成不同大小等级的文件块对象, 然后将拆分出来的文件块对象按照不同的大小级别,存到级别对应的对象存储大文件中。则在步骤S306中,可以按照上述的公式(1)将一个大小为Size的文件,至多划分 成4个文件块对象。例如,文件系统需要存储一个大小为1234567890B的文件,即Size = 1234567890,具体拆分过程如下
步骤1 按照IGB大小级另丨」,可以拆分出L!234567890/(1024X1024X1024)」=1个IGB
的文件块对象;步骤2 将扣除 IGB 的剩下部分 1234567890-1024X 1024X 1024 = 160826066 再 次拆分出1个Ll6O826O66 / (IO24x 1024)」=153MB的文件块对象。步骤3 将扣除IGB和153MB后的剩下部分393938/1024 = 384. 70KB作为一个 385KB的文件块对象。这样,将一个大小为1234567890B的文件拆分成了 3个文件块对象,大小级别分别 为 1GBU53MB 和 385KB。后续,在步骤S308中,如图4所示,文件系统将海量的文件拆分得到的海量的文件 块对象中大小级别为1KB的多个文件块对象顺序地写入到与1KB级别对应的对象存储大文 件中,大小级别为2KB的多个文件块对象顺序地写入到与2KB级别对应的对象存储大文件 中,其他大小级别的相同。这样,上述大小为1234567890的文件拆分得到的IGB文件块对 象、153MB和385KB的文件块对象就可以分别写入到与IGB级别、153MB级别和385KB级别 对应的对象存储大文件中。因此,按照本发明上述实施例三的技术方案,任意大小小于ITB的文件都可以拆 分成GB级别、MB级别和KB级别,最多三个文件块对象。任意数量的文件都能够被有序地 存储到3070个对象存储大文件中。图5是根据本发明实施例一的文件存储装置的示意图,包括存储模块102,用于 存储文件,存储模块102中预先创建有预定数量的对象存储大文件,这预定数量的对象存 储大文件在存储模块102中占用的存储空间是连续的;拆分模块104,用于将多个文件中的 每个文件拆分成一个或多个大小不同的文件块对象;写入模块106,用于将这多个文件经 拆分模块104拆分得到的多个文件块对象写入对应的对象存储大文件。上述的存储模块102可以是硬盘、磁盘或分区等。本发明实施例采用拆分聚合的方式,拆分模块首先将海量的大小不同的文件中的 每个文件拆分成一个或多个文件块对象,然后写入模块将拆分得到的海量的文件块对象写 入到预先创建在磁盘等存储模块中的对应的对象存储大文件中,且存储模块中的对象存储 大文件的数量是固定的、存储空间是连续的,从而将海量的大小不同的文件聚合(合并)到 这些固定数量的对象存储大文件中。由于存储模块中的对象存储大文件的数量是固定的、 存储空间是连续的,从而使得海量的大小不同的文件最终可以按照相对顺序的方式写入到 固定数量的对象存储大文件的存储空间中,进而提高了存储海量的大小不同的文件时文件 系统的写入性能。如图6所示,拆分模块104包括设置单元1042,用于预先设置N个大小级别,N 为正整数;拆分单元1044,用于对于每个文件,将该文件拆分成一个或多个文件块对象,其 中,拆分得到的每一个文件块对象的大小属于所述设置单元1042设置的N个大小级别中的一个。其中,当设置单元1042设置的N个大小级别从小到大分别为=S1KB, S2KB,..., ScKB, P1MB, P2MB,. . .,PdMB, Q1GB, Q2GB,. . .,QeGB,A1TB, A2TB,. . .,AfTB,C+D+E+F = N 时,拆分 单元1044可以通过上述公式(1)将一个大小为Size的文件,至多划分成大小为XTB、YGB、 ZMB和WKB4个文件块对象。
为了能够将多个小IO合并成一个大IO以便提高IO带宽,写入模块106在将这多 个文件经拆分模块104拆分得到的多个文件块对象写入对应的对象存储大文件时,可以将 拆分得到的属于同一个大小级别的多个文件块对象,顺序地写入到与该大小级别对应的对 象存储大文件中的连续空闲空间,其中,预定数量为N,N个对象存储大文件与N个大小级别
--对应。如图7所示,上述文件存储装置还可以包括合并模块108,用于当删除文件后在 对象存储大文件中形成不连续的空闲空间时,将对象存储大文件中的不连续的空闲空间合 并成连续的空闲空间。这样,可以方便后续新的文件块对象的写入。上述实施例的文件存储装置可以是文件系统或文件系统的一部分;也可以是其 中的一些模块属于文件系统,而另一些模块属于其他装置,例如,写入模块106和合并模块 108属于文件系统。本发明上述实施例的方法和装置提出了一种将海量的大小不同的文件拆分聚合 成对象存储大文件的技术方案,将所有文件先拆分成不同大小的文件块对象,然后将这些 文件块对象按照不同的大小级别,聚合到对应的对象存储大文件中,使得文件系统在存储 海量的不同大小的文件,尤其是海量的小文件时,可以用相对顺序的大IO写入文件到磁盘 中,提高了单盘的IO带宽,也提高了单位时间的访问次数,从而提高了存储海量文件时的 存储(即写入)性能。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以 通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质 中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁 碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Random Access Memory, RAM)等。以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此, 任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换, 都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围 为准。
权利要求
1.一种文件存储方法,其特征在于,包括将多个文件中的每个文件拆分成一个或多个大小不同的文件块对象; 将所述多个文件拆分得到的多个文件块对象写入对应的对象存储大文件,其中,存储 装置中预先创建有预定数量的对象存储大文件,所述预定数量的对象存储大文件在所述存 储装置中占用的存储空间是连续的。
2.如权利要求1所述的方法,其特征在于,将多个文件中的每个文件拆分成一个或多 个大小不同的文件块对象包括预先设置N个大小级别,N为正整数;对于每个文件,将该文件拆分成一个或多个文件块对象,其中,拆分得到的每一个文件 块对象的大小属于所述N个大小级别中的一个。
3.如权利要求2所述的方法,其特征在于,当所述N个大小级别从小到大分别为=S1KB, S2KB, . . .,ScKB, P1MB, P2MB, . . .,PdMB, Q1GB, Q2GB, . . .,QeGB, A1TB, A2TB, . . .,AfTB, C+D+E+F =N时,对于每个文件,将该文件拆分成一个或多个文件块对象包括按照以下公式将大小为Size的文件,至多划分成大小为XTB、YGB、ZMB和WKB的文件块 对象Size = XTB+YGB+ZMB+WKB,其中,X 为以下之一 =OiAliA2, ...,Af, Y 为以下之一 0,Q1, Q2,. . .,QE,Z 为以下之一 0,P1, P2,. . .,PD,W 为以下之一 0,S1, S2,. . .,Sc,KB 表示千字节,MB表示兆字节,GB表示千兆字节,TB表示兆兆字节。
4.如权利要求2或3所述的方法,其特征在于,将所述多个文件拆分得到的多个文件块 对象写入对应的对象存储大文件包括将所述多个文件拆分得到的属于同一个大小级别的多个文件块对象,顺序地写入到与 该大小级别对应的对象存储大文件中的连续空闲空间,其中,所述预定数量为N,所述预定 数量的对象存储大文件与所述N个大小级别一一对应。
5.如权利要求1所述的方法,其特征在于,还包括当删除文件后在对象存储大文件中形成不连续的空闲空间时,将对象存储大文件中的 不连续的空闲空间合并成连续的空闲空间。
6.一种文件存储装置,其特征在于,包括存储模块,用于存储文件,所述存储模块中预先创建有预定数量的对象存储大文件,所 述预定数量的对象存储大文件在所述存储模块中占用的存储空间是连续的;拆分模块,用于将多个文件中的每个文件拆分成一个或多个大小不同的文件块对象; 写入模块,用于将所述拆分模块拆分得到的多个文件块对象写入对应的对象存储大文件。
7.如权利要求6所述的装置,其特征在于,所述拆分模块包括 设置单元,用于预先设置N个大小级别,N为正整数;拆分单元,用于对于每个文件,将该文件拆分成一个或多个文件块对象,其中,拆分得 到的每一个文件块对象的大小属于所述N个大小级别中的一个。
8.如权利要求7所述的装置,其特征在于,所述拆分单元用于在所述N个大小级别 从小到大分别为=S1KB, S2KB, · · ·,ScKB, P1MB, P2MB, · · ·,PdMB, Q1GB, Q2GB, · · ·,QeGB, A1TB, A2TB,.. .,AfTB,C+D+E+F = N的情况下,通过以下公式将大小为Size的文件,至多划分成大小为XTB、YGB、ZMB和WKB的文件块对象Size = XTB+YGB+ZMB+WKB,其中,X 为以下之一 =OiAliA2, ...,Af, Y 为以下之一 0,Q1, Q2,. . .,QE,Z 为以下之一 0,P1, P2,. . .,PD,W 为以下之一 0,S1, S2,. . .,Sc,KB 表示千字节, MB表示兆字节,GB表示千兆字节,TB表示兆兆字节。
9.如权利要求7或8所述的装置,其特征在于,所述写入模块具体用于将所述拆分模块 拆分得到的属于同一个大小级别的多个文件块对象,顺序地写入到与该大小级别对应的对 象存储大文件中的连续空闲空间,其中,所述预定数量为N,所述预定数量的对象存储大文 件与所述N个大小级别一一对应。
10.如权利要求6所述的装置,其特征在于,还包括合并模块,用于当删除文件后在对象存储大文件中形成不连续的空闲空间时,将对象 存储大文件中的不连续的空闲空间合并成连续的空闲空间。
全文摘要
本发明实施例提供一种文件存储方法和装置,用于存储技术领域中。其中,上述的文件存储方法包括将多个文件中的每个文件拆分成一个或多个大小不同的文件块对象;将这多个文件拆分得到的多个文件块对象写入对应的对象存储大文件,其中,存储装置中预先创建有预定数量的对象存储大文件,这预定数量的对象存储大文件在该存储装置中占用的存储空间是连续的。本发明实施例能够使得海量的大小不同的文件最终可以按照相对顺序的方式写入到固定数量的对象存储大文件的存储空间中,进而提高了存储海量的大小不同的文件时文件系统的写入性能。
文档编号G06F17/30GK102096722SQ20111006742
公开日2011年6月15日 申请日期2011年3月21日 优先权日2011年3月21日
发明者张巍, 魏明昌 申请人:成都市华为赛门铁克科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1