CN110309257B - 一种文件读写打开方法及装置 - Google Patents

一种文件读写打开方法及装置 Download PDF

Info

Publication number
CN110309257B
CN110309257B CN201810210455.4A CN201810210455A CN110309257B CN 110309257 B CN110309257 B CN 110309257B CN 201810210455 A CN201810210455 A CN 201810210455A CN 110309257 B CN110309257 B CN 110309257B
Authority
CN
China
Prior art keywords
stream
read
index file
target index
write
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201810210455.4A
Other languages
English (en)
Other versions
CN110309257A (zh
Inventor
邓长春
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Hikvision Digital Technology Co Ltd
Original Assignee
Hangzhou Hikvision Digital Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hangzhou Hikvision Digital Technology Co Ltd filed Critical Hangzhou Hikvision Digital Technology Co Ltd
Priority to CN201810210455.4A priority Critical patent/CN110309257B/zh
Publication of CN110309257A publication Critical patent/CN110309257A/zh
Application granted granted Critical
Publication of CN110309257B publication Critical patent/CN110309257B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • G06F16/316Indexing structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/3331Query processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例提供了一种文件读写打开方法及装置,读打开方法包括:获取针对目标索引文件的读入流的请求;判断已开启的读入流中是否存在目标索引文件的读入流;若不存在目标索引文件的读入流,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流;文件流为读入流或写出流;开启新的读入流作为目标索引文件的目标读入流;将目标读入流标记为被占用,并根据目标读入流的引用读打开目标索引文件。应用本申请实施例,保证了句柄的分配,降低了由于句柄使用不合理引发ES的不健康服务状态的可能性。

Description

一种文件读写打开方法及装置
技术领域
本申请涉及数据处理技术领域,特别是涉及一种文件读写打开方法及装置。
背景技术
ElasticSearch(以下简称ES)是一种基于Lucene的分布式全文搜索系统,包括多个节点设备。Lucene为全文检索库,其内部基于文件的架构,对需要检索的文本建立倒排索引,这些索引以不同文件的形式进行存储,作为Lucene的索引。Lucene的索引由多个索引文件构成,索引文件分为元数据文件和索引数据文件。如图1所示的ES包括多个ES索引,如图1所示的ES索引1、ES索引2和ES索引3。每一ES索引包括多个Shard,如图1所示的ES索引3包括Shard1、Shard2和Shard3。一个Shard为一个索引单元,对应一个Lucene的索引,一个Lucene的索引包括多个索引文件,如图1所示的索引文件*.fnm、*.fdx、*.fdt等。
在ES运行过程中,为了提高建索引和查询的效率,对于每一Shard,ES会打开属于该Shard的所有元数据文件以及部分索引数据文件,用于对文件的读入和写出。其中,读打开一次文件需要开启一个新的读入流,消耗一个句柄,写打开一次文件需要开启一个新的写出流,消耗一个句柄。这使得在ES的运行过程中,将消耗大量的句柄。
随着ES中存储索引文件的增多,ES中建立的Shard的数目、ES索引的数目会不断增多,ES打开文件所消耗句柄的数目不断增多,而句柄的数量有限,这使得ES很可能达到句柄数的临界点。当达到句柄数的临界点时,若继续对ES中的索引文件进行操作,例如请求对文件的读入流或写出流,ES将无法分配新的句柄,进而使得ES处于不健康的服务状态,无法提供正常的服务。
发明内容
本申请实施例的目的在于提供一种文件读写打开方法及装置,以保证句柄的分配,降低由于句柄使用不合理引发ES的不健康服务状态的可能性。具体技术方案如下:
为实现上述目的,本申请实施例提供了一种文件读打开方法,所述方法包括:
获取针对目标索引文件的读入流的请求;
判断已开启的读入流中是否存在所述目标索引文件的读入流;
若不存在所述目标索引文件的读入流,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流;所述文件流为读入流或写出流;
开启新的读入流作为所述目标索引文件的目标读入流;
将所述目标读入流标记为被占用,并根据所述目标读入流的引用读打开所述目标索引文件。
在本申请的一个实施例中,所述方法还包括:
若不存在所述目标索引文件的读入流,且确定已开启的读入流和写出流的总个数未达到第一预设阈值,则开启新的读入流作为所述目标索引文件的目标读入流。
在本申请的一个实施例中,所述方法还包括:
若存在所述目标索引文件的读入流,则判断所述目标索引文件的读入流是否未被占用;
若未被占用,则将所述目标索引文件的读入流作为所述目标索引文件的目标读入流。
在本申请的一个实施例中,若存在多个已开启的所述目标索引文件的读入流,所述判断所述目标索引文件的读入流是否未被占用的步骤,包括:
判断所述目标索引文件的读入流中是否存在未被占用的读入流;
若存在未被占用的读入流,则确定所述目标索引文件的读入流未被占用;
若不存在未被占用的读入流,则确定所述目标索引文件的读入流被占用;
所述将所述目标索引文件的读入流作为所述目标索引文件的目标读入流的步骤,包括:
从所述未被占用的读入流中选择一个读入流,作为所述目标索引文件的目标读入流。
在本申请的一个实施例中,所述方法还包括:
若判定所述目标索引文件的读入流被占用,则返回执行所述判断所述目标索引文件的读入流是否未被占用的步骤。
在本申请的一个实施例中,所述方法还包括:
若判定所述目标索引文件的读入流被占用,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则返回执行所述根据预设关闭流策略关闭文件流的步骤;
若判定所述目标索引文件的读入流被占用,且确定已开启的读入流和写出流的总个数未达到第一预设阈值,则返回执行所述开启新的读入流作为所述目标索引文件的目标读入流的步骤。
在本申请的一个实施例中,所述方法还包括:
若判定所述目标索引文件的读入流被占用,则判断所述目标索引文件的读入流的个数是否达到第二预设阈值;
若所述目标索引文件的读入流的个数未达到第二预设阈值,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则返回执行所述根据预设关闭流策略关闭文件流的步骤;
若所述目标索引文件的读入流的个数未达到第二预设阈值,且确定已开启的读入流和写出流的总个数未达到第一预设阈值,则返回执行所述开启新的读入流作为所述目标索引文件的目标读入流的步骤;
若所述目标索引文件的读入流的个数达到第二预设阈值,则返回执行所述判断所述目标索引文件的读入流是否未被占用的步骤。
在本申请的一个实施例中,所述方法还包括:
定时检测已开启的读入流和写出流的总个数是否达到第一预设阈值;
若是,则根据预设关闭流策略关闭文件流。
在本申请的一个实施例中,所述根据预设关闭流策略关闭文件流的步骤,包括:
关闭未被占用的时长最长的文件流;
或者,按照先进先出的调度算法,关闭文件流。
为实现上述目的,本申请实施例还提供了一种文件写打开方法,所述方法包括:
获取针对目标索引文件的写出流的请求;
判断已开启的写出流中是否存在所述目标索引文件的写出流;
若不存在所述目标索引文件的写出流,且确定已开启的读入流和写出流的总个数达到第三预设阈值,则根据预设关闭流策略关闭文件流;所述文件流为读入流或写出流;
开启新的写出流作为所述目标索引文件的目标写出流;
将所述目标写出流标记为被占用,并根据所述目标写出流的引用写打开所述目标索引文件。
在本申请的一个实施例中,所述方法还包括:
若不存在所述目标索引文件的写出流,且确定已开启的读入流和写出流的总个数未达到第三预设阈值,则开启新的写出流作为所述目标索引文件的目标写出流。
在本申请的一个实施例中,所述方法还包括:
若存在所述目标索引文件的写出流,则判断所述目标索引文件的写出流是否未被占用;
若未被占用,则将所述目标索引文件的写出流作为所述目标索引文件的目标写出流。
在本申请的一个实施例中,所述方法还包括:
若判定所述目标索引文件的写出流被占用,则返回执行所述判断所述目标索引文件的写出流是否未被占用的步骤。
在本申请的一个实施例中,所述方法还包括:
定时检测已开启的读入流和写出流的总个数是否达到第三预设阈值;
若是,则根据预设关闭流策略关闭文件流。
在本申请的一个实施例中,所述根据预设关闭流策略关闭文件流的步骤,包括:
关闭未被占用的时长最长的文件流;
或者,按照先进先出的调度算法,关闭文件流。
为实现上述目的,本申请实施例还提供了一种文件读打开装置,所述装置包括:
获取单元,用于获取针对目标索引文件的读入流的请求;
第一判断单元,用于判断已开启的读入流中是否存在所述目标索引文件的读入流;
关闭单元,用于若不存在所述目标索引文件的读入流,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流;所述文件流为读入流或写出流;
开启单元,用于开启新的读入流作为所述目标索引文件的目标读入流;
读打开单元,用于将所述目标读入流标记为被占用,并根据所述目标读入流的引用读打开所述目标索引文件。
在本申请的一个实施例中,所述开启单元,还用于:
若不存在所述目标索引文件的读入流,且确定已开启的读入流和写出流的总个数未达到第一预设阈值,则开启新的读入流作为所述目标索引文件的目标读入流。
在本申请的一个实施例中,所述装置还包括:
第二判断单元,用于若存在所述目标索引文件的读入流,则判断所述目标索引文件的读入流是否未被占用;
作为单元,用于若所述目标索引文件的读入流未被占用,则将所述目标索引文件的读入流作为所述目标索引文件的目标读入流。
在本申请的一个实施例中,所述第二判断单元,具体用于:若存在多个已开启的所述目标索引文件的读入流,判断所述目标索引文件的读入流中是否存在未被占用的读入流;若存在未被占用的读入流,则确定所述目标索引文件的读入流未被占用;若不存在未被占用的读入流,则确定所述目标索引文件的读入流被占用;
所述作为单元,具体用于:从所述未被占用的读入流中选择一个读入流,作为所述目标索引文件的目标读入流。
在本申请的一个实施例中,所述第二判断单元,还用于:
若判定所述目标索引文件的读入流被占用,则判断所述目标索引文件的读入流是否未被占用。
在本申请的一个实施例中,所述关闭单元,还用于:若判定所述目标索引文件的读入流被占用,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流;
所述开启单元,还用于:若判定所述目标索引文件的读入流被占用,且确定已开启的读入流和写出流的总个数未达到第一预设阈值,则开启新的读入流作为所述目标索引文件的目标读入流。
在本申请的一个实施例中,所述装置还包括:
第三判断单元,用于若判定所述目标索引文件的读入流被占用,则判断所述目标索引文件的读入流的个数是否达到第二预设阈值;
所述关闭单元,还用于:若所述目标索引文件的读入流的个数未达到第二预设阈值,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流;
所述开启单元,还用于:若所述目标索引文件的读入流的个数未达到第二预设阈值,且确定已开启的读入流和写出流的总个数未达到第一预设阈值,则开启新的读入流作为所述目标索引文件的目标读入流;
所述第二判断单元,还用于若所述目标索引文件的读入流的个数达到第二预设阈值,则判断所述目标索引文件的读入流是否未被占用。
在本申请的一个实施例中,所述装置还包括:
检测单元,用于定时检测已开启的读入流和写出流的总个数是否达到第一预设阈值;
所述关闭单元,还用于若所述检测单元的检测结果为是,则根据预设关闭流策略关闭文件流。
在本申请的一个实施例中,所述关闭单元,具体用于:
关闭未被占用的时长最长的文件流;
或者,按照先进先出的调度算法,关闭文件流。
为实现上述目的,本申请实施例还提供了一种文件写打开装置,所述装置包括:
获取单元,用于获取针对目标索引文件的写出流的请求;
第一判断单元,用于判断已开启的写出流中是否存在所述目标索引文件的写出流;
关闭单元,用于若不存在所述目标索引文件的写出流,且确定已开启的读入流和写出流的总个数达到第三预设阈值,则根据预设关闭流策略关闭文件流;所述文件流为读入流或写出流;
开启单元,用于开启新的写出流作为所述目标索引文件的目标写出流;
写打开单元,用于将所述目标写出流标记为被占用,并根据所述目标写出流的引用写打开所述目标索引文件。
在本申请的一个实施例中,所述开启单元,还用于:
若不存在所述目标索引文件的写出流,且确定已开启的读入流和写出流的总个数未达到第三预设阈值,则开启新的写出流作为所述目标索引文件的目标写出流。
在本申请的一个实施例中,所述装置还包括:
第二判断单元,用于若存在所述目标索引文件的写出流,则判断所述目标索引文件的写出流是否未被占用;
作为单元,用于若所述目标索引文件的写出流未被占用,则将所述目标索引文件的写出流作为所述目标索引文件的目标写出流。
在本申请的一个实施例中,所述第二判断单元,还用于:
若判定所述目标索引文件的写出流被占用,则返回执行所述判断所述目标索引文件的写出流是否未被占用的步骤。
在本申请的一个实施例中,所述装置还包括:
检测单元,用于定时检测已开启的读入流和写出流的总个数是否达到第三预设阈值;
所述关闭单元,还用于若所述检测单元的检测结果为是,则根据预设关闭流策略关闭文件流。
在本申请的一个实施例中,所述关闭单元,具体用于:
关闭未被占用的时长最长的文件流;
或者,按照先进先出的调度算法,关闭文件流。
为实现上述目的,本申请实施例还提供了一种电子设备,包括处理器和存储器;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的计算机程序,实现上述文件读打开方法。
为实现上述目的,本申请实施例还提供了一种电子设备,包括处理器和存储器;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的计算机程序,实现上述文件写打开方法。
为实现上述目的,本申请实施例还提供了一种机器可读存储介质,所述机器可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述文件读打开方法。
为实现上述目的,本申请实施例还提供了一种机器可读存储介质,所述机器可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述文件写打开方法。
本申请实施例中,若获取到针对目标索引文件的读入流的请求后,确定不存在目标索引文件的读入流,或若获取到针对目标索引文件的写出流的请求后,确定不存在目标索引文件的写出流,则当确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流,释放部分句柄。这样,在开启新的读入流作为目标索引文件的目标读入流时,或在开启新的写出流作为目标索引文件的目标写出流时,保证了句柄的分配,降低了由于句柄使用不合理引发ES的不健康服务状态的可能性。当然,实施本申请的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为ES的一种示意图;
图2为本申请实施例提供的文件读打开方法的第一种流程示意图;
图3为本申请实施例提供的文件读打开方法的第二种流程示意图;
图4为本申请实施例提供的文件读打开装置的一种结构示意图;
图5为本申请实施例提供的文件写打开方法的第一种流程示意图;
图6为本申请实施例提供的文件写打开方法的第二种流程示意图;
图7为本申请实施例提供的文件写打开装置的一种结构示意图;
图8为本申请实施例提供的电子设备的第一种结构示意图;
图9为本申请实施例提供的电子设备的第二种结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为便于理解,下面对本申请实施例中出现的词语进行解释说明。
索引文件:包括元数据文件和索引数据文件。
文件流:包括读入流和写出流。
读入流:也可以称为输入流。在Java中,以输入流的方式从外界读入一种资源,可以是文件、网络上的数据等。更广泛的意义,输入流还可以表示从外界向计算机输入数据。读入流不涉及对文件的修改,为了提高并发效率,对于一个索引文件,可以同时开启多个读入流。
写出流:也可以称为输出流。在Java中,以输出流的方式向外界写出数据。与输入流相对。读入流涉及对文件的修改,为了保证数据的完整和一致,对于一个索引文件,一个时间点仅可以开启一个写出流。
句柄:也可以称为文件描述符。在类Unix系统中,句柄标示了上层应用对类Unix系统内的文件或其他输入/输出资源的一种访问。可以把句柄理解为一个门把手,应用程序读写类Unix系统的文件,需要通过这个门把手为媒介。对于类Unix系统上Java类的应用程序,对同一个文件的读写各自占用一个句柄,并且多次读入时,每一次读入均以新的读入流封装,同样,每一次读入会占用一个新的句柄。一次读入即为一次读打开操作。
目前,在ES运行过程中,对于ES中的每一Shard,ES会打开属于该Shard的所有元数据文件以及部分索引数据文件,用于对文件的读入和写出。在ES中,读打开一次文件需要开启一个新的读入流,消耗一个句柄,写打开一次文件也需要开启一个新的写出流,消耗一个句柄。这使得在ES的运行过程中,将消耗大量的句柄。
这种情况下,随着ES中存储索引文件的增多,ES打开文件所消耗句柄的数目不断增多,而句柄的数量有限,这使得ES很可能达到句柄数的临界点。当达到句柄数的临界点时,若继续对ES中的索引文件进行操作,例如请求对文件的读入流或写出流,ES将无法分配新的句柄,进而使得ES处于不健康的服务状态,无法提供正常的服务。
为了保证句柄的分配,降低由于句柄使用不合理引发ES的不健康服务状态的可能性,本申请实施例提供了一种文件读写打开方法及装置。其中,文件读写打开方法及装置可以应用于ES中各个节点设备。例如,若ES包括的各个节点设备为独立的物理机,则文件读写打开方法及装置应用于独立的物理机。若ES包括的各个节点设备为物理机中的进程虚拟获得的,则文件读写打开方法及装置应用于该进程。
在文件读打开方法中,获取针对目标索引文件的读入流的请求;判断已开启的读入流中是否存在目标索引文件的读入流;若不存在目标索引文件的读入流,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流,文件流为读入流或写出流;开启新的读入流作为目标索引文件的目标读入流;将目标读入流标记为被占用,并根据目标读入流的引用读打开目标索引文件。此时,若确定已开启的读入流和写出流的总个数达到第一预设阈值,在开启新的读入流之前,根据预设关闭流策略关闭文件流,释放部分句柄,保证了为新的读入流分配句柄,降低了由于句柄使用不合理引发ES的不健康服务状态的可能性。
在文件写打开方法中,获取针对目标索引文件的写出流的请求;判断已开启的写出流中是否存在目标索引文件的写出流;若不存在目标索引文件的写出流,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流,文件流为读入流或写出流;开启新的写出流作为目标索引文件的目标写出流;将目标写出流标记为被占用,并根据目标写出流的引用写打开目标索引文件。此时,若确定已开启的读入流和写出流的总个数达到第一预设阈值,在开启新的写出流之前,根据预设关闭流策略关闭文件流,释放部分句柄,保证了为新的写出流分配句柄,降低了由于句柄使用不合理引发ES的不健康服务状态的可能性。
本申请实施例中,目标索引文件可以为Shard中的一个索引文件,也就是,目标索引文件为一个Lucene的索引中的一个索引文件。目标索引文件也可以为Shard中的多个索引文件,例如,目标索引文件为一个Lucene的索引中的所有索引文件。
在本申请的一个实施例中,为了便于管理文件的读写打开,可以在节点设备中设置句柄管理装置,以下称为“句柄池”。
一个节点设备中可以包括一个句柄池,该句柄池统一管理文件的读写打开,以节约设备资源。此时,句柄池根据预设关闭流策略关闭的文件流可以为读入流,也可以为写出流。
一个节点设备中可以包括两个句柄池,其中一个句柄池管理文件的读打开,另一个句柄池管理文件的写打开,以提高实现的稳定性。此时,对于管理读打开的句柄池,将已开开启的写出流的个数设置为0,根据预设关闭流策略关闭的文件流为读入流。对于管理写打开的句柄池,将已开开启的读入流的个数设置为0,根据预设关闭流策略关闭的文件流为写出流。
下面通过具体实施例,对本申请进行详细说明。
参考图2,图2为本申请实施例提供的文件读打开方法的第一种流程示意图,该方法包括:
步骤201:获取针对目标索引文件的读入流的请求。
在本申请的一个实施例中,若获取到多个读入流的请求,可以依据FIFO(FirstInput First Outpu,先进先出)算法,依次处理这多个读入流的请求。
例如,获取到3个针对读入流的请求的先后顺序为:请求01-请求02-请求03。根据FIFO算法,先处理请求01,再处理请求02,最后处理请求03。
步骤202:判断已开启的读入流中是否存在目标索引文件的读入流。
若不存在目标索引文件的读入流,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则执行步骤203。
若不存在目标索引文件的读入流,则确定需要开启新的读入流。若确定已开启的读入流和写出流的总个数达到第一预设阈值,则确定句柄资源不足。
本申请实施例中,可以定时确定已开启的读入流和写出流的总个数是否达到第一预设阈值。确定已开启的读入流和写出流的总个数是否达到第一预设阈值,可以在步骤201之前执行,也可以在步骤201之后执行,本申请实施例对此不进行限定。
在本申请的一个实施例中,若不存在目标索引文件的读入流,确定已开启的读入流和写出流的总个数未达到第一预设阈值,则确定需要开启新的读入流,且不存在句柄资源不足的问题,直接执行步骤204。
步骤203:根据预设关闭流策略关闭文件流。
其中,文件流为读入流或写出流。上述预设关闭流策略可以为FIFO算法、LRU(Least Recently Used,最近最少使用)算法等。
例如,若预设关闭流策略为FIFO算法,则根据预设关闭流策略关闭文件流时,关闭最早打开的文件流。
再例如,若预设关闭流策略为LRU算法,则根据预设关闭流策略关闭文件流时,关闭未被占用的时长最长的文件流。
预设关闭流策略还可以根据用户的需要设定。例如关闭未被占用的时长达到预设时长的文件流。再例如,先关闭索引数据文件,再关闭元数据文件。
在本申请的一个实施例中,为了保证建立索引文件和查询文件的效率,若检测到已开启的读入流和写出流的总个数达到第一预设阈值,则可以直接根据预设关闭流策略关闭文件流。当获取到针对目标索引文件的读入流的请求,若确定需要开启新的读入流,执行步骤204。
在本申请的另一个实施例中,为了降低对已开启文件流对应索引文件的读写打开的影响,若检测到已开启的读入流和写出流的总个数达到第一预设阈值,当获取到针对目标索引文件的读入流的请求,且确定需要开启新的读入流时,再根据预设关闭流策略关闭文件流,之后执行步骤204。
步骤204:开启新的读入流作为目标索引文件的目标读入流。
步骤205:将目标读入流标记为被占用,并根据目标读入流的引用读打开目标索引文件。
其中,目标读入流的引用可以为:目标索引文件的存储位置、数据量大小、占用的句柄等。
当读打开目标索引文件结束后,将目标读入流标记为未被占用,以便于对后续对目标索引文件的读打开。
在本申请的一个实施例中,可以根据针对目标索引文件的读入流的请求中指定的读入数据量,确定读打开目标索引文件是否结束。例如,获取针对索引文件F的读入流的请求中指定读入100KB的数据。当读入100KB的索引文件F时,确定读打开索引文件F结束后,将索引文件F的目标读入流标记为未被占用。
在本申请的一个实施例中,可以根据读打开目标索引文件的时长,确定读打开目标索引文件是否结束。例如,预先设置了读打开时长为1分钟,若根据目标读入流的引用读打开索引文件F的时长达到1分钟时,确定读打开索引文件F结束后,将索引文件F的目标读入流标记为未被占用。
在本申请的一个实施例中,参考图3,图3为本申请实施例提供的文件读打开方法的第二种流程示意图,基于图2,该方法包括:
步骤301:获取针对目标索引文件的读入流的请求。
步骤301与步骤201相同。
步骤302:判断已开启的读入流中是否存在目标索引文件的读入流。
若存在目标索引文件的读入流,执行步骤303。若不存在目标索引文件的读入流,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则执行步骤305。
步骤302与步骤202相似,可参考步骤202的描述。
步骤303:判断目标索引文件的读入流是否未被占用。
若未被占用,则执行步骤304。
在本申请的一个实施例中,对于一个索引文件,可以开启多个针对该索引文件的读入流。
这种情况下,若已开启的目标索引文件的读入流只有一个,且该读入流被占用,则确定目标索引文件的读入流被占用。若已开启的目标索引文件的读入流只有一个,且该读入流未被占用,则确定目标索引文件的读入流未被占用。
若已开启的目标索引文件的读入流有多个,则可以判断目标索引文件的读入流中是否存在未被占用的读入流。若存在未被占用的读入流,则确定目标索引文件的读入流未被占用。若不存在未被占用的读入流,则确定目标索引文件的读入流被占用。
在本申请的一个实施例中,若确定目标索引文件的读入流被占用,则可以确定需要开启新的读入流。确定已开启的读入流和写出流的总个数是否达到第一预设阈值。若确定已开启的读入流和写出流的总个数达到第一预设阈值,则继续执行步骤305、306、307。若确定已开启的读入流和写出流的总个数未达到第一预设阈值,则继续执行步骤306、307。
在本申请的一个实施例中,为了避免消耗过多的句柄资源,可以预先设置一个阈值,例如第二预设阈值,一个索引文件可以同时被读打开的次数为第二预设阈值。
这种情况下,若确定目标索引文件的读入流被占用,可以判断已开启的目标索引文件的读入流的个数是否达到第二预设阈值。若没有达到第二预设阈值,则确定需要开启新的读入流。确定已开启的读入流和写出流的总个数是否达到第一预设阈值。若确定已开启的读入流和写出流的总个数达到第一预设阈值,则继续执行步骤305、306、307。若确定已开启的读入流和写出流的总个数未达到第一预设阈值,则继续执行步骤306、307
在本申请的一个实施例中,为了避免消耗过多的句柄资源,若确定目标索引文件的读入流被占用,则重新执行步骤303,判断目标索引文件的读入流是否未被占用。
若已开启的目标索引文件的读入流的个数达到了第二预设阈值,则重新执行步骤303,判断目标索引文件的读入流是否未被占用。
步骤304:将目标索引文件的读入流作为目标索引文件的目标读入流,执行步骤307。
此时,不必执行关闭文件流,开启新的文件流,降低了对设备性能的影响。
若已开启的目标索引文件的读入流只有一个,则可以将该读入流作为目标索引文件的目标读入流。
若已开启的目标索引文件的读入流中未被占用的目标索引文件的读入流有多个,则可以从未被占用的目标索引文件的读入流中选择一个读入流,作为目标索引文件的目标读入流。
在本申请的一个实施例中,可以预先设置LRU算法。若未被占用的目标索引文件的读入流有多个,则可以根据LRU算法选择确定目标读入流。例如,未被占用的目标索引文件的读入流有3个,分别为读入流1、读入流2和读入流3。这3个读入流未使用的时长从长至短的顺序为:读入流1-读入流2-读入流3,则将读入流1作为目标索引文件的目标读入流。
步骤305:根据预设关闭流策略关闭文件流。
步骤305与步骤203相同。
步骤306:开启新的读入流作为目标索引文件的目标读入流。
步骤306与步骤204相同。
步骤307:将目标读入流标记为被占用,并根据目标读入流的引用读打开目标索引文件。
步骤307与步骤205相同。
应用本申请实施例,在获取到针对目标索引文件的读入流的请求后,若确定不存在目标索引文件的读入流,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流,释放部分句柄。这样,在开启新的读入流作为目标索引文件的目标读入流时保证了句柄的分配,降低了由于句柄使用不合理引发ES的不健康服务状态的可能性。
与文件读打开方法实施例对应,本申请实施例还提供了一种文件读打开装置。参考图4,图4为本申请实施例提供的文件读打开装置的一种结构示意图,该装置包括:
获取单元401,用于获取针对目标索引文件的读入流的请求;
第一判断单元402,用于判断已开启的读入流中是否存在目标索引文件的读入流;
关闭单元403,用于若不存在目标索引文件的读入流,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流;文件流为读入流或写出流;
开启单元404,用于开启新的读入流作为目标索引文件的目标读入流;
读打开单元405,用于将目标读入流标记为被占用,并根据目标读入流的引用读打开目标索引文件。
在本申请的一个实施例中,开启单元404,还可以用于:
若不存在目标索引文件的读入流,且确定已开启的读入流和写出流的总个数未达到第一预设阈值,则开启新的读入流作为目标索引文件的目标读入流。
在本申请的一个实施例中,上述文件读打开装置还可以包括:
第二判断单元,用于若存在目标索引文件的读入流,则判断目标索引文件的读入流是否未被占用;
作为单元,用于若目标索引文件的读入流未被占用,则将目标索引文件的读入流作为目标索引文件的目标读入流。
在本申请的一个实施例中,第二判断单元,具体可以用于:若存在多个已开启的目标索引文件的读入流,判断目标索引文件的读入流中是否存在未被占用的读入流;若存在未被占用的读入流,则确定目标索引文件的读入流未被占用;若不存在未被占用的读入流,则确定目标索引文件的读入流被占用;
作为单元,具体可以用于:从未被占用的读入流中选择一个读入流,作为目标索引文件的目标读入流。
在本申请的一个实施例中,第二判断单元,还可以用于:
若判定目标索引文件的读入流被占用,则判断目标索引文件的读入流是否未被占用。
在本申请的一个实施例中,关闭单元403,还可以用于:若判定目标索引文件的读入流被占用,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流;
开启单元404,还可以用于:若判定目标索引文件的读入流被占用,且确定已开启的读入流和写出流的总个数未达到第一预设阈值,则开启新的读入流作为目标索引文件的目标读入流。
在本申请的一个实施例中,上述文件读打开装置还可以包括:
第三判断单元,用于若判定目标索引文件的读入流被占用,则判断目标索引文件的读入流的个数是否达到第二预设阈值;
关闭单元403,还可以用于:若目标索引文件的读入流的个数未达到第二预设阈值,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流;
开启单元404,还可以用于:若目标索引文件的读入流的个数未达到第二预设阈值,且确定已开启的读入流和写出流的总个数未达到第一预设阈值,则开启新的读入流作为目标索引文件的目标读入流;
第二判断单元,还用于若目标索引文件的读入流的个数达到第二预设阈值,则判断目标索引文件的读入流是否未被占用。
在本申请的一个实施例中,上述文件读打开装置还可以包括:
检测单元,用于定时检测已开启的读入流和写出流的总个数是否达到第一预设阈值;
关闭单元403,还可以用于若检测单元的检测结果为是,则根据预设关闭流策略关闭文件流。
在本申请的一个实施例中,关闭单元403,具体可以用于:
关闭未被占用的时长最长的文件流;
或者,按照先进先出的调度算法,关闭文件流。
应用本申请实施例,在获取到针对目标索引文件的读入流的请求后,若确定不存在目标索引文件的读入流,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流,释放部分句柄。这样,在开启新的读入流作为目标索引文件的目标读入流时保证了句柄的分配,降低了由于句柄使用不合理引发ES的不健康服务状态的可能性。
基于与文件读打开方法相同的发明构思,本申请实施例还提供了一种文件写打开方法。参考图5,图5为本申请实施例提供的文件写打开方法的第一种流程示意图,该方法包括:
步骤501:获取针对目标索引文件的写出流的请求。
在本申请的一个实施例中,若获取到多个针对目标索引文件的写出流的请求,可以依据FIFO算法,依次处理这多个写出流的请求。
例如,获取到3个针对目标索引文件的写出流的请求的先后顺序为:请求11-请求12-请求13。根据FIFO算法,先处理请求11,再处理请求12,最后处理请求13。
步骤502:判断已开启的写出流中是否存在目标索引文件的写出流。
若不存在目标索引文件的写出流,且确定已开启的读入流和写出流的总个数达到第三预设阈值,则执行步骤503。
若不存在目标索引文件的写出流,则确定需要开启新的写出流。若确定已开启的读入流和写出流的总个数达到第三预设阈值,则确定句柄资源不足。
确定已开启的读入流和写出流的总个数是否达到第三预设阈值,可以在步骤501之前执行,也可以在501之后执行,本申请实施例对此不进行限定。例如,可以定时检测已开启的读入流和写出流的总个数是否达到第三预设阈值。
在本申请的一个实施例中,若不存在目标索引文件的写出流,确定已开启的读入流和写出流的总个数未达到第三预设阈值,则确定需要开启新的写出流,但不存在句柄资源不足的问题,直接执行步骤504。
步骤503:根据预设关闭流策略关闭文件流。
其中,文件流为读入流或写出流。上述预设关闭流策略可以为FIFO算法、LRU算法等。
例如,若预设关闭流策略为FIFO算法,则根据预设关闭流策略关闭文件流时,关闭最早打开的文件流。
再例如,若预设关闭流策略为LRU算法,则根据预设关闭流策略关闭文件流时,关闭未被占用的时长最长的文件流。
预设关闭流策略还可以根据用户的需要设定。例如关闭未被占用的时长达到预设时长的文件流。再例如,先关闭索引数据文件,再关闭元数据文件。
在本申请的一个实施例中,为了保证建立索引文件和查询文件的效率,若检测到已开启的读入流和写出流的总个数达到第三预设阈值,则可以直接根据预设关闭流策略关闭文件流。当获取到针对目标索引文件的写出流的请求,若确定需要开启新的写出流,执行步骤504。
在本申请的另一个实施例中,为了降低对已开启文件流对应索引文件的读写打开的影响,若检测到已开启的读入流和写出流的总个数达到第三预设阈值,当获取到针对目标索引文件的写出流的请求,且确定需要开启新的写出流时,再根据预设关闭流策略关闭文件流,之后执行步骤504。
步骤504:开启新的写出流作为目标索引文件的目标写出流。
步骤505:将目标写出流标记为被占用,并根据目标写出流的引用写打开目标索引文件。
其中,目标写出流的引用可以为:目标索引文件的存储位置、数据量大小、占用的句柄等。
当写打开目标索引文件结束后,将目标写出流标记为未被占用,以便于对后续对目标索引文件的写打开。
在本申请的一个实施例中,可以根据针对目标索引文件的写出流的请求中指定的写出数据量,确定写打开目标索引文件是否结束。例如,获取针对索引文件F的写出流的请求中指定写出100KB的数据。当写出100KB的索引文件F时,确定写打开索引文件F结束后,将索引文件F的目标写出流标记为未被占用。
在本申请的一个实施例中,可以根据写打开目标索引文件的时长,确定写打开目标索引文件是否结束。例如,预先设置了写打开时长为1分钟,若根据目标写出流的引用写打开索引文件F的时长达到1分钟时,确定写打开索引文件F结束后,将索引文件F的目标写入流标记为未被占用。
在本申请的一个实施例中,参考图6,图6为本申请实施例提供的文件写打开方法的第二种流程示意图,基于图5,该方法包括:
步骤601:获取针对目标索引文件的写出流的请求。
步骤601与步骤501相同。
步骤602:判断已开启的写出流中是否存在目标索引文件的写出流。
若存在目标索引文件的写出流,执行步骤603。若不存在目标索引文件的写出流,且确定已开启的读入流和写出流的总个数达到第三预设阈值,则执行步骤605。
步骤602与步骤502相似,可参考步骤502的描述。
步骤603:判断目标索引文件的写出流是否未被占用。
若未被占用,则执行步骤604。
在本申请的一个实施例中,若确定目标索引文件的写出流被占用,则重新执行步骤603,判断目标索引文件的写出流是否未被占用。
步骤604:将目标索引文件的写出流作为目标索引文件的目标写出流,执行步骤607。
此时,不必执行关闭文件流,开启新的文件流,降低了对设备性能的影响。
步骤605:根据预设关闭流策略关闭文件流。
步骤606:开启新的写出流作为目标索引文件的目标写出流。
步骤607:将目标写出流标记为被占用,并根据目标写出流的引用写打开目标索引文件。
应用本申请实施例,在获取到针对目标索引文件的写出流的请求后,若确定不存在目标索引文件的写出流,且确定已开启的读入流和写出流的总个数达到第三预设阈值,则根据预设关闭流策略关闭文件流,释放部分句柄。这样,在开启新的写出流作为目标索引文件的目标写出流时保证了句柄的分配,降低了由于句柄使用不合理引发ES的不健康服务状态的可能性。
与文件写打开方法实施例对应,本申请实施例还提供了一种文件写打开装置。参考图7,图7为本申请实施例提供的文件写打开装置的一种结构示意图,该装置包括:
获取单元701,用于获取针对目标索引文件的写出流的请求;
第一判断单元702,用于判断已开启的写出流中是否存在已开启的目标索引文件的写出流;
关闭单元703,用于若不存在目标索引文件的写出流,且确定已开启的读入流和写出流的总个数达到第三预设阈值,则根据预设关闭流策略关闭文件流;文件流为读入流或写出流;
开启单元704,用于开启新的写出流作为目标索引文件的目标写出流;
写打开单元705,用于将目标写出流标记为被占用,并根据目标写出流的引用写打开目标索引文件。
在本申请的一个实施例中,开启单元704,还可以用于:
若不存在目标索引文件的写出流,且确定已开启的读入流和写出流的总个数未达到第三预设阈值,则开启新的写出流作为目标索引文件的目标写出流。
在本申请的一个实施例中,上述文件写打开装置还可以包括:
第二判断单元,用于若存在目标索引文件的写出流,则判断目标索引文件的写出流是否未被占用;
作为单元,用于若目标索引文件的写出流未被占用,则将目标索引文件的写出流作为目标索引文件的目标写出流。
在本申请的一个实施例中,第二判断单元,还可以用于:
若判定目标索引文件的写出流被占用,则继续判断目标索引文件的写出流是否未被占用。
在本申请的一个实施例中,上述文件写打开装置还可以包括:
检测单元,用于定时检测已开启的读入流和写出流的总个数是否达到第三预设阈值;
关闭单元703,还可以用于若检测单元的检测结果为是,则根据预设关闭流策略关闭文件流。
在本申请的一个实施例中,关闭单元703,具体可以用于:
关闭未被占用的时长最长的文件流;
或者,按照先进先出的调度算法,关闭文件流。
应用本申请实施例,在获取到针对目标索引文件的写出流的请求后,若确定不存在目标索引文件的写出流,且确定已开启的读入流和写出流的总个数达到第三预设阈值,则根据预设关闭流策略关闭文件流,释放部分句柄。这样,在开启新的写出流作为目标索引文件的目标写出流时保证了句柄的分配,降低了由于句柄使用不合理引发ES的不健康服务状态的可能性。
与文件读打开方法实施例对应,本申请实施例还提供了一种电子设备,如图8所示,包括处理器801和存储器802。
其中,存储器802,用于存放计算机程序;
处理器801,用于执行存储器802上所存放的计算机程序时,实现文件读打开方法。其中,文件读打开方法包括:
获取针对目标索引文件的读入流的请求;
判断已开启的读入流中是否存在目标索引文件的读入流;
若不存在目标索引文件的读入流,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流;文件流为读入流或写出流;
开启新的读入流作为目标索引文件的目标读入流;
将目标读入流标记为被占用,并根据目标读入流的引用读打开目标索引文件。
应用本申请实施例,在获取到针对目标索引文件的读入流的请求后,若确定不存在目标索引文件的读入流,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流,释放部分句柄。这样,在开启新的读入流作为目标索引文件的目标读入流时保证了句柄的分配,降低了由于句柄使用不合理引发ES的不健康服务状态的可能性。
与文件写打开方法实施例对应,本申请实施例还提供了一种电子设备,如图9所示,包括处理器901和存储器902。
其中,存储器902,用于存放计算机程序;
处理器901,用于执行存储器902上所存放的计算机程序时,实现文件写打开方法。其中,文件写打开方法包括:
获取针对目标索引文件的写出流的请求;
判断已开启的写出流中是否存在目标索引文件的写出流;
若不存在目标索引文件的写出流,且确定已开启的读入流和写出流的总个数达到第三预设阈值,则根据预设关闭流策略关闭文件流;文件流为读入流或写出流;
开启新的写出流作为目标索引文件的目标写出流;
将目标写出流标记为被占用,并根据目标写出流的引用写打开目标索引文件。
应用本申请实施例,在获取到针对目标索引文件的写出流的请求后,若确定不存在目标索引文件的写出流,且确定已开启的读入流和写出流的总个数达到第三预设阈值,则根据预设关闭流策略关闭文件流,释放部分句柄。这样,在开启新的写出流作为目标索引文件的目标写出流时保证了句柄的分配,降低了由于句柄使用不合理引发ES的不健康服务状态的可能性。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括RAM(Random Access Memory,随机存取存储器),也可以包括NVM(Non-Volatile Memory,非易失性存储器),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
处理器可以是通用处理器,包括CPU(Central Processing Unit,中央处理器)、NP(Network Processor,网络处理器)等;还可以是DSP(Digital Signal Processing,数字信号处理器)、ASIC(Application Specific Integrated Circuit,专用集成电路)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)或其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本申请实施例还提供了一种机器可读存储介质,机器可读存储介质内存储有应用程序,应用程序被处理器执行时实现文件读打开方法。其中,文件读打开方法包括:
获取针对目标索引文件的读入流的请求;
判断已开启的读入流中是否存在目标索引文件的读入流;
若不存在目标索引文件的读入流,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流;文件流为读入流或写出流;
开启新的读入流作为目标索引文件的目标读入流;
将目标读入流标记为被占用,并根据目标读入流的引用读打开目标索引文件。
应用本申请实施例,在获取到针对目标索引文件的读入流的请求后,若确定不存在目标索引文件的读入流,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流,释放部分句柄。这样,在开启新的读入流作为目标索引文件的目标读入流时保证了句柄的分配,降低了由于句柄使用不合理引发ES的不健康服务状态的可能性。
本申请实施例还提供了一种机器可读存储介质,机器可读存储介质内存储有应用程序,应用程序被处理器执行时实现文件写打开方法。其中,文件写打开方法包括:
获取针对目标索引文件的写出流的请求;
判断已开启的写出流中是否存在目标索引文件的写出流;
若不存在目标索引文件的写出流,且确定已开启的读入流和写出流的总个数达到第三预设阈值,则根据预设关闭流策略关闭文件流;文件流为读入流或写出流;
开启新的写出流作为目标索引文件的目标写出流;
将目标写出流标记为被占用,并根据目标写出流的引用写打开目标索引文件。
应用本申请实施例,在获取到针对目标索引文件的写出流的请求后,若确定不存在目标索引文件的写出流,且确定已开启的读入流和写出流的总个数达到第三预设阈值,则根据预设关闭流策略关闭文件流,释放部分句柄。这样,在开启新的写出流作为目标索引文件的目标写出流时保证了句柄的分配,降低了由于句柄使用不合理引发ES的不健康服务状态的可能性。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于文件读打开装置、文件写打开装置、电子设备、机器可读存储介质实施例而言,由于其基本相似于文件读打开方法和文件写打开方法实施例,所以描述的比较简单,相关之处参见文件读打开方法和文件写打开方法实施例的部分说明即可。
以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。

