掌桥专利:专业的专利平台
掌桥专利
首页

元数据处理方法、装置、设备、存储介质及产品

文献发布时间:2024-01-17 01:16:56


元数据处理方法、装置、设备、存储介质及产品

技术领域

本申请涉及数据处理技术领域,尤其涉及一种元数据处理方法、装置、设备、存储介质及产品。

背景技术

分布式文件系统(Distributed File System,DFS)通过高速网络将多个物理节点连接在一起,实现多节点资源的统一管理,并向用户提供了文件系统访问接口和统一的文件系统命名空间。分布式文件系统通常基于客户端/服务器(Client/Server)的模式而设计,客户端为应用程序提供标准的文件系统访问接口,服务器存储了文件系统中所有的数据与元数据。分布式文件系统通常采用数据与元数据分离的设计架构,数据存储在多台数据服务器上,元数据存储在多台元数据服务器上,元数据包括目录元数据和文件元数据。

在现有技术中,以分布式文件系统的目录层级为单位,将位于同一层级目录下的元数据放置在同一非统一内存访问节点,也即不同层级目录下的元数据可能位于不同非统一内存访问节点。当某一目录层级下的元数据发生更新(例如创建、删除等)时,需要对应更新该目录层级的父目录元数据。

但是,在不同目录层级下的元数据位于不同的非统一内存访问节点的情况下,当某一目录层级下的元数据发生更新(例如创建、删除等)时,需要跨非统一内存访问节点进行网络通信,才能够完成该目录层级的父目录元数据的对应更新,这样会导致元数据服务器性能低下。

发明内容

本申请提供一种元数据处理方法、装置、设备、存储介质及产品,用以解决父目录元数据的对应更新需要跨非统一内存访问节点进行网络通信导致元数据服务器性能低下问题。

第一方面,本申请实施例提供一种元数据处理方法,应用于元数据处理设备,所述元数据处理方法包括:

响应于接收到客户端设备发送的对分布式文件系统中元数据的操作请求,所述操作请求中包括目标元数据的存储路径及操作类型;

根据所述目标元数据的存储路径确定存储所述目标元数据的目标目录组;所述目标元数据包括目标目录访问元数据和/或所述目标目录访问元数据所在目录下的目标文件元数据,所述目标目录组用于存储所述目标元数据和所述目标元数据的父目录时间戳元数据;所述分布式文件系统包括多个预设目录组,针对每个预设目录组,分别存储在一个对应的非统一内存访问节点中,多个非统一内存访问节点位于对应的元数据服务器中,各预设目录组中的数据包括预设元数据、以及预设元数据的父目录时间戳元数据;

根据所述操作类型对所述目标元数据进行操作,并对所述目标目录组中的目标元数据的父目录时间戳元数据进行更新。

可选地,所述根据所述操作类型对所述目标元数据进行操作,并对所述目标目录组中的目标元数据的父目录时间戳元数据进行更新,包括:

响应于所述目标元数据的操作类型为目标元数据创建,将所述目标元数据写入所述目标目录组;

将写入所述目标元数据时的系统时间戳确定为所述目标元数据的创建时间;

在写入所述目标元数据之后,根据所述目标元数据的创建时间更新所述目标元数据的父目录时间戳元数据。

可选地,在所述根据所述操作类型对所述目标元数据进行操作,并对所述目标目录组中的目标元数据的父目录时间戳元数据进行更新之后,所述方法还包括:

响应于检测到所述分布式文件系统异常且所述目标元数据的创建时间后于所述目标元数据的父目录时间戳元数据中的对应时间,根据所述目标元数据的创建时间更新所述目标元数据的父目录时间戳元数据。

可选地,所述根据所述操作类型对所述目标元数据进行操作,并对所述目标目录组中的目标元数据的父目录时间戳元数据进行更新,包括:

响应于所述操作类型为删除操作,标记所述目标元数据为无效;

将标记所述目标元数据为无效时的系统时间戳确定为所述目标元数据的删除时间;

根据所述目标元数据的删除时间更新所述目标元数据的父目录时间戳元数据;

在更新所述目标元数据的父目录时间戳元数据之后,删除所述目标元数据。

可选地,在所述根据所述操作类型对所述目标元数据进行操作,并对所述目标目录组中的目标元数据的父目录时间戳元数据进行更新之后,所述方法还包括:

响应于所述分布式文件系统异常、且所述目标元数据的删除时间后于所述目标元数据的父目录时间戳元数据中的对应时间,根据所述目标元数据的删除时间更新所述目标元数据的父目录时间戳元数据;

响应于所述分布式文件系统异常、且所述目标元数据的删除时间与所述目标元数据的父目录时间戳元数据中的对应时间相同、且所述目标元数据未被删除,删除所述目标元数据。

可选地,在所述根据所述操作类型对所述目标元数据进行操作,并对所述目标目录组中的目标元数据的父目录时间戳元数据进行更新时,所述方法还包括:

响应于对所述分布式文件系统中目标元数据同时触发的操作包括至少两个,确定同时触发的操作对应的操作类型;其中,所述同时触发的操作对应的操作类型包括时间戳更新操作、写操作和读操作中的至少一个,所述时间戳更新操作为在所述目标元数据的创建或删除过程中对所述目标目录元数据的父目录时间戳元数据进行更新的操作,所述写操作为除所述时间戳更新操作外的对所述目标元数据进行更新的操作,所述读操作为对目标元数据进行读取的操作;

响应于同时触发的操作对应的操作类型包括写操作,采用预设读写锁算法对所述同时触发的操作进行并发控制;

响应于多个所述时间戳更新操作同时触发,采用预设无锁原子更新算法对多个所述时间戳更新操作进行并发控制;

响应于所述时间戳更新操作与所述读操作同时触发,采用预设乐观并发控制算法对所述时间戳更新操作与所述读操作进行并发控制。

可选地,同时触发的操作对应的操作类型包括时间戳更新操作、所述读操作中的至少一个以及写操作;所述采用预设读写锁算法对所述同时触发的操作进行并发控制,包括:

获取预设读写锁算法中的当前锁状态;

响应于所述当前锁状态为写操作持有写锁,执行所述写操作,并在所述写操作执行完成后,配置所述时间戳更新操作和/或所述读操作持有读锁,以便执行所述时间戳更新操作和/或所述读操作;或

响应于所述当前锁状态为所述时间戳更新操作和/或所述读操作持有读锁,执行所述时间戳更新操作和/或所述读操作,并在所述时间戳更新操作和/或所述读操作执行完成后,配置所述写操作持有写锁,以便执行所述写操作。

可选地,所述目标元数据的父目录时间戳元数据包括最后数据修改时间和最后元数据修改时间;

所述采用预设无锁原子更新算法对多个所述时间戳更新操作进行并发控制,包括:

获取多个所述时间戳更新操作对应的待更新时间和所述父目录时间戳元数据中记录的最后数据修改时间和最后元数据修改时间;其中,所述待更新时间为所述目标元数据的创建时间或所述目标元数据的删除时间;

利用多个所述时间戳更新操作对应的待更新时间、所述最后数据修改时间和所述最后元数据修改时间中的最大值更新所述目标元数据的父目录时间戳元数据中记录的最后数据修改时间和最后元数据修改时间。

可选地,所述父目录时间戳元数据包括最后元数据修改时间;

所述采用预设乐观并发控制算法对所述时间戳更新操作与所述读操作进行并发控制,包括:

执行所述时间戳更新操作;

在执行所述读操作之前,读取所述父目录时间戳元数据,以获得第一最后元数据修改时间;

在执行所述读操作之后,读取所述父目录时间戳元数据,以获得第二最后元数据修改时间;

响应于所述第一最后元数据修改时间与所述第二最后元数据修改时间不同,重新执行所述读操作,直至所述第一最后元数据修改时间与所述第二最后元数据修改时间相同时,反馈所述读操作读取到的目标元数据。

第二方面,本申请实施例提供一种元数据处理方法,应用于元数据处理设备,所述方法包括:

将分布式文件系统中的预设目录元数据拆分为预设目录时间戳元数据和预设目录访问元数据;其中,所述预设目录时间戳元数据包括所述预设目录元数据的时间戳信息,所述预设目录访问元数据包括所述预设目录元数据除所述时间戳信息外的信息;

将所述预设目录访问元数据和所述预设目录访问元数据所在目录下的预设文件元数据中的至少一个与所述预设目录访问元数据的父目录时间戳元数据存储在一个预设目录组;

将所述预设目录访问元数据的子文件元数据和所述预设目录访问元数据的子目录访问元数据中的至少一个与所述预设目录时间戳元数据存储在另一个所述预设目录组;

将所述预设目录组中的元数据存储于一个对应的非统一内存访问节点;

其中,多个非统一内存访问节点位于对应的元数据服务器中,所述预设目录组用于作为目标目录组,所述目标目录组根据客户端对所述分布式文件系统中元数据的操作请求中目标元数据的存储路径确定,所述目标元数据包括目标目录访问元数据和/或所述目标目录访问元数据所在目录下的目标文件元数据,对所述目标元数据的操作和所述目标目录组中的目标元数据的父目录时间戳元数据的更新均发生在所述目标目录组对应的非统一内存访问节点中。

