CN105677892B - 一种读取目录子项元数据的方法及装置 - Google Patents
一种读取目录子项元数据的方法及装置 Download PDFInfo
- Publication number
- CN105677892B CN105677892B CN201610070587.2A CN201610070587A CN105677892B CN 105677892 B CN105677892 B CN 105677892B CN 201610070587 A CN201610070587 A CN 201610070587A CN 105677892 B CN105677892 B CN 105677892B
- Authority
- CN
- China
- Prior art keywords
- metadata
- catalogue
- subitem
- metadata object
- destination server
- 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
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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Library & Information Science (AREA)
- Information Transfer Between Computers (AREA)
Abstract
一种读取目录子项元数据的方法及装置,用于解决读取目录子项元数据耗时较长的问题。该方法包括:目标服务器接收客户端发送的第一请求,第一请求包括指向至少两个元数据对象中的第k个元数据对象的定位标识;根据第一目录的标识获得至少两个元数据对象的属性信息;根据单次交付量阈值,以及属性信息确定本次需读取第k至第(k+m)个元数据对象中的目录子项元数据;根据属性信息中的用于确定元数据对象各自存储位置的信息,并行从至少一个服务器中获得第k至第(k+m)个元数据对象包含的目录子项元数据;根据获得的目录子项元数据形成本次交付元数据,并向客户端发送本次交付数据。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种读取目录子项元数据的方法及装置。
背景技术
在分布式文件***中,一个目录包含有大量文件或子目录,统称为目录的子项,目录子项的元数据保存在元数据对象中。如果将目录所有子项的元数据保存在同一个元数据对象中,会因为对象访问的互斥性导致业务的并发度低下。因此,通常将目录的目录子项元数据分散存放在多个元数据对象之中,每个元数据对象中保存有若干个目录子项元数据。
如图1所示,目录的所有目录子项元数据按照目录子项元数据的排序存放在多个元数据对象之中,即,第1个元数据对象按顺序存放目录的第1~s1个目录子项元数据,第2个元数据对象按顺序存放目录的第(s1+1)~s2个目录子项元数据,以此类推。
文件***中的服务器在接收到客户端发送的读取第一目录的目录子项元数据的请求时,首先按顺序读取第1个元数据对象中存放的目录子项元数据,判断已读取的目录子项元数据是否填满协议缓冲区,该协议缓冲区的大小又称为单次交付量阈值,是服务器与客户端协商的单次可交付目录子项元数据的最大量。如果第1个元数据对象中目录子项元数据未填满协议缓冲区,则按顺序读取第2个元数据对象中的目录子项元数据,以此类推,直至填满协议缓冲区,将已读取的目录子项元数据发送给客服端。
但是,现有技术中上述读取目录子项元数据的方法耗时较长,导致分布式文件***的效率较低。
发明内容
本发明实施例提供一种读取目录子项元数据的方法及装置,用于解决现有技术中读取目录子项元数据耗时较长的问题。
第一方面,本发明实施例提供一种读取目录子项元数据的方法,第一目录的目录子项元数据位于多个元数据对象中,多个元数据对象存储在多个服务器之中,所述方法包括:目标服务器接收客户端发送的第一请求,所述第一请求用于请求读取所述第一目录的目录子项元数据,所述第一请求包括第一目录的标识以及定位标识,所述定位标识指向所述至少两个元数据对象中的第k个元数据对象,表明从第k个元数据对象开始读取目录子项元数据;所述目标服务器根据所述第一目录的标识获得所述第一目录的元数据,所述第一目录的元数据包含所述至少两个元数据对象的属性信息,所述属性信息包括存放第一目录的目录子项元数据的元数据对象各自包含的目录子项元数据数量,以及管理上述元数据对象的元数据管理节点的信息;所述目标服务器根据单次交付量阈值,以及所述属性信息中的所述第k个元数据对象及所述第k个元数据对象之后的元数据对象各自包含的目录子项元数据的数量,确定本次需读取第k至第(k+m)个元数据对象中的目录子项元数据,其中,所述单次交付量阈值为所述目标服务器单次可向所述客户端发送的目录子项元数据的最大量,m为正整数;所述目标服务器根据所述属性信息中的用于确定所述第k至第(k+m)个元数据对象各自存储位置的信息,并行从所述至少一个服务器中获得所述第k至第(k+m)个元数据对象包含的目录子项元数据;所述目标服务器将获得的所述目录子项元数据存入协议缓冲区,形成本次交付元数据,并向所述客户端发送所述本次交付数据,其中,所述本次交付元数据的大小不大于所述单次交付量阈值。
上述实现方式中,目标服务器在读取第一目录的目录子项元数据时,根据每个元数据对象包含的目录子项元数据的数量以及单次交付量阈值,确定出本次需读取的多个元数据对象,然后,同时从对应的元数据管理节点处读取确定的多个元数据对象中的目录子项元数据。与现有技术中采用串行方式读取目录子项元数据的方式相比,能够大幅缩减目录子项元数据的读取时间,提高文件***的效率。
结合第一方面,在第一方面的第一种可能的实现方式中,所述目标服务器根据单次交付量阈值,以及所述属性信息中的所述第k个元数据对象及所述第k个元数据对象之后的元数据对象各自包含的目录子项元数据的数量,确定本次需读取第k至第(k+m)个元数据对象中的目录子项元数据,包括:所述目标服务器确定:所述第k个元数据对象中第i个目录子项元数据至第(k+m-1)个元数据对象的最后一个目录子项元数据的总量小于所述单次交付量阈值,以及所述第k个元数据对象中第i个目录子项元数据至第(k+m)个元数据对象的最后一个目录子项元数据的总量不小于所述单次交付量阈值;所述目标服务器确定本次需读取所述第k至第(k+m)个元数据对象中的目录子项元数据。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述目标服务器向所述客户端发送本次交付元数据,包括:所述目标服务器判断所述本次交付元数据中的最后一个目录子项元数据是否为所述第一目录的最后一个目录子项元数据;若不是,则所述目标服务器向所述客户端发送所述本次交付元数据,并指示所述客户端继续向所述目标服务器请求所述本次交付元数据的最后一个目录子项元数据之后的目录子项元数据,保证协议客户端能够获得第一目录的所有目录子项元数据。
第二方面,本发明实施例提供一种读取目录子项元数据的装置第一目录的目录子项元数据位于至少两个元数据对象中,所述至少两个元数据对象存储在至少一个服务器之中,所述装置包括:接收模块,用于接收客户端发送的第一请求,所述第一请求用于请求读取所述第一目录的目录子项元数据,所述第一请求包括第一目录的标识以及定位标识,所述定位标识指向所述至少两个元数据对象中的第k个元数据对象,k为正整数;第一获得模块,用于根据所述第一目录的标识获得所述第一目录的元数据,所述第一目录的元数据包含所述至少两个元数据对象的属性信息;第一确定模块,用于根据单次交付量阈值,以及所述属性信息中的所述第k个元数据对象及所述第k个元数据对象之后的元数据对象各自包含的目录子项元数据的数量,确定本次需读取第k至第(k+m)个元数据对象中的目录子项元数据,其中,所述单次交付量阈值为所述装置单次可向所述客户端发送的目录子项元数据的最大量,m为正整数;第二获得模块,用于根据所述属性信息中的用于确定所述第k至第(k+m)个元数据对象各自存储位置的信息,并行从所述至少一个服务器中获得所述第k至第(k+m)个元数据对象包含的目录子项元数据;第二确定模块,用于根据获得的所述目录子项元数据形成本次交付元数据,所述本次交付元数据的大小不大于所述单次交付量阈值;发送模块,用于向所述客户端发送所述本次交付数据。
结合第二方面,在第二方面的第一种可能的实现方式中,所述第一确定模块具体用于:确定所述第k个元数据对象中第i个目录子项元数据至第(k+m-1)个元数据对象的最后一个目录子项元数据的总量小于所述单次交付量阈值,以及所述第k个元数据对象中第i个目录子项元数据至第(k+m)个元数据对象的最后一个目录子项元数据的总量不小于所述单次交付量阈值;确定本次需读取所述第k至第(k+m)个元数据对象中的目录子项元数据。
结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述装置还包括:判断模块,用于判断所述本次交付元数据中的最后一个目录子项元数据是否为所述第一目录的最后一个目录子项元数据;若不是,则通过所述发送模块指示所述客户端继续向所述装置请求所述本次交付元数据的最后一个目录子项元数据之后的目录子项元数据。
在一些可能的实现方式中,所述定位标识指向所述第k个元数据对象中的第i个目录子项元数据,用于表明所述第i个目录子项元数据为首个需读取的目录子项元数据。上述可能的实现方式,能够精确地确定本次需读取的目录子项元数据,便于更高效以及更有针对性地进行目录子项元数据的读取。
在一些可能的实现方式中,所述第k个元数据对象中所述第i个目录子项元数据至第(k+m)个元数据对象中第j个目录子项元数据为所述本次交付元数据。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为目录的目录子项元数据的存储方式的示意图;
图2为本发明实施例中文件***的示意图;
图3为本发明实施例中读取目录子项元数据方法的流程示意图;
图4为本发明实施例中读取目录子项元数据装置的结构示意框图;
图5为本发明实施例中读取目录子项元数据设备的结构示意框图。
具体实施方式
下面通过附图以及具体实施例对本发明技术方案做详细的说明,应当理解本发明实施例以及实施例中的具体特征是对本发明技术方案的详细的说明,而不是对本发明技术方案的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互组合。
在文件***中,一个目录包含有大量文件或子目录,统称为目录的子项,每个目录子项均对应有元数据,称为目录子项元数据。元数据对象为存放元数据的对象,一个目录的多个目录子项元数据被分散存放在多个元数据对象之中。目录自身的元数据之中保存有目录的子项的信息,其中就包括存放目录子项的元数据(即,目录子项元数据)的元数据对象的属性信息,例如,每个元数据对象存放的目录子项元数据的数目,又如,管理该元数据对象的元数据管理模块的信息,等等。
图2为本发明实施例中文件***的示意图,其中,每个服务器均可以包括客户端代理(Client Agent;简称:CA)模块、元数据管理模块以及存储模块,上述CA模块以及元数据管理模块可以通过软件实体实现,也可以为相应的硬件模块(如集成芯片),上述存储模块可以为服务器的全部或部分硬盘。所有服务器中的CA模块一起形成CA集群,所有服务器中的元数据管理模块形成元数据管理集群,所有服务器中的硬盘形成存储集群。
其中,服务器中的CA模块用于处理客户端发送的读取目录子项元数据的请求,实际情况中,由客户端中的协议客户端模块与服务器中的CA模块进行通信;存储节点用于存储元数据对象,而元数据对象中存放有目录的目录子项元数据;元数据管理节点用于管理元数据对象,CA可以通过元数据管理节点读取元数据对象中的目录子项元数据。
图3为本发明实施例提供的读取目录子项元数据方法的流程示意图,该方法包括如下步骤:
步骤101:目标服务器接收客户端发送的第一请求,第一请求用于请求读取第一目录的目录子项元数据,第一请求包括第一目录的标识以及定位标识,定位标识指向至少两个元数据对象中的第k个元数据对象,k为正整数;
步骤102:目标服务器根据第一目录的标识获得第一目录的元数据,第一目录的元数据包含至少两个元数据对象的属性信息;
步骤103:目标服务器根据单次交付量阈值,以及属性信息中的第k个元数据对象及第k个元数据对象之后的元数据对象各自包含的目录子项元数据的数量,确定本次需读取第k至第(k+m)个元数据对象中的目录子项元数据,其中,单次交付量阈值为目标服务器单次可向客户端发送的目录子项元数据的最大量,m为正整数;
步骤104:目标服务器根据属性信息中的用于确定第k至第(k+m)个元数据对象各自存储位置的信息,并行从上述存储位置获得第k至第(k+m)个元数据对象包含的目录子项元数据;
步骤105:目标服务器根据接收的目录子项元数据形成本次交付元数据,并向客户端发送本次交付数据,其中,本次交付元数据的大小不大于单次交付量阈值。
具体的,步骤101中,可由目标服务器中的CA模块接收客户端的协议客户端发送的第一请求。第一请求中的定位标识用于表明从哪个元数据对象开始读取目录子项元数据。
步骤102中,在接收到第一请求后,目标服务器首先根据第一请求中包含的第一目录的标识确定第一目录的元数据。实际情况中,目标服务器的CA模块可能缓存有目录元数据,目标服务器可以先在该缓存中搜索第一目录的元数据,若未命中,即可根据第一目录的标识定位出所述第一目录的父目录的元数据,其父目录的元数据中包括第一目录的元数据的路径信息,目标服务器可以根据该路径信息确定出第一目录的元数据。
第一目录的元数据中包含有第一目录的子项的信息,其中包括存放第一目录的子项的元数据(即,第一目录的目录子项元数据)的元数据对象的属性信息,属性信息包括该元数据对象中存放了第一目录的哪些目录子项元数据,以及该元数据对象归属的元数据管理模块的信息。
然后,目标服务器根据该属性信息获知第k个元数据对象以及第k个元数据之后的每个元数据包含的元数据个数。
然后,步骤103中,目标服务器根据上述元数据对象包含的目录子项元数据的数量信息,以及单次交付量阈值,确定本次需读取哪些元数据对象。其具体实现方式包括:
其一,目标服务器从第k个元数据对象开始,进行目录子项元数据的累加,直至目录子项元数据的总量达到所述单次交付量阈值。
例如,一种可行的算法为:在计算出第k个元数据对象至第(k+m-1)个元数据对象包括的目录子项元数据总量不大于单次交付量阈值,以及计算出第k个元数据对象至第(k+m)个元数据对象包括的目录子项元数据总量大于单次交付量阈值时,可以确定本次需读取第k个元数据对象至第(k+m)个元数据对象中包含的目录子项元数据。
又例如,另一种可行的算法为:在计算出第k个元数据对象至第(k+m)个元数据对象包括的目录子项元数据总量不大于单次交付量阈值,以及计算出第k个元数据对象至第(k+m+1)个元数据对象包括的目录子项元数据总量大于单次交付量阈值时,可以确定本次需读取第k个元数据对象至第(k+m)个元数据对象中包含的目录子项元数据。
其中,上述第一种算法能够保证每次读取的目录子项元数据填满协议缓存区,增加每次向客户端返回的目录子项元数据的个数;而上述第二种算法能够避免读取本次无法交付的目录子项元数据,节约传输资源。
其二,定位标识指向第k个元数据对象中的第i个目录子项元数据,用于表明第i个目录子项元数据为首个需读取的目录子项元数据。
目标服务器从第k个元数据对象中第i个目录子项元数据开始,进行目录子项元数据的累加,计算出第k个元数据对象中第i个目录子项元数据至第(k+m)个元数据对象中第j个目录子项元数据的总量不大于单次交付量阈值,并且第k个元数据对象中第i个目录子项元数据至第(k+m)个元数据对象中第(j+1)个目录子项元数据的总量大于单次交付量阈值,则确定第k个元数据对象中第i个目录子项元数据至第(k+m)个元数据对象中第j个目录子项元数据为本次需读取目录子项元数据。
上述第二种实现方式能够精确地确定本次需读取的目录子项元数据,便于更高效以及更有针对性地进行目录子项元数据的读取。
实际情况中,在对元数据对象包含的目录子项元数据的大小进行上述累加时,即需要元数据对象包含的目录子项元数据的数量的信息,也需要获得每个目录子项元数据的大小的信息。元数据对象中目录子项元数据的大小信息可以包含在上述属性信息中,也可以由目标服务器获得目录子项元数据大小的平均值,用该平均值进行上述累加。目录子项元数据的大小平均值可以为默认值;或者,可以根据之前交付的目录子项元数据的大小估算目录子项元数据大小的平均值。
另外,具体实施时,存放于元数据对象中的目录子项元数据的大小,与交付给协议客户端时的目录子项元数据大小可能不同,通常后者小于前者,这是因为通常会采用压缩算法将目录子项元数据压缩后交付给协议客服端。因此,在根据目录子项元数据的大小的累加值确定本次需读取的元数据对象时,将上述累加值与本次交付量阈值乘以偏差系数进行比较,该偏差系数可以为目录子项元数据压缩前后的数据量的比值。
然后,步骤104中,目标服务器根据上述属性信息包括用于确定第k至第(k+m)个元数据对象各自存储位置的信息,并行从至少一个服务器中获得第k至第(k+m)个元数据对象包含的目录子项元数据。
具体来讲,所述用于确定第k至第(k+m)个元数据对象各自存储位置的信息为第k至第(k+m)个元数据对象各自归属的元数据管理模块的信息,亦即,第k至第(k+m)个元数据对象各自被哪个服务器的元数据管理模块所管理。根据该信息,即可确定第k至第(k+m)个元数据对象各自由哪个服务器所管理,而管理元数据对象的服务器中的元数据管理模块存储有该元数据对象的存储位置的信息。
在一种可能的实现方式中,目标服务器确定出管理第k至第(k+m)个元数据对象的N个服务器,向N个服务器并行发送请求,其中,在向第s个服务器发送的请求中包含第(k+t)个元数据对象的标识,第(k+t)个元数据对象为第k至第(k+m)个元数据对象中由第s个服务器所管理的元数据对象,s的取值为1至N的整数,t的取值为0至m的整数。
然后,第s个服务器根据自身的元数据管理模块存储的第(k+t)元数据对象的位置信息,读取第(k+t)元数据对象中的目录子项元数据。然后,将读取的第(k+t)元数据对象中的目录子项元数据返回给目标服务器。
在另一种可能的实现方式中,第s个服务器接收到目标服务器发送的请求之后,将自身的元数据管理模块存储的第(k+t)元数据对象的位置信息返回给目标服务器,目标服务器接收到该位置信息之后,自行从对应的存储位置处读取第(k+t)元数据对象中的目录子项元数据。
可选的,在上述第一种方式中,目标服务器在发送给管理第k个元数据对象的服务器的请求中,可以包含起始标志,该起始标识指向第k个元数据对象中的第i个目录子项元数据,表明需从第i个目录子项元数据读取。接受请求的服务器向目标服务器返回第k个元数据对象中的第i个目录子项元数据及其之后的目录子项元数据。
可选的,在上述第一种方式中,目标服务器在发送给管理第(k+m)个元数据对象的服务器的请求中,可以包含结束标志,该结束标识指向第(k+m)个元数据对象中的第j个目录子项元数据,表明第(k+m)个元数据对象中第j个目录子项元数据为本次最后一个需读取的目录子项元数据。接受请求的服务器向目标服务器返回第(k+m)个元数据对象中的第j个目录子项元数据及其之前的目录子项元数据。
需要说明的是,存储上述元数据对象的存储模块与管理上述元数据对象的元数据管理模块可以在同一服务器上,也可以在不同服务器上。在存储元数据对象的存储模块与管理元数据对象的元数据管理模块不在同一服务器上时,管理元数据对象的元数据管理模块所在的服务器,向存储元数据对象的存储模块所在的服务器发送获取该元数据对象中的目录子项元数据的请求,在获得目录子项元数据之后,将获得的目录子项元数据发送至目标服务器。
另外,目标服务器的元数据管理模块也可能管理有第k至第(k+m)个元数据对象中的元数据对象,目标服务器可以通过自身的元数据管理模块获得对应元数据对象中的目录子项元数据。例如,目标服务器根据上述属性信息确定第(k+t)个元数据对象由自身的元数据管理模块所管理,以及其余元数据对象由目标服务器之外的服务器的元数据管理模块所管理,则目标服务器通过自身的元数据管理模块存储的第(k+t)个元数据对象的存储位置的信息,从该存储位置处获得第(k+t)个元数据对象中的目录子项元数据,并从所述目标服务器之外的服务器处获得其余元数据对象中的目录子项元数据。
步骤105中,目标服务器将获得的目录子项元数据按顺序存入协议缓冲区,直至填满洗衣缓冲区。
在一种可能的实现方式中,目标服务器获得的目录子项元数据的大小等于或接近于协议缓冲区的大小(即,单次交付量阈值)。
在另一种可能的实现方式中,目标服务器获得的目录子项元数据的大小多于协议缓冲区的大小,目标服务器将目录子项元数据按顺序存入协议缓冲区,存满之后,余下的目录子项元数据可以有两种处理方式,其一为直接舍弃,其二为将其缓存在目标服务器的本地缓存之中,以便在客户端发送下一次请求时,将其从本地缓存存入协议缓冲区。
在将获得的目录子项元数据存入协议缓冲区之后,协议缓冲区中的目录子项元数据即形成本次交付元数据,目标服务器将其返回给客户端。
本发明实施例中,上述步骤102~步骤104可以由目标服务器的中央处理器(Central Processing Unit;简称:CPU)执行,也可以由目标服务器的CA模块执行。
上述技术方案中,目标服务器在接收到读取第一目录的目录子项元数据的请求后,根据每个元数据对象包含的目录子项元数据的大小以及单次交付量阈值,确定出本次需读取的多个元数据对象,然后,从存储该多个元数据对象的服务器处并行获得元数据对象的目录子项元数据。与现有技术中采用串行方式读取目录子项元数据的方式相比,能够大幅缩减目录子项元数据的读取时间,提高文件***的效率。
可选的,本发明实施例中,本次交付元数据包括:从第k个元数据对象中第i个目录子项元数据至第(k+m)个元数据对象中第j个目录子项元数据的目录子项元数据。
可选的,本发明实施例中,步骤105:目标服务器向客户端发送本次交付元数据,包括如下步骤:
目标服务器判断本次交付元数据中的最后一个目录子项元数据是否为第一目录的最后一个目录子项元数据;
若不是,则目标服务器向客户端发送本次交付元数据,并指示客户端继续向目标服务器请求本次交付元数据的最后一个目录子项元数据之后的目录子项元数据。
具体的,目标服务器在填充完协议缓冲区之后,判断协议缓冲区中的最后一个目录子项元数据是否为第一目录项的最后一个目录子项元数据,若不是,则表明第一目录的目录子项元数据尚未读取完毕,目标服务器将在向协议客户端发送目录子项元数据时,指示客户端继续向目标服务器请求本次交付的最后一个目录子项元数据之后的目录子项元数据。客户端将根据指示,再次向目标服务器发送请求,请求中的定位标识指向本次交付的最后一个目录子项元数据之后的第一个目录子项元数据。
如果前述判断结果表明本次交付元数据中的最后一个目录子项元数据是第一目录的最后一个目录子项元数据,则目标服务器可以向协议客户端指示第一目录的目录子项元数据已读取完毕。或者,目标服务器不进行上述指示,客户端将在未收到前述指示协议客户端继续向目标服务器请求目录子项元数据的指示信息时,确认已读取完毕。
可选的,本发明实施例中,目标服务器在发送本次交付元数据之前,先对目录子项元数据进行排序。
下面以具体应用实例对上述读取目录子项元数据的方法予以说明。
客户端的协议客户端模块在需要读取第一目录的目录子项元数据时,向目标服务器的CA模块发送第一请求,请求中包含第一目录的标识以及指向存放第一目录的目录子项元数据中的第1个元数据对象的第1个目录子项元数据的定位标识。
CA模块根据第一请求中的第一目录的标识,确定第一目录的元数据,第一目录的元数据包含如下信息:存放第一目录的每个元数据对象各自包含的目录子项元数据的数目。CA模块根据上述信息以及单次交付量阈值确定出本次最多可向协议客户端交付第1至第5个元数据对象所包含的目录子项元数据。
然后,CA模块根据第一目录的元数据中包含的管理各元数据对象的元数据管理节点的信息,确定第1至第2个元数据对象由元数据管理节点A所管理,第3至第5个元数据对象分别由元数据管理节点B、元数据管理节点C、元数据管理节点D所管理。其中,所述元数据管理节点A、B、C、D分别位于服务器A、B、C、D。
然后,CA模块同时向元数据管理节点A至D发送请求,请求节点A返回第1至第2个元数据对象所包含的目录子项元数据,请求节点B返回第3个元数据对象所包含的目录子项元数据,请求节点C返回第4个元数据对象所包含的目录子项元数据,请求节点D返回第5个元数据对象所包含的(全部或前j个)目录子项元数据。
然后,CA接收节点A至D各自返回的目录子项元数据,按照顺序存入数据缓冲区,即先按顺序存入第1个元数据对象中目录子项元数据,再按顺序存入第2个元数据对象中的目录子项元数据,以此类推,直至存入第5个元数据对象的第j个目录子项元数据,由于数据缓冲区填满,无法再存入第5个元数据对象的第j个目录子项元数据之后的目录子项元数据。则第1个元数据对象中的第1个目录子项元数据至第5个元数据对象的第j个目录子项元数据形成本次交付数据。
然后,CA判断第5个元数据对象的第j个目录子项元数据是否为第一目录的最后一个目录子项元数据,再确定其不是最后一个目录子项元数据后,CA向协议客户端发送本次交付数据以及第一目录的第5个元数据对象的第j个目录子项元数据的标识,该标识用于指示协议客户端继续向CA请求第一目录的剩余目录子项元数据(即第5个元数据对象的第j个目录子项元数据之后的目录子项元数据以及第5个元数据对象之后的元数据对象包含的目录子项元数据)。
协议客户端模块接收返回的目录子项元数据,并根据CA指示,继续向CA发送读取第一目录子项元数据的请求,该请求中的定位标识指向第5个元数据对象中的第j+1个目录子项元数据。
CA响应协议客户端的请求,继续向多个元数据管理节点并行读取本次能够交付的目录子项元数据,直至将第一目录的最后一个目录子项元数据交付给协议客户端。
基于相同的技术构思,本发明实施例还提供了一种读取目录子项元数据的装置200,参见图4,为装置200的结构示意框图,装置200包括:
接收模块201,用于接收客户端发送的第一请求,第一请求用于请求读取第一目录的目录子项元数据,第一请求包括第一目录的标识以及定位标识,定位标识指向至少两个元数据对象中的第k个元数据对象,k为正整数;
第一获得模块202,用于根据第一目录的标识获得第一目录的元数据,第一目录的元数据包含至少两个元数据对象的属性信息;
第一确定模块203,用于根据单次交付量阈值,以及属性信息中的第k个元数据对象及第k个元数据对象之后的元数据对象各自包含的目录子项元数据的数量,确定本次需读取第k至第(k+m)个元数据对象中的目录子项元数据,其中,单次交付量阈值为装置单次可向客户端发送的目录子项元数据的最大量,m为正整数;
第二获得模块204,用于根据属性信息中的用于确定第k至第(k+m)个元数据对象各自存储位置的信息,并行从至少一个服务器中获得第k至第(k+m)个元数据对象包含的目录子项元数据;
第二确定模块205,用于根据获得的目录子项元数据形成本次交付元数据,本次交付元数据的大小不大于单次交付量阈值;
发送模块206,用于向客户端发送本次交付数据。
可选的,本发明实施例中,定位标识指向第k个元数据对象中的第i个目录子项元数据,用于表明第i个目录子项元数据为首个需读取的目录子项元数据。
可选的,本发明实施例中,第一确定模块203具体用于:
确定第k个元数据对象中第i个目录子项元数据至第(k+m-1)个元数据对象的最后一个目录子项元数据的总量小于单次交付量阈值,以及第k个元数据对象中第i个目录子项元数据至第(k+m)个元数据对象的最后一个目录子项元数据的总量不小于单次交付量阈值;
确定本次需读取第k至第(k+m)个元数据对象中的目录子项元数据。
可选的,本发明实施例中,第k个元数据对象中第i个目录子项元数据至第(k+m)个元数据对象中第j个目录子项元数据为本次交付元数据。
可选的,本发明实施例中,继续参照图4,装置还包括:
判断模块207,用于判断本次交付元数据中的最后一个目录子项元数据是否为第一目录的最后一个目录子项元数据;若不是,则通过发送模块206指示客户端继续向装置请求本次交付元数据的最后一个目录子项元数据之后的目录子项元数据。
本实施例中的装置200与前述读取目录子项元数据的方法是基于同一发明构思下的两个方面,在前面已经对方法的实施过程作了详细的描述,所以本领域技术人员可根据前述描述清楚地了解本实施例中的装置200的结构及实施过程,为了说明书的简洁,在此就不再赘述了。
基于相同的技术构思,本发明实施例还提供了一种读取目录子项元数据的设备300,参见图5,为设备300的结构示意框图,设备300包括:
收发机301,用于接收客户端发送的第一请求,第一请求用于请求读取第一目录的目录子项元数据,第一请求包括第一目录的标识以及定位标识,定位标识指向至少两个元数据对象中的第k个元数据对象,k为正整数;
存储器302,用于存储指令;
处理器303,分别与收发机301以及存储器302相连,用于执行存储器中的指令,以在执行指令时执行如下步骤:
根据第一目录的标识获得第一目录的元数据,第一目录的元数据包含至少两个元数据对象的属性信息;
根据单次交付量阈值,以及属性信息中的第k个元数据对象及第k个元数据对象之后的元数据对象各自包含的目录子项元数据的数量,确定本次需读取第k至第(k+m)个元数据对象中的目录子项元数据,其中,单次交付量阈值为服务器单次可向客户端发送的目录子项元数据的最大量,m为正整数;
根据属性信息中的用于确定第k至第(k+m)个元数据对象各自存储位置的信息,并行从至少一个服务器中获得第k至第(k+m)个元数据对象包含的目录子项元数据;
根据获得的目录子项元数据形成本次交付元数据,并指示收发机301向客户端发送本次交付数据,其中,本次交付元数据的大小不大于单次交付量阈值。
可选的,本发明实施例中,定位标识指向第k个元数据对象中的第i个目录子项元数据,用于表明第i个目录子项元数据为首个需读取的目录子项元数据。
可选的,本发明实施例中,处理器303用于:根据单次交付量阈值,以及属性信息中的第k个元数据对象及第k个元数据对象之后的元数据对象各自包含的目录子项元数据的数量,确定本次需读取第k至第(k+m)个元数据对象中的目录子项元数据,包括:
确定第k个元数据对象中第i个目录子项元数据至第(k+m-1)个元数据对象的最后一个目录子项元数据的总量小于单次交付量阈值,以及第k个元数据对象中第i个目录子项元数据至第(k+m)个元数据对象的最后一个目录子项元数据的总量不小于单次交付量阈值;
确定本次需读取第k至第(k+m)个元数据对象中的目录子项元数据。
可选的,本发明实施例中,第k个元数据对象中第i个目录子项元数据至第(k+m)个元数据对象中第j个目录子项元数据为本次交付元数据。
可选的,本发明实施例中,处理器303用于:指示收发机向客户端发送本次交付元数据,包括:
判断本次交付元数据中的最后一个目录子项元数据是否为第一目录的最后一个目录子项元数据;
若不是,则指示收发机301向客户端发送本次交付元数据,并通过收发机301向指示客户端继续向设备请求本次交付元数据的最后一个目录子项元数据之后的目录子项元数据。
需要说明的是,处理器303可以是一个处理元件,也可以是多个处理元件的统称。例如,处理器303可以是中央处理器,也可以是特定集成电路(Application SpecificIntergrated Circuit;简称:ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路,例如:一个或多个微处理器(digital singnal processor;简称:DSP),或,一个或者多个现场可编程门阵列(Field Programmable Gate Array;简称:FPGA)。
存储器可以是一个存储元件,也可以是多个存储元件的统称,且用于存储可执行程序代码、居民接入网设备或终端运行所需要参数、数据等。且存储器可以包括随机存储器(Random-Access Memory;简称:RAM),也可以包括非易失性存储器(non-volatile memory;简称:NVM),例如磁盘存储器,闪存(Flash)等。
本实施例中的设备300与前述读取目录子项元数据的方法是基于同一发明构思下的两个方面,在前面已经对方法的实施过程作了详细的描述,所以本领域技术人员可根据前述描述清楚地了解本实施例中的设备300的结构及实施过程,为了说明书的简洁,在此就不再赘述了。
本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
目标服务器在接收到读取第一目录的目录子项元数据的请求后,根据每个元数据对象包含的目录子项元数据的大小以及单次交付量阈值,确定出本次需读取的多个元数据对象,然后,从存储该多个元数据对象的服务器处并行获得元数据对象的目录子项元数据。与现有技术中采用串行方式读取目录子项元数据的方式相比,能够大幅缩减目录子项元数据的读取时间,提高文件***的效率。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种读取目录子项元数据的方法,其特征在于,第一目录的目录子项元数据位于至少两个元数据对象中,所述至少两个元数据对象存储在至少一个服务器之中,所述方法包括:
目标服务器接收客户端发送的第一请求,所述第一请求用于请求读取所述第一目录的目录子项元数据,所述第一请求包括第一目录的标识以及定位标识,所述定位标识指向所述至少两个元数据对象中的第k个元数据对象,k为正整数;
所述目标服务器根据所述第一目录的标识获得所述第一目录的元数据,所述第一目录的元数据包含所述至少两个元数据对象的属性信息;
所述目标服务器根据单次交付量阈值,以及所述属性信息中的所述第k个元数据对象及所述第k个元数据对象之后的元数据对象各自包含的目录子项元数据的数量,确定本次需读取第k至第(k+m)个元数据对象中的目录子项元数据,其中,所述单次交付量阈值为所述目标服务器单次可向所述客户端发送的目录子项元数据的最大量,m为正整数;
所述目标服务器根据所述属性信息中的用于确定所述第k至第(k+m)个元数据对象各自存储位置的信息,并行从所述至少一个服务器中获得所述第k至第(k+m)个元数据对象包含的目录子项元数据;
所述目标服务器根据获得的所述目录子项元数据形成本次交付元数据,并向所述客户端发送所述本次交付数据,其中,所述本次交付元数据的大小不大于所述单次交付量阈值。
2.如权利要求1所述的方法,其特征在于,所述定位标识指向所述第k个元数据对象中的第i个目录子项元数据,用于表明所述第i个目录子项元数据为首个需读取的目录子项元数据。
3.如权利要求2所述的方法,其特征在于,所述目标服务器根据单次交付量阈值,以及所述属性信息中的所述第k个元数据对象及所述第k个元数据对象之后的元数据对象各自包含的目录子项元数据的数量,确定本次需读取第k至第(k+m)个元数据对象中的目录子项元数据,包括:
所述目标服务器确定:所述第k个元数据对象中第i个目录子项元数据至第(k+m-1)个元数据对象的最后一个目录子项元数据的总量小于所述单次交付量阈值,以及所述第k个元数据对象中第i个目录子项元数据至第(k+m)个元数据对象的最后一个目录子项元数据的总量不小于所述单次交付量阈值;
所述目标服务器确定本次需读取所述第k至第(k+m)个元数据对象中的目录子项元数据。
4.如权利要求2或3所述的方法,其特征在于,所述第k个元数据对象中所述第i个目录子项元数据至第(k+m)个元数据对象中第j个目录子项元数据为所述本次交付元数据。
5.如权利要求1-3任一项所述的方法,其特征在于,所述目标服务器向所述客户端发送本次交付元数据,包括:
所述目标服务器判断所述本次交付元数据中的最后一个目录子项元数据是否为所述第一目录的最后一个目录子项元数据;
若不是,则所述目标服务器向所述客户端发送所述本次交付元数据,并指示所述客户端继续向所述目标服务器请求所述本次交付元数据的最后一个目录子项元数据之后的目录子项元数据。
6.一种读取目录子项元数据的装置,其特征在于,第一目录的目录子项元数据位于至少两个元数据对象中,所述至少两个元数据对象存储在至少一个服务器之中,所述装置包括:
接收模块,用于接收客户端发送的第一请求,所述第一请求用于请求读取所述第一目录的目录子项元数据,所述第一请求包括第一目录的标识以及定位标识,所述定位标识指向所述至少两个元数据对象中的第k个元数据对象,k为正整数;
第一获得模块,用于根据所述第一目录的标识获得所述第一目录的元数据,所述第一目录的元数据包含所述至少两个元数据对象的属性信息;
第一确定模块,用于根据单次交付量阈值,以及所述属性信息中的所述第k个元数据对象及所述第k个元数据对象之后的元数据对象各自包含的目录子项元数据的数量,确定本次需读取第k至第(k+m)个元数据对象中的目录子项元数据,其中,所述单次交付量阈值为所述装置单次可向所述客户端发送的目录子项元数据的最大量,m为正整数;
第二获得模块,用于根据所述属性信息中的用于确定所述第k至第(k+m)个元数据对象各自存储位置的信息,并行从所述至少一个服务器中获得所述第k至第(k+m)个元数据对象包含的目录子项元数据;
第二确定模块,用于根据获得的所述目录子项元数据形成本次交付元数据,所述本次交付元数据的大小不大于所述单次交付量阈值;
发送模块,用于向所述客户端发送所述本次交付数据。
7.如权利要求6所述的装置,其特征在于,所述定位标识指向所述第k个元数据对象中的第i个目录子项元数据,用于表明所述第i个目录子项元数据为首个需读取的目录子项元数据。
8.如权利要求7所述的装置,其特征在于,所述第一确定模块具体用于:
确定所述第k个元数据对象中第i个目录子项元数据至第(k+m-1)个元数据对象的最后一个目录子项元数据的总量小于所述单次交付量阈值,以及所述第k个元数据对象中第i个目录子项元数据至第(k+m)个元数据对象的最后一个目录子项元数据的总量不小于所述单次交付量阈值;
确定本次需读取所述第k至第(k+m)个元数据对象中的目录子项元数据。
9.如权利要求7或8所述的装置,其特征在于,所述第k个元数据对象中所述第i个目录子项元数据至第(k+m)个元数据对象中第j个目录子项元数据为所述本次交付元数据。
10.如权利要求6-8任一项所述的装置,其特征在于,所述装置还包括:
判断模块,用于判断所述本次交付元数据中的最后一个目录子项元数据是否为所述第一目录的最后一个目录子项元数据;若不是,则通过所述发送模块指示所述客户端继续向所述装置请求所述本次交付元数据的最后一个目录子项元数据之后的目录子项元数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610070587.2A CN105677892B (zh) | 2016-01-29 | 2016-01-29 | 一种读取目录子项元数据的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610070587.2A CN105677892B (zh) | 2016-01-29 | 2016-01-29 | 一种读取目录子项元数据的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105677892A CN105677892A (zh) | 2016-06-15 |
CN105677892B true CN105677892B (zh) | 2018-12-25 |
Family
ID=56302882
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610070587.2A Active CN105677892B (zh) | 2016-01-29 | 2016-01-29 | 一种读取目录子项元数据的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105677892B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110781159B (zh) * | 2019-10-28 | 2021-02-02 | 柏科数据技术(深圳)股份有限公司 | Ceph目录文件信息读取方法、装置、服务器及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102541985A (zh) * | 2011-10-25 | 2012-07-04 | 曙光信息产业(北京)有限公司 | 一种分布式文件***中客户端目录缓存的组织方法 |
CN103916467A (zh) * | 2014-03-25 | 2014-07-09 | 中国科学院计算技术研究所 | 一种元数据集群中负载转移方法及*** |
US8935281B1 (en) * | 2005-10-31 | 2015-01-13 | Symantec Operating Corporation | Optimized content search of files |
CN105094992A (zh) * | 2015-09-25 | 2015-11-25 | 浪潮(北京)电子信息产业有限公司 | 一种处理文件请求的方法与*** |
-
2016
- 2016-01-29 CN CN201610070587.2A patent/CN105677892B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8935281B1 (en) * | 2005-10-31 | 2015-01-13 | Symantec Operating Corporation | Optimized content search of files |
CN102541985A (zh) * | 2011-10-25 | 2012-07-04 | 曙光信息产业(北京)有限公司 | 一种分布式文件***中客户端目录缓存的组织方法 |
CN103916467A (zh) * | 2014-03-25 | 2014-07-09 | 中国科学院计算技术研究所 | 一种元数据集群中负载转移方法及*** |
CN105094992A (zh) * | 2015-09-25 | 2015-11-25 | 浪潮(北京)电子信息产业有限公司 | 一种处理文件请求的方法与*** |
Also Published As
Publication number | Publication date |
---|---|
CN105677892A (zh) | 2016-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102254809B1 (ko) | 블록체인에 기반한, 자원 공유에 따른 보상 제공하는 분산형 컴퓨팅 자원 공유 시스템 및 컴퓨팅 장치 | |
CN105224255B (zh) | 一种存储文件管理方法及装置 | |
CN102307206B (zh) | 基于云存储的快速访问虚拟机镜像的缓存***的缓存方法 | |
CN104346345B (zh) | 数据的存储方法及装置 | |
CN105701156B (zh) | 一种分布式文件***管理方法及装置 | |
US20190294338A1 (en) | Selecting pages implementing leaf nodes and internal nodes of a data set index for reuse | |
CN106031130A (zh) | 具有边缘代理的内容传送网络架构 | |
CN103607424B (zh) | 一种服务器连接方法及服务器*** | |
CN111727428A (zh) | 基于区块链的房间库存管理*** | |
CN110325985A (zh) | 使用对高速缓存友好的存储器内散列索引的原子rdma读取的基于主键的高效查询的方法 | |
CN102480397A (zh) | 访问互联网页面的方法及设备 | |
CN103179148B (zh) | 一种在互联网中分享附件的处理方法和*** | |
CN106981024A (zh) | 一种交易限额计算处理***及其处理方法 | |
CN107888666A (zh) | 一种跨地域数据存储***以及数据同步方法和装置 | |
CN106021468A (zh) | 分布式缓存和本地缓存的更新方法和*** | |
CN113609167B (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN108900626A (zh) | 一种云环境下数据存储方法、装置及*** | |
CN102868542A (zh) | 一种服务分发网络中服务质量的控制方法及*** | |
KR20200111033A (ko) | 오프체인 데이터 저장 방법 및 장치 | |
CN109544238A (zh) | 用户行为追踪方法、装置、服务器和存储介质 | |
CN106528844A (zh) | 一种数据请求方法及装置和数据存储*** | |
CN105677892B (zh) | 一种读取目录子项元数据的方法及装置 | |
CN109062717B (zh) | 数据缓存及缓存容灾方法和***、缓存*** | |
CN104391947B (zh) | 海量gis数据实时处理方法及*** | |
CN107197000A (zh) | 静态动态混合缓存方法、装置及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |