一种磁盘内部的数据缓存方法及装置与流程

文档序号:12464308阅读:207来源:国知局
一种磁盘内部的数据缓存方法及装置与流程

本发明涉及数据存储技术领域,具体而言,涉及一种磁盘内部的数据缓存方法及装置。



背景技术:

一般文件服务器或图片服务器都会有代理服务读取功能,也就是通过代理功能实现从其他服务器读取文件的功能,比如从ftp、http等服务器上读取。考虑到从这些服务器上读取存在速度慢的问题,常见的如网络不稳定、服务器负荷压力大等情况,都可能会导致读取性能低的问题。为了改善这个问题,服务器通常都会采用磁盘缓存文件的做法。常规的做法是直接在磁盘上创建文件副本并建立一个索引文件来记录文件总量及访问关系。这种方式建立的文件副本是1:1,当缓存的总量较大时(如:8G),而文件又相对较小时(如:10KB),就会产生过万的文件数量,不仅读取性能下降,还会产生不少磁盘碎片造成空间浪费。

另外一种磁盘缓存文件的做法是通过文件拼凑的形式组合成大文件,这种方式通常会在大文件中划分连续的一块区域来存储一个文件,能够保证顺序读写,提升读取速度。但这种方式有个严重的缺陷是不能支持随机擦写,比如一块空间一旦被文件占用后,当此文件删除后,空间也不能再次回收利用,造成很大的磁盘空间浪费,造成有限驻留空间内缓存的有效文件数据较少。

发明人在研究中发现,现有技术中的磁盘缓存文件的方法均不理想,针对上述两种磁盘缓存文件的缺陷,目前尚未提出一种较好的解决方式。



技术实现要素:

有鉴于此,本发明实施例的目的在于提供一种磁盘内部的数据缓存方法及装置,其通过创建用于映射磁盘的存储文件的内存映射文件,并对该内存映射文件的缓存空间进行重复擦写及回收利用,提升了缓存空间的利用率,使缓存空间利用最大化,同时提升了缓存文件的读写速度。

第一方面,本发明实施例提供了一种磁盘内部的数据缓存方法,包括:

创建用于映射磁盘的存储文件的内存映射文件,所述内存映射文件对应有虚拟地址空间的空闲内存区域;所述内存映射文件预先被划分为多个空闲存储块;

根据预存的缓存文件的大小,计算所述内存映射文件中用于存储所述缓存文件的所述空闲存储块的第一数量;

从所述内存映射文件中抽取所述第一数量的所述空闲存储块,并将所述空闲存储块设置为待用存储块;

通过所述待用存储块存储所述缓存文件,得到存储文件。

结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,所述的磁盘内部的数据缓存方法,还包括:

实时检测所述内存映射文件对应的所述空闲内存区域的大小;

在检测到所述空闲内存区域的大小小于第一设定阈值时,根据第二设定阈值,计算待释放的所述存储文件的第三数量;其中,所述第二设定阈值大于所述第一设定阈值;

将所述第三数量的所述存储文件作为空闲存储块释放到所述内存映射文件中。

结合第一方面的第一种可能的实施方式,本发明实施例提供了第一方面的第二种可能的实施方式,其中,实时检测所述内存映射文件对应的所述空闲内存区域的大小,包括:

实时获取所述内存映射文件中所述空闲存储块的第二数量;

根据所述第二数量,计算所述内存映射文件中所述空闲内存区域的大小。

结合第一方面的第一种可能的实施方式,本发明实施例提供了第一方面的第三种可能的实施方式,其中,所述的磁盘内部的数据缓存方法,还包括:

每检测到一个所述存储文件时,将所述存储文件存储的所述缓存文件的文件名存储到预先建立的热度链表的头部;其中,所述热度链表包括:用于存储所述文件名的第一文件名存储区。

结合第一方面的第三种可能的实施方式,本发明实施例提供了第一方面的第四种可能的实施方式,其中,所述的磁盘内部的数据缓存方法,还包括:

每检测到一个所述存储文件时,将所述存储文件及其存储的所述缓存文件的文件名存储到预先建立的数据缓存表中;其中,所述数据缓存表包括:用于存储所述存储文件的存储文件存储区和用于存储所述文件名的第二文件名存储区。

