一种文件存储方法、系统及计算机存储介质与流程

文档序号:11176753
一种文件存储方法、系统及计算机存储介质与流程

本发明涉及存储技术领域,更具体的说,涉及一种文件存储方法、系统及计算机存储介质。



背景技术:

对象存储拥有低成本、易分发并发访问、支持海量存储的特点,但不支持随机写,目前许多软件仍对存储系统有乱序读写的需求,文件系统能支持乱序读写。



技术实现要素:

本发明所要解决的技术问题是提供一种能支持乱序读写又具有对象存储优点的文件存储方法、系统及计算机存储介质。

本发明的目的是通过以下技术方案来实现的:

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

在文件系统层,将文件进行分块形成多个数据块,对数据块进行乱序写操作;

将数据块同步到对象存储队列,如果数据块的数据发生变化,则在对象存储队列增加任务,按第一预设周期循环执行对象存储队列内的任务;

在对象存储层,根据操作指令将多个数据块按预设顺序拼接成文件;

在文件系统层中设置循环回收任务;所述循环回收任务包括:按预设策略回收文件系统中已同步到对象存储中且满足预设条件的数据块,并将所述数据块删除且标记所述数据块地址为对象存储。

进一步的,还包括:

在文件系统层中设置循环重传任务;

所述循环重传任务包括:按第二预设周期获取文件系统中未同步到对象存储中的数据块,并根据数据块生成同步任务,并将所述同步任务加入对象存储队列中。

进一步的,所述对数据块进行乱序写操作包括:

如果文件的数据块在文件系统层中,则直接进行写入;

如果文件的数据块在对象存储中,则将所述数据块从对象存储中读取并存储到文件系统中,再进行覆盖写入。

进一步的,所述根据操作指令将多个数据块按预设顺序拼成文件包括:

如果文件数据块在对象存储中且未过期,则用于拼接文件;

如果文件数据块在文件系统层完成覆盖写入,则将文件数据块重新上传到对象存储中;

如果文件数据块在对象存储中但已过期,则从对象存储中按偏移读取数据块,并将所述数据块下载到文件系统,再重新上传形成数据块。

进一步的,还包括:

在文件系统层中,进行文件乱序读操作时,如果文件在文件系统中,则直接从文件系统读取数据块形成文件。

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

处理模块:用于在文件系统层,将文件进行分块形成多个数据块,对数据块进行乱序写操作;

同步模块,用于将数据块同步到对象存储队列,如果数据块的数据发生变化,则在对象存储队列增加任务,按第一预设周期循环执行对象存储队列内的任务;

拼接模块,用于在对象存储层,根据操作指令将多个数据块按预设顺序拼接成文件;

回收器,用于在文件系统层中执行循环回收任务,所述循环回收任务包括:按预设策略回收文件系统中已同步到对象存储中且满足预设条件的数据块,并将所述数据块删除且标记所述数据块地址为对象存储。进一步的,所述处理模块还用于在文件系统层中设置循环重传任务;所述循环重传任务包括:按第二预设周期获取文件系统中未同步到对象存储中的数据块,并根据数据块生成同步任务,并将所述同步任务加入对象存储队列中。

进一步的,所述处理模块还用于如果文件的数据块在文件系统层中,则直接进行写入;所述处理模块还用于如果文件的数据块在对象存储中,则将所述数据块从对象存储中读取并存储到文件系统中,再进行覆盖写入。

进一步的,所述拼接模块还用于如果文件数据块在对象存储中且未过期,则用于拼接文件;

所述拼接模块还用如果文件数据块在文件系统层完成覆盖写入,则将文件数据块重新上传到对象存储中;

所述拼接模块还用如果文件数据块在对象存储中但已过期,则从对象存储中按偏移读取数据块,并将所述数据块下载到文件系统,再重新上传形成数据块。

进一步的,所述处理模块还用于在文件系统层中,进行文件乱序读操作时,如果文件在文件系统中,则直接从文件系统读取数据块形成文件。

一种计算机存储介质,所述计算机存储介质可存储有程序,所述程序执行包括上述任一项所述的步骤。

