一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

使用虚拟文件句柄操作存档文件的方法、系统及存储介质与流程

2022-02-19 14:02:15 来源:中国专利 TAG:


1.本发明属于实时数据库文件操作技术领域,具体涉及一种使用虚拟文件句柄操作存档文件的方法、系统及存储介质。


背景技术:

2.实时数据库根据工业企业的生产需求,通常需要将生产过程中采集的数据以时间范围或者占据空间大小为限制存储在多个存档文件中,用户通过客户端或者其他可视化平台调用存档文件中的历史数据,可以很清晰地监控生产过程的数据,展现生产指标的趋势,还可以将大量的数据提取进行数据分析。随着时间的推进,实时数据库的存档规模也会不断增长,一般可以存储几年甚至十几年的存档文件,文件数量也会达到几千上万。
3.现在的操作系统规定单个进程所持有的最大句柄数量一般为1024或2048,实时数据库的存档服务也不例外,除去一些必要操作所需要占据的句柄,剩余最多有2000个左右可以用作文件句柄。在存档文件数量超过2000后,现有的句柄数就不足以支撑全部文件的操作,为了保证服务正常运行,需要有相应的措施。在现有技术中,大多要采用扩充句柄数的方法来满足更多数量的文件操作,但这个设定数量需要在安装实时数据库时配置,实时数据库的存档规模难以估计,因此这种设计还存在不足。也有采用句柄数动态增长的方法,初始使用系统规定的数量,在超过规定规模后进行扩充,但这种方法同样存在问题:如果一直扩充进程句柄数,在达到一定大的数量后会影响系统的响应速度,造成实时数据库的性能下降,严重可导致进程崩溃,服务无法正常工作,因此这种设计也存在一定的缺陷。


技术实现要素:

4.本发明的目的在于针对上述现有技术中的问题,提供一种使用虚拟文件句柄操作存档文件的方法、系统及存储介质,采用文件句柄缓冲的方式来虚拟文件句柄的管理,从而实现在不影响系统性能的情况下保证存档文件的正常操作。
5.为了实现上述目的,本发明有如下的技术方案:
6.第一方面,本发明实施例提供一种使用虚拟文件句柄操作存档文件的方法,包括以下步骤:
7.访问存档文件,获取相应存档文件句柄值;
8.根据存档文件的句柄值检测被访问的存档文件是否为打开状态,如果存档文件的句柄值不为无效值,则为已打开文件;若存档文件为打开状态则加锁提供使用,且已打开存档文件的数量加一,若存档文件为非打开状态则统计已经打开的存档文件的数量;
9.检测已经打开的存档文件的数量是否超过文件句柄数,若否,打开该非打开状态的存档文件,设定句柄值并加锁提供使用;若是,则在一个列表中记录所有已经打开的文件句柄,将最少使用的文件句柄关闭并释放该文件句柄,打开新的文件句柄并加锁提供使用;
10.使用文件句柄完毕,在不关闭文件句柄的条件下进行解锁处理。
11.作为本发明方法的一种优选方案,所述的存档文件句柄通过一个hash表来获取,
所述的hash表管理文件句柄对象,虚拟所有文件名与文件句柄,通过文件句柄判断或改变打开状态,通过文件名对应存档文件进行访问。
12.作为本发明方法的一种优选方案,所述的加锁操作在访问文件对象时添加读锁,只有在添加、删除、复用文件时添加写锁。
13.作为本发明方法的一种优选方案,所述的列表采用lru算法记录所有已经打开的文件句柄,具体的,将新的文件句柄添加在表头,表尾部记录的是最少使用的文件句柄,使被访问的文件句柄被调整到表头。
14.作为本发明方法的一种优选方案,对于多次被访问的文件句柄,设定调整时间间隔,超过调整时间间隔时再调整其在列表中的顺序。
15.作为本发明方法的一种优选方案,所述句柄值的无效值为