结合第一方面的第四种可能的实施方式,本发明实施例提供了第一方面的第五种可能的实施方式,其中,将所述第三数量的所述存储文件作为空闲存储块释放到所述内存映射文件中,包括:

根据所述热度链表中所述第一文件名存储区存储的所述文件名从后到前的排序顺序,获取所述第三数量的所述文件名作为待释放文件名;

根据所述待释放文件名从所述数据缓存表中查找匹配的所述存储文件,作为待释放存储文件;

将所述待释放存储文件作为空闲存储块释放到所述内存映射文件中。

结合第一方面,本发明实施例提供了第一方面的第六种可能的实施方式,其中,所述的磁盘内部的数据缓存方法,还包括:将多个所述空闲存储块串连在一起建立内存块链表;从所述内存映射文件中抽取所述第一数量的所述空闲存储块,包括:

按照所述内存块链表中所述空闲存储块的串连顺序,从所述内存块链表抽取所述第一数量的所述空闲存储块。

结合第一方面,本发明实施例提供了第一方面的第七种可能的实施方式,其中,所述的磁盘内部的数据缓存方法,还包括:将多个所述待用存储块串连在一起建立文件块链表;

通过所述待用存储块存储所述缓存文件,得到存储文件,包括:

按照所述文件块链表中所述待用存储块的串连顺序,依次通过所述待用存储块存储所述缓存文件,得到所述存储文件。

第二方面,本发明实施例还提供了一种磁盘内部的数据缓存装置,包括:

创建模块,用于创建用于映射磁盘的存储文件的内存映射文件,所述内存映射文件对应有虚拟地址空间的空闲内存区域;所述内存映射文件预先被划分为多个空闲存储块;

第一计算模块,用于根据预存的缓存文件的大小,计算所述内存映射文件中用于存储所述缓存文件的所述空闲存储块的第一数量;

抽取模块,用于从所述内存映射文件中抽取所述第一数量的所述空闲存储块,并将所述空闲存储块设置为待用存储块;

第一存储模块,用于通过所述待用存储块存储所述缓存文件,得到存储文件。

结合第二方面,本发明实施例提供了第二方面的第一种可能的实施方式,其中,所述的磁盘内部的数据缓存装置,还包括:

检测模块,用于实时检测所述内存映射文件对应的所述空闲内存区域的大小;

第二计算模块,用于在检测到所述空闲内存区域的大小小于第一设定阈值时,根据第二设定阈值,计算待释放的所述存储文件的第三数量;其中,所述第二设定阈值大于所述第一设定阈值;

释放模块,用于将所述第三数量的所述存储文件作为空闲存储块释放到所述内存映射文件中。

结合第二方面的第一种可能的实施方式,本发明实施例提供了第二方面的第二种可能的实施方式,其中,所述检测模块,包括:

第一获取单元,用于实时获取所述内存映射文件中所述空闲存储块的第二数量;

计算单元,用于根据所述第二数量,计算所述内存映射文件中所述空闲内存区域的大小。

结合第二方面的第一种可能的实施方式,本发明实施例提供了第二方面的第三种可能的实施方式,其中,所述的磁盘内部的数据缓存装置,还包括:

第二存储模块,用于每检测到一个所述存储文件时,将所述存储文件存储的所述缓存文件的文件名存储到预先建立的热度链表的头部;其中,所述热度链表包括:用于存储所述文件名的第一文件名存储区。

结合第二方面的第三种可能的实施方式,本发明实施例提供了第二方面的第四种可能的实施方式,其中,所述的磁盘内部的数据缓存装置,还包括:

第三存储模块,用于每检测到一个所述存储文件时,将所述存储文件及其存储的所述缓存文件的文件名存储到预先建立的数据缓存表中;其中,所述数据缓存表包括:用于存储所述存储文件的存储文件存储区和用于存储所述文件名的第二文件名存储区。

结合第二方面的第四种可能的实施方式,本发明实施例提供了第二方面的第五种可能的实施方式,其中,所述释放模块,包括:

第二获取单元,用于根据所述热度链表中所述第一文件名存储区存储的所述文件名从后到前的排序顺序,获取所述第三数量的所述文件名作为待释放文件名;

查找单元,用于根据所述待释放文件名从所述数据缓存表中查找匹配的所述存储文件,作为待释放存储文件;