本发明由于在文件系统层,将文件进行分块形成多个数据块,并对数据块进行乱序写操作;然后将数据块同步到对象存储队列,如果数据块的数据发生变化,则在对象存储队列增加任务,按第一预设周期循环执行对象存储队列内的任务;在对象存储层,根据操作指令将多个数据块按预设顺序拼接成文件,在文件系统层中设置循环回收任务;循环回收任务包括:按预设策略回收文件系统中已同步到对象存储中且满足预设条件的数据块,并将数据块删除且标记所述数据块地址为对象存储。融合文件系统与对象存储的分级存储方法,达到既能支持乱序读写,又能拥有对象存储的优势,即低成本、易分发并发访问、支持海量存储。循环回收任务能在文件系统层维护大量文件合理的转移给对象存储。

附图说明

图1是本发明实施例的一种文件存储方法的流程图;

图2是本发明实施例的一种文件存储系统的框图;

图3是本发明实施例的文件系统层写入过程的流程示意图;

图4是本发明实施例的一种文件存储系统的示意图。

具体实施方式

在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。

还应当提到的是,在一些替换实现方式中,所提到的功能/动作可以按照不同于附图中标示的顺序发生。举例来说,取决于所涉及的功能/动作,相继示出的两幅图实际上可以基本上同时执行或者有时可以按照相反的顺序来执行。

下面结合附图和较佳的实施例对本发明作进一步说明。

如图1所示,一种文件存储方法,该文件存储方法包括步骤S110-S140。其中:

S110:在文件系统层,将文件进行分块形成多个数据块,对数据块进行乱序写操作。

具体的,在文件系统层,对文件进行切块分片形成多个数据块,每个数据块大小可以由系统设定,也可以由用户指定。在文件系统层,支持对文件进行乱序写操作,文件单次写操作将被拆成对多个数据块的写操作。

S120:将数据块同步到对象存储队列,如果数据块的数据发生变化,则在对象存储队列增加任务,按第一预设周期循环执行对象存储队列内的任务。在对象存储层,可以将多个文件按顺序拼接成一个大文件。对象存储中文件由于按顺序存储,所以可很方便支持按某偏移量读取部分数据。对象存储层支持分块上传与分块拼接成单个文件,但不支持乱序写操作。对象层存储数据主要用于归档、分发。在文件系统层中维护一个数据块同步到对象存储队列Q,写入或修改数据后,向同步队列加入任务并合并重复任务,按第一预设周期执行队列任务。第一预设周期的时间可以根据系统自动设定,也可以用户自己设定。

S130:在对象存储层,根据操作指令将多个数据块按预设顺序拼接成文件。

该操作指令可以为将多个数据块拼接成文件的指令。当用户在文件系统层触发对文件的close/sync操作时将在对象存储中触发数据块拼接成文件任务。

S140:在文件系统层中设置循环回收任务;所述循环回收任务包括:按预设策略回收文件系统中已同步到对象存储中且满足预设条件的数据块,并将所述数据块删除且标记所述数据块地址为对象存储。

文件系统层运行一个循环回收任务,将已同步到对象存储的数据按周期、策略进行回收,当从文件系统层读取数据时再从对象存储拉取。有了循环回收任务,可以在文件系统层维护大量文件的压缩合理的转移给对象存储。在文件系统层中启动一个循环回收任务,按预设策略获取文件系统中已同步到对象存储中且满足用户设定条件的文件,并文件删除且标记文件地址为对象存储。预设策略可以是用户指定策略,如修改日期及使用频次等。

本实施例融合文件系统与对象存储的分级存储方法,达到既能支持乱序读写,又能拥有对象存储的优势,即低成本、易分发并发访问、支持海量存储。本实施例将乱序写落在文件系统、读取主要落在对象存储的存储结构。循环回收任务能在文件系统层维护大量文件合理的转移给对象存储。

可选地,该文件存储方法还包括:在文件系统层中设置循环重传任务;该循环重传任务包括:按第二预设周期获取文件系统中未同步到对象存储中的数据块,并根据数据块生成同步任务,并将所述同步任务加入对象存储队列中。

在文件系统层中启动一个循环重传任务,按周期获取文件系统中未同步到对象存储中的文件,并根据文件生成同步任务加入同步队列Q中。

