本申请实施例涉及计算机技术,具体涉及分布式存储技术,尤其涉及一种分布式文件系统目录更新方法、装置、设备和介质。
背景技术:
新一代分布式文件系统为支持超大规模统一目录树,一般选用分布式键值对(key-value,kv)系统或者分布式数据库(database,db)来存储目录树元数据。然而,现有方案中为避免目录树更新过程中的写写冲突,即同时存在针对同一目录的多个更新操作,通常,当父目录下成功创建一个子目录或者文件后,才会进入下一个子目录或者文件的创建过程,这种处理模式使得分布式文件系统的目录更新过程非常缓慢。
技术实现要素:
本申请实施例公开一种分布式文件系统目录更新方法、装置、设备和介质,以提升分布式文件系统中同目录下并发创建文件或子目录的效率,提升整个文件系统的子目录或文件创建请求的吞吐量,提升目录更新效率。
第一方面,本申请实施例公开了一种分布式文件系统目录更新方法,包括:
根据创建请求,确定待新建文件或者待新建子目录所属的目标父目录;
利用预先设置的加锁程序,将所述目标父目录标记为支持多个与执行顺序无关的属性更新操作;
生成所述目标父目录的多个属性更新操作,以及生成所述待新建文件或者所述待新建子目录的多个新建操作,其中,一个新建操作对应一个属性更新操作;
按照所述属性更新操作与所述新建操作的对应关系,执行所述多个属性更新操作和所述多个新建操作。
上述申请中的一个实施例具有如下优点或有益效果:通过对目标父目录添加弱更新锁以及利用目录更新的两阶段处理过程,解决了现有分布式文件系统中同目录下创建文件或子目录的效率较低或者并发创建度较低的问题,提升了分布式文件系统中同目录下并发创建文件或子目录的效率。
可选的,所述利用预先设置的加锁程序,将所述目标父目录标记为支持多个与执行顺序无关的属性更新操作,包括:
在生成所述目标父目录的每个属性更新操作之前,利用所述预先设置的加锁程序,将所述目标父目录标记为支持多个与执行顺序无关的属性更新操作;
相应的,在执行每个属性更新操作之后,所述方法还包括:将所述目标父目录的加锁标记状态进行释放。
可选的,按照所述属性更新操作与所述新建操作的对应关系,执行所述多个属性更新操作和所述多个新建操作,包括:
将每个属性更新操作、以及与之对应的新建操作,作为同一个事务进行提交;
基于各个事务的提交时间,执行每个事务中的操作。
上述申请中的一个实施例具有如下优点或有益效果:利用事务机制,确保了每个属性更新操作和与之对应的新建操作之间的原子性,保证了异常情况下数据的一致性。
可选的,在生成所述待新建文件或者所述待新建子目录的多个新建操作之前,所述方法还包括:
按照所述新建操作的生成次数,依次对所述待新建文件或者所述待新建子目录添加更新锁;
相应的,在执行每个新建操作之后,所述方法还包括:
将所述待新建文件或者所述待新建子目录的更新锁进行释放。
可选的,所述目标父目录在加锁标记状态下禁止被删除。
上述申请中的一个实施例具有如下优点或有益效果:目标父目录在更新过程中禁止删除操作,确保了目标更新的成功实现。
第二方面,本申请实施例还公开了一种分布式文件系统目录更新装置,包括:
目标父目录确定模块,用于根据创建请求,确定待新建文件或者待新建子目录所属的目标父目录;
父目录加锁模块,用于利用预先设置的加锁程序,将所述目标父目录标记为支持多个与执行顺序无关的属性更新操作;
操作生成模块,用于生成所述目标父目录的多个属性更新操作,以及生成所述待新建文件或者所述待新建子目录的多个新建操作,其中,一个新建操作对应一个属性更新操作;
操作执行模块,用于按照所述属性更新操作与所述新建操作的对应关系,执行所述多个属性更新操作和所述多个新建操作。
可选的,所述父目录加锁模块具体用于:
在生成所述目标父目录的每个属性更新操作之前,利用所述预先设置的加锁程序,将所述目标父目录标记为支持多个与执行顺序无关的属性更新操作;
相应的,所述装置还包括:
父目录加锁释放模块,用于在所述操作执行模块执行每个属性更新操作之后,将所述目标父目录的加锁标记状态进行释放。
可选的,所述操作执行模块包括:
事务提交单元,用于将每个属性更新操作、以及与之对应的新建操作,作为同一个事务进行提交;
事务执行单元,用于基于各个事务的提交时间,执行每个事务中的操作。
可选的,所述装置还包括:
新建文件或子目录加锁模块,用于在所述操作生成模块执行生成所述待新建文件或者所述待新建子目录的多个新建操作之前,按照所述新建操作的生成次数,依次对所述待新建文件或者所述待新建子目录添加更新锁;
相应的,所述装置还包括:
新建文件或子目录加锁释放模块,用于在所述操作执行模块执行每个新建操作之后,将所述待新建文件或者所述待新建子目录的更新锁进行释放。
可选的,所述目标父目录在加锁标记状态下禁止被删除。
第三方面,本申请实施例还公开了一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如本申请实施例任一所述的分布式文件系统目录更新方法。
第四方面,本申请实施例还公开了一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使所述计算机执行如本申请实施例任一所述的分布式文件系统目录更新方法。
根据本申请实施例的技术方案,通过利用预先设置的加锁程序,将目标父目录标记为支持多个与执行顺序无关的属性更新操作,在目标父目录的加锁状态下,并发地生成目标父目录的多个属性更新操作以及对应的文件或子目录的新建操作,然后推迟到操作执行阶段逐个执行属性更新操作和新建操作,解决了现有分布式文件系统中同目录下创建文件或子目录的效率较低或者并发创建度较低的问题,提升了分布式文件系统中同目录下并发创建文件或子目录的效率,提升了整个文件系统的子目录或文件创建请求的吞吐量,减少了同目录下创建子目录或文件的延迟,提升了目录更新效率;同时,目标父目录在加锁状态下支持多个与执行顺序无关的属性更新操作,还避免了高并发场景下写写冲突的发生。上述可选方式所具有的其他效果将在下文中结合具体实施例加以说明。
附图说明
附图用于更好地理解本方案,不构成对本申请的限定。其中:
图1是根据本申请实施例公开的一种分布式文件系统目录更新方法的流程图;
图2是根据本申请实施例公开的另一种分布式文件系统目录更新方法的流程图;
图3根据本申请实施例公开的事务生成与提交的一种示意图;
图4是根据本申请实施例公开的一种分布式文件系统目录更新装置的结构示意图;
图5是根据本申请实施例公开的一种电子设备的框图。
具体实施方式
以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本申请实施例公开的一种分布式文件系统目录更新方法的流程图,本申请实施例可以适用于对分布式文件系统目录进行更新的情况。该方法可以由分布式文件系统目录更新装置来执行,该装置可以采用软件和/或硬件的方式实现,并可集成在任意的具有计算能力的电子设备上。
在本实施例中,可以将分布式文件系统的目录树元信息存储在分布式系统中进行维护,例如存储在分布式kv系统。当在父目录下新建一个文件或新建一个子目录时,需要同时更新父目录的属性,该属性包括但不限于父目录包含的子目录数量或文件数量(size)、父目录的访问时间(atime)、以及父目录的修改时间(mtime)等。
本实施例技术方案执行的前提包括以下两方面:
1)分布式文件系统中父目录的更新,与更新操作提交顺序或者更新操作执行顺序无关;
2)分布式文件系统中父目录的更新过程中,不支持删除该父目录的操作。
如图1所示,本申请实施例公开的分布式文件系统目录更新方法可以包括:
s101、根据创建请求,确定待新建文件或者待新建子目录所属的目标父目录。
其中,创建请求即在目标父目录下新建文件或新建子目录的请求,创建请求可以是根据业务处理过程中的创建需求而自动触发,也可以是由用户根据创建需求而手动触发,本实施例对此不作具体限定。创建请求中可以携带有对应的目标父目录的信息,例如父目录名称、父目录存储路径等,以使得可以根据创建请求,确定目标父目录。
s102、利用预先设置的加锁程序,将目标父目录标记为支持多个与执行顺序无关的属性更新操作。
加锁是对数据进行并发控制的一个重要技术。在本实施例中,预先设置的加锁程序属于一种自定义的加锁程序,该锁可以称为弱更新锁(weakupdatelock),通过对目标父目录添加弱更新锁,目标父目录能够支持多个与执行顺序无关的属性更新操作,即在目标父目录的加锁状态下,可以针对该父目录,并发地响应多个创建请求,并发地生成多个文件或子目录的新建操作,在操作执行阶段,再逐一执行新建操作和父目录的属性更新操作,无需等待一个新建操作和对应的父目录属性更新操作执行结束后,再响应下一个创建请求,生成下一个新建操作,新建操作和属性更新操作的执行顺序与操作生成顺序无关,因而,本实施例可以提升分布式文件系统中同目录下并发创建文件或子目录的效率,提升整个文件系统的子目录或文件创建请求的吞吐量,提升目录更新效率。并且,目标父目录在加锁标记状态下禁止被删除,从而可以防止后续属性更新过程中出现执行错误。多个弱更新锁可以并存。目标父目录的属性更新操作可以包括:对父目录包含的子目录数量或文件数量、父目录的访问时间、以及父目录的修改时间的更新。
以分布式kv系统为例,本实施例中弱更新锁的存在形式可以理解为分布式kv数据节点上任一目标父目录的一个持久化状态和记录加锁操作的一段代码,利用这段代码,可以实现对任一目标父目录并发地添加弱更新锁,并且不允许删除目标父目录。
此外,关于加锁程序的利用,可以是根据用户的添加弱更新锁的请求而触发,也可以根据预先设定的加锁调用策略而触发,例如在确定目标父目录后自动调用。具体的,可以根据不同的业务处理逻辑设置加锁程序的触发,本实施例不作限定。
s103、生成目标父目录的多个属性更新操作,以及生成待新建文件或者待新建子目录的多个新建操作,其中,一个新建操作对应一个属性更新操作。
目标父目录的属性更新操作与待新建文件或待新建子目录的新建操作属于相互关联的对应关系,每新建一个文件或子目录,便需要更新目标父目录的属性。以事务机制为例,前述属性更新操作和新建操作的生成过程,相当于事务的准备(prepare)阶段,为后续执行各操作分配所需的资源,同时记录事务提交(commit)时需要的操作,事务的提交即操作执行阶段,才会使准备阶段记录的操作真正生效,即本实施例中目录更新过程是一个两阶段实现的过程。
s104、按照属性更新操作与新建操作的对应关系,执行多个属性更新操作和多个新建操作。
关于待新建文件或待新建子目录的新建操作与对应的目标父目录的属性更新操作具有原子性,同时执行成功或执行失败。
以在目标父目录a下创建文件b为例,对本实施例进行示例性说明:
prepare-update(a,size=size 1,atime=now,mtime=now)//目标父目录a的属性更新操作:将父目录下的文件数量自增1,父目录访问时间更新为现在,父目录修改时间更新为现在;
prepare-put(b)//在目标父目录a下新建文件b;
commit(a,b)//将生成的属性更新操作和新建操作进行提交并执行。
本实施例通过采用包括操作生成阶段和操作执行阶段的两阶段处理过程,将目标父目录的属性更新操作、以及文件或子目录的新建操作的并发生成过程与操作执行过程相互分离,操作生成阶段可以并发地生成多个操作,由于各操作还没有被真正执行,即未生效,因此,生成的多个属性更新操作和多个新建操作也不会产生关于目标父目录的写写冲突,也无需为了避免写写冲突而串行化生成各个操作;在操作执行阶段,各个属性更新操作和新建操作真正生效,由于在添加弱更新锁的状态下,目标父目录支持多个与执行顺序无关的属性更新操作,因此也不会因为属性更新操作和对应新建操作的执行顺序的变化而对目录属性更新产生影响,还避免了高并发场景下写写冲突的发生。
根据本实施例的技术方案,通过利用预先设置的加锁程序,将目标父目录标记为支持多个与执行顺序无关的属性更新操作,在目标父目录的加锁状态下,并发地生成目标父目录的多个属性更新操作以及对应的文件或子目录的新建操作,然后推迟到操作执行阶段逐个执行属性更新操作和新建操作,解决了现有分布式文件系统中同目录下创建文件或子目录的效率较低或者并发创建度较低的问题,提升了分布式文件系统中同目录下并发创建文件或子目录的效率,提升了整个文件系统的子目录或文件创建请求的吞吐量,减少了同目录下创建子目录或文件的延迟,提升了目录更新效率;同时,目标父目录在加锁状态下支持多个与执行顺序无关的属性更新操作,还避免了高并发场景下写写冲突的发生;并且,本实施例技术方案可以应用在文件数量为任意量级的分布式文件系统中,目录更新过程中也无需考虑对目录的切分问题。
图2是根据本申请实施例公开的另一种分布式文件系统目录更新方法的流程图,基于上述技术方案进一步优化与扩展,并可以与上述各个可选实施方式进行结合。具体的,以下内容以将一个事务划分为两个处理阶段为例,对本申请实施例进行示例性说明,本实施例技术方案执行的前提包括以下:
1)多个事务对目标父目录的更新与事务提交顺序无关;
2)多个事务对目标父目录更新的过程中,不能删除该目标父目录。
如图2所示,本申请实施例公开的分布式文件系统目录更新方法可以包括:
s201、根据创建请求,确定待新建文件或者待新建子目录所属的目标父目录。
s202、在生成目标父目录的每个属性更新操作之前,利用预先设置的加锁程序,将目标父目录标记为支持多个与执行顺序无关的属性更新操作。
其中,目标父目录的属性更新操作与文件或子目录的新建操作属于相互关联的对应关系,每新建一个文件或子目录,便需要更新目标父目录的属性,在生成目标父目录的每个属性更新操作之前,可以利用预先设置的加锁程序对目标父目录加锁,即意味着每当目标父目录下新建一个文件或新建一个子目录之前,对目标父目录执行加弱更新锁的操作,多个弱更新锁可以并存,以确保并发场景下目录属性可以更新成功,并且防止针对目标父目录的其他非预期的删除等操作;当每个目标父目录属性更新成功后,即可以释放该弱更新锁。
s203、生成目标父目录的多个属性更新操作,以及生成待新建文件或者待新建子目录的多个新建操作,其中,一个新建操作对应一个属性更新操作。
s204、将每个属性更新操作、以及与之对应的新建操作,作为同一个事务进行提交。
即操作s201-s203为事务的准备阶段,操作s204-s205为事务的提交或执行阶段。利用事务机制,可以确保每个属性更新操作和与之对应的新建操作之间的原子性。在操作生成阶段并发生成多个属性更新操作和新建操作,相当于并发生成多个事务。同一个事务中的操作都执行或者都不被执行,还可以保证异常情况下数据的一致性。一个事务被成功执行,即在目标父目录下新建文件或子目录的操作成功,同时目标父目录的属性更新成功。
s205、基于各个事务的提交时间,执行每个事务中的操作。
在本实施例中,可以利用全局事务表和本地事务表记录并发生成的多个事务的信息,因此可以通过查询全局事务表和本地事务表,确认当前已经提交或者未提交的事务。
进一步的,在执行每个属性更新操作之后,本实施例公开的方法还包括:将目标父目录的加锁标记状态进行释放。
进一步的,在生成待新建文件或者待新建子目录的多个新建操作之前,本实施例公开的方法还包括:按照新建操作的生成次数,依次对待新建文件或者待新建子目录添加更新锁;
相应的,在执行每个新建操作之后,本实施例公开的方法还包括:将待新建文件或者待新建子目录的更新锁进行释放。
即每当需要在目标父目录下新建一个文件或新建一个子目录时,对待新建文件或待新建子目录执行添加更新锁(updatelock)的操作,使得在新建操作执行过程中,待新建文件或待新建子目录不能被其他进程进行数据读、写、修改、删除等操作。
图3作为示例,示出了本实施例中事务生成与提交的一种示意图,不应理解为对本实施例的具体限定。图3具体以在目标父目录a下并发地新建文件b和文件c为例,对本实施例进行示例性说明,新建文件b的操作对应事务1,新建文件c的操作对应事务2,目标父目录a包含的文件数量初始值为1,父目录访问时间和父目录修改时间的初始值为t0。如图3所示:
(1)事务准备阶段
事务1:
在t1时刻,使用弱更新锁weakupdatelock锁定目标父目录a,并在目标父目录a的锁定状态下生成目标父目录a的属性更新操作,即记录操作提交时需要更新的父目录属性,例如父目录包含的文件数量(size)自增,父目录访问时间和父目录修改时间进行更新;
在t2时刻,生成新建文件b的新建操作(pre-write),并在生成该新建操作之前,使用更新锁updatelock锁定该文件b;
事务2:
在t3时刻,使用弱更新锁weakupdatelock锁定目标父目录a,并在目标父目录a的锁定状态下生成目标父目录a的属性更新操作,即记录操作提交时需要更新的父目录属性;由于此时属性更新操作还未执行,即实际上还未更改目标父目录a的属性,因此,事务2和事务1并不会产生写写冲突;
在t4时刻,生成新建文件c的新建操作(pre-write),并在生成该新建操作之前,使用更新锁updatelock锁定该文件c;
(2)事务提交或事务执行阶段
事务2:
在t5时刻,提交事务2,此时执行t3时刻使用弱更新锁锁定目标父目录a时生成的属性更新操作,将父目录包含的文件数量更新为2,将父目录访问时间和父目录修改时间更新为t5;并执行t4时刻生成的新建文件c的新建操作;
事务1:
在t6时刻,提交事务1,此时执行t1时刻使用弱更新锁锁定目标父目录a时生成的属性更新操作,将父目录包含的文件数量更新为3,将父目录访问时间和父目录修改时间更新为t6;并执行t2时刻生成的新建文件b的新建操作。
从上述示例可以看出,事务1和事务2的执行顺序与生成顺序并无关联,即目标父目录支持的属性更新操作与提交顺序无关。此外,各个属性更新操作与新建操作可以在单机引擎上完成,可以防御丢失更新问题。根据本实施例的技术方案,通过对目标父目录添加弱更新锁、以及利用事务的两阶段处理过程,并发生成目标父目录的多个属性更新操作以及对应的文件或子目录新建操作,延迟到事务的真正执行阶段逐个执行各操作,解决了现有分布式文件系统中同目录下创建文件或子目录的效率较低或者并发创建度较低的问题,提升了分布式文件系统中同目录下并发创建文件或子目录的效率,提升了整个文件系统的子目录或文件创建请求的吞吐量,提升了目录更新效率;同时,在添加弱更新锁的状态下,目标父目录支持多个与执行顺序无关的属性更新操作,还避免了高并发场景下写写冲突的发生。
图4是根据本申请实施例公开的一种分布式文件系统目录更新装置的结构示意图,本申请实施例可以适用于对分布式文件系统目录进行更新的情况。本实施例公开的装置可以采用软件和/或硬件的方式实现,并可集成在任意的具有计算能力的电子设备上。
如图4所示,本申请实施例公开的分布式文件系统目录更新装置300可以包括目标父目录确定模块301、父目录加锁模块302、操作生成模块303和操作执行模块304,其中:
目标父目录确定模块301,用于根据创建请求,确定待新建文件或者待新建子目录所属的目标父目录;
父目录加锁模块302,用于利用预先设置的加锁程序,将目标父目录标记为支持多个与执行顺序无关的属性更新操作;
操作生成模块303,用于生成目标父目录的多个属性更新操作,以及生成待新建文件或者待新建子目录的多个新建操作,其中,一个新建操作对应一个属性更新操作;
操作执行模块304,用于按照属性更新操作与新建操作的对应关系,执行多个属性更新操作和多个新建操作。
可选的,父目录加锁模块302具体用于:
在生成目标父目录的每个属性更新操作之前,利用预先设置的加锁程序,将目标父目录标记为支持多个与执行顺序无关的属性更新操作;
相应的,本实施例公开的装置还包括:
父目录加锁释放模块,用于在操作执行模块304执行每个属性更新操作之后,将目标父目录的加锁标记状态进行释放。
可选的,操作执行模块304包括:
事务提交单元,用于将每个属性更新操作、以及与之对应的新建操作,作为同一个事务进行提交;
事务执行单元,用于基于各个事务的提交时间,执行每个事务中的操作。
可选的,本实施例公开的装置还包括:
新建文件或子目录加锁模块,用于在操作生成模块303执行生成待新建文件或者待新建子目录的多个新建操作之前,按照新建操作的生成次数,依次对待新建文件或者待新建子目录添加更新锁;
相应的,本实施例公开的装置还包括:
新建文件或子目录加锁释放模块,用于在操作执行模块304执行每个新建操作之后,将待新建文件或者待新建子目录的更新锁进行释放。
可选的,目标父目录在加锁标记状态下禁止被删除。
本申请实施例所公开的分布式文件系统目录更新装置300可执行本申请实施例所公开的分布式文件系统目录更新方法,具备执行方法相应的功能模块和有益效果。本实施例中未详尽描述的内容可以参考本申请任意方法实施例中的描述。
根据本申请的实施例,本申请还提供了一种电子设备和一种可读存储介质。
如图5所示,图5是用于实现本申请实施例中分布式文件系统目录更新方法的电子设备的框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本申请实施例的实现。
如图5所示,该电子设备包括:一个或多个处理器401、存储器402,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在电子设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示图形用户界面(graphicaluserinterface,gui)的图形信息的指令。在其它实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个电子设备,各个设备提供部分必要的操作,例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统。图5中以一个处理器401为例。
存储器402即为本申请实施例所提供的非瞬时计算机可读存储介质。其中,所述存储器存储有可由至少一个处理器执行的指令,以使所述至少一个处理器执行本申请实施例所提供的分布式文件系统目录更新方法。本申请实施例的非瞬时计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行本申请实施例所提供的分布式文件系统目录更新方法。
存储器402作为一种非瞬时计算机可读存储介质,可用于存储非瞬时软件程序、非瞬时计算机可执行程序以及模块,如本申请实施例中分布式文件系统目录更新方法对应的程序指令/模块,例如,附图4所示的目标父目录确定模块301、父目录加锁模块302、操作生成模块303和操作执行模块304。处理器401通过运行存储在存储器402中的非瞬时软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例中的分布式文件系统目录更新方法。
存储器402可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据分布式文件系统目录更新方法的电子设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些实施例中,存储器402可选包括相对于处理器401远程设置的存储器,这些远程存储器可以通过网络连接至用于实现本实施例中分布式文件系统目录更新方法的电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
用于实现本实施例中分布式文件系统目录更新方法的电子设备还可以包括:输入装置403和输出装置404。处理器401、存储器402、输入装置403和输出装置404可以通过总线或者其他方式连接,图5中以通过总线连接为例。
输入装置403可接收输入的数字或字符信息,以及产生与用于实现本实施例中分布式文件系统目录更新方法的电子设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等输入装置。输出装置404可以包括显示设备、辅助照明装置和触觉反馈装置等,其中,辅助照明装置例如发光二极管(lightemittingdiode,led);触觉反馈装置例如,振动电机等。该显示设备可以包括但不限于,液晶显示器(liquidcrystaldisplay,lcd)、led显示器和等离子体显示器。在一些实施方式中,显示设备可以是触摸屏。
此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、专用集成电路(applicationspecificintegratedcircuit,asic)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
这些计算程序,也称作程序、软件、软件应用、或者代码,包括可编程处理器的机器指令,并且可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。如本文使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置,例如,磁盘、光盘、存储器、可编程逻辑装置(programmablelogicdevice,pld),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置,例如,阴极射线管(cathoderaytube,crt)或者lcd监视器;以及键盘和指向装置,例如,鼠标或者轨迹球,用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈,例如,视觉反馈、听觉反馈、或者触觉反馈;并且可以用任何形式,包括声输入、语音输入或者、触觉输入,来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统,例如,作为数据服务器,或者实施在包括中间件部件的计算系统,例如,应用服务器,或者实施在包括前端部件的计算系统,例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互,或者实施在包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信,例如通信网络,来将系统的部件相互连接。通信网络的示例包括:局域网(localareanetwork,lan)、广域网(wideareanetwork,wan)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
根据本申请实施例的技术方案,通过利用预先设置的加锁程序,将目标父目录标记为支持多个与执行顺序无关的属性更新操作,在目标父目录的加锁状态下,并发地生成目标父目录的多个属性更新操作以及对应的文件或子目录的新建操作,然后推迟到操作执行阶段逐个执行属性更新操作和新建操作,解决了现有分布式文件系统中同目录下创建文件或子目录的效率较低或者并发创建度较低的问题,提升了分布式文件系统中同目录下并发创建文件或子目录的效率,提升了整个文件系统的子目录或文件创建请求的吞吐量,减少了同目录下创建子目录或文件的延迟,提升了目录更新效率;同时,目标父目录在加锁状态下支持多个与执行顺序无关的属性更新操作,还避免了高并发场景下写写冲突的发生。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。
1.一种分布式文件系统目录更新方法,其特征在于,包括:
根据创建请求,确定待新建文件或者待新建子目录所属的目标父目录;
利用预先设置的加锁程序,将所述目标父目录标记为支持多个与执行顺序无关的属性更新操作;
生成所述目标父目录的多个属性更新操作,以及生成所述待新建文件或者所述待新建子目录的多个新建操作,其中,一个新建操作对应一个属性更新操作;
按照所述属性更新操作与所述新建操作的对应关系,执行所述多个属性更新操作和所述多个新建操作。
2.根据权利要求1所述的方法,其特征在于,所述利用预先设置的加锁程序,将所述目标父目录标记为支持多个与执行顺序无关的属性更新操作,包括:
在生成所述目标父目录的每个属性更新操作之前,利用所述预先设置的加锁程序,将所述目标父目录标记为支持多个与执行顺序无关的属性更新操作;
相应的,在执行每个属性更新操作之后,所述方法还包括:将所述目标父目录的加锁标记状态进行释放。
3.根据权利要求1所述的方法,其特征在于,按照所述属性更新操作与所述新建操作的对应关系,执行所述多个属性更新操作和所述多个新建操作,包括:
将每个属性更新操作、以及与之对应的新建操作,作为同一个事务进行提交;
基于各个事务的提交时间,执行每个事务中的操作。
4.根据权利要求1所述的方法,其特征在于,在生成所述待新建文件或者所述待新建子目录的多个新建操作之前,所述方法还包括:
按照所述新建操作的生成次数,依次对所述待新建文件或者所述待新建子目录添加更新锁;
相应的,在执行每个新建操作之后,所述方法还包括:
将所述待新建文件或者所述待新建子目录的更新锁进行释放。
5.根据权利要求1所述的方法,其特征在于,所述目标父目录在加锁标记状态下禁止被删除。
6.一种分布式文件系统目录更新装置,其特征在于,包括:
目标父目录确定模块,用于根据创建请求,确定待新建文件或者待新建子目录所属的目标父目录;
父目录加锁模块,用于利用预先设置的加锁程序,将所述目标父目录标记为支持多个与执行顺序无关的属性更新操作;
操作生成模块,用于生成所述目标父目录的多个属性更新操作,以及生成所述待新建文件或者所述待新建子目录的多个新建操作,其中,一个新建操作对应一个属性更新操作;
操作执行模块,用于按照所述属性更新操作与所述新建操作的对应关系,执行所述多个属性更新操作和所述多个新建操作。
7.根据权利要求6所述的装置,其特征在于,所述父目录加锁模块具体用于:
在生成所述目标父目录的每个属性更新操作之前,利用所述预先设置的加锁程序,将所述目标父目录标记为支持多个与执行顺序无关的属性更新操作;
相应的,所述装置还包括:
父目录加锁释放模块,用于在所述操作执行模块执行每个属性更新操作之后,将所述目标父目录的加锁标记状态进行释放。
8.根据权利要求6所述的装置,其特征在于,所述操作执行模块包括:
事务提交单元,用于将每个属性更新操作、以及与之对应的新建操作,作为同一个事务进行提交;
事务执行单元,用于基于各个事务的提交时间,执行每个事务中的操作。
9.根据权利要求6所述的装置,其特征在于,所述装置还包括:
新建文件或子目录加锁模块,用于在所述操作生成模块执行生成所述待新建文件或者所述待新建子目录的多个新建操作之前,按照所述新建操作的生成次数,依次对所述待新建文件或者所述待新建子目录添加更新锁;
相应的,所述装置还包括:
新建文件或子目录加锁释放模块,用于在所述操作执行模块执行每个新建操作之后,将所述待新建文件或者所述待新建子目录的更新锁进行释放。
10.根据权利要求6所述的装置,其特征在于,所述目标父目录在加锁标记状态下禁止被删除。
11.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-5中任一项所述的分布式文件系统目录更新方法。
12.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使所述计算机执行权利要求1-5中任一项所述的分布式文件系统目录更新方法。
技术总结