释放单元,用于将所述待释放存储文件作为空闲存储块释放到所述内存映射文件中。

结合第二方面,本发明实施例提供了第二方面的第六种可能的实施方式,其中,所述的磁盘内部的数据缓存装置,还包括:第一建立模块,用于将多个所述空闲存储块串连在一起建立内存块链表;

所述抽取模块具体用于,按照所述内存块链表中所述空闲存储块的串连顺序,从所述内存块链表抽取所述第一数量的所述空闲存储块。

结合第二方面,本发明实施例提供了第二方面的第七种可能的实施方式,其中,所述的磁盘内部的数据缓存装置,还包括:第二建立模块,用于将多个所述待用存储块串连在一起建立文件块链表;

所述第一存储模块具体用于,按照所述文件块链表中所述待用存储块的串连顺序,依次通过所述待用存储块存储所述缓存文件,得到所述存储文件。

本发明实施例提供的一种磁盘内部的数据缓存方法及装置,包括:创建用于映射磁盘的存储文件的内存映射文件,内存映射文件对应有虚拟地址空间的空闲内存区域;内存映射文件预先被划分为多个空闲存储块;根据预存的缓存文件的大小,计算内存映射文件中用于存储缓存文件的空闲存储块的第一数量;从内存映射文件中抽取第一数量的空闲存储块,并将空闲存储块设置为待用存储块;通过待用存储块存储缓存文件,得到存储文件,与现有技术中直接在磁盘上创建文件副本并建立索引文件来记录文件总量及访问关系的方式以及通过文件拼凑的形式组合成大文件的方式,存在读取性能下降,易造成磁盘空间浪费相比,其能够对多个空闲存储块的缓存空间进行重复擦写及回收利用,提升了缓存空间的利用率,使缓存空间利用最大化,提升缓存文件访问的命中率,同时提升了缓存文件的读写速度。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本发明实施例所提供的一种磁盘内部的数据缓存方法的流程图;

图2示出了本发明实施例所提供的另一种磁盘内部的数据缓存方法的流程图;

图3示出了本发明实施例所提供的另一种磁盘内部的数据缓存方法的流程图;

图4示出了本发明实施例所提供的另一种磁盘内部的数据缓存方法的流程图;

图5示出了本发明实施例所提供的内存映射文件对应的内存块链表的示意图;

图6示出了本发明实施例所提供磁盘内部的数据缓存方法的整体示意图;

图7示出了本发明实施例所提供的一种磁盘内部的数据缓存装置的结构示意图;

图8示出了本发明实施例所提供的另一种磁盘内部的数据缓存装置的结构示意图;

图9示出了本发明实施例所提供的一种磁盘内部的数据缓存装置中检测模块和释放模块的结构示意图。

主要标号说明:

11、创建模块;12、第一计算模块;13、抽取模块;14、第一存储模块;15、检测模块;16、第二计算模块;17、释放模块;151、第一获取单元;152、计算单元;171、第二获取单元;172、查找单元;173、释放单元。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

很多文件服务或数据库服务通常会在以下三种情况采用磁盘驻留的方式来提升自身访问性能。其中,采用磁盘驻留的方式不局限于上述三种方式:

(1)处理大数据量时。

(2)应用服务提供的数据并不是总能使用(如离线情况)。

(3)缓存的数据必须能在进程回收和机器重启的情况下保持有效。

现有磁盘驻留方法一种是采用文件直接落盘的形式进行缓存,这种做法是通过在磁盘上创建文件副本并建立一个索引文件来记录文件总量及访问关系。而建立的文件副本数量是1:1,当缓存的总量较大时(如:8G),而文件又相对较小时(如:10KB),就会产生过万的文件数量,不仅读取性能下降,还会产生不少磁盘碎片造成空间浪费这种方法容易产生磁盘碎片,造成空间浪费。而另外一种磁盘驻留方法,是通过文件拼凑的形式组合成大文件,这种方式通常会在大文件中划分连续的一块区域来存储一个文件,能够保证顺序读写,提升读取速度。但这种方式有个严重的缺陷是不能支持随机擦写,比如一块空间一旦被文件占用后,当此文件删除后,空间也不能再次回收利用,造成磁盘空间浪费,导致有限驻留空间内缓存的有效文件数据较少。

