CN115422137A - 文件创建方法、装置、电子设备及计算机可读存储介质 - Google Patents
文件创建方法、装置、电子设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN115422137A CN115422137A CN202211079457.7A CN202211079457A CN115422137A CN 115422137 A CN115422137 A CN 115422137A CN 202211079457 A CN202211079457 A CN 202211079457A CN 115422137 A CN115422137 A CN 115422137A
- Authority
- CN
- China
- Prior art keywords
- directory
- target
- file
- files
- determining
- 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.)
- Pending
Links
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/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
-
- 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
-
- 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
Abstract
本申请公开了一种文件创建方法、装置、电子设备及计算机可读存储介质。其中,该方法包括:通过分布式文件系统接收文件创建请求,其中,文件创建请求中至少包含目录深度、目录宽度以及初始文件序号;在分布式文件系统处于离线模式时,根据目录深度、目录宽度以及预设数量确定目标文件结构;根据目标文件结构在分布式文件系统中的数据库中创建目标数量的文件,并采用从最后一层目录开始逐层向上的方式创建每一层的目录,其中,目标数量的文件位于最后一层目录中,在创建每个目录的过程中,根据初始文件序号确定每个目录的目标序号。本申请解决了现有技术在分布式文件系统中创建文件以及目录时存在的创建效率低的技术问题。
Description
技术领域
本申请涉及文件处理领域以及分布式文件系统测试领域,具体而言,涉及一种文件创建方法、装置、电子设备及计算机可读存储介质。
背景技术
为了验证分布式文件系统的可靠性,有时需要在存在大量文件的基础上进行系统性能和稳定性测试,因此不可避免地需要按照一定的目录结构填充大量的文件。目前通常的做法是在在线模式下,利用基于分布式文件系统语义开发的工具在分布式文件系统中创建目录以及文件。
但是,现有技术在创建目录以及文件时,遵循的原则是先创建父目录,在创建子目录,最后创建文件,这种创建方式每次创建一个子目录或者文件时,都需要更新一次上层的父目录,目录层级越深,涉及到需要更新的父目录数量也就越多,从而由于反复多次地更新上层的父目录,导致目录和文件的创建效率较低。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种文件创建方法、装置、电子设备及计算机可读存储介质,以至少解决现有技术在分布式文件系统中创建文件以及目录时存在的创建效率低的技术问题。
根据本申请实施例的一个方面,提供了一种文件创建方法,包括:通过分布式文件系统接收文件创建请求,其中,文件创建请求用于在分布式文件系统中创建预设数量的文件以及容纳文件的目录,文件创建请求中至少包含目录深度、目录宽度以及初始文件序号,目录深度用于表征待创建的目录的层级数量,目录宽度用于表征每个目录包含的下一级目录的数量,初始文件序号用于对目录以及文件进行编号;在分布式文件系统处于离线模式时,根据目录深度、目录宽度以及预设数量确定目标文件结构,其中,目标文件结构用于表征待创建的多层目录之间的拓扑关系以及待创建的文件的目标数量,目标数量大于或等于预设数量;根据目标文件结构在分布式文件系统中的数据库中创建目标数量的文件,并采用从最后一层目录开始逐层向上的方式创建每一层的目录,其中,目标数量的文件位于最后一层目录中,在创建每个目录的过程中,根据初始文件序号确定每个目录的目标序号。
进一步地,文件创建方法还包括:根据目录深度以及目录宽度确定构成目标文件结构的目录层数以及每层目录对应的目录数量;确定目标文件结构中最后一层目录对应的目录数量为第一数量;根据第一数量与预设数量之间的大小关系确定待创建的文件的目标数量,其中,在最后一层目录中的每个目录所对应的文件数量相同;依据每层目录对应的目录数量、目录层数以及目标数量确定目标文件结构。
进一步地,文件创建方法还包括:在第一数量大于或等于预设数量时,确定第一数量为目标数量;在第一数量小于预设数量时,计算预设数量与第一数量的比值;在比值为整数时,计算比值与第一数量的乘积,得到目标数量;在比值为非整数时,计算目标整数与第一数量的乘积,得到目标数量,其中,目标整数为大于比值的最小整数。
进一步地,文件创建方法还包括:确定每个目录的所在层级以及每个目录在所在层级中的位置顺序;根据所在层级以及位置顺序确定每个目录的序号;根据序号以及初始文件序号确定每个目录的目标序号。
进一步地,文件创建方法还包括:在目录宽度大于1时,根据目录宽度、位置顺序、所在层级确定每个目录的序号,其中,目录宽度、位置顺序以及所在层级均为数值形式;在目录宽度等于1时,根据位置顺序以及所在层级确定每个目录的序号。
进一步地,文件创建方法还包括:确定任意一个目录为目标目录;在目标目录的所在层级为第一层时,确定目标目录的父目录的目标序号为1;在目标目录的所在层级为最后一层时,根据目标目录的所在层级、目标目录在所在层级的位置顺序以及第一文件数量确定目标目录的父目录的目标序号,其中,第一文件数量为最后一层目录中每个目录下所需要创建的文件数量;在目标目录的所在层级为中间层时,根据目录宽度、目标目录的所在层级以及目标目录在所在层级的位置顺序确定目标目录的父目录的目标序号。
进一步地,文件创建方法还包括:在确定任意一个目录为目标目录之后,根据目标目录的所在层级以及目录深度确定第一数值,其中,第一数值用于确定子目录总数量,子目录总数量为目标目录的所有子目录的数量;在目录宽度大于1时,根据第一数值以及目录宽度确定子目录总数量;在目录宽度为1时,确定第一数值为子目录总数量的值。
进一步地,文件创建方法还包括:在根据目标目录的所在层级以及目录深度确定第一数值之后,根据第一数值、目录深度以及第一文件数量确定目标目录中包含的文件总数量;获取单位逻辑空间,其中,单位逻辑空间用于表征一个文件在分布式文件系统中所占用的虚拟空间容量;根据单位逻辑空间以及文件总数量确定目标目录在分布式文件系统中占用的总逻辑空间。
进一步地,文件创建方法还包括:在创建目标数量的文件以及每一层的目录时,检测分布式文件系统是否出现重启;在分布式文件系统出现重启并且重启成功时,将已经创建完成的文件和目录进行覆盖,并继续写入新的文件以及目录。
根据本申请实施例的另一方面,还提供了一种文件创建装置,包括:接收模块,用于通过分布式文件系统接收文件创建请求,其中,文件创建请求用于在分布式文件系统中创建预设数量的文件以及容纳文件的目录,文件创建请求中至少包含目录深度、目录宽度以及初始文件序号,目录深度用于表征待创建的目录的层级数量,目录宽度用于表征每个目录包含的下一级目录的数量,初始文件序号用于对目录以及文件进行编号;确定模块,用于在分布式文件系统处于离线模式时,根据目录深度、目录宽度以及预设数量确定目标文件结构,其中,目标文件结构用于表征待创建的多层目录之间的拓扑关系以及待创建的文件的目标数量,目标数量大于或等于预设数量;创建模块,用于根据目标文件结构在分布式文件系统中的数据库中创建目标数量的文件,并采用从最后一层目录开始逐层向上的方式创建每一层的目录,其中,目标数量的文件位于最后一层目录中,在创建每个目录的过程中,根据初始文件序号确定每个目录的目标序号。
根据本申请实施例的另一方面,还提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,其中,计算机程序被设置为运行时执行上述的文件创建方法。
根据本申请实施例的另一方面,还提供了一种电子设备,包括一个或多个处理器和存储器,存储器用于存储一个或多个程序,其中,当一个或多个程序被一个或多个处理器执行时,使得一个或多个处理器实现上述的文件创建方法。
在本申请中,采用先创建文件,然后从最后一层目录开始逐层向上的创建每一层的目录的方式,首先通过分布式文件系统接收文件创建请求,其中,文件创建请求用于在分布式文件系统中创建预设数量的文件以及容纳文件的目录,文件创建请求中至少包含目录深度、目录宽度以及初始文件序号,目录深度用于表征待创建的目录的层级数量,目录宽度用于表征每个目录包含的下一级目录的数量,初始文件序号用于对目录以及文件进行编号。然后在分布式文件系统处于离线模式时,根据目录深度、目录宽度以及预设数量确定目标文件结构,其中,目标文件结构用于表征待创建的多层目录之间的拓扑关系以及待创建的文件的目标数量,目标数量大于或等于预设数量。最后,根据目标文件结构在分布式文件系统中的数据库中创建目标数量的文件,并采用从最后一层目录开始逐层向上的方式创建每一层的目录,其中,目标数量的文件位于最后一层目录中,在创建每个目录的过程中,根据初始文件序号确定每个目录的目标序号。
由上述内容可知,本申请在分布式文件系统处于离线模式时,首先根据目录深度、目录宽度以及预设数量确定目标文件结构,然后基于目录文件结构先创建好文件,再从最后一层目录开始逐层向上的创建上层的父目录,在本申请的文件与目录创建过程中,每个目录都只需要更新一次即可,无需反复更新,从而解决了现有技术中在创建文件和目录时存在的上层父目录反复更新的问题,进而减少了文件和目录的创建时间,提高了文件和目录的创建效率。
由此可见,通过本申请的技术方案,达到了减少目录更新次数的目的,从而实现了提高目录和文件的创建效率的效果,进而解决了现有技术在分布式文件系统中创建文件以及目录时存在的创建效率低的技术问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1根据本申请实施例的一种可选的文件创建方法的流程图;
图2根据本申请实施例的一种可选的目标文件结构的示意图;
图3根据本申请实施例的一种可选的确定每个目录的序号的流程图;
图4根据本申请实施例的一种可选的确定父目录的目标序号的流程图;
图5根据本申请实施例的一种可选的文件创建装置的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例1
根据本申请实施例,提供了一种文件创建方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
另外,为了方便更好地理解本申请的技术方案,以下对本申请中使用到的一些名词进行解释:
分布式文件系统:一种将数据分散存储到多个存储服务器上,并将这些分散的存储资源构成一个虚拟的存储设备,对外提供文件接口语义的存储系统;
mds:meta data system,元数据系统,用于管理、存储、分发分布式文件系统元数据信息的守护进程;
在线模式:一种分布式文件系统的工作模式,在该模式下,分布式文件系统会挂载元数据磁盘,按照文件系统语义正常运行;
离线模式:分布式文件系统的另一种工作模式,与在线模式相对应,在离线模式下,分布式文件系统不会挂载元数据磁盘,直接将数据写入后端存储或数据库;
目录结构:分布式文件系统对外展示文件组织的方式,通常是一种树状结构。
图1根据本申请实施例的一种可选的文件创建方法的流程图,如图1所示,该方法包括如下步骤:
步骤S101,通过分布式文件系统接收文件创建请求。
在步骤S101中,文件创建请求用于在分布式文件系统中创建预设数量的文件以及容纳文件的目录,文件创建请求中至少包含目录深度、目录宽度以及初始文件序号,目录深度用于表征待创建的目录的层级数量,目录宽度用于表征每个目录包含的下一级目录的数量,初始文件序号用于对目录以及文件进行编号。上述的一个文件为一个数据库kv键值对。
具体的,一种数据填充工具可作为本申请实施例中的文件创建方法的执行主体,数据填充工具可以是一种设置在分布式文件系统中的组件,用于在分布式文件系统中创建目录以及文件。
在一种可选的实施例中,为了测试分布式文件系统的稳定性,测试人员会在分布式文件系统创建一定数量的目录以及文件,从而后续根据创建的目录以及文件进行相关测试。具体的,测试人员可以通过终端设备向分布式文件系统发送文件创建请求,文件创建请求中至少包括测试人员所需要创建的文件数量(即预设数量)、目录深度、目录宽度以及初始文件序号。其中,目录深度表征的是测试人员需要创建的目录层数,目录宽度表征的是每个目录所包含的子目录数量,初始文件序号则表征的此次目录和文件创建过程中的起始可分配序号。
为了方便描述,以下用depth表示目录深度,width表示目录宽度,start_fileid表示初始文件序号。例如,depth=3表示待创建的目录有3层,即生成的目录结构为3层的目录结构,width=2表示每个目录包含两个子目录。另外,需要注意到的是,初始文件序号与分布式文件系统中已经存在的目录和文件有关,例如,如果分布式文件系统中已经创建有100个目录和文件,并且这100个目录和文件的序号为001-100,为了避免序号重复,则本次文件创建请求中的初始文件序号可以是任何一个大于100的数值,例如101、102、103等等。
步骤S102,在分布式文件系统处于离线模式时,根据目录深度、目录宽度以及预设数量确定目标文件结构。
在步骤S102中,目标文件结构用于表征待创建的多层目录之间的拓扑关系以及待创建的文件的目标数量,目标数量大于或等于预设数量。
具体的,上述的目标文件结构为根据目录深度、目录深度以及预设数量所确定的一种目录结构,目录文件结构用于描述待创建的文件以及目录之间组织结构,该组织结构通常是一种树状结构。
需要注意到的是,在本申请中,创建的文件全部在最后一层的目录中,并且最后一层的每个目录中具有相同数量的文件,这样均匀分布文件的目的是为了提高测试效率,方便测试人员更好更快地统计测试结果。在此基础上,为了确保文件在最后一层目录中的均匀分布,最终创建的文件数量(即目标数量)可能会大于文件创建请求中的预设数量。例如,如果最后一层的目录一共有1024个,文件创建请求中待创建文件的预设数量为1024个,则最后一层的每个目录下创建1个文件即可;但是如果最后一层的目录为1024个,文件创建请求中待创建文件的预设数量为1025个,则为了确保最后一层的每个目录中具有相同数量的文件,则最后一层的每个目录下可以创建2个文件,即一共会生成1024*2=2048个文件。为了保证能达到测试人员的测试要求,目标数量只能大于预设数量,不能小于预设数量。
在一种可选的实施例中,图2示出了一种目标文件结构的示意图,其中,在图2中,目录深度depth=3,目录宽度width=2,预设数量fcount=8。如图2所示,depth=3表示该目标文件结构有3层目录结构,width=2表示每个目录包含两个子目录,fcount=8表示待创建的文件数量是8个,并且只能在最后一级目录中创建,如果出现无法均匀分配的情形,则向上取整,保证每个最后一级目录中创建的文件数相同且总文件数不小于fcount。在图2中,名称前缀为dir的为目录,名称前缀为file的为文件,root为根目录。
步骤S103,根据目标文件结构在分布式文件系统中的数据库中创建目标数量的文件,并采用从最后一层目录开始逐层向上的方式创建每一层的目录。
在步骤S103中,目标数量的文件位于最后一层目录中,在创建每个目录的过程中,根据初始文件序号确定每个目录的目标序号。
具体的,与现有技术不同,本申请中在确定了目标文件结构之后,首先在分布式文件系统中创建目标数量的文件,然后在创建容纳文件的最后一层目录,在最后一层目录创建完成之后,再开始逐层向上地一层一层地创建上层目录,换言之,本申请是先创建子目录,再创建父目录。
另外,在目录和文件的创建过程中,数据填充工具还会根据初始文件序号确定每个目录的目标序号以及每个文件的目标序号。其中,每个目录的目标序号用于表征该目录在分布式文件系统中被创建的顺序,一个目录的目标序号由初始文件序号以及该目录的序号组成,为了方便描述,一个目录的目标序号可以用file id表示、序号可以用index表示,初始文件序号可以用start_fileid表示,则该目录的目标序号file id=index+start_fileid。
此外,在本申请中,一个文件是一个数据库kv(key-value)键值对,由一个称之为inode的数据结构表示。其中,key的命名规则为父目录file id(占8个字节)+目录或文件的名字,例如,在图2中,目录dir_0_0在数据库中的key为其父目录root的file id(固定值,1)+目录本身的名称dir_0_0;value则是inode数据结构的某种编码形式,主要包含目录或文件被分配的file id,创建文件或者目录时的时间戳,文件的单位逻辑空间,每个目录下包含的数据总量以及该目录在分布式文件系统中占用的总逻辑空间等信息,其中,数据总量为该目录中各种类型的数据的数量之和,各种类型的数据包括但不限于子目录以及文件。最终所生成的目录和文件是一个可以从root目录开始,向下生长的树状结构的文件系统。
此外,本申请在创建文件和目录时,首先会将分布式文件系统切换为离线模式,然后在离线模式下创建文件以及目录,并在创建文件以及目录的过程中,通过计算的方式为每个目录和文件进行命名,同时还会在创建每个目录时通过计算的方式计算得到每个目录下的所有子目录的数量、文件数量以及在分布式系统中占用的总逻辑空间。
需要注意到的是,在线模式时,现有技术在分布式文件系统中每创建一个目录或文件,都需要实时向上逐层更新父目录的统计信息,包括该父目录拥有的子目录数量和文件数量以及占用的总逻辑空间,目录层级越深,涉及的需要修改的父目录就越多,严重影响填充效率。
而在本申请的技术中,选择在离线模式下,通过计算可以准确地知道某个目录包含的子目录数量和文件总数,以及占用的总逻辑空间,进而可以采用从最后一层逐层向上的方式创建目录和文件,并且在创建目录时就通过计算得到每个目录下的子目录数量、文件总数以及占用的总逻辑空间,这样该目录只会被更新一次,从而达到提升填充效率的效果。在本申请中,root目录是最后更新的一个目录。
另外,之所以选择在离线模式下创建文本以及目录,是因为在在线模式下,分布式文件系统的多个mds之间存在主从关系,主mds负责接收处理客户端client发送过来的文件系统语义请求,然后进行一系列检查并最终形成sub op分发给各个从mds;各个从mds需要严格按照主mds发送过来的sub op顺序(由于网络对subop不保序,因此需要引入全局version来对subop进行排序)持久化这些sub op,并在本地完成持久化后给主mds回复确认sub op完成。
而在离线模式下,数据填充工具可以对分布式文件系统的多个mds同时执行本地磁盘(数据库)写入操作,从而将需要写入的文件(数据库kv键值对)持久化到本地磁盘(数据库)中。换言之,在离线模式下,各个mds之间无需通信进行主从模式下的sub op分发、处理和确认,并且不依赖全局version就可以保证主从mds写入的文件(数据库kv键值对)严格一致,因为对本地磁盘(数据库)的写入没有经过网络层的传输,从而不会乱序。另外,现有技术中在线模式下写入文件时,只能是单一文件写入,写入效率较低,而本申请在离线模式下支持批量写入文件,从而提高了文件的写入效率,进而可以提升对分布式文件系统的测试效率。
由上述步骤S101至步骤S103的内容可知,在本申请中,采用先创建文件,然后从最后一层目录开始逐层向上的创建每一层的目录的方式,首先通过分布式文件系统接收文件创建请求,其中,文件创建请求用于在分布式文件系统中创建预设数量的文件以及容纳文件的目录,文件创建请求中至少包含目录深度、目录宽度以及初始文件序号,目录深度用于表征待创建的目录的层级数量,目录宽度用于表征每个目录包含的下一级目录的数量,初始文件序号用于对目录以及文件进行编号。然后在分布式文件系统处于离线模式时,根据目录深度、目录宽度以及预设数量确定目标文件结构,其中,目标文件结构用于表征待创建的多层目录之间的拓扑关系以及待创建的文件的目标数量,目标数量大于或等于预设数量。最后,根据目标文件结构在分布式文件系统中的数据库中创建目标数量的文件,并采用从最后一层目录开始逐层向上的方式创建每一层的目录,其中,目标数量的文件位于最后一层目录中,在创建每个目录的过程中,根据初始文件序号确定每个目录的目标序号。
由上述内容可知,本申请在分布式文件系统处于离线模式时,首先根据目录深度、目录宽度以及预设数量确定目标文件结构,然后基于目录文件结构先创建好文件,再从最后一层目录开始逐层向上的创建上层的父目录,在本申请的文件与目录创建过程中,每个目录都只需要更新一次即可,无需反复更新,从而解决了现有技术中在创建文件和目录时存在的上层父目录反复更新的问题,进而减少了文件和目录的创建时间,提高了文件和目录的创建效率。
由此可见,通过本申请的技术方案,达到了减少目录更新次数的目的,从而实现了提高目录和文件的创建效率的效果,进而解决了现有技术在分布式文件系统中创建文件以及目录时存在的创建效率低的技术问题。
在一种可选的实施例中,数据填充工具首先根据目录深度以及目录宽度确定构成目标文件结构的目录层数以及每层目录对应的目录数量,并确定目标文件结构中最后一层目录对应的目录数量为第一数量,然后数据填充工具根据第一数量与预设数量之间的大小关系确定待创建的文件的目标数量,并依据每层目录对应的目录数量、目录层数以及目标数量确定目标文件结构。其中,在最后一层目录中的每个目录所对应的文件数量相同。
可选的,如图2所示,目录深度与目录宽度限定了目标文件结构中目录的数量、目录的层数,以及具体的每个目录下子目录数量、每层目录中目录的数量。另外,在一个目录文件结构中最终确定的待创建的文件的目标数量可能会与文件创建请求中的预设数量不同,待创建的文件的目标数量与最后一层目录的目录数量(即第一数量)有关,并且出于文件均匀分布的原则,如果出现无法均匀分配的情形,则向上取整,保证每个最后一级目录中创建的文件数相同且总文件数不小于预设数量。
具体的,在第一数量大于或等于预设数量时,数据填充工具确定第一数量为目标数量;在第一数量小于预设数量时,数据填充工具计算预设数量与第一数量的比值,并在比值为整数时,计算比值与第一数量的乘积,得到目标数量;在比值为非整数时,数据填充工具计算目标整数与第一数量的乘积,得到目标数量,其中,目标整数为大于比值的最小整数。
举例而言,假设最后一层目录的数量为1024个,即第一数量为1024。如果预设数量也为1024个,则数据填充工具确定需要创建1024个文件,最后一层目录中的每个目录下有一个文件;如果预设数量为1000个,小于第一数量,则数据填充工具确定仍需要创建1024个文件,最后一层目录中的每个目录下有一个文件;如果预设数量为2048个,正好是第一数量的2倍,则数据填充工具确定需要创建1024*2=2048个文件,最后一层目录中的每个目录下有2个文件;如果预设数量为1025个,预设数量与第一数量的比值为1025/1024,该比值为非整数,则需要将该比值向上取整,得到目标整数为2,最后目标数量为1024*2=2048,即则数据填充工具确定需要创建1024*2=2048个文件,最后一层目录中的每个目录下有2个文件。
需要注意到的是,均匀分布文件的目的是为了提高测试效率,方便测试人员更好更快地统计测试结果。
在一种可选的实施例中,在创建每个目录的过程中,数据填充系统还会确定每个目录的所在层级以及每个目录在所在层级中的位置顺序,并根据所在层级以及位置顺序确定每个目录的序号,然后,数据填充系统根据序号以及初始文件序号确定每个目录的目标序号。
可选的,一个目录的名称由预设目录前缀、该目录所在层级以及该目录对应的序号组成。例如,在图2中,目录“dir_1_3”中的“dir”为预设目录前缀,“1”表示该目录在第“1”层(实际层数为第2层),“3”为该目录对应的序号。在图2中,目录层数为三层,分别为第“0”层、第“1”层以及第“2”层。
另外,本申请通过计算的方式确定每个目录的序号。具体分为以下情况,如图3所示:
步骤S301,在目录宽度大于1时,数据填充工具根据目录宽度、位置顺序、所在层级确定每个目录的序号。
在步骤S301中,目录宽度、位置顺序以及所在层级均为数值形式。
可选的,为了方便描述,以下使用current_depth表示目录或文件的所在层级(从0开始编码),current_width表示目录或文件所在层级的从左向右的位置顺序(从0开始编码),fcount_avg表示最后一层目录中每个目录下需要创建的文件数量。
如果目录宽度width>1,则通过公式index=(width^(current_depth+1)-1)/(width-1)-1+current_width计算得到目录的序号index,例如,以图2中的目录“dir_1_3”为例,该目录的所在层级current_depth为1,位置顺序current_width为1,目录宽度为2,则该目录的序号index=(2^(1+1)-1)/(2-1)-1+1=3。另外,以图2中的目录“dir_1_2”为例,该目录的所在层级current_depth为1,位置顺序current_width为0,目录宽度为2,则该目录的序号index=(2^(1+1)-1)/(2-1)-1+0=2。
步骤S302,在目录宽度等于1时,数据填充工具根据位置顺序以及所在层级确定每个目录的序号。
在步骤S302中,如果目录宽度width=1,则通过公式index=current_depth+current_width计算得到目录的序号index。
另外,在目录宽度等于0时,数据填充工具会确定目标值为每个文件的序号,其中,目标值用于表征位置顺序。具体的,如果目录宽度width=0,则通过公式index=current_width计算得到文件的序号index。
需要注意到的是,在得到一个目录的序号index之后,还需要根据公式file id=index+start_fileid得到该目录的目标序号,其中,file id为目标序号,start_fileid为初始文件序号。
在一种可选的实施例中,由于一个目录在数据库中的key为其父目录的目标序号+该目录本身的目标名称,因此,在创建一个目录时,还需要将其父目录的目标序号一并获取。具体的,如图4所示:
步骤S401,数据填充工具确定任意一个目录为目标目录。
步骤S402,在目标目录的所在层级为第一层时,数据填充工具确定目标目录的父目录的目标序号为1。
可选的,如果目标目录的所在层级current_depth为第“0”层,也就是目标文件结构中的第一层目录中,则说明该目录的父目录为root根目录,该目录的父目录的目标序号parent_file_id=1。其中,为了方便表示,将父目录的目标标号用parent_file_id表示。
步骤S403,在目标目录的所在层级为最后一层时,根据目标目录的所在层级、目标目录在所在层级的位置顺序以及第一文件数量确定目标目录的父目录的目标序号,
在步骤S403中,第一文件数量为最后一层目录中每个目录下所需要创建的文件数量,为了方便表示,将第一文件数量用fcount_avg表示。
如果目标目录的所在层级current_depth为最后一层,即current_depth=depth,则说明此时数据填充工具正在创建文件,目标目录的父目录的目录序号可通过公式parent_file_id=calculate_fileid(current_depth-1,current_width/fcount_avg)计算得到,其中,calculate_fileid表征的是将“current_depth-1”作为上述计算每个目录的目标序号的公式中的“current_depth”,将“current_width/fcount_avg”作为上述计算每个目录的目录序号的公式中的“current_width”,然后遵循上述计算每个目录的目录序号的公式进行计算的计算公式。举例而言,在求解一个目标目录的父目录时,如果目录宽度width>1,则通过公式index=(width^(current_depth-1+1)-1)/(width-1)-1+current_width/fcount_avg计算得到该目标目录的父目录的目标序号。
步骤S404,在目标目录的所在层级为中间层时,根据目录宽度、目标目录的所在层级以及目标目录在所在层级的位置顺序确定目标目录的父目录的目标序号。
在步骤S404,如果目标目录的所在层级current_depth<depth,则表示此时数据填充工具正在创建目录,目标目录的父目录的目录序号可通过公式parent_file_id=calculate_fileid(current_depth-1,current_width/width)计算得到,其中,这里的calculate_fileid表征的是将“current_depth-1”作为上述计算每个目录的目标序号的公式中的“current_depth”,将“current_width/width”作为上述计算每个目录的目录序号的公式中的“current_width”,然后遵循上述计算每个目录的目录序号的公式进行计算的计算公式。举例而言,在求解一个目标目录的父目录时,如果目录宽度width>1,则通过公式index=(width^(current_depth-1+1)-1)/(width-1)-1+current_width/width计算得到该目标目录的父目录的目标序号。
由上述内容可知,本申请通过计算的方式,不仅可以确定每个目录的目标序号,还可以确定每个目录的父目录的目标序号,从而能够确保生成每个目录对应的key值。
需要注意到的是,在本申请中,目录以“dir_”为前缀字符串,文件以“file_”为前缀字符串,其余部分为目录或文件所在层级+目录或文件的序号。其中,文件的序号确定过程与目录的序号确定过程相同,都是基于上述计算公式得到,因此,本申请不再对文件的序号确定过程进行赘述。
另外,还需要注意到的是,在现有技术中,在线模式下的多个mds之间存在主从关系,主mds需要在受保护的场景下,即在持有某个特定资源锁时才能分配目录的目录序号,目的是避免一个目录序号分配给多个文件(硬链接文件除外),从而可能导致主mds内部在client创建目录或者文件压力较大时,存在严重的锁竞争,影响填充效率。
而在本申请中,在离线模式下,从初始文件序号开始,依次为新创建的目录和文件分配目标序号,无需加锁保护,从而能够避免由于锁竞争的影响导致的文件和目录创建效率低的问题。
在一种可选的实施例中,在确定任意一个目录为目标目录之后,数据填充工具还会根据目标目录的所在层级以及目录深度确定第一数值,其中,第一数值用于确定子目录总数量,子目录总数量为目标目录的所有子目录的数量。在目录宽度大于1时,数据填充工具根据第一数值以及目录宽度确定子目录总数量;在目录宽度为1时,数据填充工具确定第一数值为子目录总数量的值。
可选的,由于在目录对应的value中还会记录该目录下包含的数据总量以及该目录在分布式文件系统中占用的总逻辑空间等信息,其中,数据总量为该目录中各种类型的数据的数量之和,各种类型的数据包括但不限于子目录以及文件。因此,为了得到数据总量,数据填充工具需要统计每个目录下的所有的子目录数量。具体的,当目标目录的所在层级current_depth<depth,表示此时数据填充工具正在创建目录,数据填充工具会根据公式steps=depth-current_depth–1计算得到第一数值steps。如果目录宽度width>1,则目标目录的子目录总数量dirs=(width^(steps+1)-1)/(width-1)-1。例如,仍以图2中的目录“dir_1_3”为例,width=2,depth=3,该目录的“current_depth”=1,则第一数值steps=depth-current_depth-1=3-1-1=1,子目录总数量dirs=(width^(steps+1)-1)/(width-1)-1=(2^(1+1)-1)/(2-1)-1=2,因此,目录“dir_1_3”包含的子目录总数量为2个,分别为“dir_2_8”、“dir_2_9”。另外,以目录“dir_0_0”为例,该目录的“current_depth”=0,则第一数值steps=depth-current_depth–1=3-0-1=2,子目录总数量dirs = (width^(steps+1)-1) / (width-1) -1= (2^(2+1)-1) / (2-1)-1=6,因此,目录“dir_0_0”包含的子目录总数量为6个,分别为“dir_1_2”、“dir_1_3”、“dir_2_6”、“dir_2_7”、“dir_2_8”、“dir_2_9”。同理,目录“dir_0_1”也包含6个子目录,分别为“dir_1_4”、“dir_1_5”、“dir_2_10”、“dir_2_11”、“dir_2_12”、“dir_2_13”。
另外,如果目录宽度width=1,则目标目录的子目录总数量dirs=steps。
在一种可选的实施例中,在根据目标目录的所在层级以及目录深度确定第一数值之后,数据填充工具根据第一数值、目录深度以及第一文件数量确定目标目录中包含的文件总数量,并获取单位逻辑空间,其中,单位逻辑空间用于表征一个文件在分布式文件系统中所占用的虚拟空间容量。最后,数据填充工具根据单位逻辑空间以及文件总数量确定目标目录在分布式文件系统中占用的总逻辑空间。
可选的,为了得到数据总量以及总逻辑空间等信息,数据填充工具还会统计每个目录下的所有的文件数量以及该目录在分布式文件系统中占用的总逻辑空间。其中,逻辑空间与物理空间相对应,以单位逻辑空间为例,一个文件在磁盘中所占用的物理空间表征了该文件在磁盘中实际占用的空间容量,例如1个字节,但是单位逻辑空间并不是真实存在的,而是一种虚拟化的空间容量,例如,可以定义一个文件在分布式文件系统中所占用的虚拟空间容量为1G,也可以定义为2G。单位逻辑空间可以方便管理人员对分布式文件系统中的文件进行管理。
结合上述的第一文件数量fcount_avg,数据填充工具可以根据公式files=(width^steps)*fcount_avg计算得到一个目标目录下包含的所有文件的文件总数量,以图2中的目录“dir_0_0”为例,width=2,steps=2,fcount_avg=1,则files=(width^steps)*fcount_avg=files=(2^2)*1=4,即目录“dir_0_0”下包含有4个文件,分别为“file_3_14”、“file_3_15”、“file_3_16”、“file_3_17”。同理,目录“dir_0_1”下也包含有4个文件,分别为“file_3_18”、“file_3_19”、“file_3_20”、“file_3_21”。
进一步地,单位逻辑空间可以用file_size表示,在得到一个目标目录中包含的文件总数量,通过公式total_amount_space=files*file_size即可计算得到该目标目录在分布式文件系统中占用的总逻辑空间total_amount_space。容易理解的是,目录本身不占用逻辑空间,只有文件才会占用逻辑空间。
需要注意到的是,在线模式时,现有技术在分布式文件系统中每创建一个目录或文件,都需要实时向上逐层更新父目录的统计信息,包括该父目录拥有的子目录数量和文件数量以及占用的总逻辑空间,目录层级越深,涉及的需要修改的父目录就越多,严重影响填充效率。
而在本申请的技术中,选择在离线模式下,通过计算可以准确地知道某个目录包含的子目录数量和文件总数,以及占用的总逻辑空间,进而可以采用从最后一层逐层向上的方式创建目录和文件,并且在创建目录时就通过计算得到每个目录下的子目录数量、文件总数以及占用的总逻辑空间,这样该目录只会被更新一次,从而达到提升填充效率的效果。
在一种可选的实施例中,在创建目标数量的文件以及每一层的目录时,数据填充工具还会检测分布式文件系统是否出现重启,在分布式文件系统出现重启并且重启成功时,数据填充工具会将已经创建完成的文件和目录进行覆盖,并继续写入新的文件以及目录。
可选的,本申请中数据填充工具具有可重入的填充功能,如果是现有技术的在线创建方式,当文件或者目录的创建过程中断并且重启之后,需要重新判断当前应该创建哪一个文件或目录了,而判断的过程会消耗较大的资源,并且降低了创建效率。
而在本申请中,当某一个mds进行离线填充时,如果机器发生了宕机,在机器重启之后,mds可以重新执行文件创建命令,对于已经创建的文件和目录,mds会直接将其进行覆盖,因此,在分布式文件系统中不会存在旧的目录、文件或者多余的目录、文件。
另外,需要注意到的是,在线模式下,多个mds之间存在主从关系,主mds负责接收处理客户端client的文件系统语义的请求,在创建目录或者文件时,现有技术首先需要检查待创建目录和文件所在父目录是否有权限创建目录和文件;然后检查是否有同名目录和文件,判断的逻辑是检查内存缓存中是否有同名目录项,如果内存缓存没有命中,则需要从磁盘(数据库)中读取,如果磁盘(数据库)命中则插入内存缓存,没有命中则表示该目录下没有该目录和文件,可以进行创建。
由上述内容可知,为了创建目录和文件,现有技术需要进行权限检查以及磁盘(数据库)读取操作,这将严重影响填充文件的效率。
而在本申请中,在离线模式下,待填充的目录和文件一定不存在(重入场景下,所有存在的文件都会被完全覆盖,因此可以视为不存在)。因此,依据本申请的技术方案,没有必要再进行权限检查以及是否存在同名目录和文件的检查,数据填充工具可以直接在数据库中创建文件和目录,从而进一步地提高了文件和目录的创建效率。
在一种可选的实施例中,数据填充工具可支持无目录创建文件,即depth=0,在root目录下直接创建文件。同时,数据填充工具还支持只创建目录,不创建文件的工作模式。在创建目录和文件时,数据填充工具批量地将目录和文件写入磁盘(数据库)中,从而提高填充效率。此外,在创建大量目录和文件时,数据填充工具可以计算并展示创建进度信息,同时在创建完成时,给出创建的目录总数和文件总数。
另外,在每次批量写入完成时,数据填充工具还会记录已经完成的文件和目录总量,同时需要填充的目录和文件总数是可计算的,规则如下:
如果depth=0,表示没有目录结构,则目录总量为0;如果depth>0,并且width>1,则目录总量=(width^(depth+1)-1)/(width-1)–1;如果depth>0,并且width=1,则目录总量=depth。
进一步地,如果depth=0,表示没有目录结构,则文件总量为fcount;如果depth>0,则文件总量=(width^depth)*fcount_avg。
由此可见,通过计算并展示目录和文件的创建进度信息,可以方便测试人员时刻了解创建过程,进而提高分布式文件系统的测试效率。
实施例2
根据本申请实施例,还提供了一种文件创建装置实施例,其中,图5是根据本申请实施例的一种可选的文件创建装置的示意图,如图5所示,该装置包括:接收模块501,用于通过分布式文件系统接收文件创建请求,其中,文件创建请求用于在分布式文件系统中创建预设数量的文件以及容纳文件的目录,文件创建请求中至少包含目录深度、目录宽度以及初始文件序号,目录深度用于表征待创建的目录的层级数量,目录宽度用于表征每个目录包含的下一级目录的数量,初始文件序号用于对目录以及文件进行编号;确定模块502,用于在分布式文件系统处于离线模式时,根据目录深度、目录宽度以及预设数量确定目标文件结构,其中,目标文件结构用于表征待创建的多层目录之间的拓扑关系以及待创建的文件的目标数量,目标数量大于或等于预设数量;创建模块503,用于根据目标文件结构在分布式文件系统中的数据库中创建目标数量的文件,并采用从最后一层目录开始逐层向上的方式创建每一层的目录,其中,目标数量的文件位于最后一层目录中,在创建每个目录的过程中,根据初始文件序号确定每个目录的目标序号。
需要说明的是,上述接收模块501、确定模块502、以及创建模块503对应于上述实施例1中的步骤S101至步骤S103,三个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例1所公开的内容。
可选的,上述确定模块还包括:第一确定单元、第二确定单元、第三确定单元以及第四确定单元。其中,第一确定单元,用于根据目录深度以及目录宽度确定构成目标文件结构的目录层数以及每层目录对应的目录数量;第二确定单元,用于确定目标文件结构中最后一层目录对应的目录数量为第一数量;第三确定单元,用于根据第一数量与预设数量之间的大小关系确定待创建的文件的目标数量,其中,在最后一层目录中的每个目录所对应的文件数量相同;第四确定单元,用于依据每层目录对应的目录数量、目录层数以及目标数量确定目标文件结构。
可选的,上述的第三确定单元还包括:第一确定子单元、第一计算子单元、第二计算子单元以及第三计算子单元。其中,第一确定子单元,用于在第一数量大于或等于预设数量时,确定第一数量为目标数量;第一计算子单元,用于在第一数量小于预设数量时,计算预设数量与第一数量的比值;第二计算子单元,用于在比值为整数时,计算比值与第一数量的乘积,得到目标数量;第三计算子单元,用于在比值为非整数时,计算目标整数与第一数量的乘积,得到目标数量,其中,目标整数为大于比值的最小整数。
可选的,上述创建模块还包括:第五确定单元、第六确定单元、第七确定单元以及第八确定单元。其中,第五确定单元,用于确定每个目录的所在层级以及每个目录在所在层级中的位置顺序;第六确定单元,用于根据所在层级以及位置顺序确定每个目录的序号;第七确定单元,用于根据序号以及初始文件序号确定每个目录的目标序号。
可选的,上述的第六确定单元还包括:第二确定子单元、第三确定子单元以及第四确定子单元。其中,第二确定子单元,用于在目录宽度大于1时,根据目录宽度、位置顺序、所在层级确定每个目录的序号,其中,目录宽度、位置顺序以及所在层级均为数值形式;第三确定子单元,用于在目录宽度等于1时,根据位置顺序以及所在层级确定每个目录的序号。
可选的,文件创建装置还包括:第一确定模块、第二确定模块、第三确定模块以及第四确定模块。其中,第一确定模块,用于确定任意一个目录为目标目录;第二确定模块,用于在目标目录的所在层级为第一层时,确定目标目录的父目录的目标序号为1;第三确定模块,用于在目标目录的所在层级为最后一层时,根据目标目录的所在层级、目标目录在所在层级的位置顺序以及第一文件数量确定目标目录的父目录的目标序号,其中,第一文件数量为最后一层目录中每个目录下所需要创建的文件数量;第四确定模块,用于在目标目录的所在层级为中间层时,根据目录宽度、目标目录的所在层级以及目标目录在所在层级的位置顺序确定目标目录的父目录的目标序号。
可选的,文件创建装置还包括:第五确定模块、第六确定模块以及第七确定模块。其中,第五确定模块,用于根据目标目录的所在层级以及目录深度确定第一数值,其中,第一数值用于确定子目录总数量,子目录总数量为目标目录的所有子目录的数量;第六确定模块,用于在目录宽度大于1时,根据第一数值以及目录宽度确定子目录总数量;第七确定模块,用于在目录宽度为1时,确定第一数值为子目录总数量的值。
可选的,文件创建装置还包括:第八确定模块、获取模块以及第九确定模块。其中,第八确定模块,用于根据第一数值、目录深度以及第一文件数量确定目标目录中包含的文件总数量;获取模块,用于获取单位逻辑空间,其中,单位逻辑空间用于表征一个文件在分布式文件系统中所占用的虚拟空间容量;第九确定模块,用于根据单位逻辑空间以及文件总数量确定目标目录在分布式文件系统中占用的总逻辑空间。
可选的,文件创建装置还包括:检测模块以及覆盖写入模块,其中,检测模块,用于在创建目标数量的文件以及每一层的目录时,检测分布式文件系统是否出现重启;覆盖写入模块,用于在分布式文件系统出现重启并且重启成功时,将已经创建完成的文件和目录进行覆盖,并继续写入新的文件以及目录。
实施例3
根据本申请实施例,还提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,其中,计算机程序被设置为运行时执行上述实施例1中的文件创建方法。
实施例4
根据本申请实施例,还提供了一种电子设备实施例,其中,电子设备包括一个或多个处理器和存储器,存储器用于存储一个或多个程序,其中,当一个或多个程序被一个或多个处理器执行时,使得一个或多个处理器实现上述实施例1中的文件创建方法。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (12)
1.一种文件创建方法,其特征在于,包括:
通过分布式文件系统接收文件创建请求,其中,所述文件创建请求用于在所述分布式文件系统中创建预设数量的文件以及容纳所述文件的目录,所述文件创建请求中至少包含目录深度、目录宽度以及初始文件序号,所述目录深度用于表征待创建的目录的层级数量,所述目录宽度用于表征每个目录包含的下一级目录的数量,所述初始文件序号用于对所述目录以及文件进行编号;
在所述分布式文件系统处于离线模式时,根据所述目录深度、所述目录宽度以及所述预设数量确定目标文件结构,其中,所述目标文件结构用于表征待创建的多层目录之间的拓扑关系以及待创建的文件的目标数量,所述目标数量大于或等于所述预设数量;
根据所述目标文件结构在所述分布式文件系统中的数据库中创建所述目标数量的文件,并采用从最后一层目录开始逐层向上的方式创建每一层的目录,其中,所述目标数量的文件位于所述最后一层目录中,在创建每个目录的过程中,根据所述初始文件序号确定所述每个目录的目标序号。
2.根据权利要求1所述的方法,其特征在于,根据所述目录深度、所述目录宽度以及所述预设数量确定目标文件结构,包括:
根据所述目录深度以及所述目录宽度确定构成所述目标文件结构的目录层数以及每层目录对应的目录数量;
确定所述目标文件结构中最后一层目录对应的目录数量为第一数量;
根据所述第一数量与所述预设数量之间的大小关系确定所述待创建的文件的目标数量,其中,在所述最后一层目录中的每个目录所对应的文件数量相同;
依据所述每层目录对应的目录数量、所述目录层数以及所述目标数量确定所述目标文件结构。
3.根据权利要求2所述的方法,其特征在于,根据所述第一数量与所述预设数量之间的大小关系确定所述待创建的文件的目标数量,包括:
在所述第一数量大于或等于所述预设数量时,确定所述第一数量为所述目标数量;
在所述第一数量小于所述预设数量时,计算所述预设数量与所述第一数量的比值;
在所述比值为整数时,计算所述比值与所述第一数量的乘积,得到所述目标数量;
在所述比值为非整数时,计算目标整数与所述第一数量的乘积,得到所述目标数量,其中,所述目标整数为大于所述比值的最小整数。
4.根据权利要求1所述的方法,其特征在于,在创建每个目录的过程中,根据所述初始文件序号确定所述每个目录的目标序号,包括:
确定所述每个目录的所在层级以及所述每个目录在所述所在层级中的位置顺序;
根据所述所在层级以及所述位置顺序确定所述每个目录的序号;
根据所述序号以及所述初始文件序号确定所述每个目录的目标序号。
5.根据权利要求4所述的方法,其特征在于,根据所述所在层级以及所述位置顺序确定所述每个目录的序号,包括:
在所述目录宽度大于1时,根据所述目录宽度、所述位置顺序、所述所在层级确定所述每个目录的序号,其中,所述目录宽度、所述位置顺序以及所述所在层级均为数值形式;
在所述目录宽度等于1时,根据所述位置顺序以及所述所在层级确定所述每个目录的序号。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
确定任意一个目录为目标目录;
在所述目标目录的所在层级为第一层时,确定所述目标目录的父目录的目标序号为1;
在所述目标目录的所在层级为最后一层时,根据所述目标目录的所在层级、所述目标目录在所在层级的位置顺序以及第一文件数量确定所述目标目录的父目录的目标序号,其中,所述第一文件数量为最后一层目录中每个目录下所需要创建的文件数量;
在所述目标目录的所在层级为中间层时,根据所述目录宽度、所述目标目录的所在层级以及所述目标目录在所在层级的位置顺序确定所述目标目录的父目录的目标序号。
7.根据权利要求6所述的方法,其特征在于,在确定任意一个目录为目标目录之后,所述方法还包括:
根据所述目标目录的所在层级以及所述目录深度确定第一数值,其中,所述第一数值用于确定子目录总数量,所述子目录总数量为所述目标目录的所有子目录的数量;
在所述目录宽度大于1时,根据所述第一数值以及所述目录宽度确定所述子目录总数量;
在所述目录宽度为1时,确定所述第一数值为所述子目录总数量的值。
8.根据权利要求7所述的方法,其特征在于,在根据所述目标目录的所在层级以及所述目录深度确定第一数值之后,所述方法还包括:
根据所述第一数值、所述目录深度以及所述第一文件数量确定所述目标目录中包含的文件总数量;
获取单位逻辑空间,其中,所述单位逻辑空间用于表征一个文件在所述分布式文件系统中所占用的虚拟空间容量;
根据所述单位逻辑空间以及所述文件总数量确定所述目标目录在所述分布式文件系统中占用的总逻辑空间。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在创建所述目标数量的文件以及所述每一层的目录时,检测所述分布式文件系统是否出现重启;
在所述分布式文件系统出现重启并且重启成功时,将已经创建完成的文件和目录进行覆盖,并继续写入新的文件以及目录。
10.一种文件创建装置,其特征在于,包括:
接收模块,用于通过分布式文件系统接收文件创建请求,其中,所述文件创建请求用于在所述分布式文件系统中创建预设数量的文件以及容纳所述文件的目录,所述文件创建请求中至少包含目录深度、目录宽度以及初始文件序号,所述目录深度用于表征待创建的目录的层级数量,所述目录宽度用于表征每个目录包含的下一级目录的数量,所述初始文件序号用于对所述目录以及文件进行编号;
确定模块,用于在所述分布式文件系统处于离线模式时,根据所述目录深度、所述目录宽度以及所述预设数量确定目标文件结构,其中,所述目标文件结构用于表征待创建的多层目录之间的拓扑关系以及待创建的文件的目标数量,所述目标数量大于或等于所述预设数量;
创建模块,用于根据所述目标文件结构在所述分布式文件系统中的数据库中创建所述目标数量的文件,并采用从最后一层目录开始逐层向上的方式创建每一层的目录,其中,所述目标数量的文件位于所述最后一层目录中,在创建每个目录的过程中,根据所述初始文件序号确定所述每个目录的目标序号。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行所述权利要求1至9任一项中所述的文件创建方法。
12.一种电子设备,其特征在于,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现权利要求1至9中任意一项所述的文件创建方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211079457.7A CN115422137A (zh) | 2022-09-05 | 2022-09-05 | 文件创建方法、装置、电子设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211079457.7A CN115422137A (zh) | 2022-09-05 | 2022-09-05 | 文件创建方法、装置、电子设备及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115422137A true CN115422137A (zh) | 2022-12-02 |
Family
ID=84202899
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211079457.7A Pending CN115422137A (zh) | 2022-09-05 | 2022-09-05 | 文件创建方法、装置、电子设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115422137A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115794749A (zh) * | 2023-01-30 | 2023-03-14 | 广州市刑事科学技术研究所 | 移动终端数据提取方法、装置、设备和存储介质 |
-
2022
- 2022-09-05 CN CN202211079457.7A patent/CN115422137A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115794749A (zh) * | 2023-01-30 | 2023-03-14 | 广州市刑事科学技术研究所 | 移动终端数据提取方法、装置、设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110531940B (zh) | 视频文件处理方法及装置 | |
US7827375B2 (en) | Defensive heap memory management | |
US7181585B2 (en) | Defensive heap memory management | |
US10248556B2 (en) | Forward-only paged data storage management where virtual cursor moves in only one direction from header of a session to data field of the session | |
US8600939B2 (en) | Writable snapshots | |
US7139781B2 (en) | Managing filesystem versions | |
US8972345B1 (en) | Modifying data structures in distributed file systems | |
CN106326229B (zh) | 一种嵌入式系统的文件存储方法和装置 | |
US7899795B1 (en) | Method and system for recovering lost data volumes | |
KR20110050452A (ko) | 가상 디스크를 포함하는 컴퓨터의 복구 | |
CN108733311B (zh) | 用于管理存储系统的方法和设备 | |
US10013312B2 (en) | Method and system for a safe archiving of data | |
US9921765B2 (en) | Partial snapshots in virtualized environments | |
US9286320B2 (en) | System and method for maintaining consistency among metadata elements of filesystem's logical objects | |
CN110399333B (zh) | 删除快照的方法、设备和计算机程序产品 | |
CN113568582B (zh) | 数据管理方法、装置和存储设备 | |
CN111367926A (zh) | 分布式系统的数据处理方法和装置 | |
CN115422137A (zh) | 文件创建方法、装置、电子设备及计算机可读存储介质 | |
CN110245129B (zh) | 一种分布式全局数据去重方法和装置 | |
CN109508140B (zh) | 存储资源管理方法、装置、电子设备及电子设备、系统 | |
CN106557263B (zh) | 用于在数据块删除中检查伪共享的方法及设备 | |
WO2008029146A1 (en) | A distributed file system operable with a plurality of different operating systems | |
CN108271420A (zh) | 管理文件的方法、文件系统和服务器系统 | |
CN113553215A (zh) | 一种基于环境信息的纠删码数据恢复优化方法及装置 | |
Yuan et al. | Comprehensive evaluation of file systems robustness with SPIN model checking |
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 |