1的二进制补码0xffffffff。
16.作为本发明方法的一种优选方案,所述访问存档文件包括对文件进行的以下操作:文件打开、文件关闭、文件写入、文件读取。
17.第二方面,本发明实施例还提供一种使用虚拟文件句柄操作存档文件的系统,包括:
18.文件访问模块,用于访问存档文件,获取相应存档文件句柄值;
19.文件状态检测模块,用于根据存档文件的句柄值检测被访问的存档文件是否为打开状态,如果存档文件的句柄值不为无效值,则为已打开文件;若存档文件为打开状态则加锁提供使用,且已打开存档文件的数量加一,若存档文件为非打开状态则统计已经打开的存档文件的数量;
20.文件句柄调配模块,用于检测已经打开的存档文件的数量是否超过文件句柄数,若否,打开该非打开状态的存档文件,设定句柄值并加锁提供使用;若是,则在一个列表中记录所有已经打开的文件句柄,将最少使用的文件句柄关闭并释放该文件句柄,打开新的文件句柄并加锁提供使用;
21.解锁模块,用于使用文件句柄完毕,在不关闭文件句柄的条件下进行解锁处理。
22.第三方面,本发明实施例还提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现所述使用虚拟文件句柄操作存档文件的方法的步骤。
23.相较于现有技术,本发明第一方面至少具有如下的有益效果:
24.通常一个文件句柄操控一个存档文件,但是存档文件的数量比系统限定的文件句柄数量要多,因此一开始访问文件时候,可能系统限定的句柄还有空闲的,但随着访问文件数量的增多,这时可能所有的句柄都是打开状态,而再访问未打开的文件就需要关闭最久未使用的句柄,用来操控未打开的存档文件。本发明在访问存档文件时,设置了文件句柄缓冲池,所有访问通过获取虚拟文件句柄来真实访问文件,在面对海量存档文件时,有效利用了少量的句柄来动态使用大量的文件,很大程度节省了系统资源,在不扩充句柄数的情况下保证实时数据库功能正常,在存档文件不断增长的同时也能够确保服务的性能不下降,增强了系统的稳定性。
25.进一步的,本发明对虚拟文件句柄的获取与归还进行了优化,对于频繁被访问的热文件长期持有句柄,且不会每次调整在列表中的排列,提升了使用效率;对于列表末尾的文件句柄,长时间未被访问,列表排满后有了新的访问再进行句柄归还和重新获取,这样充
分利用了所有文件句柄。
26.可以理解的是,上述第二方面至第三方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
附图说明
27.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
28.图1本发明实施例使用虚拟文件句柄操作存档文件的方法流程图;
29.图2本发明实施例的虚拟文件句柄管控系统结构示意图。
具体实施方式
30.为使本发明的目的、技术方案及优点更加清楚、明确,以下结合具体实施方式与附图对本发明进一步详细说明。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
31.参见图1,本发明提出一种使用虚拟文件句柄操作存档文件的方法,包括以下步骤:
32.s1:访问存档文件,获取相应存档文件句柄;
33.存档文件的访问包括对文件的一系列操作:文件打开(fopen)、文件关闭(fclose)、文件写入(fwrite)、文件读取(fread)等,访问过程对外部来说只需要提供文件名。
34.存档文件句柄通过一个hash表来获取,hash表管理文件句柄对象,虚拟了所有文件名与文件句柄,通过文件句柄判断或改变打开状态,当文件未被打开时,文件句柄为无效值,一般为