基于上述磁盘驻留缓存文件暴露的缺点,本发明实施例提供了一种磁盘内部的数据缓存方法及装置,其通过创建用于映射磁盘的存储文件的内存映射文件,并对该内存映射文件的缓存空间进行重复擦写及回收利用,提升了缓存空间的利用率,使缓存空间利用最大化,同时提升了缓存文件的读写速度,下面通过实施例进行描述。

参见图1所示的磁盘内部的数据缓存方法的流程图,本发明实施例提供了一种磁盘内部的数据缓存方法,包括:

S101、创建用于映射磁盘的存储文件的内存映射文件,所述内存映射文件对应有虚拟地址空间的空闲内存区域;所述内存映射文件预先被划分为多个空闲存储块。

本发明实施例中,磁盘的存储文件即磁盘驻留缓存空间;每个内存映射文件保留一个虚拟地址空间的空闲内存区域(或者称为虚拟内存区);在创建内存映射文件完成后,将该内存映射文件划分为多个空闲存储块,每个空闲存储块均对应一个虚拟内存区,该空闲存储块用于被抽取出来,后续通过其对应的虚拟内存去存储缓存文件。

具体的,上述内存映射文件的大小可以根据实际应用的缓存文件的大小进行设置,本发明实施例中,磁盘驻留缓存空间大小优选设置为1GB的整数倍,对应的,建立的磁盘驻留缓存空间的大小也优选设置为1GB的整数倍,下面以4GB的为例进行阐述。

具体的,采用内存映射方式创建4个1GB(1GB=1024MB,1MB=1024KB,1KB=1024B)的内存映射文件(首先创建的内存映射文件为大文件),该大文件用于映射磁盘的存储文件,然后将每个大文件按4KB小块进行分割,每个大文件有262144(1024*1024/4)个小块,对每个小块按内存顺序进行编号,第一个大文件中小块编号是[0,262143],第二个为[262144,524287],第三个为[524288,786431],第四个为[786432,1048575]。

S102、根据预存的缓存文件的大小,计算所述内存映射文件中用于存储所述缓存文件的所述空闲存储块的第一数量。

本发明实施例中,在接收到待存的缓存文件后,首先确定该缓存文件的大小,然后根据该缓存文件的大小,计算所述内存映射文件中用于存储所述缓存文件的所述空闲存储块的第一数量。

具体的,以缓存文件大小为200KB为例,通过以缓存文件大小除以对大文件的分割数4(200/4),得到所需的空闲存储块数量为50。

S103、从所述内存映射文件中抽取所述第一数量的所述空闲存储块,并将所述空闲存储块设置为待用存储块。

具体的,在计算得到空闲存储块的第一数量后(如50),从分割的所有的空闲存储块中取出50个小块,作为待用存储块,然后将这50个小块从内存映射文件中移出。

S104、通过所述待用存储块存储所述缓存文件,得到存储文件。

具体的,在得到50个小块后,通过这50个小块存储接收到的缓存文件,得到存储文件。

本发明实施例提供的一种磁盘内部的数据缓存方法,与现有技术中直接在磁盘上创建文件副本并建立索引文件来记录文件总量及访问关系的方式以及通过文件拼凑的形式组合成大文件的方式,存在读取性能下降,易造成磁盘空间浪费相比,其能够对多个空闲存储块的缓存空间进行重复擦写及回收利用,提升了缓存空间的利用率,使缓存空间利用最大化,提升缓存文件访问的命中率,同时提升了缓存文件的读写速度。

进一步的,为了保证接收到的缓存文件都能顺利的进行存储,提升存储缓存文件的读写速度,本发明实施例中还定时检测内存映射文件对应的所述空闲内存区域的大小,并在检测到空闲内存区域不足时,及时释放存储了缓存文件后的待用存储块,具体的,参见图2,本发明实施例提供的磁盘内部的数据缓存方法,还包括如下步骤:

S105、实时检测所述内存映射文件对应的所述空闲内存区域的大小。

本发明实施例中,参见图3,检测内存映射文件对应的空闲内存区域的大小的方式如下:

S1051、实时获取所述内存映射文件中所述空闲存储块的第二数量;

S1052、根据所述第二数量,计算所述内存映射文件中所述空闲内存区域的大小。