可选地,所述将所述预设目录组中的元数据存储于一个对应的非统一内存访问节点,包括:

对所述预设目录组进行一致性哈希计算,得到所述预设目录组的哈希值;

基于所述哈希值,将所述预设目录组中的元数据存储于一个对应的非统一内存访问节点。

可选地,所述基于所述哈希值,将所述预设目录组中的元数据存储于一个对应的非统一内存访问节点,包括:

确定所述元数据服务器的非统一内存访问节点的个数和标识;

分别确定各预设目录组的哈希值除以所述个数后得到的余数;

根据预先存储的余数与标识的对应关系,将各所述预设目录组中的元数据存储于一个对应的非统一内存访问节点。

可选地,所述将所述预设目录组中的元数据存储于一个对应的非统一内存访问节点,还包括:

将所述预设目录组中的元数据以键值对的形式存储于一个对应的非统一内存访问节点。

可选地,所述预设目录访问元数据的父目录时间戳元数据包括目录标识;

所述键值对的形式如下所示:

将所述目录标识作为键,并以所述预设目录访问元数据的父目录时间戳元数据作为值,组成的键值对;

将所述目录标识和所述预设目录访问元数据所在目录下的文件元数据的文件命名字符串作为键,与以所述预设目录访问元数据所在目录下的文件元数据作为值,组成的键值对;

将所述目录标识和所述预设目录访问元数据的目录命名字符串作为键,与以所述预设目录访问元数据作为值,组成的键值对。

第三方面,本申请实施例提供一种元数据处理方法,应用于客户端设备,所述方法包括:

向元数据处理设备发送对分布式文件系统中元数据的操作请求;

其中,所述操作请求中包括目标元数据的存储路径及操作类型,所述操作请求用于触发所述元数据处理设备根据所述目标元数据的存储路径确定存储所述目标元数据的目标目录组;所述目标元数据包括目标目录访问元数据和/或所述目标目录访问元数据所在目录下的目标文件元数据,所述目标目录组用于存储所述目标元数据和所述目标元数据的父目录时间戳元数据;所述分布式文件系统包括多个预设目录组,针对每个预设目录组,分别存储在一个对应的非统一内存访问节点中,多个非统一内存访问节点位于对应的元数据服务器中,各预设目录组中的数据包括预设元数据、以及预设元数据的父目录时间戳元数据;所述操作请求还用于触发所述元数据处理设备根据所述操作类型对所述目标元数据进行操作,并对所述目标目录组中的目标元数据的父目录时间戳元数据进行更新。

第四方面,本申请实施例提供一种元数据处理装置,应用于元数据处理设备,所述装置包括:

响应模块,用于响应于接收到客户端设备发送的对分布式文件系统中元数据的操作请求,所述操作请求中包括目标元数据的存储路径及操作类型;

确定模块,用于根据所述目标元数据的存储路径确定存储所述目标元数据的目标目录组;所述目标元数据包括目标目录访问元数据和/或所述目标目录访问元数据所在目录下的目标文件元数据,所述目标目录组用于存储所述目标元数据和所述目标元数据的父目录时间戳元数据;所述分布式文件系统包括多个预设目录组,针对每个预设目录组,分别存储在一个对应的非统一内存访问节点中,多个非统一内存访问节点位于对应的元数据服务器中,各预设目录组中的数据包括预设元数据、以及预设元数据的父目录时间戳元数据;

处理模块,用于根据所述操作类型对所述目标元数据进行操作,并对所述目标目录组中的目标元数据的父目录时间戳元数据进行更新。

第五方面,本申请实施例提供一种元数据处理设备,所述元数据处理设备包括:处理器,以及与所述处理器通信连接的存储器;

所述存储器存储计算机执行指令;

所述处理器执行所述存储器存储的计算机执行指令,以实现第一方面实施例和第二方面实施例中任一项所述的元数据处理方法。

第六方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现第一方面实施例、第二方面实施例和第三方面实施例中任一项所述的元数据处理方法。

第七方面,本申请实施例提供一种计算机程序产品,所述计算机程序产品包括计算机程序,该计算机程序被处理器执行时实现第一方面实施例、第二方面实施例和第三方面实施例中任一项所述的元数据处理方法。

本申请提供的元数据处理方法、装置、设备、存储介质及产品,方法包括:响应于接收到客户端设备发送的对分布式文件系统中元数据的操作请求,所述操作请求中包括目标元数据的存储路径及操作类型;根据所述目标元数据的存储路径确定存储所述目标元数据的目标目录组;所述目标元数据包括目标目录访问元数据和/或所述目标目录访问元数据所在目录下的目标文件元数据,所述目标目录组用于存储所述目标元数据和所述目标元数据的父目录时间戳元数据;所述分布式文件系统包括多个预设目录组,针对每个预设目录组,分别存储在一个对应的非统一内存访问节点中,多个非统一内存访问节点位于对应的元数据服务器中,各预设目录组中的数据包括预设元数据、以及预设元数据的父目录时间戳元数据;根据所述操作类型对所述目标元数据进行操作,并对所述目标目录组中的目标元数据的父目录时间戳元数据进行更新。通过上述方案,将预设元数据和预设元数据的父目录时间戳元数据存储在同一个预设目录组中,并以预设目录组为单位,将同一预设目录组中的元数据一起存储在一个非统一内存访问节点中,从而在根据操作类型对目标元数据进行操作时,不需要跨非统一内存访问节点进行通信,仅在一个非统一内存访问节点中就可以完成对目标元数据的父目录时间戳元数据的更新,进而提升分布式文件系统中目标元数据操作的访问局部性,从而提升元数据服务器的性能。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。

图1为实现本申请实施例的元数据处理方法的场景示意图;

图2为本申请实施例提供的元数据处理方法的预设目录组的场景示意图;

图3为本申请实施例提供的元数据处理方法的流程示意图;

图4为本申请实施例提供的元数据处理方法的另一流程示意图;

图5为本申请实施例提供的元数据处理方法的创建目标元数据的流程示意图;

图6为本申请实施例提供的元数据处理方法的删除目标元数据的流程示意图;

图7为本申请实施例提供的元数据处理装置的结构示意图;

图8为本申请实施例提供的元数据处理设备的结构示意图。

通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

首先对本申请所涉及的名词进行解释:

访问局部性,是指取决于存储器访问模式频繁访问相同值或相关存储位置的现象的术语。在计算机科学中,访问局部性也称为局部性原理。

崩溃一致性,是指在系统遭遇断电、崩溃或故障等情况下,能够将相关联的数据恢复到一致性状态的特性。

并发控制,是指确保在多个操作同时读写分布式文件系统中同一数据时不破坏操作的隔离性和统一性以及分布式文件系统的统一性。

为了清楚理解本申请的技术方案,首先对现有技术的方案进行详细介绍。

在现有技术中,分布式文件系统是通过目录元数据和文件元数据组成的层级树状结构的目录树,对整个分布式文件系统中的文件进行组织管理的。进而,以分布式文件系统的目录层级为单位,将位于同一层级目录下的元数据放置在同一非统一内存访问节点,也即不同层级目录下的元数据可能位于不同非统一内存访问节点。不同非同一内存访问节点可能位于不同的元数据服务器中。当某一目录层级下的元数据发生更新(例如创建、删除等)时,需要对应修改该目录层级的父目录元数据。

如果不同目录层级下的元数据位于不同的非统一内存访问节点,那么当某一目录层级下的元数据发生更新(例如创建、删除等)时,不仅要在该目录层级所在的一个非统一内存访问节点中对应修改该目录层级的元数据,还需要在该目录层级的父目录所在的另一个非统一内存访问节点中对应更新父目录元数据,这样就导致需要与至少两个非统一内存访问节点进行网络通信才能完成父目录元数据的对应更新,更新效率较低,并且访问局部性较差,进而拉低单台元数据服务器的性能。甚至,不同非同一内存访问节点可能位于不同的元数据服务器中,当该目录层级所在的非统一内存访问节点与该目录层级的父目录所在的非统一内存访问节点位于不同的元数据服务器时,访问局部性更差,更新效率更低。

针对上述父目录元数据的对应更新需要跨非统一内存访问节点进行网络通信导致元数据服务器性能低下的问题,发明人在研究中发现,当某一目录层级下的元数据发生更新(例如创建、删除等)时,主要需要对应修改的是该目录层级的父目录元数据中的时间戳信息,因此为了解决该问题,可以预先将分布式文件系统中的目录元数据拆分为目录时间戳元数据和目录访问元数据,然后将该目录元数据的子目录下的目录访问元数据、该目录元数据的子目录下的文件元数据中的至少一个与目录时间戳元数据存储在一个目录组中,进而以目录组为单位,将同一目录组中的元数据存储在同一非统一内存访问节点中,这样当某一目录层级下的元数据发生更新(例如创建、删除等)时,在同一个非统一内存访问节点中就能够完成该目录层级下的元数据的更新和完成该目录层级的父目录中时间戳信息的对应更新,不需要跨多个非统一内存访问节点进行网络通信,访问局部性较好,更新效率更快,能够提升元数据服务器的性能。

