一种对象存储有序列举方法、装置、终端及存储介质制造方法及图纸

技术编号:31489618 阅读:13 留言:0更新日期:2021-12-18 12:26
本发明专利技术公开一种对象存储有序列举方法、装置、终端及存储介质,每次列举N个对象,每个桶有M个桶分片,接收到客户端的列举请求时,检测缓存map中是否包含所需列举对象对应桶的缓存;若不包含,则从底层相应桶的M个桶分片中读取M*N个对象,每个桶分片读取N个对象,从该M*N个对象中有序列举N个对象发送至客户端,并将剩余(M

【技术实现步骤摘要】
一种对象存储有序列举方法、装置、终端及存储介质


[0001]本专利技术涉及对象存储有序列举领域,具体涉及一种对象存储有序列举方法、装置、终端及存储介质。

技术介绍

[0002]随着互联网的发展,互联网数据量(非结构化数据)越来越大,分布式对象存储应运而生。这种新兴的存储方式,适用于图片、视频等非结构化数据的存储。它同时又具有块存储高速直接访问磁盘的特点以及文件存储分布式共享的特点,因此一经推出就得到广泛的发展与应用。
[0003]对象列举操作可以使用户方便的查看桶内的对象以及对象的属性。而对象存储作为分布存储,客户通常在存储桶内存储百万以及千万的对象,对于如此大规模的数据,在保证不严重影响集群性能的同时快速查看桶内的对象显得非常重要。对象存储创建桶的时候会在索引池创建指定个数(默认为128个)的索引对象,上传对象的时候会将对象名和对象的属性通过哈希的方式存储在桶索引的omap的键值对中。遍历桶内对象的时候通过遍历桶索引上记录的对象完成。目前对象存储有序列举和无序列举两种,有序列举需要从所有桶索引遍历对象,将所有索引上对象排序后保证得到一个有序排序结果,而无序列举按照分片顺序分别遍历桶内对象。
[0004]当桶内数量较大以后,一次遍历完所有对象并返回结果给客户无论从集群性能以及网络而言都不太现实,大规模数据的排序会造成内存暴涨以及增加网络传输失败的概率。故目前对象存储采用分页排序的方法。对象有序遍历而言,默认每次列举 1000个对象,每次向所有桶分片(默认为128个)从标识对象位置向后读1000个对象,从128*1000中对象中排序选出前1000个对象,作为本次有序列举的结果。将排序的1000个对象的最后一个对象作为新的对象标识,下次遍历是从该新的对象标识开始继续遍历。这种方案,每次从底层读1000*128个对象,却只得到1000个有序排序的结果,下次读的时候继续从底层读1000*128个对象,对于排序1000后的127*1000的结果并未合理利用,用户通常会新的对象标识完桶内所有对象,故目前方案会导致频繁的对底层(一般为硬盘)进行访问,浪费系统资源。

技术实现思路

[0005]为解决上述问题,本专利技术提供一种对象存储有序列举方法、装置、终端及存储介质,将剩余的对象存入一缓存map中,过缓存map将剩余对象存入内存,有新的列举请求时,若所需列举对象在缓存map中,则从缓存map中提取即可,充分利用剩余对象,且减少与底层的交互,降低集群压力,同时直接从内存中度,显著提高列举速度。
[0006]第一方面,本专利技术的技术方案提供一种对象存储有序列举方法,每次列举N个对象,每个桶有M个桶分片,N和M均为大于等于1的整数,该方法包括以下步骤:接收到客户端的列举请求时,检测缓存map中是否包含所需列举对象对应桶的缓存;
若不包含,则从底层相应桶的M个桶分片中读取M*N个对象,每个桶分片读取N个对象,从该M*N个对象中有序列举N个对象发送至客户端,并将剩余(M

1)*N个对象存至缓存map中;该剩余(M

1)*N个对象为该桶在缓存map中的缓存;若包含,则从对应桶的缓存中有序列举N个对象发送至客户端。
[0007]进一步地,缓存map中所缓存数据以键值对形式存储,其中键值对的键为桶名称,值为桶分片地址和桶分片对象的组合。
[0008]进一步地,客户端的列举请求中包含列举标识,所需列举对象为该列举标识之后的N个对象;列举标识为对象名称;若缓存map中包含所需列举对象对应桶的缓存时,从对应桶的缓存中有序列举N个对象前,包括以下步骤:将列举请求中包含的列举标识与桶缓存的每个桶分片的头尾对象进行比较;若对于某个桶分片,列举标识不满足大于等于该桶分片的第一个对象,且小于等于该桶分片的最后一个对象,则从底层相应桶分片中重新获取N个对象存入该缓存的桶分片;其中第一个对象为头对象,最后一个对象为尾对象;若重新存入该桶分片的对象仍不满足列举标识大于等于第一个对象,且小于等于最后一个对象,则继续从底层相应桶分片中重新获取N个对象存入该缓存的桶分片,直至该桶分片的对象满足列举标识大于等于第一个对象,且小于等于最后一个对象。
[0009]进一步地,从对应桶的缓存中有序列举N个对象,具体包括:根据列举请求中的列举标识,从每个桶分片中取出该列表标识之后第一个对象,共取出M个对象,从该M个对象中取出最大的对象为第一个列举对象;将第一列举对象的名称作为新的列举标识,从每个桶分片中取出该新的列表标识之后第一个对象,共取出M个对象,从该M个对象中取出最大的对象为第二个列举对象;以此类推,直到取出N个列举对象。
[0010]进一步地,该方法还包括以下步骤:将每次从缓存map中有序列举的N个对象从缓存map中删除。
[0011]进一步地,该方法还包括以下步骤:若缓存map中某个桶分片的对象使用完时,从底层相应桶分片中重新获取N个对象存入该缓存的桶分片;或,实时检测缓存map中各个桶分片剩余对象的个数H,若某个桶分片剩余对象的个数H小于等于阈值,则从底层相应桶分片中重新获取N个对象存储该缓存的桶分片;或,实时检测缓存map中各个桶分片剩余对象的个数H,若某个桶分片剩余对象的个数H小于等于阈值,则从底层相应桶分片中重新获取N

H个对象存储该缓存的桶分片。
[0012]进一步地,从底层相应桶分片中重新获取的N个对象或N

H个对象为上次获取的所有对象中最后一个对象之后的N个对象或N

H个对象。
[0013]第二方面,本专利技术的技术方案提供一种对象存储有序列举装置,每次列举N个对象,每个桶有M个桶分片,N和M均为大于等于1的整数,该装置包括,桶缓存检测模块:接收到客户端的列举请求时,检测缓存map中是否包含所需列举对象对应桶的缓存;底层列举模块:若不包含,则从底层相应桶的M个桶分片中读取M*N个对象,每个桶
分片读取N个对象,从该M*N个对象中有序列举N个对象发送至客户端,并将剩余(M

1)*N个对象存至缓存map中;该剩余(M

1)*N个对象为该桶在缓存map中的缓存;缓存列举模块:若包含,则从对应桶的缓存中有序列举N个对象发送至客户端。
[0014]第三方面,本专利技术的技术方案提供一种终端,包括:处理器;用于存储处理器的执行指令的存储器;其中,所述处理器被配置为执行上述任一项所述的方法。
[0015]第四方面,本专利技术的技术方案提供一种存储有计算机程序的计算机可读存储介质,该程序被处理器执行时实现如上述任一项所述的方法。
[0016]本专利技术提供的一种对象存储有序列举方法、装置、终端及存储介质,相对于现有技术,具有以下有益效果:通过借助缓存 map将上次从底层桶分片上遍历的N个对象中未利用的部分缓存到内存中,从而在用户连续列举这种用户最常见的对象列举方式中,可以在下组列举时直接利用之前从底层读的剩余对象遍历结果。相对于之前每次列举N个对象都需要从底层得到本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种对象存储有序列举方法,每次列举N个对象,每个桶有M个桶分片,N和M均为大于等于1的整数,其特征在于,该方法包括以下步骤:接收到客户端的列举请求时,检测缓存map中是否包含所需列举对象对应桶的缓存;若不包含,则从底层相应桶的M个桶分片中读取M*N个对象,每个桶分片读取N个对象,从该M*N个对象中有序列举N个对象发送至客户端,并将剩余(M

1)*N个对象存至缓存map中;该剩余(M

1)*N个对象为该桶在缓存map中的缓存;若包含,则从对应桶的缓存中有序列举N个对象发送至客户端。2.根据权利要求1所述的对象存储有序列举方法,其特征在于,缓存map中所缓存数据以键值对形式存储,其中键值对的键为桶名称,值为桶分片地址和桶分片对象的组合。3.根据权利要求2所述的对象存储有序列举方法,其特征在于,客户端的列举请求中包含列举标识,所需列举对象为该列举标识之后的N个对象;列举标识为对象名称;若缓存map中包含所需列举对象对应桶的缓存时,从对应桶的缓存中有序列举N个对象前,包括以下步骤:将列举请求中包含的列举标识与桶缓存的每个桶分片的头尾对象进行比较;若对于某个桶分片,列举标识不满足大于等于该桶分片的第一个对象,且小于等于该桶分片的最后一个对象,则从底层相应桶分片中重新获取N个对象存入该缓存的桶分片;其中第一个对象为头对象,最后一个对象为尾对象;若重新存入该桶分片的对象仍不满足列举标识大于等于第一个对象,且小于等于最后一个对象,则继续从底层相应桶分片中重新获取N个对象存入该缓存的桶分片,直至该桶分片的对象满足列举标识大于等于第一个对象,且小于等于最后一个对象。4.根据权利要求3所述的对象存储有序列举方法,其特征在于,从对应桶的缓存中有序列举N个对象,具体包括:根据列举请求中的列举标识,从每个桶分片中取出该列表标识之后第一个对象,共取出M个对象,从该M个对象中取出最大的对象为第一个列举对象;将第一列举对象的名称作为新的列举标识,从每个桶分片中取出该新的列表标识之后第一个对象,共取出M个对象,从该M个对象中取出最大的对象为第二个列举对象;以此类...

【专利技术属性】
技术研发人员:程晓煜陶桐桐
申请(专利权)人:济南浪潮数据技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1