具体的,通过获取内存映射文件中空闲存储块的第二数量,即可计算出剩余空间的大小N(MB)(N=空闲存储块的第二数量*4/1024)即可计算出剩余空间的大小N(MB)(N=空闲存储块的第二数量*4/1024)。

S106、在检测到所述空闲内存区域的大小小于第一设定阈值时,根据第二设定阈值,计算待释放的所述存储文件的第三数量;其中,所述第二设定阈值大于所述第一设定阈值。

本发明实施例中,以第一设定阈值为50MB、第二设定阈值为200MB为例,在检测到步骤105计算的空闲内存区域的大小小于50MB时,则确定将所述内存映射文件的可用虚拟内存区不足,此时,根据第二设定阈值,计算待释放的所述存储文件的第三数量,以便后续将第三数量的存储文件作为空闲存储块释放到内存映射文件中,使内存映射文件的可用虚拟内存区的大小满足第二设定阈值(此处的满足认为可用虚拟内存区大于或者等于第二设定阈值),此时,认为内存映射文件的可用虚拟内存区已足够,不再进行释放存储文件的过程。

本发明实施例中,上述第一设定阈值和第二设定阈值均可以根据具体应用场景为进行设定,上述50MB和200MB仅仅是示例说明,本发明实施例不限制其具体数值。本发明实施例中,第二设定阈值大于第一设定阈值的目的是,避免内存映射文件的可用虚拟内存区的大小多次不足,使得进行多次释放存储文件引起的不必要开销。

S107、将所述第三数量的所述存储文件作为空闲存储块释放到所述内存映射文件中。

具体的,在将存储文件作为空闲存储块释放到所述内存映射文件中后,所述内存映射文件的虚拟内存区满足第二设定阈值,此时,认为内存映射文件的可用虚拟内存区已足够,不再进行释放存储文件的过程。

进一步的,本发明实施例提供的磁盘内部的数据缓存方法,还包括:

每检测到一个所述存储文件时,将所述存储文件存储的所述缓存文件的文件名存储到预先建立的热度链表的头部;其中,所述热度链表包括:用于存储所述文件名的第一文件名存储区。

具体的,预先建立热度链表ListHeatFiles,该热度链表ListHeatFiles包括用于存储所述文件名的第一文件名存储区,然后每在检测到一个存储文件时,将该存储文件对应的文件名(即该存储文件存储的缓存文件的文件名)存储到上述热度链表中,并置于热度链表的头部。也就是说越是最后的存储文件,其在热度链表中就越靠前。

每次命中驻留磁盘缓存文件后,将ListHeatFiles热度链表中的此文件调整到头部。这样命中磁盘驻留缓存中次数越多的文件,在ListHeatFiles热度链表中越靠前,长时间未命中的文件排名越靠后。

进一步的,本发明实施例提供的磁盘内部的数据缓存方法,还包括:

每检测到一个所述存储文件时,将所述存储文件及其存储的所述缓存文件的文件名存储到预先建立的数据缓存表中;其中,所述数据缓存表包括:用于存储所述存储文件的存储文件存储区和用于存储所述文件名的第二文件名存储区。

具体的,预先数据缓存表(即缓存map表MapFiles),该数据缓存表MapFiles包括用于存储所述存储文件的存储文件存储区和用于存储所述文件名的第二文件名存储区,然后每在检测到一个存储文件时,将该存储文件和该存储文件对应的文件名(即该存储文件存储的缓存文件的文件名)均存储到上述数据缓存表中。

即每检测到一个所述存储文件时,将该存储文件添加到以文件名为Key,以链表B1为Value的文件缓存map表MapFiles中。

进一步的,参见图4,本发明实施例提供的磁盘内部的数据缓存方法中,上述步骤107中,将所述第三数量的所述存储文件作为空闲存储块释放到所述内存映射文件中,包括:

S1061、根据所述热度链表中所述第一文件名存储区存储的所述文件名从后到前的排序顺序,获取所述第三数量的所述文件名作为待释放文件名。

具体的,由于每次命中驻留磁盘缓存文件后,该缓存文件存储到ListHeatFiles热度链表的头部。这样命中磁盘驻留缓存中次数越多的文件,在ListHeatFiles热度链表中越靠前,长时间未命中的文件排名越靠后。