发明人基于上述的创造性发现,提出了本申请的技术方案。

下面对本申请实施例提供的元数据处理方法的应用场景进行介绍。

如图1所示,分布式文件系统包括多个客户端100和多个元数据服务器200。元数据服务器200用于存储分布式文件系统的元数据。客户端100能够与元数据服务器200进行通信。

首先,元数据服务器200首先将分布式文件系统中的预设目录元数据拆分为预设目录时间戳元数据和预设目录访问元数据。其中,预设目录时间戳元数据包括预设目录元数据的时间戳信息,预设目录访问元数据包括预设目录元数据除时间戳信息外的信息。其次,元数据服务器200将预设目录访问元数据和预设目录访问元数据所在目录下的预设文件元数据中的至少一个与预设目录访问元数据的父目录时间戳元数据存储在一个预设目录组,并将预设目录访问元数据的子文件元数据和预设目录访问元数据的子目录访问元数据中的至少一个与预设目录时间戳元数据存储在另一个预设目录组。接着,元数据服务器200将预设目录组中的元数据存储于一个对应的非统一内存访问节点。

进一步地,当用户通过客户端100触发对分布式文件系统中元数据的操作请求时,客户端100将操作请求发送给元数据服务器200,元数据服务器200根据操作请求中目标元数据的存储路径确定存储目标元数据的目标目录组,进而根据操作类型在目标目录组中对目标元数据进行操作和对目标元数据的父目录时间戳元数据进行对应更新,并将操作结果反馈给客户端100。从而不需要跨多个非统一内存访问节点就能够完成目标元数据的更新和目标元数据的父目录时间戳元数据的对应更新。

下面,通过具体实施例对本申请所示的技术方案进行详细说明。可选地,如下实施例可以单独存在,也可以相互结合,对于相同或相似的内容,在不同的实施例中不再重复说明。

本申请实施例提供的一种元数据处理方法,应用于元数据处理设备,一种元数据处理方法包括以下步骤:

S61:将分布式文件系统中的预设目录元数据拆分为预设目录时间戳元数据和预设目录访问元数据;其中,预设目录时间戳元数据包括预设目录元数据的时间戳信息,预设目录访问元数据包括预设目录元数据除时间戳信息外的信息;

S62:将预设目录访问元数据和预设目录访问元数据所在目录下的预设文件元数据中的至少一个与预设目录访问元数据的父目录时间戳元数据存储在一个预设目录组;

S63:将预设目录访问元数据的子文件元数据和预设目录访问元数据的子目录访问元数据中的至少一个与预设目录时间戳元数据存储在另一个预设目录组;

S64:将预设目录组中的元数据存储于一个对应的非统一内存访问节点。

其中,多个非统一内存访问节点位于对应的元数据服务器中,预设目录组用于作为目标目录组,目标目录组根据客户端对分布式文件系统中元数据的操作请求中目标元数据的存储路径确定,目标元数据包括目标目录访问元数据和/或目标目录访问元数据所在目录下的目标文件元数据,对目标元数据的操作和目标目录组中的目标元数据的父目录时间戳元数据的更新均发生在目标目录组对应的非统一内存访问节点中。

具体地,预设目录时间戳元数据的组成成分与前述目标目录时间戳元数据的组成成分相同,预设目录访问元数据的组成成分与前述目标目录访问元数据的组成成分相同,为避免冗余,此不赘述。

可以理解的是,预设目录访问元数据所在目录下的预设文件元数据,也即拆分前的预设目录元数据所在目录下的预设文件元数据。预设目录访问元数据的父目录时间戳元数据,也即拆分前的预设目录元数据的父目录时间戳元数据。

在某些实施方式中,基于分布式文件系统的语义,将分布式文件系统中的预设目录元数据拆分为预设目录时间戳元数据和预设目录访问元数据。

示例性的,如图2所示,预设目录组0中存储有预设目录访问元数据1,预设目录组1中存储有预设目录时间戳元数据1、预设目录访问元数据2、预设目录访问元数据3、预设文件元数据1和预设文件元数据2,预设目录组2中存储有预设目录时间戳元数据2预设目录访问元数据4和预设文件元数据3,预设目录组3中存储有预设目录时间戳元数据3,预设目录组4中存储有预设目录时间戳元数据4。

需要指出的是,在图2的示例中,预设目录组0还应当至少包括预设目录访问元数据1的父目录时间戳元数据,由于篇幅的限制,未将预设目录访问元数据1的父目录时间戳元数据在图2中示出。

本申请实施例提供的一种元数据处理方法,将分布式文件系统中的预设目录元数据拆分为预设目录时间戳元数据和预设目录访问元数据;其中,预设目录时间戳元数据包括预设目录元数据的时间戳信息,预设目录访问元数据包括预设目录元数据除时间戳信息外的信息;将预设目录访问元数据和预设目录访问元数据所在目录下的预设文件元数据中的至少一个与预设目录访问元数据的父目录时间戳元数据存储在一个预设目录组;将预设目录访问元数据的子文件元数据和预设目录访问元数据的子目录访问元数据中的至少一个与预设目录时间戳元数据存储在另一个预设目录组;将预设目录组中的元数据存储于一个对应的非统一内存访问节点。其中,多个非统一内存访问节点位于对应的元数据服务器中,预设目录组用于作为目标目录组,目标目录组根据客户端对分布式文件系统中元数据的操作请求中目标元数据的存储路径确定,目标元数据包括目标目录访问元数据和/或目标目录访问元数据所在目录下的目标文件元数据,对目标元数据的操作和目标目录组中的目标元数据的父目录时间戳元数据的更新均发生在目标目录组对应的非统一内存访问节点中。由此,将分布式文件系统中每个父目录时间戳元数据与其子目录访问元数据和子文件元数据存储在一个目录组中,便于根据目录组将同一目录组中的父目录时间戳元数据、子目录访问元数据和子文件元数据存储在同一非统一内存访问节点中,进而便于在子目录访问元数据和/或子文件元数据发生更新时,在同一非统一内存访问节点中完成父目录时间戳元数据的更新,提升元数据服务器的性能。

可选地,步骤S64,包括:

S641:对预设目录组进行一致性哈希计算,得到预设目录组的哈希值;

S642:基于哈希值,将预设目录组中的元数据存储于一个对应的非统一内存访问节点。

具体地,分别对每个预设目录组进行一致性哈希计算,获得每个预设目录组的哈希值,不同预设目录组的哈希值不同,进而基于哈希值,将多个预设目录组中的元数据存储于一个对应的非统一内存访问节点。

本申请实施例提供的一种元数据处理方法,对预设目录组进行一致性哈希计算,得到预设目录组的哈希值;基于哈希值,将预设目录组中的元数据存储于一个对应的非统一内存访问节点。由此,同一预设目录组中的元数据存储在同一非统一内存访问节点中,在子目录访问元数据和/或子文件元数据发生更新时,在同一非统一内存访问节点中就能够完成父目录时间戳元数据的更新,提升了元数据服务器的性能。

可选地,步骤S642,包括:

S6421:确定元数据服务器的非统一内存访问节点的个数和标识;

S6422:分别确定各预设目录组的哈希值除以个数后得到的余数;

S6423:根据预先存储的余数与标识的对应关系,将各预设目录组中的元数据存储于一个对应的非统一内存访问节点。

具体地,标识可包括节点ID和/或节点名称。

在一个例子中,第一预设目录组的哈希值为1,第二预设目录组的哈希值为2,第三预设目录组的哈希值为3,元数据服务器的非统一内存访问节点的个数为3个,标识分别为NUMA节点0、NUMA节点1和NUMA节点2,余数与标识的对应关系为:余数1对应NUMA节点1;余数2对应NUMA节点2;余数3对应NUMA节点0。

对于第一预设目录组,由于1除以3后得到的余数为1,因此根据余数与标识的对应关系,将第一预设目录组中的元数据存储于NUMA节点1中。

对于第二预设目录组,由于2除以3后得到的余数为2,因此根据余数与标识的对应关系,将第二预设目录组中的元数据存储于NUMA节点2中。

对于第三预设目录组,由于3除以3后得到的余数为0,因此根据余数与标识的对应关系,将第三预设目录组中的元数据存储于NUMA节点0中。

本申请实施例提供的一种元数据处理方法,确定元数据服务器的非统一内存访问节点的个数和标识;分别确定各预设目录组的哈希值除以个数后得到的余数;根据预先存储的余数与标识的对应关系,将各预设目录组中的元数据存储于一个对应的非统一内存访问节点。由此,能够将多个预设目录组合理地分布存储于多个非统一内存访问节点。

可选地,步骤S64,还包括:

S643:将预设目录组中的元数据以键值对的形式存储于一个对应的非统一内存访问节点。

本申请实施例提供的一种元数据处理方法,将预设目录组中的元数据以键值对的形式存储于一个对应的非统一内存访问节点。由此,便于基于键值对查找预设目录组中的元数据,提升查找效率。

可选地,预设目录访问元数据的父目录时间戳元数据包括目录标识;

键值对的形式如下所示:

