首页> 中国专利> 一种指定目录下的对象列举方法、装置及其介质

一种指定目录下的对象列举方法、装置及其介质

摘要

本申请公开了一种指定目录下的对象列举方法、装置及其介质,涉及对象存储技术领域,用于进行指定目录下的对象列举。针对目前的对象列举方法效率低的问题,提供了一种指定目录下的对象列举方法,通过使用hash_map存储目录名与该目录下存储对象的存储位置之间的映射关系,使得在进行对象列举时,能根据指定目录名的哈希值确定对应的key,遍历所有与key对应的value,获取对象于索引对象的位置,访问该位置上的对象名称,并作为列举结果返回。这种方式只需进行一次遍历即可获得列举结果,相对于目前所使用的双层遍历的方式,时间复杂度更低,从而提高对象列举的效率,并且在数据量越大时,效率提升的越明显。

著录项

  • 公开/公告号CN114861003A

    专利类型发明专利

  • 公开/公告日2022-08-05

    原文格式PDF

  • 申请/专利权人 济南浪潮数据技术有限公司;

    申请/专利号CN202210446439.1

  • 发明设计人 袁圣骐;赵煜;

    申请日2022-04-26

  • 分类号G06F16/901(2019.01);G06F16/903(2019.01);

  • 代理机构北京集佳知识产权代理有限公司 11227;

  • 代理人刘珂

  • 地址 250101 山东省济南市中国(山东)自由贸易试验区济南片区浪潮路1036号浪潮科技园S05楼S311室

  • 入库时间 2023-06-19 16:17:34

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-08-23

    实质审查的生效 IPC(主分类):G06F16/901 专利申请号:2022104464391 申请日:20220426

    实质审查的生效

  • 2022-08-05

    公开

    发明专利申请公布

说明书

技术领域

本申请涉及对象存储技术领域,特别是涉及一种指定目录下的对象列举方法、装置及其介质。

背景技术

随着互联网的快速发展,互联网数据量也变得越来越大,高效的存储数据成为了一个核心问题。为了应对海量数据场景,分布式对象存储逐渐受到广泛的应用。在对象存储中,当用户需要对数据进行分类存储时,会通过建立分类目录来对大量数据进行分类处理,相应的,访问、搜索对象时也就需要对指定分类目录进行列举操作。

目前,通常使用两层遍历的方法进行对指定目录下所有对象的列举。由于对象存储会在创建存储桶时创建指定个数的索引对象,在上传存储对象又会将对象名和对象的属性通过哈希(hash)的方式存储在桶索引的object map(omap)的键值对(key-value)中,因此遍历桶内对象时主要通过遍历索引池内所有索引对象上的omap实现。在列举目录时,首先遍历存储桶内所有的索引对象,再遍历每个索引对象omap上的所有对象,以列举出指定目录内的所有对象。

object map:用于将元数据保存在本地文件系统之外的独立key-value存储系统中。