本发明实施例中,若空闲内存区域的大小小于第一设定阈值(即小于50MB)时,则通过热度链表ListHeatFiles从尾部开始删除,首先获取热度链表中排名依次从后至前的第三数量的所述文件名作为待释放文件名。

S1062、根据所述待释放文件名从所述数据缓存表中查找匹配的所述存储文件,作为待释放存储文件。

具体的,以文件名为索引(key),从数据缓存表(即MapFiles)中找到对应的存储文件,并将该存储文件设置为待释放存储文件。

S1063、将所述待释放存储文件作为空闲存储块释放到所述内存映射文件中。

上述过程利用文件热度决定缓存文件驻留生命周期,提升了驻留空间内存储的缓存文件都是有效文件的命中率,即提升缓存文件访问的命中率。

进一步的,本发明实施例提供的磁盘内部的数据缓存方法中,还包括:将多个所述空闲存储块串连在一起建立内存块链表;步骤103中从所述内存映射文件中抽取所述第一数量的所述空闲存储块,包括:

按照所述内存块链表中所述空闲存储块的串连顺序,从所述内存块链表抽取所述第一数量的所述空闲存储块。

进一步的,本发明实施例提供的磁盘内部的数据缓存方法中,还包括:将多个所述待用存储块串连在一起建立文件块链表;

步骤104,通过所述待用存储块存储所述缓存文件,得到存储文件,包括:

按照所述文件块链表中所述待用存储块的串连顺序,依次通过所述待用存储块存储所述缓存文件,得到所述存储文件。

本发明实施例提供的一种磁盘内部的数据缓存方法,与现有技术中直接在磁盘上创建文件副本并建立索引文件来记录文件总量及访问关系的方式以及通过文件拼凑的形式组合成大文件的方式,存在读取性能下降,易造成磁盘空间浪费相比,其能够对多个空闲存储块的缓存空间进行重复擦写及回收利用,提升了缓存空间的利用率,使缓存空间利用最大化,提升缓存文件访问的命中率,同时提升了缓存文件的读写速度。

下面结合图5和图6整体对本发明实施例提供的磁盘内部的数据缓存方法进行说明:

首先对本发明实施例提供的磁盘内部的数据缓存方法进行概括说明:

参考图5和图6,首先,创建一定数量大小为1GB的文件,把每个1GB的文件按4K大小进行分块并顺序编号,加入到可用空间链表A(即下面的内存块链表)中。依据要缓存文件的大小从可用空间链表A中释放出等量的存储块并进行数据拷贝,同时把这些块建立起新的链表B(即下面的文件块链表),以文件名为Key,值为链表B加入到map中。同时建立起以文件名为元素的热度链表,新插入或新访问的文件调整到热度链表的头部。当可用空间链表容量不足时,可以从热度链表的尾部开始删除,并把对应的数据块加入到可用空间链表A中。达到重复擦写利用和提升缓存命中率的目的。其中,通常情况下,一个链表A对应多个链表B,即一个链表A对应链表B1、B2…Bn。

需要说明的是,本发明实施例提供的磁盘驻留缓存空间(对应内存映射文件的空闲内存区域)大小约定为1GB的整数倍,本发明实施例以4GB的为例进行阐述。

结合图5和图6,下面对本发明实施例提供的磁盘内部的数据缓存方法进行整体说明,该磁盘内部的数据缓存方法:

1、用于映射磁盘的存储文件的内存映射文件并对该内存映射文件按4KB小块进行分割,将分割得到的空闲存储块串连起来建立起内存块链表。

具体的,采用内存映射方式创建4个1GB(1GB=1024MB,1MB=1024KB,1KB=1024B)的大文件(即内存映射文件),每个大文件按4K小块进行分割,每个大文件有262144(1024*1024/4)个小块。对每个小块按内存顺序进行编号,第一个大文件中小块编号是[0,262143],第二个为[262144,524287],第三个为[524288,786431],第四个为[786432,1048575],使用链表A(方便后续说明将内存块链表标记为A)将所有的小块串起来。

2、依据预存的缓存文件的大小,计算所述内存映射文件中用于存储所述缓存文件的所述空闲存储块的第一数量,并建立文件块链表。