将目录标识作为键,并以预设目录访问元数据的父目录时间戳元数据作为值,组成的键值对;

将目录标识和预设目录访问元数据所在目录下的文件元数据的文件命名字符串作为键,与以预设目录访问元数据所在目录下的文件元数据作为值,组成的键值对;

将目录标识和预设目录访问元数据的目录命名字符串作为键,与以预设目录访问元数据作为值,组成的键值对。

具体地,目录标识可为目录ID。

请结合图3,在一个例子中,图3中的(a)部分展现了部分目录树,其中,目录A具有子目录B和子文件C,A为目录A的目录命名字符串,B为子目录B的目录命名字符串,C为子文件C的文件命名字符串,目录A的目录ID为1。

图3中的(b)部分展现了该目录树对应的目录组在键值存储中存放的方式,具体地,对于目录A而言,目录A的目录时间戳元数据的键为其目录ID,即为1;目录A的子目录B的目录访问元数据的键由目录A的目录ID和子目录B的目录命名字符串组成,即为1/B;目录A的子文件C的目录文件元数据的键由父目录A的目录ID和子文件C的文件命名字符串组成,即为1/C。

图3中的(c)部分展现了父目录对应的目录项元数据,具体地,基于键值对的键中的预设标识符(在图3中为“/”)能够确定键中的前缀和后缀,首先,做对于父目录ID的前缀匹配,确定与父目录ID相关联的键,即为1、1/B和1/C;接着,通过提取后缀的方式生成父目录对应的目录项元数据中的d_name成员,即为目录命名字符串B和文件命名字符串C;最后,通过读取键对应的值的方式生成目录项元数据中各d_name成员的ID(d_ino成员)和类型(d_type成员),即通过读取1/B对应的值的方式生成目录项元数据中目录命名字符串B的ID和类型,通过读取1/C对应的值的方式生成目录项元数据中文件命名字符串C的ID和类型。

本申请实施例提供的一种元数据处理方法,将目录标识作为键,并以预设目录元数据的父目录时间戳元数据作为值,组成的键值对;将目录标识和预设目录访问元数据所在目录下的文件元数据的命名字符串作为键,与以预设目录访问元数据所在目录下的文件元数据作为值,组成的键值对;将目录标识和预设目录访问元数据的命名字符串作为键,与以有预设目录访问元数据作为值,组成的键值对。由此,将预设目录访问元数据、预设目录访问元数据所在目录下的文件元数据和预设目录访问元数据的父目录时间戳元数据以键值对的形式存储在非统一内存访问节点中,能够通过检索键值对中的键快速查找到预设目录组中的元数据。

需要指出的是,上述所提到的具体数值只为了作为例子详细说明本申请的实施,而不应理解为对本申请的限制。在其他例子或实施方式或实施例中,可根据本申请来选择其他数值,在此不作具体限定。

图4为本申请实施例提供的另一种元数据处理方法的流程示意图,本申请实施例提供的另一种元数据处理方法应用于元数据处理设备,如图4所示,本申请实施例提供的另一种元数据处理方法包括:

S10:响应于接收到客户端设备发送的对分布式文件系统中元数据的操作请求,操作请求中包括目标元数据的存储路径及操作类型。

本申请实施例的另一种元数据处理方法的执行主体可为元数据处理设备,也可为设置在元数据处理设备中的元数据处理装置。元数据处理设备可为元数据服务器。

S20:根据目标元数据的存储路径确定存储目标元数据的目标目录组;目标元数据包括目标目录访问元数据和/或目标目录访问元数据所在目录下的目标文件元数据,目标目录组用于存储目标元数据和目标元数据的父目录时间戳元数据;分布式文件系统包括多个预设目录组,针对每个预设目录组,分别存储在一个对应的非统一内存访问节点中,多个非统一内存访问节点位于对应的元数据服务器中,各预设目录组中的数据包括预设元数据、以及预设元数据的父目录时间戳元数据。

具体地,目标元数据的存储路径可包括目标元数据的父目录ID和父目录命名字符串、以及分布式文件系统的根目录至目标元数据的父目录之间每一级目录的目录ID和目录命名字符串。在获取到目标元数据的存储路径之后,元数据服务器根据操作请求中的用户ID逐目录层级验证用户ID对应的用户是否拥有分布式文件系统的根目录至目标元数据的父目录之间每一级目录和父目录的操作权限,进而在用户拥有相应的操作权限时,根据操作类型对目标元数据进行操作,并对目标目录组中的目标元数据的父目录时间戳元数据进行更新。

可以理解的是,在本申请实施例的另一种元数据处理方法中,只要存在目录时间戳元数据,无论分布式文件系统中是否存在与该目录时间戳元数据对应的子目录访问元数据和子文件元数据,都会生成与该目录时间戳元数据对应的目录组。如果在生成目录组之前存在与该目录时间戳元数据对应的子目录访问元数据和/或子文件元数据,那么生成目录组之后,目录组中既包括该目录时间戳元数据,又包括该目录时间戳元数据对应的子目录访问元数据和/或子文件元数据。如果在生成目录组之前不存在与该目录时间戳元数据对应的子目录访问元数据和子文件元数据,那么生成目录组之后,目录组中仅包括目录时间戳元数据,等到用户创建该目录时间戳元数据对应的子目录访问元数据和/或子文件元数据之后,目录组中才会包括对应于用户创建的元数据和该目录时间戳元数据。因此,根据目标元数据的存储路径能够确定目标元数据的父目录时间戳元数据,进而确定目标目录组。

分布式文件系统包括多个预设目录组,一个预设目录组存储在一个非统一内存访问节点中,不同预设目录组可以存储在同一非统一内存访问节点中,也可以存储在不同的非统一内存访问节点中,在此不作限定。非统一内存访问节点位于对应的元数据服务器中,每台元数据服务器中非统一内存访问节点的数量可以相同,也可以不同,在此不作限定。

预设元数据包括预设目录访问元数据和/或预设目录访问元数据所在目录下的预设文件元数据。可以理解的是,相对于预设元数据的父目录时间戳元数据而言,预设目录访问元数据即为该父目录时间戳元数据的子目录访问元数据,预设目录访问元数据所在目录下的预设文件元数据即为该父目录时间戳元数据的子文件元数据,目标元数据的父目录时间戳元数据与目标元数据的关系同理,为避免冗余,此不赘述。

S30:根据操作类型对目标元数据进行操作,并对目标目录组中的目标元数据的父目录时间戳元数据进行更新。

操作类型可包括创建操作和删除操作,其中,创建操作可以理解为用于在分布式文件系统中创建目标元数据的操作,删除操作可以理解为用于删除分布式文件系统中目标元数据的操作。

值得注意的是,在修改目标元数据时,不需要对目标元数据的父目录时间戳元数据进行更新。

本申请实施例提供的另一种元数据处理方法,响应于接收到客户端设备发送的对分布式文件系统中元数据的操作请求,操作请求中包括目标元数据的存储路径及操作类型;根据目标元数据的存储路径确定存储目标元数据的目标目录组;目标元数据包括目标目录访问元数据和/或目标目录访问元数据所在目录下的目标文件元数据,目标目录组用于存储目标元数据和目标元数据的父目录时间戳元数据;分布式文件系统包括多个预设目录组,针对每个预设目录组,分别存储在一个对应的非统一内存访问节点中,多个非统一内存访问节点位于对应的元数据服务器中,各预设目录组中的数据包括预设元数据、以及预设元数据的父目录时间戳元数据;根据操作类型对目标元数据进行操作,并对目标目录组中的目标元数据的父目录时间戳元数据进行更新。通过上述方案,将预设元数据和预设元数据的父目录时间戳元数据存储在同一个预设目录组中,并以预设目录组为单位,将同一预设目录组中的元数据一起存储在一个非统一内存访问节点中,从而在根据操作类型对目标元数据进行操作时,不需要跨非统一内存访问节点进行通信,仅在一个非统一内存访问节点中就可以完成对目标元数据的父目录时间戳元数据的更新,进而提升分布式文件系统中目标元数据操作的访问局部性,从而提升元数据服务器的性能。

可选地,步骤S30,包括:

S31:响应于目标元数据的操作类型为目标元数据创建,将目标元数据写入目标目录组;

S32:将写入目标元数据时的系统时间戳确定为目标元数据的创建时间;

S33:在写入目标元数据之后,根据目标元数据的创建时间更新目标元数据的父目录时间戳元数据。

目标文件元数据可包括目标文件元数据的权限信息、目标文件元数据的时间戳信息、目标文件元数据的数据信息和目标文件元数据的用于崩溃一致性保证的信息,其中,目标文件元数据的权限信息可包括目标文件元数据的所有者ID、所有者所在用户组ID和任意ID关于目标文件元数据的访问权限(例如只读,读写,可执行等);目标文件元数据的时间戳信息可包括目标文件元数据对应的最后数据修改时间、最后访问时间和最后元数据修改时间;目标文件元数据的数据信息可包括目标文件元数据所描述的文件的占用内存大小和所描述的文件的逻辑位置到磁盘的物理位置的映射;目标文件元数据的用于崩溃一致性保证的信息可包括目标文件元数据的创建时间、目标文件元数据的删除时间和目标文件元数据的有效标志位。在一个例子中,目标文件元数据的有效标志位为0,表征目标文件元数据无效;目标文件元数据的有效标志位为1,表征目标文件元数据有效。