1的二进制补码0xffffffff;通过文件名对应存档文件进行访问,文件名可以直接对应到相应的存档文件。
35.s2:检测获取的存档文件是否为打开状态,若是,直接加锁提供使用;若否,则统计已经打开的文件数量;
36.加锁操作用来保证文件访问的安全,一般情况下,使用文件句柄需要访问文件对象时,添加读锁,只有在添加、删除、复用文件时,添加写锁。在使用文件句柄完毕后,进行解锁操作。
37.已打开文件通过虚拟文件句柄值来进行判断,若不为无效值,则为已打开文件,使已打开文件数量加一。
38.s3:检测统计数量是否超过限定文件句柄数,若否,直接打开该文件,设定句柄值并加锁提供使用;若是,在一个列表中记录所有打开的文件句柄,将最近最少使用的文件句柄关闭并释放资源,打开新的文件句柄并加锁提供使用;
39.列表采用改进的lru算法,即最久未使用淘汰算法,新的文件句柄将被添加在表
头,表尾部为最长时间未使用的文件句柄,被访问的文件句柄被调整到表头,而对于再次频繁访问的文件句柄则不需要每次都调整顺序。因为一个频繁访问的文件句柄,一般都在列表的前端,每次都进行调整会浪费资源,设定一个调整时间间隔,超过时间间隔才会进行调整。
40.s4:使用文件句柄完毕,虚拟关闭文件句柄,即不关闭文件句柄仅做解锁处理。
41.使用完的文件句柄有可能过一段时间甚至很快再被使用,一般位列lru列表前端,因此虚拟关闭句柄后再次被访问时文件状态依然是打开,可以直接进行使用。只有在访问量很大,比如访问时间范围很大的一段历史数据,需要打开很多存档文件时可能才会直接释放资源。这种情况虽然虚拟文件句柄切换时会比直接使用物理文件句柄多了缓冲响应时间,但总体性能要优于直接扩充句柄数。
42.本发明在睿腾实时数据库系统中历史存档模块中进行了验证,系统进程允许打开最大文件句柄数为2048,其中48个作为进程保留的句柄,2000个用作文件句柄使用。在面对10000个以上的文件管理规模时,采用虚拟文件句柄来操作存档文件,能够避免随着存档文件数量增大一直扩充系统句柄数从而造成的系统性能下降。在实际应用中完善了文件访问体系,文件访问操作在内部均收敛为“获取句柄,使用句柄,归还句柄”,外部面向用户的还是对所有存档文件的操作,同时保证了实时数据库的功能与性能。
43.例如:用户访问实时数据库,需要查询几个测点的历史数据,时间为2020/01/01到2020/12/31之间,一年时间的数据一般对应了365(366)个存档文件(一个存档文件时间区间一般为一天),既需要一次性打开365个文件。通过时间区间在哈希表中查找相应的文件名,获取相应文件句柄,如果文件句柄不为无效值(

1或0),通过文件句柄直接对文件进行加锁使用操作;如果为无效值,说明文件为未打开状态,此时需要虚拟分配文件句柄,通过文件句柄值来统计已经打开的文件,如果未达到2000,则直接设置文件句柄,加锁使用;如果lru列表已经达到2000了,从表尾部开始关闭文件句柄,对剩余需要访问的文件设置文件句柄,并加入lru列表头部,加锁使用。当查询结束后,虚拟关闭所有文件句柄,文件句柄依然存在于lru列表中,等待下一次继续被访问或过一段时间被新的文件访问代替。
44.参见图2,本发明实施例的虚拟文件句柄管控系统包括:
45.m1:文件访问模块,用于对文件的一系列操作:文件打开(fopen)、文件关闭(fclose)、文件写入(fwrite)、文件读取(fread)等,作为外部使用。不真实管控文件句柄,用户提供文件名即可访问,通过hash表管理文件名与句柄对象。
46.m2:句柄缓冲模块,用于管理文件句柄对象,即文件句柄缓冲池,包含了一个lru列表,作为内部管控。虚拟了文件句柄获取,通过文件名获取虚拟句柄来真实访问文件,并插入lru头部,访问完成后虚拟归还句柄,在lru列表末尾中被淘汰后释放文件句柄。
47.本发明另一实施例还提供一种使用虚拟文件句柄操作存档文件的系统,包括:
48.文件访问模块,用于访问存档文件,获取相应存档文件句柄值;
49.文件状态检测模块,用于根据存档文件的句柄值检测被访问的存档文件是否为打开状态,如果存档文件的句柄值不为无效值,则为已打开文件;若存档文件为打开状态则加锁提供使用,且已打开存档文件的数量加一,若存档文件为非打开状态则统计已经打开的存档文件的数量;
50.文件句柄调配模块,用于检测已经打开的存档文件的数量是否超过文件句柄数,
若否,打开该非打开状态的存档文件,设定句柄值并加锁提供使用;若是,则在一个列表中记录所有已经打开的文件句柄,将最少使用的文件句柄关闭并释放该文件句柄,打开新的文件句柄并加锁提供使用;
51.解锁模块,用于使用文件句柄完毕,在不关闭文件句柄的条件下进行解锁处理。
52.本发明另一实施例还提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现所述使用虚拟文件句柄操作存档文件的方法的步骤。
53.示例性的,所述的计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在计算机可读存储介质中,并由所述处理器执行,以完成本发明使用虚拟文件句柄操作存档文件的方法的步骤。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机可读指令段,该指令段用于描述所述计算机程序在服务器中的执行过程。
54.所述服务器可以是笔记本、台式电脑及云端服务器等计算设备。所述服务器可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,所述服务器还可以包括更多或更少的部件,或者组合某些部件,或者不同的部件,例如,所述服务器还可以包括输入输出设备、网络接入设备、总线等。
55.所述处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field

programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
56.所述存储器可以是所述服务器的内部存储单元,例如服务器的硬盘或内存。所述存储器也可以是所述服务器的外部存储设备,例如所述服务器上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。进一步地,所述存储器还可以既包括所述服务器的内部存储单元也包括外部存储设备。所述存储器用于存储所述计算机可读指令以及所述服务器所需的其他程序和数据。所述存储器还可以用于暂时地存储已经输出或者将要输出的数据。
57.需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
58.所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本技术的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
59.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用
时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质。例如u盘、移动硬盘、磁碟或者光盘等。
60.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
61.以上所述实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围,均应包含在本技术的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献