一种孤儿对象查找方法、装置及可读存储介质与流程

文档序号:33542397发布日期:2023-03-22 09:24阅读:54来源:国知局
一种孤儿对象查找方法、装置及可读存储介质与流程

1.本技术涉及数据处理领域,特别是涉及一种孤儿对象查找方法、装置及可读存储介质。


背景技术:

2.近年来,随着互联网的发展,互联网数据量(非结构化数据)越来越大,分布式对象存储应运而生。这种新兴的存储方式,适用于图片、视频等非结构化数据的存储。它同时又具有块存储高速直接访问磁盘的特点以及文件存储分布式共享的特点,因此一经推出就得到广泛的发展与应用。
3.目前分布式对象存储中,当集群故障或者节点掉电等异常场景时,会概率出现孤儿对象的问题,而这些rados对象用户无法直接查看和删除,一直占用存储空间,随着集群使用时间越来越久,集群的有效容量越来约低。目前方案中,有以存储池为单位的孤儿对象查找方案,该方案遍历池子中所有的rados对象,对比查找潜在的孤儿对象,随着存储池对象数量的增加,该方案查找效率低效。
4.鉴于上述技术,如何提高孤儿对象的查找效率,是本领域技术人员亟待解决的问题。


技术实现要素:

5.本技术的目的是提供一种孤儿对象查找方法、装置及可读存储介质,以提高孤儿对象的查找效率。
6.为解决上述技术问题,本技术提供一种孤儿对象查找方法,包括:
7.遍历头对象所在存储池查找出所述头对象并获取所述头对象的元数据;
8.根据所述头对象的元数据查找并记录有对应的所述头对象的尾对象;
9.遍历所述尾对象所在存储池查找出所述尾对象;
10.滤除有对应的所述头对象的所述尾对象,将其余的所述尾对象判定为孤儿对象。
11.优选地,所述遍历头对象所在存储池查找出所述头对象并获取所述头对象的元数据包括:
12.遍历所述头对象所在存储池,将以buckt_id开头且不包含shadow字段的对象判定为所述头对象,并获取各所述头对象的元数据。
13.优选地,所述遍历所述尾对象所在存储池查找出所述尾对象包括:
14.遍历各所述尾对象所在的存储池,将以buckt_id开头且包含shadow字段的对象判定为尾对象。
15.优选地,所述滤除有对应的所述头对象的所述尾对象,将其余的所述尾对象判定为孤儿对象之前,还包括;
16.获取所述尾对象的修改时间;
17.所述滤除有对应的所述头对象的所述尾对象,将其余的所述尾对象判定为孤儿对
象包括:
18.若所述修改时间超过阈值则判定所述尾对象为所述孤儿对象。
19.优选地,所述滤除有对应的所述头对象的所述尾对象,将其余的所述尾对象判定为孤儿对象之后,还包括:
20.删除所有的所述孤儿对象。
21.优选地,遍历所述头对象和所述尾对象所在的存储池包括:
22.通过异步的方式对各所述头对象和各所述尾对象所在的所述存储池进行遍历。
23.优选地,所述删除所有的所述孤儿对象之后,还包括:
24.对所述存储池进行轮询,若轮询后所述存储池中依旧存在孤儿对象,则进行报警处理。
25.为解决上述技术问题,本技术还提供一种孤儿对象查找装置,包括:
26.第一遍历模块,用于遍历头对象所在存储池查找出所述头对象并获取所述头对象的元数据;
27.查找模块,用于根据所述头对象的元数据查找并记录有对应的所述头对象的尾对象;
28.第二遍历模块,用于遍历所述尾对象所在存储池查找出所述尾对象;
29.滤除模块,用于滤除有对应的所述头对象的所述尾对象,将其余的所述尾对象判定为孤儿对象。
30.优选地,所述孤儿对象查找装置还包括:获取模块,用于在所述滤除有对应的所述头对象的所述尾对象,将其余的所述尾对象判定为孤儿对象之前,获取所述尾对象的修改时间;所述滤除有对应的所述头对象的所述尾对象,将其余的所述尾对象判定为孤儿对象包括:若所述修改时间超过阈值则判定所述尾对象为所述孤儿对象。
31.优选地,所述孤儿对象查找装置还包括:删除模块,用于在所述滤除有对应的所述头对象的所述尾对象,将其余的所述尾对象判定为孤儿对象之后,删除所有的所述孤儿对象。
32.优选地,所述孤儿对象查找装置还包括:报警模块,用于在所述删除所有的所述孤儿对象之后,对所述存储池进行轮询,若轮询后所述存储池中依旧存在孤儿对象,则进行报警处理。
33.为解决上述技术问题,本技术还提供一种孤儿对象查找装置,包括:存储器,用于存储计算机程序;
34.处理器,用于执行计算机程序时实现上述孤儿对象查找方法的步骤。
35.为解决上述技术问题,本技术还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述孤儿对象查找方法的步骤。
36.本技术所提供的孤儿对象查找方法,通过遍历头对象所在存储池查找出头对象并获取头对象的元数据,并根据头对象的元数据查找并记录有对应的头对象的尾对象。然后遍历尾对象所在存储池查找出尾对象,滤除有对应的头对象的尾对象,将其余的尾对象判定为孤儿对象。因为根据头对象可以找到对应的尾对象,而根据尾对象不可以找到对应的头对象,因此本方案先通过头对象找到有对应关系的头对象和尾对象,这部分尾对象为正
常的尾对象。然后在所有尾对象中滤除掉正常的尾对象,剩下的尾对象即为孤儿对象。本技术相比原方案减少了无效对比,提高孤儿对象的查找效率。
37.本技术还提供了一种孤儿对象查找装置和计算机可读存储介质,与上述方法对应,故具有与上述方法相同的有益效果。
附图说明
38.为了更清楚地说明本技术实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
39.图1为本技术实施例提供的一种孤儿对象查找方法的流程图;
40.图2为本技术实施例提供的孤儿对象查找装置的结构图;
41.图3为本技术另一实施例提供的孤儿对象查找装置的结构图。
具体实施方式
42.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本技术保护范围。
43.本技术的核心是提供一种孤儿对象查找方法、装置及可读存储介质,以提高孤儿对象的查找效率。
44.为了使本技术领域的人员更好地理解本技术方案,下面结合附图和具体实施方式对本技术作进一步的详细说明。
45.对象存储是一种新的网络存储架构,同时兼具san高速直接访问磁盘特点及nas的分布式共享特点,具有较广的应用前景与应用价值。孤儿对象是对象上传、删除等场景中,由于集群、节点等故障导致出现部分没有头对象的尾对象,这些对象无法被彻底删除且占用集群存储空间。随着互联网的发展,互联网数据量越来越大,分布式对象存储应运而生。这种新兴的存储方式,适用于图片、视频等非结构化数据的存储。它同时又具有块存储高速直接访问磁盘的特点以及文件存储分布式共享的特点,因此一经推出就得到广泛的发展与应用。目前分布式对象存储中,当集群故障或者节点掉电等异常场景时,会概率出现孤儿对象的问题,而这些rados对象用户无法直接查看和删除,一直占用存储空间,随着集群使用时间越来越久,集群的有效容量越来约低。目前方案中,有以存储池为单位的孤儿对象查找方案,该方案遍历池子中所有的rados对象,对比查找潜在的孤儿对象,随着存储池对象数量的增加,该方案查找效率低效;且该方案无法解决对象分级和分层等跨存储池场景的孤儿对象查找。针对对象存储中存在孤儿对象的问题,本技术提出了一种以桶为粒度的孤儿对象查看方案,减少rados对象对比次数,实现跨存储池的孤儿对象查找,同时可以解决池子内大量rados下对象查找效率低的问题。
46.图1为本技术实施例提供的一种孤儿对象查找方法的流程图;如图1所示,该方法包括如下步骤:
47.s10:遍历头对象所在存储池查找出头对象并获取头对象的元数据。
48.s11:根据头对象的元数据查找并记录有对应的头对象的尾对象。
49.s12:遍历尾对象所在存储池查找出尾对象。
50.s13:滤除有对应的头对象的尾对象,将其余的尾对象判定为孤儿对象。
51.对象存储中对象包含一个头对象和若干个尾对象,孤儿对象主要出现在上传对象和删除对象过程中,对象上传过程中先写尾对象,再写头对象,在头对象写完成之前故障便会出现孤儿对象。对象删除过程中会先删除头对象,再将尾对象加入垃圾回收队列,如果加入垃圾回收对象时出现故障时尾对象也会成为孤儿对象。头对象包括对象名,根据头对象可以找到对应的尾对象;而尾对象中只有数据,根据尾对象不可以找到对应的头对象,因此本方案先通过头对象找到有对应关系的头对象和尾对象,这部分尾对象为正常的尾对象。然后在所有尾对象中滤除掉正常的尾对象,剩下的尾对象即为孤儿对象。
52.另外,因为头对象和尾对象都包括id,但是尾对象中会包括一个shadow字段,而头对象中并不包括这个字段,因此可利用该字段区分头对象和尾对象。则遍历头对象所在存储池查找出头对象并获取头对象的元数据包括:遍历头对象所在存储池,将不包含shadow字段的对象判定为头对象,并获取各头对象的元数据。遍历尾对象所在存储池查找出尾对象包括:遍历各尾对象所在的存储池,将包含shadow字段的对象判定为尾对象。
53.本技术实施例以桶为粒度的孤儿对象查找思路为:桶的元数据中会记录该桶内的对象头对象所在的池子以及尾对象所在的多个池子。池子中某个桶下所有的对象都以桶id开头,通过shadow字段可以区分头对象和尾对象。找到所有的头对象,头对象中会记录对应的尾对象的perfix(一个前缀,可以用于识别尾对象),将所有的prefix进行记录,然后遍历所有的尾对象,当该尾对象不包含所有记录的perfix时便为孤儿对象。这里提供一种具体的孤儿对象查找和删除方案:1、获取桶的元数据bucket_info,查看bucket_id,查看头对象和尾对象所在的池子(若是分层情况下,则为多个存储池)。2、遍历头对象所在池子,遍历所有以buckt_id开头且不包含的“shadow”字段的rados对象。3、获取头对象中元数据中信息,当该头对象包含对应的尾对象时,将尾对象的prefix进行记录。4、遍历所有尾对象所在池子中的以bucket_id开头且包含“shadow”字段的rados对象(尾对象),当该rados对象中不包含上文中记录的任一prefix时,获取该对象的mtime(修改时间),如果时间不是当天(排除正在操作的对象),则判定为孤儿对象。5、删除孤儿对象。需要注意的是,上述方案只是本实施例提供的其中一种示例,具体实施时并不限于该方案。例如,修改时间的具体长度不作限定,以实际情况为准,可以设置为一天,也可根据需求另外设置。
54.本技术实施例提出了一种以桶为粒度的分布式对象存储孤儿对象查找方案,查找指定桶的产生的孤儿对象。将之前的以存储池为粒度调整为以桶为粒度,通过桶id和prefix进行筛选有效的减少了对比次数,提高了查找效率,同时以桶为粒度可以解决跨存储下孤儿对象的查找和删除,也解决了对象分级和分层等跨存储池场景的孤儿对象查找问题。本实施例提出一种以桶为粒度的分布式对象存储孤儿对象查找方案,实现了集群数据规模大的情况下孤儿对象的查找问题,通过以桶为粒度,减少了大量无效的对比,提高了查找速度;同时实现了跨存储池的孤儿对象查找,有效的释放了故障场景下孤儿对象占用的集群空间,提高了集群的有效容量,带来了良好的用户体验,提高了分布式对象产品的市场竞争力。
55.在实际应用中,滤除有对应的头对象的尾对象,将其余的尾对象判定为孤儿对象
之后,还需要删除所有的孤儿对象。且在删除所有的孤儿对象之后,还可对存储池进行轮询,若轮询后存储池中依旧存在孤儿对象,则进行报警处理。另外,遍历头对象和尾对象时具体可以通过异步的方式对各头对象和各尾对象所在的存储池进行遍历,可以提高效率。
56.本技术实施例所提供的孤儿对象查找方法,通过遍历头对象所在存储池查找出头对象并获取头对象的元数据,并根据头对象的元数据查找并记录有对应的头对象的尾对象。然后遍历尾对象所在存储池查找出尾对象,滤除有对应的头对象的尾对象,将其余的尾对象判定为孤儿对象。因为根据头对象可以找到对应的尾对象,而根据尾对象不可以找到对应的头对象,因此本方案先通过头对象找到有对应关系的头对象和尾对象,这部分尾对象为正常的尾对象。然后在所有尾对象中滤除掉正常的尾对象,剩下的尾对象即为孤儿对象。本技术实施例相比原方案减少了无效对比,提高孤儿对象的查找效率。
57.桶是用于存储对象(object)的容器,所有的对象都必须隶属于某个桶。可以设置和修改桶属性用来控制地域、访问权限、生命周期等,这些属性设置直接作用于该桶内所有对象,因此可以通过灵活创建不同的桶来完成不同的管理功能。同一个桶的内部是扁平的,没有文件系统的目录等概念,所有的对象都直接隶属于其对应的桶,桶内部的对象数目没有限制。
58.本实施例提供一种区分头对象和尾对象的方案,因为头对象和尾对象都包括id,但是尾对象中会包括一个shadow字段,而头对象中并不包括这个字段,因此可利用该字段区分头对象和尾对象。则遍历头对象所在存储池查找出头对象并获取头对象的元数据包括:遍历头对象所在存储池,将以buckt_id开头且不包含shadow字段的对象判定为头对象,并获取各头对象的元数据。遍历尾对象所在存储池查找出尾对象包括:遍历各尾对象所在的存储池,将以buckt_id开头且包含shadow字段的对象判定为尾对象。
59.根据上述实施例可得到,查找孤儿对象可通过如下方案:获取桶的元数据bucket_info,查看bucket_id,查看头对象和尾对象所在的池子。遍历头对象所在池子,遍历所有以buckt_id开头且不包含的“shadow”字段的rados对象。获取头对象中元数据中信息,当该头对象包含对应的尾对象时,将尾对象的prefix进行记录。遍历所有尾对象所在池子中的以bucket_id开头且包含“shadow”字段的rados对象(尾对象),当该尾对象中不包含上文中记录的任一prefix时,则说明该尾对象没有对应的头对象,即可能为孤儿对象。在实际应用时,若尾对象中不包含上文中记录的任一prefix时,可能是正在操作的对象,则可获取该对象的mtime(修改时间),如果时间不是当天(排除正在操作的对象),再判定为孤儿对象。即在滤除有对应的头对象的尾对象,将其余的尾对象判定为孤儿对象之前,获取尾对象的修改时间(mtime);而滤除有对应的头对象的尾对象,将其余的尾对象判定为孤儿对象包括:若修改时间超过阈值则判定尾对象为孤儿对象。修改时间的具体长度不作限定,以实际情况为准,可以设置为一天。
60.本技术提出了一种以桶为粒度的分布式对象存储孤儿对象查找方案,可以查找指定桶的产生的孤儿对象。本方案将之前的以存储池为粒度调整为以桶为粒度,通过桶id和prefix进行筛选有效的减少了对比次数,提高了查找效率,同时以桶为粒度可以解决跨存储下孤儿对象的查找和删除。本方案实现了集群数据规模大的情况下孤儿对象的查找问题,通过以桶为粒度减少大量无效的对比,提高了查找速度。同时本方案还实现了跨存储池的孤儿对象查找,有效的释放了故障场景下孤儿对象占用的集群空间,提高了集群的有效
容量,带来了良好的用户体验,提高了分布式对象产品的市场竞争力。
61.在实际应用中,滤除有对应的头对象的尾对象,将其余的尾对象判定为孤儿对象之后,还需要删除所有的孤儿对象。且在删除所有的孤儿对象之后,还可对存储池进行轮询,若轮询后存储池中依旧存在孤儿对象,则进行报警处理。另外,遍历头对象和尾对象时具体可以通过异步的方式对各头对象和各尾对象所在的存储池进行遍历,可以提高效率。
62.在上述实施例中,对于孤儿对象查找方法进行了详细描述,本技术还提供孤儿对象查找装置对应的实施例。需要说明的是,本技术从两个角度对装置部分的实施例进行描述,一种是基于功能模块的角度,另一种是基于硬件的角度。
63.基于功能模块的角度,本实施例提供一种孤儿对象查找装置,图2为本技术实施例提供的孤儿对象查找装置的结构图,如图2所示,该装置包括:
64.第一遍历模块10,用于遍历头对象所在存储池查找出头对象并获取头对象的元数据。
65.查找模块11,用于根据头对象的元数据查找并记录有对应的头对象的尾对象。
66.第二遍历模块12,用于遍历尾对象所在存储池查找出尾对象。
67.滤除模块13,用于滤除有对应的头对象的尾对象,将其余的尾对象判定为孤儿对象。
68.由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
69.作为优选的实施方式,孤儿对象查找装置还包括:获取模块,用于在滤除有对应的头对象的尾对象,将其余的尾对象判定为孤儿对象之前,获取尾对象的修改时间;滤除有对应的头对象的尾对象,将其余的尾对象判定为孤儿对象包括:若修改时间超过阈值则判定尾对象为孤儿对象。
70.删除模块,用于在滤除有对应的头对象的尾对象,将其余的尾对象判定为孤儿对象之后,删除所有的孤儿对象。
71.报警模块,用于在删除所有的孤儿对象之后,对存储池进行轮询,若轮询后存储池中依旧存在孤儿对象,则进行报警处理。
72.本技术实施例所提供的孤儿对象查找装置,通过第一遍历模块遍历头对象所在存储池查找出头对象并获取头对象的元数据,查找模块根据头对象的元数据查找并记录有对应的头对象的尾对象。然后第二遍历模块遍历尾对象所在存储池查找出尾对象,滤除模块滤除有对应的头对象的尾对象,将其余的尾对象判定为孤儿对象。因为根据头对象可以找到对应的尾对象,而根据尾对象不可以找到对应的头对象,因此本方案先通过头对象找到有对应关系的头对象和尾对象,这部分尾对象为正常的尾对象。然后在所有尾对象中滤除掉正常的尾对象,剩下的尾对象即为孤儿对象。本技术实施例相比原方案减少了无效对比,提高孤儿对象的查找效率。
73.基于硬件的角度,本实施例提供了另一种孤儿对象查找装置,图3为本技术另一实施例提供的孤儿对象查找装置的结构图,如图3所示,孤儿对象查找装置包括:存储器20,用于存储计算机程序;
74.处理器21,用于执行计算机程序时实现如上述实施例中所提到的孤儿对象查找方法的步骤。
75.其中,处理器21可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器21可以采用数字信号处理器(digital signal processor,dsp)、现场可编程门阵列(field-programmable gate array,fpga)、可编程逻辑阵列(programmable logic array,pla)中的至少一种硬件形式来实现。处理器21也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器(central processing unit,cpu);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器21可以集成有图像处理器(graphics processing unit,gpu),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器21还可以包括人工智能(artificial intelligence,ai)处理器,该ai处理器用于处理有关机器学习的计算操作。
76.存储器20可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器20还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器20至少用于存储以下计算机程序201,其中,该计算机程序被处理器21加载并执行之后,能够实现前述任一实施例公开的孤儿对象查找方法的相关步骤。另外,存储器20所存储的资源还可以包括操作系统202和数据203等,存储方式可以是短暂存储或者永久存储。其中,操作系统202可以包括windows、unix、linux等。数据203可以包括但不限于孤儿对象查找方法涉及到的数据等。
77.在一些实施例中,孤儿对象查找装置还可包括有显示屏22、输入输出接口23、通信接口24、电源25以及通信总线26。
78.本领域技术人员可以理解,图中示出的结构并不构成对孤儿对象查找装置的限定,可以包括比图示更多或更少的组件。
79.本技术实施例提供的孤儿对象查找装置,包括存储器和处理器,处理器在执行存储器存储的程序时,能够实现如下方法:孤儿对象查找方法。
80.本技术实施例所提供的孤儿对象查找装置,通过遍历头对象所在存储池查找出头对象并获取头对象的元数据,并根据头对象的元数据查找并记录有对应的头对象的尾对象。然后遍历尾对象所在存储池查找出尾对象,滤除有对应的头对象的尾对象,将其余的尾对象判定为孤儿对象。因为根据头对象可以找到对应的尾对象,而根据尾对象不可以找到对应的头对象,因此本方案先通过头对象找到有对应关系的头对象和尾对象,这部分尾对象为正常的尾对象。然后在所有尾对象中滤除掉正常的尾对象,剩下的尾对象即为孤儿对象。本技术实施例相比原方案减少了无效对比,提高孤儿对象的查找效率。
81.最后,本技术还提供一种计算机可读存储介质对应的实施例。计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述方法实施例中记载的步骤。
82.可以理解的是,如果上述实施例中的方法以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本技术各个实施例描述的方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘
等各种可以存储程序代码的介质。
83.本实施例提供的计算机可读存储介质,与上述方法对应,故具有与上述方法相同的有益效果。
84.以上对本技术所提供的一种孤儿对象查找方法、装置及可读存储介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以对本技术进行若干改进和修饰,这些改进和修饰也落入本技术权利要求的保护范围内。
85.还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括上述要素的过程、方法、物品或者设备中还存在另外的相同要素。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1