具体的,其中对数据块进行乱序写操作包括:

如果文件的数据块在文件系统层中,则直接进行写入;

如果文件的数据块在对象存储中,则将所述数据块从对象存储中读取并存储到文件系统中,再进行覆盖写入。

在文件系统层中,进行乱序读写时,如果文件已在文件系统层则直接进行写入,如果在对象存储中,则将文件相应数据块从对象存储中读取并存储到文件系统中,再进行覆盖写入。

具体的,其中根据操作指令将多个数据块按预设顺序拼成文件包括:

如果文件数据块在对象存储中且未过期,则用于拼接文件;

如果文件数据块在文件系统层完成覆盖写入,则将文件数据块重新上传到对象存储中;

如果文件数据块在对象存储中但已过期,则从对象存储中按偏移读取数据块,并将所述数据块下载到文件系统,再重新上传形成数据块。

最终用户触发拼接文件时,根据此时文件的大小确定文件数据块数量,并逐一判断所有数据块是否已在对象存储中,且有效,此时按需从磁盘中读取、从对象存储中重新下载、直接从内存读取并重新上传数据块。所需用于拼接文件数据块分四种情况:

情况一:文件数据块已在对象存储中且未过期可继续用于拼接文件则重用,即从磁盘中读取。

情况二:文件数据块在文件系统层完成覆盖写则重新上传到对象存储中,从对象存储中重新下载,还可以设置版本变量,具体包括,每个文件数据块有两个版本变量,一个是文件内容版本,文件数据块刚创建时为零,后续每次更新递增,另一个是文件数据块上传版本,每次数据块上传后,上传该版本号设置为文件内容版本号,该情况下,检查文件内容版本和上传版本是否一致,不一致则重传。

情况三:文件数据块已在对象存储中但已过期,则从对象存储按偏移读取下载到文件系统再重新上传形成块。

情况四,如果数据块未上传过,则触发上传。如果拼接文件过程中失败则终止拼接,等待由重传模块再次触发拼接。

对文件执行truncate操作时,更新本地文件系统中的文件大小,并更新truncate大小边界相应的数据块,并递增其文件内容版本,如此,在触发对象存储中文件拼接阶段才能正确体现truncate文件。可选地,该文件存储方法还包括:在文件系统层中,进行文件乱序读操作时,如果文件在文件系统中,则直接从文件系统读取数据块形成文件。

在文件系统层中,进行乱序读时,如果文件在文件系统中,则直接从文件系统读取,根据用户配置连续读取一定量数据块减少网络请求量。

如图2所示,将文件A分成几个数据块文件A块1、文件A块2等,文件B也分成几个数据块文件B块1、文件B块2。

然后将数据块分别通过文件写入模块增加进同步队列Q,或通过循环重传模块进入同步队列Q。

同步队列Q中的数据块存入对象存储,并组合成文件A、文件B。

其中,文件系统可直接从对象存储乱序读取数据,并将文件数据块存储到文件系统层。

其中,按策略回收文件模块可以将文件系统中的数据块进行回收。

如图3所示,文件系统层写入过程包括:向文件系统层随机写入数据。

文件写入内容被拆成面向多个数据块的写入。

如果面向数据块写为覆盖写数据,则覆盖写,如果面向数据块写为新数据块下的追加写,则追加写;

如果为覆盖写,则判断相应数据块是否在文件系统层中,如果不在系统层中,则从对象存储层中读取数据块数据并存储在文件存储层,然后则将数据写入文件系统层磁盘中。如果在系统层中,则将数据写入文件系统层磁盘中。

如果为追加写,则将数据写入文件系统层磁盘中。

本发明的另一优选实施例,如图4所示,一种文件存储系统200,包括处理模块210、同步模块220、拼接模块230和回收器240。

处理模块210用于在文件系统层,将文件进行分块形成多个数据块,对数据块进行乱序写操作。

具体的,在文件系统层,处理模块210对文件进行切块分片形成多个数据块,每个数据块大小可以由系统设定,也可以由用户指定。在文件系统层,支持对文件进行乱序写操作,文件单次写操作将被拆成对多个数据块的写操作。

同步模块220用于将数据块同步到对象存储队列,如果数据块的数据发生变化,则在对象存储队列增加任务,按第一预设周期循环执行对象存储队列内的任务。