目标目录访问元数据可包括目录ID、目标目录访问元数据的权限信息和目标目录访问元数据的用于崩溃一致性保证的信息,其中,目标目录访问元数据的权限信息可包括目标目录访问元数据的所有者ID、所有者所在用户组ID和任意ID关于目标目录访问元数据的访问权限(例如只读,读写,可执行等);目标目录访问元数据的用于崩溃一致性保证的信息可包括目标目录访问元数据的创建时间、目标目录访问元数据的删除时间和目标目录访问元数据的有效标志位。在一个例子中,目标目录访问元数据的有效标志位为0,表征目标目录访问元数据无效;目标目录访问元数据的有效标志位为1,表征目标目录访问元数据有效。

父目录时间戳元数据可包括父目录时间戳元数据的时间戳信息,父目录时间戳元数据的时间戳信息可包括父目录时间戳元数据对应的最后数据修改时间(英文为:mtime)、最后访问时间(英文为:atime)及最后元数据修改时间(英文为:ctime)。

在某些实施方式中,在将目标元数据写入目标目录组的同时,设置目标元数据的创建时间为写入目标元数据时的系统时间戳。

在写入目标元数据之后,将目标元数据的父目录时间戳元数据中最后数据修改时间字段的内容和最后元数据修改时间字段的内容均修改为写入目标元数据时的系统时间戳。

请结合图5,在一个例子中,父目录A的父目录时间戳元数据中最后数据修改时间为3、最后元数据修改时间为4,时间t=5时刻在父目录A下写入子目录B,则子目录B的创建时间(英文为:btime)为5,最后父目录A的父目录时间戳元数据中最后数据修改时间更新为5、最后元数据修改时间更新为5。图3中的斜杠“/”表示根目录,即目录A位于根目录下。

本申请实施例提供的一种元数据处理方法,响应于目标元数据的操作类型为目标元数据创建,将目标元数据目标目录组;将写入目标元数据时的系统时间戳确定为目标元数据的创建时间;在写入目标元数据之后,根据目标元数据的创建时间更新目标元数据的父目录时间戳元数据。由此,先将目标元数据写入目标目录组,再根据写入目标元数据时的系统时间戳更新目标元数据的父目录时间戳元数据,按照这样的顺序创建目标元数据能够有效保证分布式文件系统的崩溃一致性,减少分布式文件系统的崩溃一致性开销,从而进一步提升元数据服务器的性能。

可选地,在步骤S30之后,方法还包括:

S41:响应于检测到分布式文件系统异常且目标元数据的创建时间后于目标元数据的父目录时间戳元数据中的对应时间,根据目标元数据的创建时间更新目标元数据的父目录时间戳元数据。

具体地,分布式文件系统异常可以理解为分布式文件系统意外断电、崩溃或故障。

在某些实施方式中,在分布式文件系统异常之后,分布式文件系统会自动进行重启,并在重启之后逐目录地对分布式文件系统中的元数据进行检查,当检测到目标元数据的创建时间后于目标元数据的父目录时间戳元数据中的最后数据修改时间和最后元数据修改时间时,将目标元数据的父目录时间戳元数据中最后数据修改时间字段的内容和最后元数据修改时间字段的内容修改为目标元数据的创建时间,从而保证分布式文件系统的崩溃一致性。

可以理解的是,当在执行上述步骤S32之后且执行上述步骤S33之前分布式文件系统发生异常时,目标元数据的父目录时间戳元数据中的最后数据修改时间字段的内容和最后元数据修改时间字段的内容未能更新为目标元数据的创建时间,因此会出现目标元数据的创建时间后于目标元数据的父目录时间戳元数据中的对应时间的情况。

本申请实施例提供的另一种元数据处理方法,响应于检测到分布式文件系统异常且目标元数据的创建时间后于目标元数据的父目录时间戳元数据中的对应时间,根据目标元数据的创建时间更新目标元数据的父目录时间戳元数据。由此,即使在创建目标元数据的过程中分布式文件系统出现异常,也能够在重启之后自动恢复相关联的数据,从而保证分布式文件系统的崩溃一致性。

可选地,步骤S30,包括:

S33:响应于操作类型为删除操作,标记目标元数据为无效;

S34:将标记目标元数据为无效时的系统时间戳确定为目标元数据的删除时间;

S35:根据目标元数据的删除时间更新目标元数据的父目录时间戳元数据;

S36:在更新目标元数据的父目录时间戳元数据之后,删除目标元数据。

在某些实施方式中,在标记目标元数据为无效的同时,设置目标元数据的删除时间为标记目标元数据为无效时的系统时间戳。

在标记目标元数据为无效之后,将目标元数据的父目录时间戳元数据中最后数据修改时间字段的内容和最后元数据修改时间字段的内容修改为标记目标元数据为无效时的系统时间戳,并在修改完目标元数据的父目录时间戳元数据之后,删除目标元数据。

请结合图6,在一个例子中,父目录A的父目录时间戳元数据中最后数据修改时间为5、最后元数据修改时间为5,时间t=6时刻将父目录A下的子目录B标记为无效(英文为:invalid),则确定子目录B的删除时间(英文为:dtime)为6,进而将父目录A的父目录时间戳元数据中最后数据修改时间更新为6、最后元数据修改时间更新为6,最后删除子目录B。图4中的斜杠“/”表示根目录,即目录A位于根目录下。

本申请实施例提供的另一种元数据处理方法,响应于操作类型为删除操作,标记目标元数据为无效;将标记目标元数据为无效时的系统时间戳确定为目标元数据的删除时间;根据目标元数据的删除时间更新目标元数据的父目录时间戳元数据;在更新目标元数据的父目录时间戳元数据之后,删除目标元数据。由此,先将目标元数据标记为无效,再根据标记目标元数据为无效时的系统时间戳更新目标元数据的父目录时间戳元数据,最后删除目标元数据,按照这样的顺序删除目标元数据能够有效保证分布式文件系统的崩溃一致性,减少分布式文件系统的崩溃一致性开销,从而进一步提升元数据服务器的性能。

可选地,在步骤S30之后,方法还包括:

S42:响应于分布式文件系统异常、且目标元数据的删除时间后于目标元数据的父目录时间戳元数据中的对应时间,根据目标元数据的删除时间更新目标元数据的父目录时间戳元数据;

S43:响应于分布式文件系统异常、且目标元数据的删除时间与目标元数据的父目录时间戳元数据中的对应时间相同、且目标元数据未被删除,删除目标元数据。

在某些实施方式中,在分布式文件系统异常之后,分布式文件系统会自动进行重启,并在重启之后逐目录地对分布式文件系统中的元数据进行检查,当检测到系统中存在被标记为无效的目标元数据且该目标元数据的删除时间后于目标元数据的父目录时间戳元数据中的对应时间时,将目标元数据的父目录时间戳元数据中最后元数据修改时间字段的内容修改为目标元数据的删除时间,并在目标元数据的父目录时间戳元数据完成修改之后,删除目标元数据,从而保证分布式文件系统的崩溃一致性;当检测到系统中存在被标记为无效的目标元数据且目标元数据的删除时间与目标元数据的父目录时间戳元数据中的对应时间相同时,立即删除目标元数据,从而保证分布式文件系统的崩溃一致性。

可以理解的是,当在执行上述步骤S34之后且执行上述步骤S35和上述步骤S36之前分布式文件系统发生异常时,目标元数据的父目录时间戳元数据中的最后元数据修改时间字段的内容未能更新为标记目标元数据为无效时的系统时间戳,因此会出现目标元数据的删除时间后于目标元数据的父目录时间戳元数据中的对应时间的情况。当在执行上述步骤S35之后且执行上述步骤S36之前分布式文件系统发生异常时,被标记为无效的目标元数据还未来得及删除,因此会出现目标元数据的删除时间与目标元数据的父目录时间戳元数据中的对应时间相同而被标记为无效的目标元数据仍然存在的情况。

本申请实施例提供的另一种元数据处理方法,响应于分布式文件系统异常、且目标元数据的删除时间后于目标元数据的父目录时间戳元数据中的对应时间,根据目标元数据的删除时间更新目标元数据的父目录时间戳元数据;响应于分布式文件系统异常、且目标元数据的删除时间与目标元数据的父目录时间戳元数据中的对应时间相同、且目标元数据未被删除,删除目标元数据。由此,即使在删除目标元数据的过程中分布式文件系统出现异常,也能够在重启之后自动恢复和删除相关联的数据,从而保证分布式文件系统的崩溃一致性。

可选地,在步骤S30时,方法还包括:

S51:响应于对分布式文件系统中目标元数据同时触发的操作包括至少两个,确定同时触发的操作对应的操作类型;其中,同时触发的操作对应的操作类型包括时间戳更新操作、写操作和读操作中的至少一个,时间戳更新操作为在目标元数据的创建或删除过程中对目标目录元数据的父目录时间戳元数据进行更新的操作,写操作为除时间戳更新操作外的对目标元数据进行更新的操作,读操作为对目标元数据进行读取的操作;

