CN114003562B - 一种目录遍历方法、装置、设备及可读存储介质 - Google Patents
一种目录遍历方法、装置、设备及可读存储介质 Download PDFInfo
- Publication number
- CN114003562B CN114003562B CN202111626122.8A CN202111626122A CN114003562B CN 114003562 B CN114003562 B CN 114003562B CN 202111626122 A CN202111626122 A CN 202111626122A CN 114003562 B CN114003562 B CN 114003562B
- Authority
- CN
- China
- Prior art keywords
- directory
- linked list
- binary tree
- cache
- read
- 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
- 238000000034 method Methods 0.000 title claims abstract description 51
- 230000006870 function Effects 0.000 claims description 37
- 238000004590 computer program Methods 0.000 claims description 12
- 230000008878 coupling Effects 0.000 abstract description 5
- 238000010168 coupling process Methods 0.000 abstract description 5
- 238000005859 coupling reaction Methods 0.000 abstract description 5
- 230000000694 effects Effects 0.000 abstract description 2
- 238000012545 processing Methods 0.000 description 14
- 230000007246 mechanism Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000008094 contradictory effect Effects 0.000 description 1
- 235000014510 cooky Nutrition 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
- G06F16/134—Distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/148—File search processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
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)
- Library & Information Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种目录遍历方法、装置、设备及可读存储介质。本申请在用户态网络文件系统下,通过二叉树和链表进行目录项缓存,针对一个读目录请求一次性返回N个目录项,因此可提高缓存查找效率,提高目录的遍历效率,可应对单个目录下文件数目庞大的情况;同时,用户态网络文件系统与内核模块耦合度低,可减少与系统底层的相互影响。相应地,本申请提供的一种目录遍历装置、设备及可读存储介质,也同样具有上述技术效果。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种目录遍历方法、装置、设备及可读存储介质。
背景技术
目前,分布式文件存储系统中可能出现单个目录下文件数目庞大的情况,而在一些业务场景中,需要对包括大量文件的大目录进行文件项的遍历,由于一个目录下的文件数目庞大,会导致遍历时长,业务响应缓慢。
因此,如何提高大目录的遍历效率,是本领域技术人员需要解决的问题。
发明内容
有鉴于此,本申请的目的在于提供一种目录遍历方法、装置、设备及可读存储介质,以提高大目录的遍历效率。其具体方案如下:
第一方面,本申请提供了一种目录遍历方法,应用于用户态网络文件系统,包括:
接收客户端发送的读目录请求;
若缓存功能已开启、且缓存中的数据有效,则在所述缓存的二叉树中确定所述读目录请求对应的二叉树节点,在所述缓存的链表中确定所述二叉树节点对应的链表块;
基于所述二叉树节点和所述链表块从所述缓存中读取N个目录项,并将所述N个目录项返回至所述客户端。
优选地,所述在所述缓存的二叉树中确定所述读目录请求对应的二叉树节点,包括:
基于所述读目录请求携带的目录偏移量,在所述二叉树中确定所述二叉树节点。
优选地,所述在所述缓存的链表中确定所述二叉树节点对应的链表块,包括:
基于所述二叉树节点的节点名称,在所述链表中确定所述链表块。
优选地,所述基于所述二叉树节点和所述链表块从所述缓存中读取N个目录项,包括:
若所述链表块中的目录项个数等于N,则读取所述链表块中的所有目录项;
或
若所述链表块中的目录项个数大于N,则从所述链表块中读取N个目录项;
或
若所述链表块中的目录项个数小于N,则读取所述链表块中的所有目录项后,确定所述二叉树节点的下一节点,并基于所述下一节点确定下一链表块,从所述下一链表块中读取目录项,以读取到N个目录项。
优选地,还包括:
若缓存功能已开启、且所述缓存中的数据失效,则在所述缓存中创建所述二叉树和所述链表后,执行所述在所述缓存的二叉树中确定所述读目录请求对应的二叉树节点,在所述缓存的链表中确定所述二叉树节点对应的链表块;基于所述二叉树节点和所述链表块从所述缓存中读取N个目录项,并将所述N个目录项返回至所述客户端的步骤。
优选地,所述在所述缓存中创建所述二叉树和所述链表,包括:
调用FSAL lib库接口从底层读取所述读目录请求对应的目录项;
以所述目录项为起始,调用FSAL lib库接口从所述底层依次读取其他目录项,直至读取到N个目录项,基于读取到的N个目录项生成所述二叉树和所述链表。
优选地,还包括:
若缓存功能未开启,则调用FSAL lib库接口从底层读取所述读目录请求对应的目录项;
以所述目录项为起始,调用FSAL lib库接口从所述底层依次读取其他目录项,直至读取到N个目录项,将读取到的N个目录项返回至所述客户端。
第二方面,本申请提供了一种目录遍历装置,应用于用户态网络文件系统,包括:
接收模块,用于接收客户端发送的读目录请求;
查询模块,用于若缓存功能已开启、且缓存中的数据有效,则在所述缓存的二叉树中确定所述读目录请求对应的二叉树节点,在所述缓存的链表中确定所述二叉树节点对应的链表块;
返回模块,用于基于所述二叉树节点和所述链表块从所述缓存中读取N个目录项,并将所述N个目录项返回至所述客户端。
第三方面,本申请提供了一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序,以实现前述公开的目录遍历方法。
第四方面,本申请提供了一种可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述公开的目录遍历方法。
通过以上方案可知,本申请提供了一种目录遍历方法,应用于用户态网络文件系统,包括:接收客户端发送的读目录请求;若缓存功能已开启、且缓存中的数据有效,则在所述缓存的二叉树中确定所述读目录请求对应的二叉树节点,在所述缓存的链表中确定所述二叉树节点对应的链表块;基于所述二叉树节点和所述链表块从所述缓存中读取N个目录项,并将所述N个目录项返回至所述客户端。
可见,本申请在接收客户端发送的读目录请求后,先检查缓存功能是否开启,若缓存功能已开启、且缓存中的数据有效,则在缓存的二叉树中确定读目录请求对应的二叉树节点,在缓存的链表中确定二叉树节点对应的链表块;基于二叉树节点和链表块从缓存中读取N个目录项,并将N个目录项返回至客户端,从而在用户态网络文件系统下,通过二叉树和链表进行目录项缓存,针对一个读目录请求一次性返回N个目录项,因此可提高缓存查找效率,提高目录的遍历效率,可应对单个目录下文件数目庞大的情况;同时,用户态网络文件系统与内核模块耦合度低,可减少与系统底层的相互影响。
相应地,本申请提供的一种目录遍历装置、设备及可读存储介质,也同样具有上述技术效果。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种目录遍历方法流程图;
图2为本申请公开的一种二叉树及链表示意图;
图3为本申请公开的另一种目录遍历方法流程图;
图4为本申请公开的一种系统架构示意图;
图5为本申请公开的一种目录遍历装置示意图;
图6为本申请公开的一种电子设备示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
目前,分布式文件存储系统中可能出现单个目录下文件数目庞大的情况,而在一些业务场景中,需要对包括大量文件的大目录进行文件项的遍历,由于一个目录下的文件数目庞大,会导致遍历时长,业务响应缓慢。为此,本申请提供了一种目录遍历方案,能够提高大目录的遍历效率。
参见图1所示,本申请实施例公开了一种目录遍历方法,应用于用户态网络文件系统,包括:
S101、接收客户端发送的读目录请求。
在分布式文件存储系统中,用户态网络文件系统能够基于网络远程过程调用,提供透明的文件访问机制以及文件IO传输,摆脱了单机服务限制,实现远程数据共享,网络文件系统(Network File System)属于UNIX协议的表示层,其主要是采用远程过程调用RPC(Romote Procedure Call,远程过程调用)机制。RPC机制提供了一组与机器、操作系统以及底层传送协议无关的存取远程文件的操作。分布式文件存储系统可基于NAS(NetworkAttached Storage,网络附加存储)融合架构实现。
而用户态网络文件系统相对于内核态网络文件系统,具有灵活的内存分配机制,在海量分布式文件存储中可以对百万级的文件进行元数据缓存管理,减少并避免客户端业务请求对底层文件系统产生IO阻塞,并且由于该服务对内核模块的耦合度低,在断电等故障场景下也不会对整个系统造成影响。
其中,内核态网络文件系统不具备灵活分配内存单元的功能,维护成本较高,故障时对整个服务影响较大,由于完全由内核资源进行调度管理,复杂度也高。不失一般性,文件系统中的数据都分为数据和元数据。其中,数据指的是文件中的实际数据。元数据用于描述数据属性等信息,包括访问权限,文件所有者,文件访问、修改、创建时间,以及inode文件数据索引信息等。
一般地,客户端可以通过ls命令发送readdir请求。readdir请求即读目录请求。ls命令是Linux系统下常用的命令之一。通过ls命令可以指定读取目录里的某一项或多项,也可以不指定。
S102、若缓存功能已开启、且缓存中的数据有效,则在缓存的二叉树中确定读目录请求对应的二叉树节点,在缓存的链表中确定二叉树节点对应的链表块。
在一种具体实施方式中,在缓存的二叉树中确定读目录请求对应的二叉树节点,包括:基于读目录请求携带的目录偏移量(即:读目录请求要读的目录项在父目录中的偏移量),在二叉树中确定二叉树节点。
在一种具体实施方式中,在缓存的链表中确定二叉树节点对应的链表块,包括:基于二叉树节点的节点名称(如:读目录请求要读的目录项的名称),在链表中确定链表块。
具体的,二叉树和链表可参照图2所示。二叉树便于进行缓存查找,可以提升查缓存的效率,而链表便于缓存各目录项。如图2所示,链表中的一个链表块中缓存有128个目录项,而一个目录项对应一个二叉树节点。也即:128个二叉树节点记录在一个链表块中。这些目录项可以是属于同一个父目录的各文件,一个目录项可理解为:大目录中的某一文件的名称。
在本实施例中,缓存功能即通过二叉树和链表实现的缓存功能。针对该功能可设置开关,因此处理任一读目录请求之前,可以先检查缓存功能是否开启,若已开启,则系统按照预定规则将大目录中的部分目录项预先读取至缓存,并以二叉树和链表在缓存中存储,以便在接到读目录请求时,直接从缓存中读取相应目录项。
当然,以二叉树和链表在缓存中存储的目录项可能会由于长时间未使用而失效,在缓存中的数据失效时,可基于预定失效机制重新进行缓存。因此在一种具体实施方式中,若缓存功能已开启、且缓存中的数据失效,则在缓存中创建二叉树和链表后,执行在缓存的二叉树中确定读目录请求对应的二叉树节点,在缓存的链表中确定二叉树节点对应的链表块;基于二叉树节点和链表块从缓存中读取N个目录项,并将N个目录项返回至客户端的步骤。
在一种具体实施方式中,在缓存中创建二叉树和链表,包括:调用FSAL lib库接口从底层读取读目录请求对应的目录项;以目录项为起始,调用FSAL lib库接口从底层依次读取其他目录项,直至读取到N个目录项,基于读取到的N个目录项生成二叉树和链表。在缓存中创建得到二叉树和链表并成功响应当前读目录请求后,后续系统将继续缓存其他目录项,以应对后续读目录请求。
S103、基于二叉树节点和链表块从缓存中读取N个目录项,并将N个目录项返回至客户端。
在一种具体实施方式中,基于二叉树节点和链表块从缓存中读取N个目录项,包括:若链表块中的目录项个数等于N,则读取链表块中的所有目录项;或若链表块中的目录项个数大于N,则从链表块中读取N个目录项;或若链表块中的目录项个数小于N,则读取链表块中的所有目录项后,确定二叉树节点的下一节点,并基于下一节点确定下一链表块,从下一链表块中读取目录项,以读取到N个目录项。
在本实施例中,N为正整数,一般基于系统缓存大小、CPU算力大小等综合设定。如果N取值136,一个链表块中缓存有128个目录项,那么针对一个读目录请求,读取一个链表块中缓存这128个目录项后,还需要从下一链表块中读取8个目录项,以读取到136个目录项。如果N取值128,一个链表块中缓存有128个目录项,那么针对一个读目录请求,读取一个链表块中缓存这128个目录项后,直接返回这128个目录项给客户端。如果N取值128,一个链表块中缓存有32个目录项,那么针对一个读目录请求,需要读取4个链表块中缓存所有目录项后,返回所读取的这128个目录项给客户端。
在一种具体实施方式中,若缓存功能未开启,则调用FSAL lib库接口从底层读取读目录请求对应的目录项;以目录项为起始,调用FSAL lib库接口从底层依次读取其他目录项,直至读取到N个目录项,将读取到的N个目录项返回至客户端。可见,若系统未开启缓存功能,也可以针对一个读目录请求一次性返回N个目录项。
可见,本实施例在用户态网络文件系统下,通过二叉树和链表进行目录项缓存,针对一个读目录请求一次性返回N个目录项,因此可提高缓存查找效率,提高目录的遍历效率,可应对单个目录下文件数目庞大的情况;同时,用户态网络文件系统与内核模块耦合度低,可减少与系统底层的相互影响。
下述实施例提供了一种基于用户态网络文件系统的目录项遍历方法,用以提高单目录下海量文件的遍历效率,突破遍历大目录的性能瓶颈。
请参见图3,一种目录项遍历方法包括:
1、NFS客户端首先挂载分布式存储系统的共享空间目录到本地,该目录下存有海量百万级文件,NFS客户端在该目录下通过ls命令向NFS服务端发送readdir请求。NFS服务端即:应用有用户态网络文件系统的分布式存储系统。
2、NFS服务端接收到客户端的readdir请求,计算并填充缓存结构体,分配缓存空间。
3、NFS服务端判断是否使用NFS服务端缓存模块功能。
若缓存功能开启,则直接查询缓存,以读取136个文件返回给客户端。若在缓存中未查到相应文件或文件不够,则进入缓存功能未开启流程。
缓存功能未开启流程包括:
(1)调用FSAL lib库接口从底层读取单个文件,并通过回调函数进行填充、编码;
(2)一次readdir请求共读取136个文件,满136个后停止从lib库读取;
(3)对这136个文件完成填充、编码后返回给客户端;
(4)若所有文件从lib库读取完后,不足136个,也需要在回调函数进行填充、编码后返回给客户端。
4、服务端查询缓存之前,判断缓存是否失效,若未失效,则查询缓存,具体包括:
(1)从二叉树中读取第一个缓存dirent(假设当前为首次请求),然后通过dirent获取其所在的块;
(2)从块中读取剩余的127个文件,不足136个文件,获取该块的下一个ck值(二叉树的节点数据集合);
(3)通过ck从二叉树中找到下一个dirent,然后获取其所在块;
(4)从此块中读取8个文件;
(5)针对一次readdir请求,共读取136个文件信息返回给客户端;
(6)若所有文件从lib库读取完后,不足136个,也需要在回调函数进行填充、编码后返回给客户端。
5、若服务端判断缓存失效,则重建缓存,并响应客户端,具体包括:
(1)服务端释放父目录块空间并清除目录二叉树中的dirent缓存,以删除无效的缓存数据;
(2)分配一个块结构体空间,插入到链表;
(3)调用lib库接口从底层读取单个文件保存到块结构体中;
(4)若块中装满128个文件,则停止从lib库读取文件;
(5)服务端从块结构体获取128个文件,调用回调函数进行填充、编码;
(6)由于不足136个文件,继续分配一个块结构体,插入链表,执行步骤(3)(4);
(7)服务端从第二个块再获取8个文件,经回调函数填充、编码后,返回给客户端;
(8)若所有文件读取完后,不足136个,也经回调函数填充、编码后,返回给客户端。
6、客户端收到服务端返回的文件信息后,继续发送readdir请求读取目录中剩余的文件。
可见,在缓存功能开启且缓存有效的情况下,NFS客户端在遍历单目录下的海量文件时,NFS服务端先通过参数cookie(遍历目录项的偏移量)从二叉树中查找dirent,并完成请求响应。
在缓存功能开启,但缓存中没有相应文件的情况下,就会创建缓存dirent,并创建一个块并插入块链表,从lib读取128个文件,插入到父目录的二叉树和块中。从lib读取128个缓存结束后,得到该块的缓存dirent1。dirent在块内是以链表的形式保存。此时文件不足136个,那么继续分配一个块结构体进行文件缓存,直至可以从缓存中读取136个文件。针对读取到的136个文件通过回调函数进行填充、编码后,返回给客户端。
目录下的所有文件都可以保存在二叉树和块链表中,在缓存没有失效的情况下,后续只需查找缓存即可成功响应请求。随着单目录下文件数目的增加,readdir次数的增多,本方案具有明显的性能优势,能够快速返回遍历目录项文件。
具体的,上述流程对应的系统架构可参见图4。
请参照图4,NFS服务端收到请求后,在分布式存储集群中,首先通过NFS服务端协议处理,然后把相应的文件处理请求发给文件系统抽象层,即分布式文件系统文件接口动态lib库,该层也称之为分布式存储文件系统的client层,client层以及元数据服务集群处理后,把处理结果返回给NFS客户端,完成NFS请求处理。
NFS客户端进行读写请求,经过系统调用,进入虚拟文件系统层VFS,一般情况下,客户端请求通过lib和Linux内核的VFS层进行交互,VFS层是对底层文件系统的一种抽象。客户端的底层文件系统是指NFS客户端程序。VFS为各种文件系统提供了一个通用的接口。每一种具体的文件系统则将其物理组织结构转换为虚拟文件系统的通用模型。NFS Client请求经过VFS层后,需要通过RPC远程过程调用把文件操作请求发送到RPC层;RPC层接收到NFS Client的请求时,通过网络发送到NFS服务端,RPC层需要组装请求报文结构,请求报文结构特指:以太网头,IP头,TCP头,RPC头与NFS数据进行组装得到的标准NFS请求。
NFS服务端监听并接收NFS客户端的遍历目录请求,对目录进行readdir操作请求时,首先在NFS服务端程序层进行处理,NFS服务端协议层调用readdir,经过缓存处理模块进行处理。缓存失效时,调用分布式文件系统Client-FSAL层,FSAL为分布式文件存储的抽象层,即分布式文件系统Client层的动态lib库,对目录下的文件进行缓存、处理,然后对文件进行预期处理返回NFS客户端。
从NFS客户端发起请求,到分布式存储集群client层对操作进行处理的IO路径较长,每个IO操作环节有着密切关系,针对元数据的缓存处理,决定了文件系统操作的时效性,特别是遍历一个目录拥有几千万个文件时的性能问题,在大规模海量分布式存储中,依次需要经过NFS客户端,NFS服务端,分布式存储Client文件系统接口层,分布式元数据集群服务等四个维度,每个维度的缓存处理,衔接紧密,缓存构建复杂。
本实施例基于用户态网络文件系统,针对第一次readdir请求,可以多次调用分布式文件系统接口并预取多个文件,然后经过用户态网络文件系统协议层回调函数进行填充、编码,将预取到的文件返回给客户端。
服务端还能对预取的缓存进行管理,针对缓存是否失效,采用不同的处理机制,缓存失效时,通过二叉树进行缓存构建,提高缓存查找效率。
服务端还设计了缓存命中逻辑规则,针对任一次readdir请求,首先判断待读取数据是否在缓存中,如果在,则直接从缓存中获取,如果不存在,则需要从分布式元数据集群服务中获取。基于此,在相同的分布式存储介质的情况下,本实施例对遍历单目录海量文件时,具有明显的性能优势。
下面对本申请实施例提供的一种目录遍历装置进行介绍,下文描述的一种目录遍历装置与上文描述的一种目录遍历方法可以相互参照。
参见图5所示,本申请实施例公开了一种目录遍历装置,应用于用户态网络文件系统,包括:
接收模块501,用于接收客户端发送的读目录请求;
查询模块502,用于若缓存功能已开启、且缓存中的数据有效,则在缓存的二叉树中确定读目录请求对应的二叉树节点,在缓存的链表中确定二叉树节点对应的链表块;
返回模块503,用于基于二叉树节点和链表块从缓存中读取N个目录项,并将N个目录项返回至客户端。
在一种具体实施方式中,查询模块具体用于:
基于读目录请求携带的目录偏移量,在二叉树中确定二叉树节点。
在一种具体实施方式中,查询模块具体用于:
基于二叉树节点的节点名称,在链表中确定链表块。
在一种具体实施方式中,返回模块具体用于:
若链表块中的目录项个数等于N,则读取链表块中的所有目录项;
或
若链表块中的目录项个数大于N,则从链表块中读取N个目录项;
或
若链表块中的目录项个数小于N,则读取链表块中的所有目录项后,确定二叉树节点的下一节点,并基于下一节点确定下一链表块,从下一链表块中读取目录项,以读取到N个目录项。
在一种具体实施方式中,还包括:
新建模块,用于若缓存功能已开启、且缓存中的数据失效,则在缓存中创建二叉树和链表后,执行在缓存的二叉树中确定读目录请求对应的二叉树节点,在缓存的链表中确定二叉树节点对应的链表块;基于二叉树节点和链表块从缓存中读取N个目录项,并将N个目录项返回至客户端的步骤。
在一种具体实施方式中,新建模块具体用于:
调用FSAL lib库接口从底层读取读目录请求对应的目录项;
以目录项为起始,调用FSAL lib库接口从底层依次读取其他目录项,直至读取到N个目录项,基于读取到的N个目录项生成二叉树和链表。
在一种具体实施方式中,还包括:
底层读取模块,用于若缓存功能未开启,则调用FSAL lib库接口从底层读取读目录请求对应的目录项;以目录项为起始,调用FSAL lib库接口从底层依次读取其他目录项,直至读取到N个目录项,将读取到的N个目录项返回至客户端。
其中,关于本实施例中各个模块、单元更加具体的工作过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
可见,本实施例提供了一种目录遍历装置,在用户态网络文件系统下,通过二叉树和链表进行目录项缓存,针对一个读目录请求一次性返回N个目录项,因此可提高缓存查找效率,提高目录的遍历效率,可应对单个目录下文件数目庞大的情况;同时,用户态网络文件系统与内核模块耦合度低,可减少与系统底层的相互影响。
下面对本申请实施例提供的一种电子设备进行介绍,下文描述的一种电子设备与上文描述的一种目录遍历方法及装置可以相互参照。
参见图6所示,本申请实施例公开了一种电子设备,包括:
存储器601,用于保存计算机程序;
处理器602,用于执行所述计算机程序,以实现上述任意实施例公开的方法。
下面对本申请实施例提供的一种可读存储介质进行介绍,下文描述的一种可读存储介质与上文描述的一种目录遍历方法、装置及设备可以相互参照。
一种可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述实施例公开的目录遍历方法。关于该方法的具体步骤可以参考前述实施例中公开的相应内容,在此不再进行赘述。
本申请涉及的“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法或设备固有的其它步骤或单元。
需要说明的是,在本申请中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的可读存储介质中。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (9)
1.一种目录遍历方法,其特征在于,应用于用户态网络文件系统,包括:
接收客户端发送的读目录请求;
若缓存功能已开启、且缓存中的数据有效,则在所述缓存的二叉树中确定所述读目录请求对应的二叉树节点,在所述缓存的链表中确定所述二叉树节点对应的链表块;
基于所述二叉树节点和所述链表块从所述缓存中读取N个目录项,并将所述N个目录项返回至所述客户端;
其中,所述基于所述二叉树节点和所述链表块从所述缓存中读取N个目录项,包括:
若所述链表块中的目录项个数等于N,则读取所述链表块中的所有目录项;
或
若所述链表块中的目录项个数大于N,则从所述链表块中读取N个目录项;
或
若所述链表块中的目录项个数小于N,则读取所述链表块中的所有目录项后,确定所述二叉树节点的下一节点,并基于所述下一节点确定下一链表块,从所述下一链表块中读取目录项,以读取到N个目录项。
2.根据权利要求1所述的方法,其特征在于,所述在所述缓存的二叉树中确定所述读目录请求对应的二叉树节点,包括:
基于所述读目录请求携带的目录偏移量,在所述二叉树中确定所述二叉树节点。
3.根据权利要求1所述的方法,其特征在于,所述在所述缓存的链表中确定所述二叉树节点对应的链表块,包括:
基于所述二叉树节点的节点名称,在所述链表中确定所述链表块。
4.根据权利要求1至3任一项所述的方法,其特征在于,还包括:
若缓存功能已开启、且所述缓存中的数据失效,则在所述缓存中创建所述二叉树和所述链表后,执行所述在所述缓存的二叉树中确定所述读目录请求对应的二叉树节点,在所述缓存的链表中确定所述二叉树节点对应的链表块;基于所述二叉树节点和所述链表块从所述缓存中读取N个目录项,并将所述N个目录项返回至所述客户端的步骤。
5.根据权利要求4所述的方法,其特征在于,所述在所述缓存中创建所述二叉树和所述链表,包括:
调用FSAL lib库接口从底层读取所述读目录请求对应的目录项;
以所述目录项为起始,调用FSAL lib库接口从所述底层依次读取其他目录项,直至读取到N个目录项,基于读取到的N个目录项生成所述二叉树和所述链表。
6.根据权利要求1至3任一项所述的方法,其特征在于,还包括:
若缓存功能未开启,则调用FSAL lib库接口从底层读取所述读目录请求对应的目录项;
以所述目录项为起始,调用FSAL lib库接口从所述底层依次读取其他目录项,直至读取到N个目录项,将读取到的N个目录项返回至所述客户端。
7.一种目录遍历装置,其特征在于,应用于用户态网络文件系统,包括:
接收模块,用于接收客户端发送的读目录请求;
查询模块,用于若缓存功能已开启、且缓存中的数据有效,则在所述缓存的二叉树中确定所述读目录请求对应的二叉树节点,在所述缓存的链表中确定所述二叉树节点对应的链表块;
返回模块,用于基于所述二叉树节点和所述链表块从所述缓存中读取N个目录项,并将所述N个目录项返回至所述客户端;
其中,返回模块具体用于:
若所述链表块中的目录项个数等于N,则读取所述链表块中的所有目录项;
或
若所述链表块中的目录项个数大于N,则从所述链表块中读取N个目录项;
或
若所述链表块中的目录项个数小于N,则读取所述链表块中的所有目录项后,确定所述二叉树节点的下一节点,并基于所述下一节点确定下一链表块,从所述下一链表块中读取目录项,以读取到N个目录项。
8.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序,以实现如权利要求1至6任一项所述的方法。
9.一种可读存储介质,其特征在于,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111626122.8A CN114003562B (zh) | 2021-12-29 | 2021-12-29 | 一种目录遍历方法、装置、设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111626122.8A CN114003562B (zh) | 2021-12-29 | 2021-12-29 | 一种目录遍历方法、装置、设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114003562A CN114003562A (zh) | 2022-02-01 |
CN114003562B true CN114003562B (zh) | 2022-03-22 |
Family
ID=79932061
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111626122.8A Active CN114003562B (zh) | 2021-12-29 | 2021-12-29 | 一种目录遍历方法、装置、设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114003562B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116701299B (zh) * | 2022-12-09 | 2024-03-26 | 荣耀终端有限公司 | 一种目录管理方法及相关装置 |
CN116303267A (zh) * | 2023-03-06 | 2023-06-23 | 北京百度网讯科技有限公司 | 数据访问方法、装置、设备以及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103765373A (zh) * | 2013-10-18 | 2014-04-30 | 华为技术有限公司 | 数据存储方法、数据存储装置和存储设备 |
CN108419097A (zh) * | 2018-03-16 | 2018-08-17 | 洛阳师范学院 | 一种移动自组网下基于聚类树的视频共享方法 |
CN111737204A (zh) * | 2020-06-12 | 2020-10-02 | 北京百度网讯科技有限公司 | 文件目录遍历方法、装置、设备和介质 |
CN112464044A (zh) * | 2020-12-09 | 2021-03-09 | 上海爱数信息技术股份有限公司 | 一种文件数据块变化信息监控管理系统及其方法 |
CN112653730A (zh) * | 2020-12-10 | 2021-04-13 | 苏州浪潮智能科技有限公司 | 一种用户态网络文件存储方法和系统 |
CN112800067A (zh) * | 2021-02-20 | 2021-05-14 | 成都佰维存储科技有限公司 | 范围查询方法、装置、计算机可读存储介质及电子设备 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6970945B1 (en) * | 1999-11-01 | 2005-11-29 | Seebeyond Technology Corporation | Systems and methods of message queuing |
CN101777016B (zh) * | 2010-02-08 | 2012-04-25 | 北京同有飞骥科技股份有限公司 | 一种连续数据保护系统的快照存储和数据恢复方法 |
CN102024020B (zh) * | 2010-11-04 | 2013-02-06 | 曙光信息产业(北京)有限公司 | 一种分布式文件系统中高效的元数据访存方法 |
CN102737064B (zh) * | 2011-04-15 | 2016-02-24 | 腾讯科技(深圳)有限公司 | 文件缓存方法及装置 |
CN103902660B (zh) * | 2014-03-04 | 2017-04-12 | 中国科学院计算技术研究所 | 机群文件系统中通过readdir++预取文件布局的系统及其方法 |
CN104391876A (zh) * | 2014-10-30 | 2015-03-04 | 北京思特奇信息技术股份有限公司 | 一种静态数据存储及查询方法及系统 |
CN105404653B (zh) * | 2015-10-30 | 2019-03-26 | 无锡清华信息科学与技术国家实验室物联网技术中心 | 一种全分布式文件索引及协作编辑机制的实现方法 |
US9886388B2 (en) * | 2016-04-22 | 2018-02-06 | Citrix Systems, Inc. | Dynamic block-level indexing for cache with overflow |
US10747668B2 (en) * | 2018-11-01 | 2020-08-18 | Vmware, Inc. | Efficient global cache partition and dynamic sizing for shared storage workloads |
CN113010486B (zh) * | 2021-02-05 | 2021-11-26 | 湖南国科亿存信息科技有限公司 | 用于无中心分布式文件系统的元数据分层缓存方法及装置 |
-
2021
- 2021-12-29 CN CN202111626122.8A patent/CN114003562B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103765373A (zh) * | 2013-10-18 | 2014-04-30 | 华为技术有限公司 | 数据存储方法、数据存储装置和存储设备 |
CN108419097A (zh) * | 2018-03-16 | 2018-08-17 | 洛阳师范学院 | 一种移动自组网下基于聚类树的视频共享方法 |
CN111737204A (zh) * | 2020-06-12 | 2020-10-02 | 北京百度网讯科技有限公司 | 文件目录遍历方法、装置、设备和介质 |
CN112464044A (zh) * | 2020-12-09 | 2021-03-09 | 上海爱数信息技术股份有限公司 | 一种文件数据块变化信息监控管理系统及其方法 |
CN112653730A (zh) * | 2020-12-10 | 2021-04-13 | 苏州浪潮智能科技有限公司 | 一种用户态网络文件存储方法和系统 |
CN112800067A (zh) * | 2021-02-20 | 2021-05-14 | 成都佰维存储科技有限公司 | 范围查询方法、装置、计算机可读存储介质及电子设备 |
Non-Patent Citations (1)
Title |
---|
史太齐.基于缓存的数据库索引优化技术研究.《中国优秀硕士学位论文全文数据库 信息科技辑》.2018,I137-39. * |
Also Published As
Publication number | Publication date |
---|---|
CN114003562A (zh) | 2022-02-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10958752B2 (en) | Providing access to managed content | |
US10528537B2 (en) | System and method for fetching the latest versions of stored data objects | |
US6301614B1 (en) | System and method for efficient representation of data set addresses in a web crawler | |
US9152600B2 (en) | System and method for caching network file systems | |
US6182111B1 (en) | Method and system for managing distributed data | |
CN114003562B (zh) | 一种目录遍历方法、装置、设备及可读存储介质 | |
US8849825B1 (en) | System and method for clustering distributed hash table entries | |
CN110046133B (zh) | 一种存储文件系统的元数据管理方法、装置及系统 | |
CN112380149B (zh) | 基于节点内存的数据处理方法、装置、设备以及介质 | |
CN107562757B (zh) | 基于分布式文件系统的查询、访问方法、装置及系统 | |
CN112000287B (zh) | 一种io请求处理装置、方法、设备及可读存储介质 | |
CN109120709A (zh) | 一种缓存方法、装置、设备及介质 | |
CN108540510B (zh) | 一种云主机创建方法、装置及云服务系统 | |
CN113377868A (zh) | 一种基于分布式kv数据库的离线存储系统 | |
CN102984256B (zh) | 一种基于授权方式的元数据的处理方法和系统 | |
CN110750507A (zh) | 面向dfs的全局命名空间下的客户端持久缓存方法及系统 | |
CN113032335A (zh) | 文件访问方法、装置、设备及存储介质 | |
CN112653730A (zh) | 一种用户态网络文件存储方法和系统 | |
CN109460345B (zh) | 实时数据的计算方法及系统 | |
US20040117437A1 (en) | Method for efficient storing of sparse files in a distributed cache | |
CN113032356A (zh) | 一种客舱分布式文件存储系统及实现方法 | |
CN116974465A (zh) | 数据加载方法、装置、设备及计算机存储介质 | |
CN109783499A (zh) | 一种数据缓存方法、装置和服务器 | |
CN113282563A (zh) | 基于对象存储的文件网关高可用实现方法及电子设备 | |
KR100785774B1 (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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220819 Address after: Room 401, 4th Floor, Gangsheng Building, No. 2177 Gangxi Road, High-tech Zone, Jinan City, Shandong Province, 250000 Patentee after: Shandong Yunhai guochuang cloud computing equipment industry innovation center Co.,Ltd. Address before: Building 9, No.1, guanpu Road, Guoxiang street, Wuzhong Economic Development Zone, Wuzhong District, Suzhou City, Jiangsu Province Patentee before: SUZHOU LANGCHAO INTELLIGENT TECHNOLOGY Co.,Ltd. |
|
TR01 | Transfer of patent right |