Claims (34)

1.一种文件读打开方法,其特征在于,所述方法包括:
获取针对目标索引文件的读入流的请求;
判断已开启的读入流中是否存在所述目标索引文件的读入流;
若不存在所述目标索引文件的读入流,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流;所述文件流为读入流或写出流;
开启新的读入流作为所述目标索引文件的目标读入流;
将所述目标读入流标记为被占用,并根据所述目标读入流的引用读打开所述目标索引文件。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若不存在所述目标索引文件的读入流,且确定已开启的读入流和写出流的总个数未达到第一预设阈值,则开启新的读入流作为所述目标索引文件的目标读入流。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若存在所述目标索引文件的读入流,则判断所述目标索引文件的读入流是否未被占用;
若未被占用,则将所述目标索引文件的读入流作为所述目标索引文件的目标读入流。
4.根据权利要求3所述的方法,其特征在于,若存在多个已开启的所述目标索引文件的读入流,所述判断所述目标索引文件的读入流是否未被占用的步骤,包括:
判断所述目标索引文件的读入流中是否存在未被占用的读入流;
若存在未被占用的读入流,则确定所述目标索引文件的读入流未被占用;
若不存在未被占用的读入流,则确定所述目标索引文件的读入流被占用;
所述将所述目标索引文件的读入流作为所述目标索引文件的目标读入流的步骤,包括:
从所述未被占用的读入流中选择一个读入流,作为所述目标索引文件的目标读入流。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
若判定所述目标索引文件的读入流被占用,则返回执行所述判断所述目标索引文件的读入流是否未被占用的步骤。
6.根据权利要求3所述的方法,其特征在于,所述方法还包括:
若判定所述目标索引文件的读入流被占用,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则返回执行所述根据预设关闭流策略关闭文件流的步骤;
若判定所述目标索引文件的读入流被占用,且确定已开启的读入流和写出流的总个数未达到第一预设阈值,则返回执行所述开启新的读入流作为所述目标索引文件的目标读入流的步骤。
7.根据权利要求3所述的方法,其特征在于,所述方法还包括:
若判定所述目标索引文件的读入流被占用,则判断所述目标索引文件的读入流的个数是否达到第二预设阈值;
若所述目标索引文件的读入流的个数未达到第二预设阈值,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则返回执行所述根据预设关闭流策略关闭文件流的步骤;
若所述目标索引文件的读入流的个数未达到第二预设阈值,且确定已开启的读入流和写出流的总个数未达到第一预设阈值,则返回执行所述开启新的读入流作为所述目标索引文件的目标读入流的步骤;
若所述目标索引文件的读入流的个数达到第二预设阈值,则返回执行所述判断所述目标索引文件的读入流是否未被占用的步骤。
8.根据权利要求1-7任一项所述的方法,其特征在于,所述方法还包括:
定时检测已开启的读入流和写出流的总个数是否达到第一预设阈值;
若是,则根据预设关闭流策略关闭文件流。
9.根据权利要求8所述的方法,其特征在于,所述根据预设关闭流策略关闭文件流的步骤,包括:
关闭未被占用的时长最长的文件流;
或者,按照先进先出的调度算法,关闭文件流。
10.一种文件写打开方法,其特征在于,所述方法包括:
获取针对目标索引文件的写出流的请求;
判断已开启的写出流中是否存在所述目标索引文件的写出流;
若不存在所述目标索引文件的写出流,且确定已开启的读入流和写出流的总个数达到第三预设阈值,则根据预设关闭流策略关闭文件流;所述文件流为读入流或写出流;
开启新的写出流作为所述目标索引文件的目标写出流;
将所述目标写出流标记为被占用,并根据所述目标写出流的引用写打开所述目标索引文件。
11.根据权利要求10所述的方法,其特征在于,所述方法还包括:
若不存在所述目标索引文件的写出流,且确定已开启的读入流和写出流的总个数未达到第三预设阈值,则开启新的写出流作为所述目标索引文件的目标写出流。
12.根据权利要求10所述的方法,其特征在于,所述方法还包括:
若存在所述目标索引文件的写出流,则判断所述目标索引文件的写出流是否未被占用;
若未被占用,则将所述目标索引文件的写出流作为所述目标索引文件的目标写出流。
13.根据权利要求12所述的方法,其特征在于,所述方法还包括:
若判定所述目标索引文件的写出流被占用,则返回执行所述判断所述目标索引文件的写出流是否未被占用的步骤。
14.根据权利要求9-13任一项所述的方法,其特征在于,所述方法还包括:
定时检测已开启的读入流和写出流的总个数是否达到第三预设阈值;
若是,则根据预设关闭流策略关闭文件流。
15.根据权利要求14所述的方法,其特征在于,所述根据预设关闭流策略关闭文件流的步骤,包括:
关闭未被占用的时长最长的文件流;
或者,按照先进先出的调度算法,关闭文件流。
16.一种文件读打开装置,其特征在于,所述装置包括:
获取单元,用于获取针对目标索引文件的读入流的请求;
第一判断单元,用于判断已开启的读入流中是否存在所述目标索引文件的读入流;
关闭单元,用于若不存在所述目标索引文件的读入流,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流;所述文件流为读入流或写出流;
开启单元,用于开启新的读入流作为所述目标索引文件的目标读入流;
读打开单元,用于将所述目标读入流标记为被占用,并根据所述目标读入流的引用读打开所述目标索引文件。
17.根据权利要求16所述的装置,其特征在于,所述开启单元,还用于:
若不存在所述目标索引文件的读入流,且确定已开启的读入流和写出流的总个数未达到第一预设阈值,则开启新的读入流作为所述目标索引文件的目标读入流。
18.根据权利要求16所述的装置,其特征在于,所述装置还包括:
第二判断单元,用于若存在所述目标索引文件的读入流,则判断所述目标索引文件的读入流是否未被占用;
作为单元,用于若所述目标索引文件的读入流未被占用,则将所述目标索引文件的读入流作为所述目标索引文件的目标读入流。
19.根据权利要求18所述的装置,其特征在于,
所述第二判断单元,具体用于:若存在多个已开启的所述目标索引文件的读入流,判断所述目标索引文件的读入流中是否存在未被占用的读入流;若存在未被占用的读入流,则确定所述目标索引文件的读入流未被占用;若不存在未被占用的读入流,则确定所述目标索引文件的读入流被占用;
所述作为单元,具体用于:从所述未被占用的读入流中选择一个读入流,作为所述目标索引文件的目标读入流。
20.根据权利要求18所述的装置,其特征在于,所述第二判断单元,还用于:
若判定所述目标索引文件的读入流被占用,则判断所述目标索引文件的读入流是否未被占用。
21.根据权利要求18所述的装置,其特征在于,
所述关闭单元,还用于:若判定所述目标索引文件的读入流被占用,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流;
所述开启单元,还用于:若判定所述目标索引文件的读入流被占用,且确定已开启的读入流和写出流的总个数未达到第一预设阈值,则开启新的读入流作为所述目标索引文件的目标读入流。
22.根据权利要求18所述的装置,其特征在于,所述装置还包括:
第三判断单元,用于若判定所述目标索引文件的读入流被占用,则判断所述目标索引文件的读入流的个数是否达到第二预设阈值;
所述关闭单元,还用于:若所述目标索引文件的读入流的个数未达到第二预设阈值,且确定已开启的读入流和写出流的总个数达到第一预设阈值,则根据预设关闭流策略关闭文件流;
所述开启单元,还用于:若所述目标索引文件的读入流的个数未达到第二预设阈值,且确定已开启的读入流和写出流的总个数未达到第一预设阈值,则开启新的读入流作为所述目标索引文件的目标读入流;
所述第二判断单元,还用于若所述目标索引文件的读入流的个数达到第二预设阈值,则判断所述目标索引文件的读入流是否未被占用。
23.根据权利要求16-22任一项所述的装置,其特征在于,所述装置还包括:
检测单元,用于定时检测已开启的读入流和写出流的总个数是否达到第一预设阈值;
所述关闭单元,还用于若所述检测单元的检测结果为是,则根据预设关闭流策略关闭文件流。
24.根据权利要求23所述的装置,其特征在于,所述关闭单元,具体用于:
关闭未被占用的时长最长的文件流;
或者,按照先进先出的调度算法,关闭文件流。
25.一种文件写打开装置,其特征在于,所述装置包括:
获取单元,用于获取针对目标索引文件的写出流的请求;
第一判断单元,用于判断已开启的写出流中是否存在所述目标索引文件的写出流;
关闭单元,用于若不存在所述目标索引文件的写出流,且确定已开启的读入流和写出流的总个数达到第三预设阈值,则根据预设关闭流策略关闭文件流;所述文件流为读入流或写出流;
开启单元,用于开启新的写出流作为所述目标索引文件的目标写出流;
写打开单元,用于将所述目标写出流标记为被占用,并根据所述目标写出流的引用写打开所述目标索引文件。
26.根据权利要求25所述的装置,其特征在于,所述开启单元,还用于:
若不存在所述目标索引文件的写出流,且确定已开启的读入流和写出流的总个数未达到第三预设阈值,则开启新的写出流作为所述目标索引文件的目标写出流。
27.根据权利要求25所述的装置,其特征在于,所述装置还包括:
第二判断单元,用于若存在所述目标索引文件的写出流,则判断所述目标索引文件的写出流是否未被占用;
作为单元,用于若所述目标索引文件的写出流未被占用,则将所述目标索引文件的写出流作为所述目标索引文件的目标写出流。
28.根据权利要求27所述的装置,其特征在于,所述第二判断单元,还用于:
若判定所述目标索引文件的写出流被占用,则返回执行所述判断所述目标索引文件的写出流是否未被占用的步骤。
29.根据权利要求25-28任一项所述的装置,其特征在于,所述装置还包括:
检测单元,用于定时检测已开启的读入流和写出流的总个数是否达到第三预设阈值;
所述关闭单元,还用于若所述检测单元的检测结果为是,则根据预设关闭流策略关闭文件流。
30.根据权利要求29所述的装置,其特征在于,所述关闭单元,具体用于:
关闭未被占用的时长最长的文件流;
或者,按照先进先出的调度算法,关闭文件流。
31.一种电子设备,其特征在于,包括处理器和存储器;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的计算机程序,实现权利要求1-9任一所述的方法步骤。
32.一种电子设备,其特征在于,包括处理器和存储器;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的计算机程序,实现权利要求10-15任一所述的方法步骤。
33.一种机器可读存储介质,其特征在于,所述机器可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-9任一所述的方法步骤。
34.一种机器可读存储介质,其特征在于,所述机器可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求10-15任一所述的方法步骤。
CN201810210455.4A 2018-03-14 2018-03-14 一种文件读写打开方法及装置 Active CN110309257B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810210455.4A CN110309257B (zh) 2018-03-14 2018-03-14 一种文件读写打开方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810210455.4A CN110309257B (zh) 2018-03-14 2018-03-14 一种文件读写打开方法及装置