S52:响应于同时触发的操作对应的操作类型包括写操作,采用预设读写锁算法对同时触发的操作进行并发控制;

S53:响应于多个时间戳更新操作同时触发,采用预设无锁原子更新算法对多个时间戳更新操作进行并发控制;

S54:响应于时间戳更新操作与读操作同时触发,采用预设乐观并发控制算法对时间戳更新操作与读操作进行并发控制。

具体地,可以是多个写操作同时触发,也可以是至少一个写操作与至少一个时间戳更新操作同时触发,也可以是至少一个写操作与至少一个读操作同时触发,也可以是至少一个写操作与至少一个时间戳更新操作与至少一个读操作同时触发,也可以是多个时间戳更新操作同时触发,也可以是至少一个时间戳更新操作与至少一个读操作同时触发,还可以是多个读操作同时触发,在此不作限定。

请结合表1,表1为本申请实施例的元数据处理方法的并发控制示意表。由于多个读操作同时触发不会影响操作的隔离性和统一性,因此本申请实施例未针对多个读操作同时触发的场景增设相应的并发控制。

表1

对于多个写操作同时触发的场景、至少一个写操作与至少一个时间戳更新操作同时触发的场景、至少一个写操作与至少一个读操作同时触发的场景、至少一个写操作与至少一个时间戳更新操作与至少一个读操作同时触发的场景,由于操作类型均包括写操作,因此采用预设读写锁算法对上述包括写操作的场景进行并发控制,从而保证操作的隔离性和统一性。

对于多个时间戳更新操作同时触发的场景,采用预设无锁原子更新算法对多个时间戳更新操作进行并发控制,从而保证操作的隔离性和统一性。

对于至少一个时间戳更新操作与至少一个读操作同时触发的场景,采用预设乐观并发控制算法对时间戳更新操作与读操作进行并发控制,从而保证操作的隔离性和统一性。

需要指出的是,在本申请中,“多个”应当理解为两个、三个或者大于三个,在此不作限定。

本申请实施例提供的另一种元数据处理方法,响应于对分布式文件系统中目标元数据同时触发的操作包括至少两个,确定同时触发的操作对应的操作类型;其中,同时触发的操作对应的操作类型包括时间戳更新操作、写操作和读操作中的至少一个,时间戳更新操作为在目标元数据的创建或删除过程中对目标目录元数据的父目录时间戳元数据进行更新的操作,写操作为除时间戳更新操作外的对目标元数据进行更新的操作,读操作为对目标元数据进行读取的操作;响应于同时触发的操作对应的操作类型包括写操作,采用预设读写锁算法对同时触发的操作进行并发控制;响应于时间戳更新操作与时间戳更新操作同时触发,采用预设无锁原子更新算法对时间戳更新操作与时间戳更新操作进行并发控制;响应于时间戳更新操作与读操作同时触发,采用预设乐观并发控制算法对时间戳更新操作与读操作进行并发控制。由此,针对多种场景采用多种并发控制策略,能够提升分布式文件系统在共享目录下的并发度,进一步提升元数据服务器的性能。

可选地,同时触发的操作对应的操作类型包括时间戳更新操作、读操作中的至少一个以及写操作。步骤S52,包括:

S521:获取预设读写锁算法中的当前锁状态;

S522:响应于当前锁状态为写操作持有写锁,执行写操作,并在写操作执行完成后,配置时间戳更新操作和/或读操作持有读锁,以便执行时间戳更新操作和/或读操作;或

S523:响应于当前锁状态为时间戳更新操作和/或读操作持有读锁,执行时间戳更新操作和/或读操作,并在时间戳更新操作和/或读操作执行完成后,配置写操作持有写锁,以便执行写操作。

具体地,持有写锁与持有读锁为互斥的状态,在写锁被持有时,任何操作无法持有读锁;在读锁被持有时,任何操作无法持有写锁。在预设读写锁算法中,先持锁的操作先于后持锁的操作执行。

可以理解的是,由于写锁同时只能被一个操作持有,并且当某一操作持有写锁时其他操作(即使为同类型的操作)无法持有写锁,因此当多个写操作同时触发时,同一时刻只会执行其中一个写操作,等到其中一个写操作执行完之后下一个写操作持有写锁才能执行,从而保证多个写操作的隔离性。由于读锁能够同时被多个操作持有,因此在执行多个持有读锁的操作时,需要进一步结合预设无锁原子更新算法和/或预设乐观并发控制算法进行并发控制。

本申请实施例提供的另一种元数据处理方法,获取预设读写锁算法中的当前锁状态;响应于当前锁状态为写操作持有写锁,执行写操作,并在写操作执行完成后,配置时间戳更新操作和/或读操作持有读锁,以便执行时间戳更新操作和/或读操作;或响应于当前锁状态为时间戳更新操作和/或读操作持有读锁,执行时间戳更新操作和/或读操作,并在时间戳更新操作和/或读操作执行完成后,配置写操作持有写锁,以便执行写操作。由此,在同时触发的操作对应的操作类型包括时间戳更新操作、读操作中的至少一个以及写操作时,能够采用预设读写锁算法隔离时间戳更新操作、读操作中的至少一个与写操作,从而保证操作的隔离性和统一性。

可选地,目标元数据的父目录时间戳元数据包括最后数据修改时间和最后元数据修改时间。步骤S53,包括:

S531:获取多个时间戳更新操作对应的待更新时间和父目录时间戳元数据中记录的最后数据修改时间和最后元数据修改时间;其中,待更新时间为目标元数据的创建时间或目标元数据的删除时间;

S532:利用多个时间戳更新操作对应的待更新时间、最后数据修改时间和最后元数据修改时间中的最大值更新目标元数据的父目录时间戳元数据中记录的最后数据修改时间和最后元数据修改时间。

由于每一次创建或删除目标元数据后,均需要根据目标元数据的创建时间或目标元数据的删除时间修改一次目标元数据的父目录时间戳元数据,因此当多个用户在同一父目录下创建和/或删除不同的目标元数据时,可能存在多个待更新时间同时想要修改目标元数据的父目录时间戳元数据的情况,也即多个时间戳更新操作同时触发。

在一个例子中,当多个时间戳更新操作同时触发时,分别获取每个时间戳更新操作对应的待更新时间和父目录时间戳元数据中记录的最后数据修改时间和最后元数据修改时间,选择其中一个时间戳更新操作对应的待更新时间与父目录时间戳元数据中记录的最后数据修改时间和最后元数据修改时间进行比较,并确定三者中的最大值,以及根据三者中的最大值更新目标元数据的父目录时间戳元数据中记录的最后数据修改时间和最后元数据修改时间;然后,选择另外一个时间戳更新操作对应的待更新时间与更新后的父目录时间戳元数据中记录的最后数据修改时间和最后元数据修改时间进行比较,并确定三者中的最大值,以及根据三者中的最大值再次更新目标元数据的父目录时间戳元数据中记录的最后数据修改时间和最后元数据修改时间;如此类推,直至选择最后一个时间戳更新操作对应的待更新时间与上一次更新后的父目录时间戳元数据中记录的最后数据修改时间和最后元数据修改时间进行比较,并确定三者中的最大值,以及根据三者中的最大值再次更新目标元数据的父目录时间戳元数据中记录的最后数据修改时间和最后元数据修改时间,从而完成多个时间戳更新操作。可以理解的是,在多个时间进行比较时,最晚的那个时间为最大值,例如,前一天的23:55、前一天的23:59与后一天的00:00进行比较,最大值为后一天的00:00。

可以理解的是,当多个时间戳更新操作同时触发时,如果多个时间戳更新操作对应的最晚的待更新时间晚于父目录时间戳元数据中记录的最后数据修改时间和最后元数据修改时间,那么最终父目录时间戳元数据中记录的最后数据修改时间字段的内容和最后元数据修改时间字段的内容均会被修改为多个时间戳更新操作对应的最晚的待更新时间;如果多个时间戳更新操作对应的最晚的待更新时间早于或等于父目录时间戳元数据中记录的最后数据修改时间和最后元数据修改时间,那么最终父目录时间戳元数据中记录的最后数据修改时间字段的内容和最后元数据修改时间字段的内容保持不变。

本申请实施例提供的另一种元数据处理方法,获取其中一个时间戳更新操作对应的待更新时间、另外一个时间戳更新操作对应的待更新时间和父目录时间戳元数据中记录的最后元数据修改时间;其中,待更新时间为目标元数据的创建时间或目标元数据的删除时间;利用其中一个时间戳更新操作对应的待更新时间、另外一个时间戳更新操作对应的待更新时间和最后元数据修改时间中的最大值更新目标元数据的父目录时间戳元数据中记录的最后元数据修改时间。由此,针对多个时间戳更新操作同时触发的场景,根据多个时间戳更新操作对应的待更新时间和最后元数据修改时间中的最大值更新目标元数据的父目录时间戳元数据中记录的最后元数据修改时间,能够提升分布式文件系统的并发度,从而提升元数据服务器的性能。