具体的,以缓存文件大小为200KB为例,所需的内存文件块数量(即第一数量)为50(200/4),从链表A中取出50个小块建立新的链表B1(即文件块链表),同时从链表A中移出这50个小块,使用链表B1存储此缓存文件,得到存储文件。然后将该存储文件添加到以文件名为Key,以链表B1为Value的文件缓存map表(即数据缓存表)MapFiles中,同时添加插入到文件热度链表ListHeatFiles的头部。

3、更新文件热度链表ListHeatFiles

每次命中驻留磁盘缓存文件后,将热度链表ListHeatFiles中的此缓存文件调整到热度链表ListHeatFiles的头部。这样命中磁盘驻留缓存中次数越多的文件,在ListHeatFiles热度链表中越靠前,长时间未命中的的文件排名越靠后。

4、在检测到所述空闲内存区域的大小小于第一设定阈值时,删除磁盘驻留缓存中经常不使用的文件。

具体的,当驻留空间(即内存映射文件中的空闲内存区域)剩余大小不足时,这里以50MB为例,通过获取链表A的中空闲存储块的数量,即可计算出剩余空间的大小N(MB)(N=链表元素总数*4/1024)。若剩余空间的大小小于50MB,根据第二设定阈值,计算待释放的所述存储文件的第三数量,则通过热度链表ListHeatFiles从尾部开始删除,即根据热度链表中第一文件名存储区存储的文件名从后到前的排序顺序,获取第三数量的文件名作为待释放文件名,根据待释放文件名从MapFiles中(即数据缓存表中)找到对应此待释放文件名的链表B,并将B插入到链表A中。继续此过程,直到驻留空间剩余大小超过第二阈值200MB,认为内存映射文件的可用虚拟内存区已足够,不再进行释放存储文件的过程。

本发明实施例中,上述第一设定阈值和第二设定阈值均可以根据具体应用场景为进行设定,上述50MB和200MB仅仅是示例说明,本发明实施例不限制其具体数值。本发明实施例中,第二设定阈值大于第一设定阈值的目的是,避免内存映射文件的可用虚拟内存区的大小多次不足,使得进行多次释放存储文件引起的不必要开销。

本发明实施例提供的磁盘内部的数据缓存方法,采用可重复擦写及回收小块机制,保证了缓存文件空间利用最大化。利用文件热度决定缓存文件驻留生命周期,提升缓存文件访问的命中率。基于文件内存映射的方式,直接采用操作内存形式操作文件,提升缓存文件的读写速度。

本发明实施例提供的磁盘内部的数据缓存方法:1、采用内存映射方式和内存池思想重复擦写及回收小块,提升缓存空间利用最大化。2、利用文件热度决定缓存文件驻留生命周期,提升缓存文件访问的命中率。

本发明实施例提供的磁盘内部的数据缓存方法把内存映射方式与内存池思想结合起来,做到缓存空间重复擦写及回收利用,提升缓存空间利用最大化,同时结合热度文件生命周期最大化,保证了在有限的驻留空间内,提升缓存文件访问的命中率,进而提升缓存文件的读写效率。

本发明实施例提供的一种磁盘内部的数据缓存方法,主要适用于文件服务器或图片服务器,能够提高文件(如图片)读取速度。

本发明实施例提供了一种磁盘内部的数据缓存装置,所述数据缓存装置用于执行上述磁盘内部的数据缓存方法,参考图7,所述装置包括:

创建模块11,用于创建用于映射磁盘的存储文件的内存映射文件,所述内存映射文件对应有虚拟地址空间的空闲内存区域;所述内存映射文件预先被划分为多个空闲存储块;

第一计算模块12,用于根据预存的缓存文件的大小,计算所述内存映射文件中用于存储所述缓存文件的所述空闲存储块的第一数量;

抽取模块13,用于从所述内存映射文件中抽取所述第一数量的所述空闲存储块,并将所述空闲存储块设置为待用存储块;

第一存储模块14,用于通过所述待用存储块存储所述缓存文件,得到存储文件。

本发明实施例提供的一种磁盘内部的数据缓存装置,与现有技术中直接在磁盘上创建文件副本并建立索引文件来记录文件总量及访问关系的方式以及通过文件拼凑的形式组合成大文件的方式,存在读取性能下降,易造成磁盘空间浪费相比,其能够对多个空闲存储块的缓存空间进行重复擦写及回收利用,提升了缓存空间的利用率,使缓存空间利用最大化,提升缓存文件访问的命中率,同时提升了缓存文件的读写速度。

