CN109947719B - 一种提高集群在目录下读取目录项效率的方法 - Google Patents
一种提高集群在目录下读取目录项效率的方法 Download PDFInfo
- Publication number
- CN109947719B CN109947719B CN201910216989.2A CN201910216989A CN109947719B CN 109947719 B CN109947719 B CN 109947719B CN 201910216989 A CN201910216989 A CN 201910216989A CN 109947719 B CN109947719 B CN 109947719B
- Authority
- CN
- China
- Prior art keywords
- readdir
- layer
- cache
- directory
- opendir
- 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
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种提高集群在目录下读取目录项效率的方法,具体涉及计算机技术领域,包括readdir缓存功能层,所述readdir缓存功能层上层设有应用程序,所述readdir缓存功能层下层设有堆栈,所述堆栈底部设有存储介质。本发明通过下发opendir命令,命令返回到readdir缓存功能层时,在回调函数中即自动执行readdir,readdir下发并将读取到的目录项带回到readdir缓存功能进行一个缓存buffer,该缓存存在于堆栈上层,当用户实际执行readdir时,直接从预读的数据中进行读取即可,不需要通过整个堆栈下发到具体的存储介质上,有效地缩短了等待时间,设置准确性判断器和一致性判断器,判断opendir命令操作执行完的回调opendir_cbk中返回值的准确性和buffer与读取需求一致性,提高检索效率。
Description
技术领域
本发明涉及计算机技术领域,更具体地说,本发明涉及一种提高集群在目录下读取目录项效率的方法。
背景技术
集群文件系统是指运行在多台计算机之上,之间通过某种方式相互通信从而将集群内所有存储空间资源整合、虚拟化并对外提供文件访问服务的文件系统,其与NTFS、EXT等本地文件系统的目的不同,前者是为了扩展性,后者运行在单机环境,纯粹管理块和文件之间的映射以及文件属性,集群文件系统中命令是以异步的方式进行的,每一条命令在下发时会注册对应的回调函数,但是某一命令下发成功即结束,在底层执行完成获得返回后再调用对应的回调函数并返回命令执行结果,也就是说下发过程与返回结果是两个过程。目录项是指在存储介质中用于存储文件名及该文件唯一对应的inode节点的结构。在Linux系统中,目录也是一种文件,读取目录实际上就是读取目录文件,即该目录下文件的目录项的列表。读取目录项的命令为readdir,在linux系统中,readdir之前需要进行opendir打开目录文件。
readdir缓存功能层使用的是堆栈式架构,即整个代码是通过一层一层的功能层堆叠起来的,每一层都只实现一个单一的功能,每一层接受上一层传来的数据,经过功能的实现后,将数据再传递给下一层,从而实现总体上的复杂功能。每一个命令,都需要从堆栈顶端的客户端一直下发到堆栈底端的磁盘上,存在一定的耗时。readdir缓存功能层中的命令操作,是以异步的方式进行的,即下发的过程,和获取信息后的返回过程是两个过程。在每一层向下下发时命令时,都会指定该层的回调函数,供返回时调用执行。
但是上述技术方案在实际运用时,仍旧存在较多缺点,如客户端先下发opendir,然后下发readdir,两个操作先后进行,每一次下发和返回都是遍历整个堆栈,readdir会因为目录项的数量较多而存在等待时间过长的问题,但因为readdir前一定会调用opendir,opendir较快的返回以及调用readdir之前对于集群文件系统是一段相对空闲的时间,那么现有技术相当于浪费了这段时间,而当真的读取较多目录项时又存在返回数据时间过长的问题。
发明内容
为了克服现有技术的上述缺陷,本发明的实施例提供一种提高集群在目录下读取目录项效率的方法,通过下发opendir命令,命令返回到readdir缓存功能层时,在回调函数中即自动执行readdir,readdir下发并将读取到的目录项带回到readdir缓存功能进行一个缓存buffer,该缓存存在于堆栈上层,当用户实际执行readdir时,直接从预读的数据中进行读取即可,不需要通过整个堆栈下发到具体的存储介质上,有效地缩短了等待时间。
为实现上述目的,本发明提供如下技术方案:一种提高集群在目录下读取目录项效率的方法,包括readdir缓存功能层,所述readdir缓存功能层上层设有应用程序,所述readdir缓存功能层下层设有堆栈,所述堆栈底部设有存储介质,所述集群在目录下读取目录项的具体操作步骤为:
步骤一:用户在应用程序内点击下发opendir操作命令,该操作遍历整个堆栈并下发至底端检索整个存储介质,且在下发到每一层时,都会指定该层在返回时的回调函数;
步骤二:步骤一中opendir操作下发至底端存储介质后获取整体目录项信息,opendir向上按指定的回调函数逐层返回;
步骤三:步骤二中当opendir返回到达readdir缓存功能层时,该层回调函数内会执行向下下发readdir的操作,同时opendir继续向上返回,将目录句柄返回给用户;
步骤四:步骤三中readdir操作遍历整个堆栈并下发至底端读取整个存储介质,并将从底层读到的信息向上返回,缓存在readdir缓存层中;
步骤五:用户在应用程序内点击下发readdir操作命令,该操作到达readdir缓存层时获得缓存的信息;
步骤六:readdir操作直接从缓存层读取信息并返回给用户。
优选的,所述readdir缓存功能层内部设有准确性判断器和一致性判断器,所述准确性判断器用于判断opendir命令操作执行完的回调opendir cbk中返回值的准确性,所述一致性判断器用于判断readdir命令与保存在readdir缓存功能层中的回调opendir_cbk是否一致。
优选的,所述步骤一中在应用程序点击opendir命令,readdir缓存功能层、堆栈和存储介质将命令逐层传递,各层收到opendir命令快速注册opendir_cbk回调函数,采用异步回调的执行方法将操作执行完的回调opendir_cbk提交,并使用准确性判断器判断返回值的准确性,对正常回调函数读取并保存在buffer中。
优选的,所述步骤五中readdir缓存层收到readdir操作命令,利用一致性判断器检查buffer与读取需求一致。
本发明的技术效果和优点:
1、通过下发opendir命令,命令返回到readdir缓存功能层时,在回调函数中即自动执行readdir,readdir下发并将读取到的目录项带回到readdir缓存功能进行一个缓存buffer,该缓存存在于堆栈上层,当用户实际执行readdir时,直接从预读的数据中进行读取即可,不需要通过整个堆栈下发到具体的存储介质上,有效地缩短了等待时间;
2、通过直接在readdir缓存功能保存的缓存buffer中读取目录项,只在集群文件系统的上层进行,完全适应于各种数据保护算法,如冗余副本、纠删码技术等;
3、通过在readdir缓存功能层内部设置准确性判断器和一致性判断器,判断opendir命令操作执行完的回调opendir_cbk中返回值的准确性和buffer与读取需求一致性,提高检索效率。
附图说明
图1为本发明readdir缓存功能层的堆栈式架构图。
图2为本发明集群文件系统收到opendir命令执行的流程图。
图3为本发明集群文件系统收到readdir命令执行的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1:
根据图1所示的一种提高集群在目录下读取目录项效率的方法,包括readdir缓存功能层,所述readdir缓存功能层上层设有应用程序,所述readdir缓存功能层下层设有堆栈,所述堆栈底部设有存储介质,所述集群在目录下读取目录项的具体操作步骤为:
步骤一:用户在应用程序内点击下发opendir操作命令,该操作遍历整个堆栈并下发至底端检索整个存储介质,且在下发到每一层时,都会指定该层在返回时的回调函数;
步骤二:步骤一中opendir操作下发至底端存储介质后获取整体目录项信息,opendir向上按指定的回调函数逐层返回;
步骤三:步骤二中当opendir返回到达readdir缓存功能层时,该层回调函数内会执行向下下发readdir的操作,同时opendir继续向上返回,将目录句柄返回给用户;
步骤四:步骤三中readdir操作遍历整个堆栈并下发至底端读取整个存储介质,并将从底层读到的信息向上返回,缓存在readdir缓存层中;
步骤五:用户在应用程序内点击下发readdir操作命令,该操作到达readdir缓存层时获得缓存的信息;
步骤六:readdir操作直接从缓存层读取信息并返回给用户。
实施例2:
根据图2所示的一种提高集群在目录下读取目录项效率的方法,opendir操作命令下发后,readdir缓存功能层、堆栈和存储介质将命令逐层传递,各层收到opendir命令快速注册opendir_cbk回调函数,采用异步回调的执行方法将操作执行完的回调opendir_cbk提交,并使用准确性判断器判断返回值的准确性;
当准确性判断器判断返回值为正常时,各层注册opendirprecbk回调函数,并下发至对应目录的readdir命令,返回opendir结果,同时,异步回调操作执行完的回调opendirprecbk,将读到的目录项保存到缓存buffer中;
当准确性判断器判断返回值有错误时,回调opendir cbk直接返回opendir结果。
实施例3:
根据图3所示的一种提高集群在目录下读取目录项效率的方法,readdir操作命令下发后,命令到达readdir缓存层,一致性判断器读取buffer中存储的回调opendirprecbk目录项,检查该目录项是否与检索需求相一致,并根据检查结果做出下一步命令判断;
当buffer中的回调opendirprecbk目录项与需求一致时,回调opendirprecbk目录项为readdir命令查找的文件目录集,readdir将直接从buffer中读取目录项并返回,只在集群文件系统的上层进行,无需通过整个堆栈下发到具体的存储介质上;
当buffer与中的回调opendirprecbk目录项需求不一致时,回调opendirprecbk目录项中不包含或者缺乏readdir命令查找的文件目录集内容,系统注册默认回调函数下发readdir命令,随后readdir通过整个堆栈下发到具体的存储介质上,查找所需目录项。
本发明工作原理:
通过下发opendir命令,命令返回到readdir缓存功能层时,在回调函数中即自动执行readdir,readdir下发并将读取到的目录项带回到readdir缓存功能进行一个缓存buffer,该缓存存在于堆栈上层,当用户实际执行readdir时,直接从预读的数据中进行读取即可,不需要通过整个堆栈下发到具体的存储介质上,有效地缩短了等待时间,准确性判断器和一致性判断器分别判断opendir命令操作执行完的回调opendir_cbk中返回值的准确性和buffer与读取需求一致性,提高检索效率,避免不必要的失误和无效操作,提高工作效率。
最后应说明的几点是:首先,在本申请的描述中,需要说明的是,除非另有规定和限定,术语“安装”、“相连”、“连接”应做广义理解,可以是机械连接或电连接,也可以是两个元件内部的连通,可以是直接相连,“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变,则相对位置关系可能发生改变;
其次:本发明公开实施例附图中,只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计,在不冲突情况下,本发明同一实施例及不同实施例可以相互组合;
最后:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (2)
1.一种提高集群在目录下读取目录项效率的方法,包括readdir缓存功能层,其特征在于:所述readdir缓存功能层上层设有应用程序,所述readdir缓存功能层下层设有堆栈,所述堆栈底部设有存储介质,所述集群在目录下读取目录项的具体操作步骤为:
步骤一:用户在应用程序内点击下发opendir操作命令,该操作遍历整个堆栈并下发至底端检索整个存储介质,且在下发到每一层时,都会指定该层在返回时的回调函数;
步骤二:步骤一中opendir操作下发至底端存储介质后获取整体目录项信息,opendir向上按指定的回调函数逐层返回;
步骤三:步骤二中当opendir返回到达readdir缓存功能层时,该层回调函数内会执行向下下发readdir的操作,同时opendir继续向上返回,将目录句柄返回给用户;
步骤四:步骤三中readdir操作遍历整个堆栈并下发至底端读取整个存储介质,并将从底层读到的信息向上返回,缓存在readdir缓存层中;
步骤五:用户在应用程序内点击下发readdir操作命令,该操作到达readdir缓存层时获得缓存的信息;
步骤六:readdir操作直接从缓存层读取信息并返回给用户;
所述readdir缓存功能层内部设有准确性判断器和一致性判断器,所述准确性判断器用于判断opendir命令操作执行完的回调opendircbk中返回值的准确性,所述一致性判断器用于判断readdir命令与保存在readdir缓存功能层中的回调opendircbk是否一致;
所述步骤一中在应用程序点击opendir命令,readdir缓存功能层、堆栈和存储介质将命令逐层传递,各层收到opendir命令快速注册opendircbk回调函数,采用异步回调的执行方法将操作执行完的回调opendircbk提交,并使用准确性判断器判断返回值的准确性;
当准确性判断器判断返回值为正常时,各层注册opendir pre cbk回调函数,并下发至对应目录的readdir命令,返回opendir结果,同时,异步回调操作执行完的回调opendirpre cbk,将读到的目录项保存到缓存buffer中;
当准确性判断器判断返回值有错误时,回调opendir cbk直接返回opendir结果。
2.根据权利要求1所述的一种提高集群在目录下读取目录项效率的方法,其特征在于:所述步骤五中readdir缓存层收到readdir操作命令,所述一致性判断器检查buffer与读取需求一致性。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910216989.2A CN109947719B (zh) | 2019-03-21 | 2019-03-21 | 一种提高集群在目录下读取目录项效率的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910216989.2A CN109947719B (zh) | 2019-03-21 | 2019-03-21 | 一种提高集群在目录下读取目录项效率的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109947719A CN109947719A (zh) | 2019-06-28 |
CN109947719B true CN109947719B (zh) | 2022-10-11 |
Family
ID=67010340
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910216989.2A Active CN109947719B (zh) | 2019-03-21 | 2019-03-21 | 一种提高集群在目录下读取目录项效率的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109947719B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111737204B (zh) | 2020-06-12 | 2024-03-19 | 北京百度网讯科技有限公司 | 文件目录遍历方法、装置、设备和介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101256585A (zh) * | 2007-02-27 | 2008-09-03 | 富士通株式会社 | 文件处理方法和装置 |
CN101779244A (zh) * | 2007-08-24 | 2010-07-14 | 微软公司 | 直接海量存储设备文件索引 |
CN103902660A (zh) * | 2014-03-04 | 2014-07-02 | 中国科学院计算技术研究所 | 机群文件系统中通过readdir++预取文件布局的系统及其方法 |
CN103944958A (zh) * | 2014-03-14 | 2014-07-23 | 中国科学院计算技术研究所 | 一种广域文件系统及实现方法 |
US9582312B1 (en) * | 2015-02-04 | 2017-02-28 | Amazon Technologies, Inc. | Execution context trace for asynchronous tasks |
CN106776759A (zh) * | 2016-11-17 | 2017-05-31 | 郑州云海信息技术有限公司 | 分布式文件系统的小文件预读方法及系统 |
CN106991059A (zh) * | 2017-03-15 | 2017-07-28 | 湖北盛天网络技术股份有限公司 | 对数据源的访问控制方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9323681B2 (en) * | 2008-09-18 | 2016-04-26 | Avere Systems, Inc. | File storage system, cache appliance, and method |
-
2019
- 2019-03-21 CN CN201910216989.2A patent/CN109947719B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101256585A (zh) * | 2007-02-27 | 2008-09-03 | 富士通株式会社 | 文件处理方法和装置 |
CN101779244A (zh) * | 2007-08-24 | 2010-07-14 | 微软公司 | 直接海量存储设备文件索引 |
CN103902660A (zh) * | 2014-03-04 | 2014-07-02 | 中国科学院计算技术研究所 | 机群文件系统中通过readdir++预取文件布局的系统及其方法 |
CN103944958A (zh) * | 2014-03-14 | 2014-07-23 | 中国科学院计算技术研究所 | 一种广域文件系统及实现方法 |
US9582312B1 (en) * | 2015-02-04 | 2017-02-28 | Amazon Technologies, Inc. | Execution context trace for asynchronous tasks |
CN106776759A (zh) * | 2016-11-17 | 2017-05-31 | 郑州云海信息技术有限公司 | 分布式文件系统的小文件预读方法及系统 |
CN106991059A (zh) * | 2017-03-15 | 2017-07-28 | 湖北盛天网络技术股份有限公司 | 对数据源的访问控制方法 |
Non-Patent Citations (1)
Title |
---|
"Readdir++:一种并行网络文件系统中海量小文件读优化技术";杨洪章 等;《小型微型计算机系统》;20141130;第35卷(第11期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109947719A (zh) | 2019-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107391653B (zh) | 一种分布式NewSQL数据库系统及图片数据储存方法 | |
CN100514331C (zh) | 在文件系统保持活动状态的同时转换文件系统的方法 | |
JP4124331B2 (ja) | Dbms向け仮想ボリューム作成・管理方法 | |
US7870353B2 (en) | Copying storage units and related metadata to storage | |
US11403269B2 (en) | Versioning validation for data transfer between heterogeneous data stores | |
US20080010325A1 (en) | Data migration apparatus, method, and program | |
CN102955792A (zh) | 一种实时全文搜索引擎事务处理的实现方法 | |
JP2007501455A (ja) | 非故障ノードによる並列な回復 | |
CN102136003A (zh) | 大规模分布式存储系统 | |
JP2004326162A (ja) | ネットワークシステム、サーバ、データ処理方法及びプログラム | |
US7024420B2 (en) | Run-time access techniques for database images | |
USRE42859E1 (en) | File server that allows an end user to specify storage characteristics with ease | |
CN113377868A (zh) | 一种基于分布式kv数据库的离线存储系统 | |
CN100405310C (zh) | 一种快照系统及方法 | |
US6658541B2 (en) | Computer system and a database access method thereof | |
CN114925084B (zh) | 分布式事务处理方法、系统、设备及可读存储介质 | |
CN115168061A (zh) | 一种计算存储分离方法、系统、电子设备及存储介质 | |
CN109947719B (zh) | 一种提高集群在目录下读取目录项效率的方法 | |
US11625503B2 (en) | Data integrity procedure | |
US10055139B1 (en) | Optimized layout in a two tier storage | |
CN112988884A (zh) | 大数据平台数据存储方法及装置 | |
CN102622284B (zh) | 面向海量存储系统的数据异步复制方法 | |
CN114780043A (zh) | 基于多层缓存的数据处理方法及装置、电子设备 | |
WO2011118425A1 (ja) | クエリ最適化システム、クエリ最適化装置、及びクエリ最適化方法 | |
WO2014061847A1 (ko) | 모바일 환경에 구축된 데이터베이스에 대한 트랜잭션 로깅 및 회복 장치 및 그 방법 |
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 |