可选地,父目录时间戳元数据包括最后元数据修改时间。步骤S54,包括:

S541:执行时间戳更新操作;

S542:在执行读操作之前,读取父目录时间戳元数据,以获得第一最后元数据修改时间;

S543:在执行读操作之后,读取父目录时间戳元数据,以获得第二最后元数据修改时间;

S544:响应于第一最后元数据修改时间与第二最后元数据修改时间不同,重新执行读操作,直至第一最后元数据修改时间与第二最后元数据修改时间相同时,反馈读操作读取到的目标元数据。

具体地,当时间戳更新操作与读操作同时触发时,可以同时执行时间戳更新操作和读操作,对于时间戳更新操作可以采用原子更新指令正常执行,对于读操作可以将父目录时间戳元数据中记录的最后元数据修改时间视为待读取的目标元数据的版本号,即在读取目标元数据前后分别获取一次父目录时间戳元数据中记录的最后元数据修改时间,如果两次获取的最后元数据修改时间相同,则确定读取过程中目标元数据未发生更新,读取到的目标元数据可用,进而可以将读取到的目标元数据反馈给客户端;如果两次获取的最后元数据修改时间不同,则确定读取过程中目标元数据发生更新,读取到的目标元数据不可用,进而需要重新执行读操作。

本申请实施例提供的另一种元数据处理方法,执行时间戳更新操作;在执行读操作之前,读取父目录时间戳元数据,以获得第一最后元数据修改时间;在执行读操作之后,读取父目录时间戳元数据,以获得第二最后元数据修改时间;响应于第一最后元数据修改时间与第二最后元数据修改时间不同,重新执行读操作,直至第一最后元数据修改时间与第二最后元数据修改时间相同时,反馈读操作读取到的目标元数据。由此,针对时间戳更新操作与读操作同时触发的场景,采用预设乐观并发控制算法对时间戳更新操作与读操作进行并发控制,从而保证操作的隔离性和统一性。

本申请实施例提供的又一种元数据处理方法,应用于客户端设备,又一种元数据处理方法包括以下步骤:

S71:向元数据处理设备发送对分布式文件系统中元数据的操作请求。

其中,操作请求中包括目标元数据的存储路径及操作类型,操作请求用于触发元数据处理设备根据目标元数据的存储路径确定存储目标元数据的目标目录组;目标元数据包括目标目录访问元数据和/或目标目录访问元数据所在目录下的目标文件元数据,目标目录组用于存储目标元数据和目标元数据的父目录时间戳元数据;分布式文件系统包括多个预设目录组,针对每个预设目录组,分别存储在一个对应的非统一内存访问节点中,多个非统一内存访问节点位于对应的元数据服务器中,各预设目录组中的数据包括预设元数据、以及预设元数据的父目录时间戳元数据;操作请求还用于触发元数据处理设备根据操作类型对目标元数据进行操作,并对目标目录组中的目标元数据的父目录时间戳元数据进行更新。

本申请实施例提供的又一种元数据处理方法,向元数据处理设备发送对分布式文件系统中元数据的操作请求。其中,操作请求中包括目标元数据的存储路径及操作类型,操作请求用于触发元数据处理设备根据目标元数据的存储路径确定存储目标元数据的目标目录组;目标元数据包括目标目录访问元数据和/或目标目录访问元数据所在目录下的目标文件元数据,目标目录组用于存储目标元数据和目标元数据的父目录时间戳元数据;分布式文件系统包括多个预设目录组,针对每个预设目录组,分别存储在一个对应的非统一内存访问节点中,多个非统一内存访问节点位于对应的元数据服务器中,各预设目录组中的数据包括预设元数据、以及预设元数据的父目录时间戳元数据;操作请求还用于触发元数据处理设备根据操作类型对目标元数据进行操作,并对目标目录组中的目标元数据的父目录时间戳元数据进行更新。由此,将预设元数据和预设元数据的父目录时间戳元数据存储在同一个预设目录组中,并以预设目录组为单位,将同一预设目录组中的元数据一起存储在一个非统一内存访问节点中,从而在根据操作类型对目标元数据进行操作时,不需要跨非统一内存访问节点进行通信,仅在一个非统一内存访问节点中就可以完成对目标元数据的父目录时间戳元数据的更新,进而提升分布式文件系统中目标元数据操作的访问局部性,从而提升元数据服务器的性能。

本申请实施例提供的一种元数据处理装置,应用于元数据处理设备。本申请实施例提供的一种元数据处理装置包括拆分模块、第一存储模块和第二存储模块。

其中,拆分模块,用于将分布式文件系统中的预设目录元数据拆分为预设目录时间戳元数据和预设目录访问元数据;其中,预设目录时间戳元数据包括预设目录元数据的时间戳信息,预设目录访问元数据包括预设目录元数据除时间戳信息外的信息。

第一存储模块,用于将预设目录访问元数据和预设目录访问元数据所在目录下的预设文件元数据中的至少一个与预设目录访问元数据的父目录时间戳元数据存储在一个预设目录组;将预设目录访问元数据的子文件元数据和预设目录访问元数据的子目录访问元数据中的至少一个与预设目录时间戳元数据存储在另一个预设目录组。

第二存储模块用于将预设目录组中的元数据存储于一个对应的非统一内存访问节点。其中,多个非统一内存访问节点位于对应的元数据服务器中,预设目录组用于作为目标目录组,目标目录组根据客户端对分布式文件系统中元数据的操作请求中目标元数据的存储路径确定,目标元数据包括目标目录访问元数据和/或目标目录访问元数据所在目录下的目标文件元数据,对目标元数据的操作和目标目录组中的目标元数据的父目录时间戳元数据的更新均发生在目标目录组对应的非统一内存访问节点中。

可选地,第二存储模块,具体用于:

对预设目录组进行一致性哈希计算,得到预设目录组的哈希值;

基于哈希值,将预设目录组中的元数据存储于一个对应的非统一内存访问节点。

可选地,第二存储模块,具体用于:

确定元数据服务器的非统一内存访问节点的个数和标识;

分别确定各预设目录组的哈希值除以个数后得到的余数;

根据预先存储的余数与标识的对应关系,将各预设目录组中的元数据存储于一个对应的非统一内存访问节点。

可选地,第二存储模块,具体用于:

将预设目录组中的元数据以键值对的形式存储于一个对应的非统一内存访问节点。

可选地,预设目录访问元数据的父目录时间戳元数据包括目录标识,键值对的形式如下所示:

将目录标识作为键,并以预设目录访问元数据的父目录时间戳元数据作为值,组成的键值对;

将目录标识和预设目录访问元数据所在目录下的文件元数据的文件命名字符串作为键,与以预设目录访问元数据所在目录下的文件元数据作为值,组成的键值对;

将目录标识和预设目录访问元数据的目录命名字符串作为键,与以预设目录访问元数据作为值,组成的键值对。

本申请实施例提供的一种元数据处理装置可以执行上述一种元数据处理方法实施例所示的技术方案,其实现原理和技术效果类似,此处不再赘述。

图7为本申请实施例提供的另一种元数据处理装置的结构示意图,本申请实施例提供的另一种元数据处理装置应用于元数据处理设备,如图7所示,本申请实施例提供的另一种元数据处理装置400包括响应模块401、确定模块402和处理模块403。

其中,响应模块401,用于响应于接收到客户端设备发送的对分布式文件系统中元数据的操作请求,操作请求中包括目标元数据的存储路径及操作类型。

确定模块402,用于根据目标元数据的存储路径确定存储目标元数据的目标目录组;目标元数据包括目标目录访问元数据和/或目标目录访问元数据所在目录下的目标文件元数据,目标目录组用于存储目标元数据和目标元数据的父目录时间戳元数据;分布式文件系统包括多个预设目录组,针对每个预设目录组,分别存储在一个对应的非统一内存访问节点中,多个非统一内存访问节点位于对应的元数据服务器中,各预设目录组中的数据包括预设元数据、以及预设元数据的父目录时间戳元数据。

处理模块403,用于根据操作类型对目标元数据进行操作,并对目标目录组中的目标元数据的父目录时间戳元数据进行更新。

可选地,处理模块403,具体用于:

响应于目标元数据的操作类型为目标元数据创建,将目标元数据写入目标目录组;将写入目标元数据时的系统时间戳确定为目标元数据的创建时间;

在写入目标元数据之后,根据目标元数据的创建时间更新目标元数据的父目录时间戳元数据。

可选地,元数据处理装置400还包括第一恢复模块。

第一恢复模块,用于响应于检测到分布式文件系统异常且目标元数据的创建时间后于目标元数据的父目录时间戳元数据中的对应时间,根据目标元数据的创建时间更新目标元数据的父目录时间戳元数据。

可选地,处理模块403,具体用于:

响应于操作类型为删除操作,标记目标元数据为无效;

将标记目标元数据为无效时的系统时间戳确定为目标元数据的删除时间;

根据目标元数据的删除时间更新目标元数据的父目录时间戳元数据;在更新目标元数据的父目录时间戳元数据之后,删除目标元数据。

