一种读取目录子项元数据的方法及装置的制造方法

文档序号:9911258阅读:197来源:国知局
一种读取目录子项元数据的方法及装置的制造方法
【技术领域】
[0001 ]本发明涉及计算机技术领域,特别涉及一种读取目录子项元数据的方法及装置。
【背景技术】
[0002]在分布式文件系统中,一个目录包含有大量文件或子目录,统称为目录的子项,目录子项的元数据保存在元数据对象中。如果将目录所有子项的元数据保存在同一个元数据对象中,会因为对象访问的互斥性导致业务的并发度低下。因此,通常将目录的目录子项元数据分散存放在多个元数据对象之中,每个元数据对象中保存有若干个目录子项元数据。
[0003]如图1所示,目录的所有目录子项元数据按照目录子项元数据的排序存放在多个元数据对象之中,即,第I个元数据对象按顺序存放目录的第1?S1个目录子项元数据,第二元数据对象按顺序存放目录的第(Sl+1)?82个目录子项元数据,以此类推。
[0004]文件系统中的服务器在接收到客户端发送的读取第一目录的目录子项元数据的请求时,首先按顺序读取第I个元数据对象中存放的目录子项元数据,判断已读取得目录子项元数据是否填满协议缓冲区,该协议缓冲区的大小又称为单次交付量阈值,是服务器与客户端协商的单次可交付目录子项元数据的最大量。如果第I个元数据对象中目录子项元数据未填满协议缓冲区,则按顺序读取第2个元数据对象中的目录子项元数据,以此类推,直至填满协议缓冲区,将已读取的目录子项元数据发送给客服端。
[0005]但是,现有技术中上述读取目录子项元数据的方法耗时较长,导致分布式文件系统的效率较低。

【发明内容】