同步模块220在文件系统层中维护一个数据块同步到对象存储队列Q,写入或修改数据后,向同步队列加入任务并合并重复任务,按第一预设周期执行队列任务。第一预设周期的时间可以根据系统自动设定,也可以用户自己设定。

拼接模块230用于在对象存储层,根据操作指令将多个数据块按预设顺序拼接成文件。

该操作指令可以为将多个数据块拼接成文件的指令。当用户在文件系统层触发对文件的close/sync操作时,拼接模块230将在对象存储中触发数据块拼接成文件任务。

回收器240,用于在文件系统层中执行循环回收任务,所述循环回收任务包括:按预设策略回收文件系统中已同步到对象存储中且满足预设条件的数据块,并将所述数据块删除且标记所述数据块地址为对象存储。

文件系统层运行一个回收器240,回收器240将已同步到对象存储的数据按周期、策略进行回收,当从文件系统层读取数据时再从对象存储拉取。有了回收器,可以在文件系统层维护大量文件的压缩合理的转移给对象存储。在文件系统层中启动一个循环回收任务,按预设策略获取文件系统中已同步到对象存储中且满足用户设定条件的文件,并文件删除且标记文件地址为对象存储。预设策略可以是用户指定策略,如修改日期及使用频次等。

可选地,处理模块还用于在文件系统层中设置循环重传任务;所述循环重传任务包括:按第二预设周期获取文件系统中未同步到对象存储中的数据块,并根据数据块生成同步任务,并将所述同步任务加入对象存储队列中。

可选地,处理模块还用于如果文件的数据块在文件系统层中,则直接进行写入;如果文件的数据块在对象存储中,则将所述数据块从对象存储中读取并存储到文件系统中,再进行覆盖写入。

在文件系统层中,进行乱序读写时,如果文件已在文件系统层则直接进行写入,如果在对象存储中,则将文件相应数据块从对象存储中读取并存储到文件系统中,再进行覆盖写入。

可选地,拼接模块还用于如果文件数据块在对象存储中且未过期,则用于拼接文件;如果文件数据块在文件系统层完成覆盖写入,则将文件数据块重新上传到对象存储中;如果文件数据块在对象存储中但已过期,则从对象存储中按偏移读取数据块,并将所述数据块下载到文件系统,再重新上传形成数据块。

最终用户触发拼接文件时,根据此时文件的大小确定文件数据块数量,并逐一判断所有数据块是否已在对象存储中,且有效,此时按需从磁盘中读取、从对象存储中重新下载、直接从内存读取并重新上传数据块。所需用于拼接文件数据块分四种情况:

情况一:文件数据块已在对象存储中且未过期可继续用于拼接文件则重用,即从磁盘中读取。

情况二:文件数据块在文件系统层完成覆盖写则重新上传到对象存储中,从对象存储中重新下载,还可以设置版本变量,具体包括,每个文件数据块有两个版本变量,一个是文件内容版本,文件数据块刚创建时为零,后续每次更新递增,另一个是文件数据块上传版本,每次数据块上传后,上传该版本号设置为文件内容版本号,该情况下,检查文件内容版本和上传版本是否一致,不一致则重传。

情况三:文件数据块已在对象存储中但已过期,则从对象存储按偏移读取下载到文件系统再重新上传形成块。

情况四,如果数据块未上传过,则触发上传。如果拼接文件过程中失败则终止拼接,等待由重传模块再次触发拼接。

对文件执行truncate操作时,更新本地文件系统中的文件大小,并更新truncate大小边界相应的数据块,并递增其文件内容版本,如此,在触发对象存储中文件拼接阶段才能正确体现truncate文件。

可选地,处理模块还用于在文件系统层中,进行文件乱序读操作时,如果文件在文件系统中,则直接从文件系统读取数据块形成文件。

在文件系统层中,进行乱序读时,如果文件在文件系统中,则直接从文件系统读取,根据用户配置连续读取一定量数据块减少网络请求量。

本发明的另一优选实施例,一种计算机存储介质,所述计算机存储介质可存储有程序,所述程序执行包括上述任一项所述的步骤。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

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