可选地,元数据处理装置400还包括第二恢复模块,第二恢复模块,用于:

响应于分布式文件系统异常、且目标元数据的删除时间后于目标元数据的父目录时间戳元数据中的对应时间,根据目标元数据的删除时间更新目标元数据的父目录时间戳元数据;

响应于分布式文件系统异常、且目标元数据的删除时间与目标元数据的父目录时间戳元数据中的对应时间相同、且目标元数据未被删除,删除目标元数据。

可选地,元数据处理装置400还包括并发控制模块,并发控制模块,用于:

响应于对分布式文件系统中目标元数据同时触发的操作包括至少两个,确定同时触发的操作对应的操作类型;其中,同时触发的操作对应的操作类型包括时间戳更新操作、写操作和读操作中的至少一个,时间戳更新操作为在目标元数据的创建或删除过程中对目标目录元数据的父目录时间戳元数据进行更新的操作,写操作为除时间戳更新操作外的对目标元数据进行更新的操作,读操作为对目标元数据进行读取的操作;

响应于同时触发的操作对应的操作类型包括写操作,采用预设读写锁算法对同时触发的操作进行并发控制;

响应于多个时间戳更新操作同时触发,采用预设无锁原子更新算法对多个时间戳更新操作进行并发控制;

响应于时间戳更新操作与读操作同时触发,采用预设乐观并发控制算法对时间戳更新操作与读操作进行并发控制。

可选地,同时触发的操作对应的操作类型包括时间戳更新操作、读操作中的至少一个以及写操作。并发控制模块,具体用于:

获取预设读写锁算法中的当前锁状态;

响应于当前锁状态为写操作持有写锁,执行写操作,并在写操作执行完成后,配置时间戳更新操作和/或读操作持有读锁,以便执行时间戳更新操作和/或读操作;

或响应于当前锁状态为时间戳更新操作和/或读操作持有读锁,执行时间戳更新操作和/或读操作,并在时间戳更新操作和/或读操作执行完成后,配置写操作持有写锁,以便执行写操作。

可选地,目标元数据的父目录时间戳元数据包括最后数据修改时间和最后元数据修改时间。并发控制模块,具体用于:

获取多个时间戳更新操作对应的待更新时间和父目录时间戳元数据中记录的最后数据修改时间和最后元数据修改时间;其中,待更新时间为目标元数据的创建时间或目标元数据的删除时间;

利用多个时间戳更新操作对应的待更新时间、最后数据修改时间和最后元数据修改时间中的最大值更新目标元数据的父目录时间戳元数据中记录的最后数据修改时间和最后元数据修改时间。

可选地,父目录时间戳元数据包括最后元数据修改时间。并发控制模块,具体用于:

执行时间戳更新操作;

在执行读操作之前,读取父目录时间戳元数据,以获得第一最后元数据修改时间;

在执行读操作之后,读取父目录时间戳元数据,以获得第二最后元数据修改时间;

响应于第一最后元数据修改时间与第二最后元数据修改时间不同,重新执行读操作,直至第一最后元数据修改时间与第二最后元数据修改时间相同时,反馈读操作读取到的目标元数据。

本申请实施例提供的元数据处理装置400可以执行上述另一种元数据处理方法实施例所示的技术方案,其实现原理和技术效果类似,此处不再赘述。

本申请实施例提供的又一种元数据处理装置,应用于客户端设备,又一种元数据处理装置包括发送模块。

其中,发送模块用于向元数据处理设备发送对分布式文件系统中元数据的操作请求。

其中,操作请求中包括目标元数据的存储路径及操作类型,操作请求用于触发元数据处理设备根据目标元数据的存储路径确定存储目标元数据的目标目录组;目标元数据包括目标目录访问元数据和/或目标目录访问元数据所在目录下的目标文件元数据,目标目录组用于存储目标元数据和目标元数据的父目录时间戳元数据;分布式文件系统包括多个预设目录组,针对每个预设目录组,分别存储在一个对应的非统一内存访问节点中,多个非统一内存访问节点位于对应的元数据服务器中,各预设目录组中的数据包括预设元数据、以及预设元数据的父目录时间戳元数据;操作请求还用于触发元数据处理设备根据操作类型对目标元数据进行操作,并对目标目录组中的目标元数据的父目录时间戳元数据进行更新。

本申请实施例提供的又一种元数据处理装置可以执行上述又一种元数据处理方法实施例所示的技术方案,其实现原理和技术效果类似,此处不再赘述。

图8为本申请实施例提供的元数据处理设备的结构示意图,如图8所示,本申请实施例提供的元数据处理设备500包括:处理器501,以及与处理器501通信连接的存储器502;存储器502存储计算机执行指令;处理器501执行存储器502存储的计算机执行指令,以实现上述一种元数据处理方法和另一种元数据处理方法。

例如,当处理器501执行存储器502存储的计算机执行指令时,实现如下元数据处理方法的步骤:

S10:响应于接收到客户端设备发送的对分布式文件系统中元数据的操作请求,操作请求中包括目标元数据的存储路径及操作类型;

S20:根据目标元数据的存储路径确定存储目标元数据的目标目录组;目标元数据包括目标目录访问元数据和/或目标目录访问元数据所在目录下的目标文件元数据,目标目录组用于存储目标元数据和目标元数据的父目录时间戳元数据;分布式文件系统包括多个预设目录组,针对每个预设目录组,分别存储在一个对应的非统一内存访问节点中,多个非统一内存访问节点位于对应的元数据服务器中,各预设目录组中的数据包括预设元数据、以及预设元数据的父目录时间戳元数据;

S30:根据操作类型对目标元数据进行操作,并对目标目录组中的目标元数据的父目录时间戳元数据进行更新。

在图8对应的实施例中,程序可以包括程序代码,程序代码包括计算机执行指令。存储器502可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。

其中,存储器502和处理器501通过总线连接。总线可以是工业标准体系结构(Industry Standard Architecture,简称为ISA)总线、外部设备互连(PeripheralComponent Interconnect,简称为PCI)总线或扩展工业标准体系结构(Extended IndustryStandard Architecture,简称为EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

本申请实施例提供的元数据处理设备500可以执行上述一种元数据处理方法实施例和另一种元数据处理方法实施例所示的技术方案,其实现原理和技术效果类似,此处不再赘述。

本申请实施例提供的客户端设备包括:处理器,以及与处理器通信连接的存储器;存储器存储计算机执行指令;处理器执行存储器存储的计算机执行指令,以实现上述又一种元数据处理方法。

例如,当处理器执行存储器存储的计算机执行指令时,实现如下元数据处理方法的步骤:S71:向元数据处理设备发送对分布式文件系统中元数据的操作请求。

其中,操作请求中包括目标元数据的存储路径及操作类型,操作请求用于触发元数据处理设备根据目标元数据的存储路径确定存储目标元数据的目标目录组;目标元数据包括目标目录访问元数据和/或目标目录访问元数据所在目录下的目标文件元数据,目标目录组用于存储目标元数据和目标元数据的父目录时间戳元数据;分布式文件系统包括多个预设目录组,针对每个预设目录组,分别存储在一个对应的非统一内存访问节点中,多个非统一内存访问节点位于对应的元数据服务器中,各预设目录组中的数据包括预设元数据、以及预设元数据的父目录时间戳元数据;操作请求还用于触发元数据处理设备根据操作类型对目标元数据进行操作,并对目标目录组中的目标元数据的父目录时间戳元数据进行更新。

本申请实施例提供的客户端设备可以执行上述又一种元数据处理方法实施例所示的技术方案,其实现原理和技术效果类似,此处不再赘述。

本申请实施例提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现上述任一实施例的元数据处理方法。

本申请实施例提供一种计算机程序产品,计算机程序产品包括计算机程序,该计算机程序被处理器执行时实现上述任一实施例的元数据处理方法。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本申请所必须的。

进一步需要说明的是,虽然流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

应该理解,上述的装置实施例仅是示意性的,本申请的装置还可通过其它的方式实现。例如,上述实施例中单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如,多个单元、模块或组件可以结合,或者可以集成到另一个系统,或一些特征可以忽略或不执行。

另外,若无特别说明,在本申请各个实施例中的各功能单元/模块可以集成在一个单元/模块中,也可以是各个单元/模块单独物理存在,也可以两个或两个以上单元/模块集成在一起。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。

集成的单元/模块如果以硬件的形式实现时,该硬件可以是数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于晶体管,忆阻器等等。若无特别说明,人工智能处理器可以是任何适当的硬件处理器,比如CPU、GPU、FPGA、DSP和ASIC等等。若无特别说明,存储单元可以是任何适当的磁存储介质或者磁光存储介质,比如,阻变式存储器RRAM(Resistive Random Access Memory)、动态随机存取存储器DRAM(Dynamic Random AccessMemory)、静态随机存取存储器SRAM(Static Random-Access Memory)、增强动态随机存取存储器EDRAM(Enhanced Dynamic Random Access Memory)、高带宽内存HBM(High-Bandwidth Memory)、混合存储立方HMC(Hybrid Memory Cube)等等。

集成的单元/模块如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

技术分类

06120116107849