本发明涉及数据处理技术领域,更具体地说,涉及一种文件系统缓存增量刷新方法及系统。
背景技术:
在海量存储源文件的场景中,源文件的频繁创建、读写、下盘引出了很多问题,有很多公司针对这种场景将源文件聚合成一个聚合文件。当创建源文件时,为提高写操作效率,采用写缓存模式即写入文件系统缓存即认为数据写成功,当缓存写满时数据落盘。
但是在文件已存入缓存,但缓存尚未存满情况下,节点异常等情况下会导致使数据丢失。为让缓存中源文件安全落盘存储,通常采用定时刷新方案,将整个缓存全部数据刷新落盘。伴随着用户频繁的写入和定时刷新,落盘的缓存数据大小并不相等,由此为聚合文件的统一操作和小文件的管理会带来许多麻烦。因此,如何实现缓存安全、高效、快速的刷新是一项亟待解决的问题。
技术实现要素:
有鉴于此,本发明的目的在于提供一种文件系统缓存增量刷新方法,能够实现缓存安全、高效、快速的刷新。
为实现上述目的,本发明提供如下技术方案:
一种文件系统缓存增量刷新方法,包括:
读取文件系统缓存记录信息,所述缓存记录信息中包含缓存数据大小和缓存偏移量;
判断所述缓存数据大小是否为0且所述缓存数据量大小是否等于所述缓存数据偏移量;
当所述缓存数据大小不为0且不等于所述缓存数据偏移量时,判断所述缓存数据大小是否大于所述缓存偏移量;
当所述缓存数据大小大于所述缓存偏移量时,将所述缓存数据偏移量与所述缓存数据大小之间的缓存数据增量刷新落盘。
优选地,所述当所述缓存数据大小大于所述缓存偏移量时,将所述缓存数据偏移量与所述缓存数据大小之间的缓存数据增量刷新落盘后,还包括:
更新所述文件系统缓存数据记录信息。
优选地,所述读取文件系统缓存记录信息,所述缓存记录信息中包含缓存数据大小和缓存偏移量后,还包括:
判断所述文件系统缓存数据记录信息距离上次更新的时间是否大于预设阈值;
当所述文件系统缓存数据记录信息距离上次更新的时间大于预设阈值时,判断所述缓存数据大小是否为0且所述缓存数据量大小是否等于所述缓存数据偏移量。
优选地,当所述缓存数据大小小于所述缓存偏移量时,记录失败信息。
优选地,当所述缓存数据大小等于0或所述缓存偏移量等于所述缓存数据大小时,再次读取文件系统缓存记录信息。
一种文件系统缓存增量刷新系统,包括:
读取模块,用于读取文件系统缓存记录信息,所述缓存记录信息中包含缓存数据大小和缓存偏移量;
第一判断模块,用于判断所述缓存数据大小是否为0且所述缓存数据量大小是否等于所述缓存数据偏移量;
第二判断模块,用于当所述缓存数据大小不为0且不等于所述缓存数据偏移量时,判断所述缓存数据大小是否大于所述缓存偏移量;
处理模块,用于当所述缓存数据大小大于所述缓存偏移量时,将所述缓存数据偏移量与所述缓存数据大小之间的缓存数据增量刷新落盘。
优选地,所述系统还包括:
更新模块,用于更新所述文件系统缓存数据记录信息。
优选地,所述系统还包括:
第三判断模块,用于判断所述文件系统缓存数据记录信息距离上次更新的时间是否大于预设阈值;
当所述文件系统缓存数据记录信息距离上次更新的时间大于预设阈值时,所述第一判断模块判断所述缓存数据大小是否为0且所述缓存数据量大小是否等于所述缓存数据偏移量。
优选地,当所述缓存数据大小小于所述缓存偏移量时,所述系统还包括:
记录模块,用于记录失败信息。
优选地,所述系统当所述缓存数据大小等于0或所述缓存偏移量等于所述缓存数据大小时,所述读取模块再次读取文件系统缓存记录信息。
由上述技术方案可知,本发明提供了一种文件系统缓存增量刷新方法,当需要对文件系统缓存增量进行刷新时,首先读取文件系统缓存记录信息,其中,缓存记录信息中包含缓存数据大小和缓存偏移量;然后判断缓存数据大小是否为0且所述缓存数据量大小是否等于所述缓存数据偏移量;当缓存数据大小不为0且不等于所述缓存数据偏移量时,判断缓存数据大小是否大于缓存偏移量;当缓存数据大小大于缓存偏移量时,将缓存数据偏移量与缓存数据大小之间的缓存数据增量刷新落盘。通过在文件系统中记录缓存的缓存偏移量和缓存大小,并利用缓存偏移量和缓存大小实现缓存数据的增量存储,解决了定时刷新在不用刷新整个缓存的前提下聚合文件缓存大小不一致的问题,提高了缓存数据的安全性和存储的高效性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明公开的一种文件系统缓存增量刷新方法实施例1的方法流程图;
图2为本发明公开的一种文件系统缓存增量刷新方法实施例2的方法流程图;
图3为本发明公开的一种文件系统缓存增量刷新系统实施例1的结构示意图;
图4为本发明公开的一种文件系统缓存增量刷新系统实施例2的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
为了更加特定地强调实施的独立性,本说明书涉及许多模块或单元。举例而言,模块或单元可由硬件电路实现,该硬件电路包括特制vlsi电路或门阵列,比如逻辑芯片、晶体管,或其它组件。模块或单元也可在可编程的硬设备中实现,比如场效可编程门阵列、可编程阵列逻辑、可编程逻辑设备等等。
模块或单元也可在藉由各种形式的处理器所执行的软件中实现。比如说,一可执行码模块可包括一个或多个实体的或逻辑的计算机指令区块,该区块可能形成为,比如说,对象、程序或函数。然而,鉴别模块或单元的可执行部分不需要物理上放置在一起,但可由存于不同位置的不同指令所组成,当逻辑上组合在一起时,形成模块或单元且达到该模块或单元所要求的目的。
实际上,可执行码模块或单元可以是一单一指令或多个指令,甚至可以分布在位于不同的程序的数个不同的码区段,并且横跨数个存储设备。同样地,操作数据可被辨识及显示于此模块或单元中,并且可以以任何合适的形式实施且在任何合适的数据结构形式内组织。操作数据可以集合成单一数据集,或可分布在具有不同的存储设备的不同的位置,且至少部分地只以电子信号方式存在于一系统或网络。
本说明书所提及的“实施例”或类似用语表示与实施例有关的特性、结构或特征,包括在本发明的至少一实施例中。因此,本说明书所出现的用语“在一实施例中”、“在实施例中”以及类似用语可能但不必然都指向相同实施例。
再者,本发明所述特性、结构或特征可以以任何方式结合在一个或多个实施例中。以下说明将提供许多特定的细节,比如编程序、软件模块、用户选择、网络交易、数据库查询、数据库结构、硬件模块、硬件电路、硬件芯片等例子,以提供对本发明实施例的了解。然而相关领域的普通技术人员将看出本发明,即使没有利用其中一个或多个特定细节,或利用其它方法、组件、材料等亦可实施。另一方面,为避免混淆本发明,公知的结构、材料或操作并没有详细描述。
如图1所示,为本发明公开的一种文件系统缓存增量刷新方法实施例1的流程图,本方法包括以下步骤:
s101、读取文件系统缓存记录信息,其中,缓存记录信息中包含缓存数据大小和缓存偏移量;
聚合文件由多个固定大小(例如:4mb)的对象组成,每个对象由多个源文件组成,源文件大小限定小于对象的大小,该文以源文件最大512kb为例说明。当在客户端写小于512kb的小源文件时,源文件数据不直接下盘,而是写入到与聚合文件对象大小相等的缓存中。为方便文件系统缓存增量刷新,需记录缓存偏移量(buf_offset)和缓存数据大小(buf_size)。
s102、判断缓存数据大小是否为0且缓存数据量大小是否等于缓存数据偏移量;
当读取了文件系统缓存记录信息后,进一步判断读取的缓存数据大小是否为0且缓存数据量大小是否等于缓存数据偏移量,当判断缓存数据大小为0时,或缓存数据量大小等于缓存数据偏移量时,返回重新读取文件系统缓存记录信息。
s103、当缓存数据大小不为0且不等于所述缓存数据偏移量时,判断缓存数据大小是否大于缓存偏移量;
当判断缓存数据大小不为0且不等于所述缓存数据偏移量时,进一步判断缓存数据大小是否大于缓存偏移量。
s104、当缓存数据大小大于缓存偏移量时,将缓存数据偏移量与缓存数据大小之间的缓存数据增量刷新落盘。
当判断缓存数据大小大于缓存偏移量时,将新写入的源文件缓存刷新落盘,即将缓存数据偏移量与缓存数据大小之间的缓存数据增量刷新落盘。
综上所述,在上述实施例中,当需要对文件系统缓存增量进行刷新时,首先读取文件系统缓存记录信息,其中,缓存记录信息中包含缓存数据大小和缓存偏移量;然后判断缓存数据大小是否为0且所述缓存数据量大小是否等于所述缓存数据偏移量;当缓存数据大小不为0且不等于所述缓存数据偏移量时,判断缓存数据大小是否大于缓存偏移量;当缓存数据大小大于缓存偏移量时,将缓存数据偏移量与缓存数据大小之间的缓存数据增量刷新落盘。通过在文件系统中记录缓存的缓存偏移量和缓存大小,并利用缓存偏移量和缓存大小实现缓存数据的增量存储,解决了定时刷新在不用刷新整个缓存的前提下聚合文件缓存大小不一致的问题,提高了缓存数据的安全性和存储的高效性。
如图2所示,为本发明公开的一种文件系统缓存增量刷新方法实施例2的流程图,本方法包括以下步骤:
s201、读取文件系统缓存记录信息,其中,缓存记录信息中包含缓存数据大小和缓存偏移量;
聚合文件由多个固定大小(例如:4mb)的对象组成,每个对象由多个源文件组成,源文件大小限定小于对象的大小,该文以源文件最大512kb为例说明。当在客户端写小于512kb的小源文件时,源文件数据不直接下盘,而是写入到与聚合文件对象大小相等的缓存中。为方便文件系统缓存增量刷新,需记录缓存偏移量(buf_offset)和缓存数据大小(buf_size)。
s202、判断文件系统缓存数据记录信息距离上次更新的时间是否大于预设阈值;
当读取到文件系统缓存记录信息后,进一步判断文件系统缓存数据记录信息距离上次更新的时间是否大于预设阈值,即确保聚合文件缓存一定时间内未修改,以提高源文件写缓存的连续性。
s203、当文件系统缓存数据记录信息距离上次更新的时间大于预设阈值时,判断缓存数据大小是否为0且缓存数据量大小是否等于缓存数据偏移量;
当文件系统缓存数据记录信息距离上次更新的时间大于预设阈值时,进一步判断缓存数据大小是否为0且所述缓存数据量大小是否等于所述缓存数据偏移量。
s204、当缓存数据大小不为0且不等于缓存数据偏移量时,判断缓存数据大小是否大于缓存偏移量;
当判断缓存数据大小不为0且不等于所述缓存数据偏移量时,进一步判断缓存数据大小是否大于缓存偏移量。
s205、当缓存数据大小等于0或缓存偏移量等于所述缓存数据大小时,再次读取文件系统缓存记录信息;
当缓存数据大小等于0或缓存偏移量等于缓存数据大小时,返回重新读取文件系统缓存记录信息。
s206、当缓存数据大小大于缓存偏移量时,将缓存数据偏移量与缓存数据大小之间的缓存数据增量刷新落盘;
当判断缓存数据大小大于缓存偏移量时,将新写入的源文件缓存刷新落盘,即将缓存数据偏移量与缓存数据大小之间的缓存数据增量刷新落盘。
s207、更新文件系统缓存数据记录信息;
当将缓存数据偏移量与缓存数据大小之间的缓存数据增量刷新落盘后,进一步实时更新文件系统缓存数据记录信息。
s208、当缓存数据大小小于缓存偏移量时,记录失败信息。
综上所述,在上述实施例中,当需要对文件系统缓存增量进行刷新时,首先读取文件系统缓存记录信息,其中,缓存记录信息中包含缓存数据大小和缓存偏移量;然后判断缓存数据大小是否为0且缓存数据量大小是否等于缓存数据偏移量;当缓存数据大小不为0且不等于所述缓存数据偏移量时,判断缓存数据大小是否大于缓存偏移量;当缓存数据大小大于缓存偏移量时,将缓存数据偏移量与缓存数据大小之间的缓存数据增量刷新落盘。通过在文件系统中记录缓存的缓存偏移量和缓存大小,并利用缓存偏移量和缓存大小实现缓存数据的增量存储,解决了定时刷新在不用刷新整个缓存的前提下聚合文件缓存大小不一致的问题,提高了缓存数据的安全性和存储的高效性。
如图3所示,为本发明公开的一种文件系统缓存增量刷新系统实施例1的结构示意图,本系统包括:
读取模块301,用于读取文件系统缓存记录信息,其中,缓存记录信息中包含缓存数据大小和缓存偏移量;
聚合文件由多个固定大小(例如:4mb)的对象组成,每个对象由多个源文件组成,源文件大小限定小于对象的大小,该文以源文件最大512kb为例说明。当在客户端写小于512kb的小源文件时,源文件数据不直接下盘,而是写入到与聚合文件对象大小相等的缓存中。为方便文件系统缓存增量刷新,需记录缓存偏移量(buf_offset)和缓存数据大小(buf_size)。
第一判断模块302,用于判断缓存数据大小是否为0且所述缓存数据量大小是否等于所述缓存数据偏移量;
当读取了文件系统缓存记录信息后,进一步判断读取的缓存数据大小是否为0且缓存数据量大小是否等于缓存数据偏移量,当判断缓存数据大小为0时,或缓存数据量大小等于缓存数据偏移量时,返回重新读取文件系统缓存记录信息。
第二判断模块303,用于当缓存数据大小不为0且不等于所述缓存数据偏移量时,判断缓存数据大小是否大于缓存偏移量;
当判断缓存数据大小不为0且不等于所述缓存数据偏移量时,进一步判断缓存数据大小是否大于缓存偏移量。
处理模块304,用于当缓存数据大小大于缓存偏移量时,将缓存数据偏移量与缓存数据大小之间的缓存数据增量刷新落盘。
当判断缓存数据大小大于缓存偏移量时,将新写入的源文件缓存刷新落盘,即将缓存数据偏移量与缓存数据大小之间的缓存数据增量刷新落盘。
综上所述,在上述实施例中,当需要对文件系统缓存增量进行刷新时,首先读取文件系统缓存记录信息,其中,缓存记录信息中包含缓存数据大小和缓存偏移量;然后判断缓存数据大小是否为0且所述缓存数据量大小是否等于所述缓存数据偏移量;当缓存数据大小不为0且不等于所述缓存数据偏移量时,判断缓存数据大小是否大于缓存偏移量;当缓存数据大小大于缓存偏移量时,将缓存数据偏移量与缓存数据大小之间的缓存数据增量刷新落盘。通过在文件系统中记录缓存的缓存偏移量和缓存大小,并利用缓存偏移量和缓存大小实现缓存数据的增量存储,解决了定时刷新在不用刷新整个缓存的前提下聚合文件缓存大小不一致的问题,提高了缓存数据的安全性和存储的高效性。
如图4所示,为本发明公开的一种文件系统缓存增量刷新系统实施例2的结构示意图,本系统包括:
读取模块401,用于读取文件系统缓存记录信息,其中,缓存记录信息中包含缓存数据大小和缓存偏移量;
聚合文件由多个固定大小(例如:4mb)的对象组成,每个对象由多个源文件组成,源文件大小限定小于对象的大小,该文以源文件最大512kb为例说明。当在客户端写小于512kb的小源文件时,源文件数据不直接下盘,而是写入到与聚合文件对象大小相等的缓存中。为方便文件系统缓存增量刷新,需记录缓存偏移量(buf_offset)和缓存数据大小(buf_size)。
第三判断模块402,用于判断文件系统缓存数据记录信息距离上次更新的时间是否大于预设阈值;
当读取到文件系统缓存记录信息后,进一步判断文件系统缓存数据记录信息距离上次更新的时间是否大于预设阈值,即确保聚合文件缓存一定时间内未修改,以提高源文件写缓存的连续性。
第一判断模块403,用于当文件系统缓存数据记录信息距离上次更新的时间大于预设阈值时,判断缓存数据大小是否为0且所述缓存数据量大小是否等于所述缓存数据偏移量;
当文件系统缓存数据记录信息距离上次更新的时间大于预设阈值时,进一步判断缓存数据大小是否为0且所述缓存数据量大小是否等于所述缓存数据偏移量。
第二判断模块404,用于当缓存数据大小不为0且不等于所述缓存数据偏移量时,判断缓存数据大小是否大于缓存偏移量;
当判断缓存数据大小不为0且不等于所述缓存数据偏移量时,进一步判断缓存数据大小是否大于缓存偏移量。
读取模块401,还用于当缓存数据大小等于0或缓存偏移量等于所述缓存数据大小时,再次读取文件系统缓存记录信息;
当缓存数据大小等于0或缓存偏移量等于缓存数据大小时,返回重新读取文件系统缓存记录信息。
处理模块405,用于当缓存数据大小大于缓存偏移量时,将缓存数据偏移量与缓存数据大小之间的缓存数据增量刷新落盘;
当判断缓存数据大小大于缓存偏移量时,将新写入的源文件缓存刷新落盘,即将缓存数据偏移量与缓存数据大小之间的缓存数据增量刷新落盘。
更新模块406,用于更新文件系统缓存数据记录信息;
当将缓存数据偏移量与缓存数据大小之间的缓存数据增量刷新落盘后,进一步实时更新文件系统缓存数据记录信息。
记录模块407,用于当缓存数据大小小于缓存偏移量时,记录失败信息。
综上所述,在上述实施例中,当需要对文件系统缓存增量进行刷新时,首先读取文件系统缓存记录信息,其中,缓存记录信息中包含缓存数据大小和缓存偏移量;然后判断缓存数据大小是否为0且缓存数据量大小是否等于缓存数据偏移量;当缓存数据大小不为0且不等于所述缓存数据偏移量时,判断缓存数据大小是否大于缓存偏移量;当缓存数据大小大于缓存偏移量时,将缓存数据偏移量与缓存数据大小之间的缓存数据增量刷新落盘。通过在文件系统中记录缓存的缓存偏移量和缓存大小,并利用缓存偏移量和缓存大小实现缓存数据的增量存储,解决了定时刷新在不用刷新整个缓存的前提下聚合文件缓存大小不一致的问题,提高了缓存数据的安全性和存储的高效性。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。