[0006]本发明实施例提供一种读取目录子项元数据的方法及装置,用于解决现有技术中读取目录子项元数据耗时较长的问题。
[0007]第一方面,本发明实施例提供一种读取目录子项元数据的方法,第一目录的目录子项元数据位于多个元数据对象中,多个元数据对象存储在多个服务器之中,所述方法包括:目标服务器接收客户端发送的第一请求,所述第一请求用于请求读取所述第一目录的目录子项元数据,所述第一请求包括第一目录的标识以及定位标识,所述定位标识指向所述至少两个元数据对象中的第k个元数据对象,表明从第k个元数据对象开始读取目录子项元数据;所述目标服务器根据所述第一目录的标识获得所述第一目录的元数据,所述第一目录的元数据包含所述至少两个元数据对象的属性信息,所述属性信息包括存放第一目录的目录子项元数据的元数据对象各自包含的目录子项元数据数量,以及管理上述元数据对象的元数据管理节点的信息;所述目标服务器根据单次交付量阈值,以及所述属性信息中的所述第k个元数据对象及所述第k个元数据对象之后的元数据对象各自包含的目录子项元数据的数量,确定本次需读取第k至第(k+m)个元数据对象中的目录子项元数据,其中,所述单次交付量阈值为所述目标服务器单次可向所述客户端发送的目录子项元数据的最大量,m为正整数;所述目标服务器根据所述属性信息中的用于确定所述第k至第(k+m)个元数据对象各自存储位置的信息,并行从所述至少一个服务器中获得所述第k至第(k+m)个元数据对象包含的目录子项元数据;所述目标服务器将获得的所述目录子项元数据存入协议缓冲区,形成本次交付元数据,并向所述客户端发送所述本次交付数据,其中,所述本次交付元数据的大小不大于所述单次交付量阈值。
[0008]上述实现方式中,目标服务器在读取第一目录的目录子项元数据时,根据每个元数据对象包含的目录子项元数据的数量以及单次交付量阈值,确定出本次需读取的多个元数据对象,然后,同时从对应的元数据管理节点处读取确定的多个元数据对象中的目录子项元数据。与现有技术中采用串行方式读取目录子项元数据的方式相比,能够大幅缩减目录子项元数据的读取时间,提高文件系统的效率。
[0009]结合第一方面,在第一方面的第一种可能的实现方式中,所述目标服务器根据单次交付量阈值,以及所述属性信息中的所述第k个元数据对象及所述第k个元数据对象之后的元数据对象各自包含的目录子项元数据的数量,确定本次需读取第k至第(k+m)个元数据对象中的目录子项元数据,包括:所述目标服务器确定:所述第k个元数据对象中第i个目录子项元数据至第(k+m-Ι)个元数据对象的最后一个目录子项元数据的总量小于所述单次交付量阈值,以及所述第k个元数据对象中第i个目录子项元数据至第(k+m)个元数据对象的最后一个目录子项元数据的总量不小于所述单次交付量阈值;所述目标服务器确定本次需读取所述第k至第(k+m)个元数据对象中的目录子项元数据。
[0010]结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述目标服务器向所述客户端发送本次交付元数据,包括:所述目标服务器判断所述本次交付元数据中的最后一个目录子项元数据是否为所述第一目录的最后一个目录子项元数据;若不是,则所述目标服务器向所述客户端发送所述本次交付元数据,并指示所述客户端继续向所述目标服务器请求所述本次交付元数据的最后一个目录子项元数据之后的目录子项元数据,保证协议客户端能够获得第一目录的所有目录子项元数据。
[0011 ]第二方面,本发明实施例提供一种读取目录子项元数据的装置第一目录的目录子项元数据位于至少两个元数据对象中,所述至少两个元数据对象存储在至少一个服务器之中,所述装置包括:接收模块,用于接收客户端发送的第一请求,所述第一请求用于请求读取所述第一目录的目录子项元数据,所述第一请求包括第一目录的标识以及定位标识,所述定位标识指向所述至少两个元数据对象中的第k个元数据对象,k为正整数;第一获得模块,用于根据所述第一目录的标识获得所述第一目录的元数据,所述第一目录的元数据包含所述至少两个元数据对象的属性信息;第一确定模块,用于根据单次交付量阈值,以及所述属性信息中的所述第k个元数据对象及所述第k个元数据对象之后的元数据对象各自包含的目录子项元数据的数量,确定本次需读取第k至第(k+m)个元数据对象中的目录子项元数据,其中,所述单次交付量阈值为所述装置单次可向所述客户端发送的目录子项元数据的最大量,m为正整数;第二获得模块,用于根据所述属性信息中的用于确定所述第k至第(k+m)个元数据对象各自存储位置的信息,并行从所述至少一个服务器中获得所述第k至第(k+m)个元数据对象包含的目录子项元数据;第二确定模块,用于根据获得的所述目录子项元数据形成本次交付元数据,所述本次交付元数据的大小不大于所述单次交付量阈值;发送模块,用于向所述客户端发送所述本次交付数据。
[0012]结合第二方面,在第二方面的第一种可能的实现方式中,所述第一确定模块具体用于:确定所述第k个元数据对象中第i个目录子项元数据至第(k+m-1)个元数据对象的最后一个目录子项元数据的总量小于所述单次交付量阈值,以及所述第k个元数据对象中第i个目录子项元数据至第(k+m)个元数据对象的最后一个目录子项元数据的总量不小于所述单次交付量阈值;确定本次需读取所述第k至第(k+m)个元数据对象中的目录子项元数据。
[0013]结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述装置还包括:判断模块,用于判断所述本次交付元数据中的最后一个目录子项元数据是否为所述第一目录的最后一个目录子项元数据;若不是,则通过所述发送模块指示所述客户端继续向所述装置请求所述本次交付元数据的最后一个目录子项元数据之后的目录子项元数据。
[0014]在一些可能的实现方式中,所述定位标识指向所述第k个元数据对象中的第i个目录子项元数据,用于表明所述第i个目录子项元数据为首个需读取的目录子项元数据。上述可能的实现方式,能够精确地确定本次需读取的目录子项元数据,便于更高效以及更有针对性地进行目录子项元数据的读取。
[0015]在一些可能的实现方式中,所述第k个元数据对象中所述第i个目录子项元数据至第(k+m)个元数据对象中第j个目录子项元数据为所述本次交付元数据。
【附图说明】
[0016]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0017]图1为目录的目录子项元数据的存储方式的示意图;
[0018]图2为本发明实施例中文件系统的示意图;
[0019]图3为本发明实施例
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1