由于每次遍历的时间复杂度都为线性阶(即时间复杂度为O(n)),所以整个通过双层遍历的方法进行列举的时间复杂度为O(n

所以,现在本领域的技术人员亟需要一种指定目录下的对象列举方法,解决目前在进行指定目录下的对象列举时耗时长,进而影响用户使用体验的问题。

发明内容

本申请的目的是提供一种指定目录下的对象列举方法、装置及其介质,解决目前在进行指定目录下的对象列举时耗时长,进而影响用户使用体验的问题。

为解决上述技术问题,本申请提供一种指定目录下的对象列举方法,包括:

在内存中创建hash_map;

接收对象存储请求;其中,对象存储请求包括对象名称和存储地址;存储地址为对象于某个索引对象的omap上的位置;

解析对象名称,以获得对象的目录前缀;

根据目录前缀确定对应的哈希值;

将目录前缀对应的哈希值作为key、存储地址作为value,存储于hash_map中。

优选地,还包括:

接收对象列举请求,对象列举请求包括指定目录名;

根据指定目录名确定对应的哈希值;

根据指定目录名对应的哈希值迭代访问hash_map,得到对应的存储地址;

根据存储地址确定对应的对象于索引对象的omap上的位置,并获取对象的对象名称作为列举结果返回。

优选地,将目录前缀对应的哈希值作为key、存储地址作为value,存储于hash_map中包括:判断hash_map中是否存在key;若存在,则将value以链表的形式插入到对应的key下;若不存在,则新建对应的key-value存储于hash_map中。

优选地,对象名称的命名格式为文件目录形式,则解析对象名称,以获得对象的目录前缀包括:确定对象名称中的最后一个分隔符,将分隔符之前对象名称作为目录前缀。

优选地,在根据指定目录名对应的哈希值迭代访问hash_map之后,还包括:若hash_map中不存在与指定目录名对应的key,则返回错误信息。

优选地,其特征在于,还包括:获取接收到对象列举请求至获取对象的对象名称作为列举结果返回所用的时长;当时长超过预设的时间阈值时,返回超时提示信息。

优选地,还包括:当时长超过预设的时间阈值时,获取当前对象列举请求中的指定目录名并存储。

为解决上述技术问题,本申请还提供一种指定目录下的对象列举装置,包括:

创建模块,用于在内存中创建hash_map;

接收模块,用于接收对象存储请求;其中,对象存储请求包括对象名称和存储地址;存储地址为对象于某个索引对象的omap上的位置;

解析模块,用于解析对象名称,以获得对象的目录前缀;

确定模块,用于根据目录前缀确定对应的哈希值;

存储模块,用于将目录前缀对应的哈希值作为key、存储地址作为value,存储于hash_map中。

优选地,还包括:

列举模块,用于接收对象列举请求,对象列举请求包括指定目录名;根据指定目录名确定对应的哈希值;根据指定目录名对应的哈希值迭代访问hash_map,得到对应的存储地址;根据存储地址确定对应的对象于索引对象的omap上的位置,并获取对象的对象名称作为列举结果返回。

报错模块,用于若hash_map中不存在与指定目录名对应的key,则返回错误信息。

提示模块,用于获取接收到对象列举请求至获取对象的对象名称作为列举结果返回所用的时长;当时长超过预设的时间阈值时,返回超时提示信息。

记录模块,用于当时长超过预设的时间阈值时,获取当前对象列举请求中的指定目录名并存储。

为解决上述技术问题,本申请还提供一种指定目录下的对象列举装置,包括:

存储器,用于存储计算机程序;

处理器,用于执行计算机程序时实现如上述的指定目录下的对象列举方法的步骤。

为解决上述技术问题,本申请还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述的指定目录下的对象列举方法的步骤。

本申请提供的一种指定目录下的对象列举方法,通过使用hash_map存储目录名与该目录下存储对象的存储位置之间的映射关系,使得在进行对象列举时,能根据指定目录名唯一确定的哈希值,找到对应的key,遍历与key对应的所有value,获取对象于索引对象的位置,访问该位置上的对象名称,并作为列举结果返回。这种方式只需进行一次遍历即可获得列举结果,时间复杂度为O(n),相对于目前所使用的双层遍历的方式,时间复杂度要大大降低,从而提高对象列举的效率,并且在数据量越大时,效率提升的越明显。

本申请提供的一种指定目录下的对象列举装置、及计算机可读存储介质,与上述方法对应,效果同上。

附图说明

为了更清楚地说明本申请实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的一种指定目录下的对象列举方法的流程图;

图2为本发明提供的另一种指定目录下的对象列举方法的流程图;

图3为本发明提供的一种指定目录下的对象列举装置的结构图;

图4为本发明提供的另一种指定目录下的对象列举装置的结构图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本申请保护范围。

本申请的核心是提供一种指定目录下的对象列举方法、装置及其介质。

为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。

目前在进行对象存储时,首先要创建一个存储桶用于存储对象;每个存储桶被创建后还会创建一定个数的索引对象(默认为128个);每个索引对象上存储了omap,被存储对象以哈希的方式将对象名和对象属性存储于omap中;omap的key为被存储对象的对象名称,value为被存储对象的元数据属性,包括大小、上传时间等。

需要进行说明的是,被存储对象的对象名称包含该对象的目录前缀和对象文件名,以文件目录命名格式的对象名称为例,对象名称为:/1级目录/2级目录/…/n级目录/对象文件名。其中,以最后一个分隔符/为界,分隔符之前的部分/1级目录/2级目录/…/n级目录为目录前缀;分隔符之后的部分为对象文件名。

所以,目前所使用的双层遍历方法要列举出指定目录下的所有对象,首先要遍历一遍所有索引对象,每个索引对象还要再遍历其omap上存储的所有对象,以找到目录前缀为指定目录的所有对象,也即为一种双层遍历的列举方式。由于一次遍历的时间复杂度为O(n),所以双层遍历的时间复杂度为O(n

因此,为解决上述问题,如图1所示,本申请提供了一种指定目录下的对象列举方法,包括:

S11:在内存中创建hash_map。

hash_map是一种基于哈希表实现的map结构,通过键值对(也即key-value)的形式对数据进行存储,且value为链表结构,当同一key下存在多个value的情况时,具有数组查找快速的优点。

需要进行说明的是,上述步骤是于内存中创建hash_map,其目的是为了保证指定目录下对象的列举效率,为一种优选方案。但从方案的实现角度上来看,于外置存储介质中创建hash_map同样可以实现降低指定目录下对象列举的时间复杂度的效果。

S12:接收对象存储请求。

其中,对象存储请求包括对象名称和存储地址;存储地址为对象于某个索引对象的omap上的位置。

S13:解析对象名称,以获得对象的目录前缀。

也即确定出对象名称中何部分为目录前缀,何部分为对象文件名。对于以文件目录格式进行命名的对象名称来说,一种优选的实施方案为:

确定对象名称中的最后一个分隔符,将分隔符之前对象名称作为目录前缀。

通过上述的优选方案可以确定对象的目录前缀,实现简单,且所占用的系统资源较少。

S14:根据目录前缀确定对应的哈希值。

在确定目录前缀之后,就可以根据目录前缀,通过哈希算法,确定一个唯一的哈希值,进而在后续检索与指定目录名一致的目录前缀时,可以通过唯一对应的哈希值来准确地获取。

S15:将目录前缀对应的哈希值作为key、存储地址作为value,存储于hash_map中。

因为hash_map中的value为链表结构,所以本实施例还提供一种优选的实施方案,步骤S15进一步包括:

判断hash_map中是否存在key,若存在,则将value以链表的形式插入到对应的key下,若不存在,则新建对应的key-value存储于hash_map中。

上述的实施方案所提供的方法利用了hash_map中的value为链表结构所具有的链表插入、删除数据高效的优点,当新存入的对象的key已有的情况下,之间将其value插入到对应的key下,方法实现简单且数据存储高效,在多对象存储时对于key-value的映射关系构建也更为快速,减少对存储系统性能的影响。

本申请所提供的一种指定目录下的对象列举方法,通过建立hash_map,将被存储对象的目录前缀以哈希值的形式作为key进行存储,其存储地址作为value存储于对应的key下。进而在进行指定目录下对象的列举时,可以根据指定目录名确定哈希值,进而检索到唯一的key。这一步骤的时间复杂度为O(1)。之后仅需遍历一遍对应key下的所有value,从而获取指定目录下所有对象的存储地址,通过访问对象获取对象名称并作为列举结果返回。整个列举过程仅需进行一次遍历,时间复杂度为O(n)。相对于目前双层遍历的方式要大大提高列举效率,尤其在存储对象多、数据量大时,其列举效率提升的效果就越发明显。

由上述可知,在对象上传存储时,通过计算其目录前缀的哈希值作为key存储于hash_map中,可以在列举时提高效率。所以,为进一步说明本申请所提供的一种指定目录下的对象列举方法,下面关于实际应用场景中收到指定目录下对象的列举请求时,对本方法进行说明:

如图2所示,当用户通过接口调用或直接于本机上输入对象列举请求后,本方法还包括:

S21:接收对象列举请求。

对象列举请求包括指定目录名,也即本次列举需要对指定目录名下的所有对象进行列举。

S22:根据指定目录名确定对应的哈希值。

将指定目录名进行哈希计算,以得到唯一对应的哈希值。

S23:根据指定目录名对应的哈希值迭代访问hash_map,得到对应的存储地址。

通过步骤S22获得的哈希值,迭代访问hash_map,可以检索到唯一对应的key,进而遍历该key下对应的所有value,以获取指定目录名下所有对象的存储地址。

S24:根据存储地址确定对应的对象于索引对象的omap上的位置,并获取对象的对象名称作为列举结果返回。

根据步骤S23中获取的所有存储地址,一一进行访问,以获得对应的所有对象的对象名称,将其作为列举结果返回,已完成整个指定目录名下对象列举过程。

另外,若进行对象列举时,指定目录名下无对象存储时,hash_map中也就不会存在与指定目录名哈希值相同的key,对应的,在上述情况下,本方法还包括:

S25:若hash_map中不存在与指定目录名对应的key,则返回错误信息。

若根据接收到的指定目录名确定的哈希值,没有检索到hash_map中对应的key,说明该指定目录下没有对象,造成上述情况出现的原因有二,其一为用户发送了错误的对象列举请求,其二为在进行对应对象存储时出现了错误,这两种原因都需要返回错误信息以告知用户,避免因长时间等待而得不到结果所导致的影响用户体验。

本实施例通过对接收到对象列举请求时进行进一步说明,提供一种指定目录下的对象列举方法,根据对象列举请求中的指定目录名确定唯一的哈希值,进而根据哈希值迭代访问hash_map,检索到唯一对应的key。之后遍历该key下的所有value,获取所有对象的存储地址,最后根据获得到的存储地址,一一进行访问并获得对象的对象名称,并作为列举结果返回,完成整个列举过程。整个列举过程的仅需进行一次遍历,时间复杂度为O(n),相对于现有方法O(n

由上述实施例可知,本申请所提供一种指定目录下的对象列举方法降低了列举过程的时间复杂度,使得提高了列举效率,尤其在对象数量大时,列举效率提升的效果越明显,所以可以有效的控制列举指定目录下对象的时间。因此,如图2所示,本实施例还提供一种优选的实施方案,本方法还包括:

S26:获取接收到对象列举请求至获取对象的对象名称作为列举结果返回所用的时长。

S27:判断返回列举结果所用的时长是否超过预设的时间阈值,若超过,转至步骤S28。

S28:返回超时提示信息。

另外,本实施例还提供另一种实施方案,如图2所示,步骤S28还包括:获取当前对象列举请求中的指定目录名并存储。

由于上述实施例可知,本申请所提供的一种指定目录下的对象列举方法可以有效地控制对象列举所需的时间,所以当对象列举出现超时的情况时,有可能是系统出现了故障,所以通过本实施例所提供的优选方案,返回超时提示信息,以及时提醒相关人员进行故障的排除,避免影响后续的对象列举过程。另外,当出现列举超时的情况时,本实施例还提供另一种优选方案,通过获取当前列举请求中的指定目录名并存储,以留存历史数据,在后续相关人员在进行故障排除时,提供参考,方便故障的排除。

在上述实施例中,对于一种指定目录下的对象列举方法进行了详细描述,本申请还提供一种指定目录下的对象列举装置对应的实施例。需要说明的是,本申请从两个角度对装置部分的实施例进行描述,一种是基于功能模块的角度,另一种是基于硬件的角度。

基于功能模块的角度,如图3所示,本实施例提供一种指定目录下的对象列举装置,包括:

创建模块31,用于在内存中创建hash_map。

接收模块32,用于接收对象存储请求;其中,所述对象存储请求包括对象名称和存储地址;所述存储地址为所述对象于某个索引对象的omap上的位置。

解析模块33,用于解析所述对象名称,以获得对象的目录前缀。

确定模块34,用于根据所述目录前缀确定对应的哈希值。

存储模块35,用于将所述目录前缀对应的所述哈希值作为key、所述存储地址作为value,存储于所述hash_map中。

优选地,还包括:

列举模块,用于接收对象列举请求,对象列举请求包括指定目录名;根据指定目录名确定对应的哈希值;根据指定目录名对应的哈希值迭代访问hash_map,得到对应的存储地址;根据存储地址确定对应的对象于索引对象的omap上的位置,并获取对象的对象名称作为列举结果返回。

报错模块,用于若hash_map中不存在与指定目录名对应的key,则返回错误信息。

提示模块,用于获取接收到对象列举请求至获取对象的对象名称作为列举结果返回所用的时长;当时长超过预设的时间阈值时,返回超时提示信息。

记录模块,用于当时长超过预设的时间阈值时,获取当前对象列举请求中的指定目录名并存储。

由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。

本实施例所提供的一种指定目录下的对象列举装置,通过创建模块建立hash_map,用于存储模块将被存储对象的目录前缀以哈希值的形式作为key进行存储,其存储地址作为value存储于对应的key下。进而在对象列举时,根据指定目录名的哈希值检索到唯一的key。之后仅需遍历一遍对应key下的所有value,从而获取指定目录下所有对象的存储地址,通过访问获取对象名称并作为列举结果返回。上述的对象列举方法相对于目前双层遍历的方式列举效率进一步提高,尤其在存储对象数量大时,其列举效率提升的效果更明显。

图4为本申请另一实施例提供的一种指定目录下的对象列举装置的结构图,如图4所示,一种指定目录下的对象列举装置包括:存储器40,用于存储计算机程序;

处理器41,用于执行计算机程序时实现如上述实施例一种指定目录下的对象列举方法的步骤。

本实施例提供的一种指定目录下的对象列举装置可以包括但不限于智能手机、平板电脑、笔记本电脑或台式电脑等。

其中,处理器41可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器41可以采用数字信号处理器(Digital Signal Processor,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable LogicArray,PLA)中的至少一种硬件形式来实现。处理器41也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器(CentralProcessing Unit,CPU);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器41可以集成有图像处理器(Graphics Processing Unit,GPU),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器41还可以包括人工智能(Artificial Intelligence,AI)处理器,该AI处理器用于处理有关机器学习的计算操作。

存储器40可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器40还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器40至少用于存储以下计算机程序401,其中,该计算机程序被处理器41加载并执行之后,能够实现前述任一实施例公开的一种指定目录下的对象列举方法的相关步骤。另外,存储器40所存储的资源还可以包括操作系统402和数据403等,存储方式可以是短暂存储或者永久存储。其中,操作系统402可以包括Windows、Unix、Linux等。数据403可以包括但不限于一种指定目录下的对象列举方法等。

在一些实施例中,一种指定目录下的对象列举装置还可包括有显示屏42、输入输出接口43、通信接口44、电源45以及通信总线46。

本领域技术人员可以理解,图4中示出的结构并不构成对一种指定目录下的对象列举装置的限定,可以包括比图示更多或更少的组件。

本申请实施例提供的一种指定目录下的对象列举装置,包括存储器和处理器,处理器在执行存储器存储的程序时,能够实现如下方法:一种指定目录下的对象列举方法。

本实施例所提供的一种指定目录下的对象列举装置,通过处理器执行保存在存储器中的程序,实现上述的指定目录下的对象列举方法,进而实现仅需遍历一遍指定目录名对应key下的所有value,就能获取指定目录下的所有对象。相比于目前通常所使用的双层遍历方式,列举效率要更高,且在存储对象数量大的应用场景中,其列举效率提升的优势更加明显。

最后,本申请还提供一种计算机可读存储介质对应的实施例。计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述方法实施例中记载的步骤。

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

本实施例所提供的一种计算机可读存储介质,当其中存储的计算机程序被执行时,可以实现上述的指定目录下的对象列举方法,进而仅需进行一次遍历就能获取列举结果。相比于目前通常所使用的双层遍历方式,提高了列举效率,且越是在存储对象数量大的应用场景之中,其列举效率提升的效果就越加明显。

以上对本申请所提供的一种指定目录下的对象列举方法、装置及其介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号