Publications (2)

Publication Number Publication Date
CN110309257A CN110309257A (zh) 2019-10-08
CN110309257B true CN110309257B (zh) 2021-04-16

Family

ID=68073411

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810210455.4A Active CN110309257B (zh) 2018-03-14 2018-03-14 一种文件读写打开方法及装置

Country Status (1)

Country Link
CN (1) CN110309257B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110795400B (zh) * 2019-10-12 2022-03-22 苏州浪潮智能科技有限公司 一种文件的管理方法、装置、设备及介质
CN113312008B (zh) * 2021-07-28 2021-10-29 苏州浪潮智能科技有限公司 一种文件读写业务的处理方法、系统、设备以及介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103761051A (zh) * 2013-12-17 2014-04-30 北京同有飞骥科技股份有限公司 一种基于持续数据多输入输出流并发写入性能优化方法
CN105357280A (zh) * 2015-10-19 2016-02-24 福建新大陆软件工程有限公司 一种基于hdfs的文件溯源ftp系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103761051A (zh) * 2013-12-17 2014-04-30 北京同有飞骥科技股份有限公司 一种基于持续数据多输入输出流并发写入性能优化方法
CN105357280A (zh) * 2015-10-19 2016-02-24 福建新大陆软件工程有限公司 一种基于hdfs的文件溯源ftp系统