进一步的,本发明实施例提供的磁盘内部的数据缓存装置,参考图8,还包括:

检测模块15,用于实时检测所述内存映射文件对应的所述空闲内存区域的大小;

第二计算模块16,用于在检测到所述空闲内存区域的大小小于第一设定阈值时,根据第二设定阈值,计算待释放的所述存储文件的第三数量;其中,所述第二设定阈值大于所述第一设定阈值;

释放模块17,用于将所述第三数量的所述存储文件作为空闲存储块释放到所述内存映射文件中。

进一步的,参考图9,本发明实施例提供的磁盘内部的数据缓存装置中,检测模块15,包括:

第一获取单元151,用于实时获取所述内存映射文件中所述空闲存储块的第二数量;

计算单元152,用于根据所述第二数量,计算所述内存映射文件中所述空闲内存区域的大小。

进一步的,本发明实施例提供的磁盘内部的数据缓存装置,还包括:

第二存储模块,用于每检测到一个所述存储文件时,将所述存储文件存储的所述缓存文件的文件名存储到预先建立的热度链表的头部;其中,所述热度链表包括:用于存储所述文件名的第一文件名存储区。

进一步的,本发明实施例提供的磁盘内部的数据缓存装置,还包括:

第三存储模块,用于每检测到一个所述存储文件时,将所述存储文件及其存储的所述缓存文件的文件名存储到预先建立的数据缓存表中;其中,所述数据缓存表包括:用于存储所述存储文件的存储文件存储区和用于存储所述文件名的第二文件名存储区。

进一步的,本发明实施例提供的磁盘内部的数据缓存装置中,参考图9,释放模块17,包括:

第二获取单元171,用于根据所述热度链表中所述第一文件名存储区存储的所述文件名从后到前的排序顺序,获取所述第三数量的所述文件名作为待释放文件名;

查找单元172,用于根据所述待释放文件名从所述数据缓存表中查找匹配的所述存储文件,作为待释放存储文件;

释放单元173,用于将所述待释放存储文件作为空闲存储块释放到所述内存映射文件中。

进一步的,本发明实施例提供的磁盘内部的数据缓存装置,还包括:第一建立模块,用于将多个所述空闲存储块串连在一起建立内存块链表;

所述抽取模块具体用于,按照所述内存块链表中所述空闲存储块的串连顺序,从所述内存块链表抽取所述第一数量的所述空闲存储块。

进一步的,本发明实施例提供的磁盘内部的数据缓存装置,还包括:第二建立模块,用于将多个所述待用存储块串连在一起建立文件块链表;

所述第一存储模块具体用于,按照所述文件块链表中所述待用存储块的串连顺序,依次通过所述待用存储块存储所述缓存文件,得到所述存储文件。

本发明实施例提供的一种磁盘内部的数据缓存装置,与现有技术中直接在磁盘上创建文件副本并建立索引文件来记录文件总量及访问关系的方式以及通过文件拼凑的形式组合成大文件的方式,存在读取性能下降,易造成磁盘空间浪费相比,其能够对多个空闲存储块的缓存空间进行重复擦写及回收利用,提升了缓存空间的利用率,使缓存空间利用最大化,提升缓存文件访问的命中率,同时提升了缓存文件的读写速度。

本发明实施例提供的一种磁盘内部的数据缓存装置,采用文件内存映射的方式并结合文件拼凑、内存池重复利用思想,精心设计了存储过程,从根本上保证对磁盘驻留文件的读取操作效率。具有如下三个优点:

1)定量的磁盘驻留空间内,采用可重复擦写机制,提升缓存文件空间利用最大化。

2)利用文件热度决定缓存文件驻留生命周期,提升缓存文件访问的命中率。

3)基于文件内存映射的方式,提升缓存文件的读写速度。

本发明实施例提供的一种磁盘内部的数据缓存方法,主要适用于文件服务器或图片服务器,能够提高文件(如图片)读取速度。

本发明实施例所提供的磁盘内部的数据缓存装置可以为设备上的特定硬件或者安装于设备上的软件或固件等。本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,前述描述的系统、装置和单元的具体工作过程,均可以参考上述方法实施例中的对应过程,在此不再赘述。

在本发明所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明提供的实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释,此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

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