Also Published As

Publication number Publication date
CN110309257A (zh) 2019-10-08

Similar Documents

Publication Publication Date Title
CN111324427B (zh) 一种基于dsp的任务调度方法及装置
TW201248405A (en) Selective data storage in LSB and MSB pages
CN117010571A (zh) 一种业务量的预测方法、装置及设备
CN110309257B (zh) 一种文件读写打开方法及装置
CN109857612A (zh) 一种数据写入操作的监控方法及其终端
US20190026317A1 (en) Memory use in a distributed index and query system
US20200034040A1 (en) Data Architecture Based on Sub-allocation and References from Fragmented Data Blocks
CN110795400B (zh) 一种文件的管理方法、装置、设备及介质
CN105868216B (zh) 一种实现对象过期操作的方法、装置和设备
JP6167646B2 (ja) 情報処理装置、制御回路、制御プログラム、および制御方法
CN103778017A (zh) 改进虚拟处理器调度的亲和性
CN108243032A (zh) 一种服务等级信息的获取方法、装置及设备
US20150212744A1 (en) Method and system of eviction stage population of a flash memory cache of a multilayer cache system
CN109743309A (zh) 一种非法请求识别方法、装置及电子设备
CN109213423B (zh) 基于地址屏障无锁处理并发io命令
US10713162B1 (en) System and method for computer data garbage collection acceleration using peer to peer data transfers
CN107577962B (zh) 一种密码卡多算法并列执行的方法、系统及相关装置
CN108804563B (zh) 一种数据标注方法、装置以及设备
CN108829345B (zh) 日志文件的数据处理方法和终端设备
CN114327642A (zh) 一种数据读写的控制方法及电子设备
CN106020726B (zh) 写入元数据的方法、设备、以及存储装置
CN106649143B (zh) 一种访问缓存的方法、装置及电子设备
CN111221468B (zh) 存储块数据删除方法、装置、电子设备及云存储系统
US11360702B2 (en) Controller event queues
CN112015527B (zh) 管理从提交队列获取和执行命令

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant