本发明涉及元数据查询技术领域,具体涉及一种独立冗余磁盘阵列重构元数据查询的方法、装置。
背景技术:
在存储设备中,当raid中的磁盘丢失时,通过数学方式恢复丢失的磁盘数据到替代的磁盘的方式作为恢复数据的手段之一被广泛使用。重构数据借助与元数据进行,构建以条带为单位的元数据记录数据恢复状态。
在系统启动、重启动时,现有的设计为满足并发需求而批量执行元数据查询操作,这导致现有的系统设计启动时间超出预期。
技术实现要素:
在系统启动、重启动时,现有的设计为满足并发需求而批量执行元数据查询操作,这导致现有的系统设计启动时间超出预期的问题,本发明提供一种独立冗余磁盘阵列重构元数据查询的方法、装置。
本发明的技术方案是:
一方面,本发明技术方案提供一种独立冗余磁盘阵列重构元数据查询的方法,包括如下步骤:
增加用于扩展元数据头的缓存区域改变元数据存储结构;
对改变后的元数据存储结构进行初始化;
元数据初始化完成后,接收查询请求,并对接收到的查询请求进行判断;
若接受的查询请求为元数据查询请求,提供元数据查询接口进行元数据查询;
若接受的查询请求为元数据批量查询请求,提供元数据批量查询接口进行元数据批量查询。
进一步的,对改变后的元数据存储结构进行初始化的步骤包括:
计算元数据空间的大小进行元数据空间初始化;
根据计算的元数据空间大小,进行内存申请;
更新需要重构的单位到元数据空间,更新需要重构的单位到缓存区域。
进一步的,计算元数据空间的大小进行元数据空间初始化的步骤中,元数据空间的大小计算公式为:
sm=sh sk sp
其中,变量sm表示改变后的元数据空间大小,为输出值;
变量sh为元数据空间头,该值为设定值,其通过元数据头结构大小计算;
变量sp为元数据空间大小,该值计算方式为每个元数据使用1位进行标识,使用变量count(grain)标识元数据量,其计算公式为:
count(grain)=磁盘容量/冗余单位长度
变量sk表示缓存区域空间大小,其计算公式:
sk=32*max(query)
max(query)表示批量元数据查询的最大值,该值为默认参数。
进一步的,增加用于扩展元数据头的缓存区域改变元数据存储结构的步骤中,增加的用于扩展元数据头的缓存区域的长度与批量元数据查询的最大量值一致。也就是,对元数据存储结构进行修改:增加对于当前进行的重构单位的缓存结构,该缓存结构的长度与批量元数据查询的最大量值一致。
进一步的,更新需要重构的单位到元数据空间,更新需要重构的单位到缓存区域的步骤包括:
扫描冗余单位;
判断扫描的冗余单位是否需要进行重构,若是,将元数据空间单位编号对应的位置标记为1;若否,扫描下一个冗余单位;
判断缓存区域是否填充完毕,若否,将扫描到的冗余单位的单位编号填充到缓存区域并将其标记为有效,扫描下一个冗余单位;若是,扫描下一个冗余单位。
进一步的,步骤若接受的查询请求为元数据查询请求,提供元数据查询接口进行元数据查询中,提供元数据查询接口进行元数据查询的步骤包括:
判断数据单位重构是否完成,若是,提供元数据查询接口输入重构完成的单位编号;
根据输入的重构完成的单位编号,查找单位编号在缓存区域中的位置;
将查找到的单位编号在元数据列表中标记为0;
查找元数据列表,将标记为1的元数据取出;
将查找到的标记为1的元数据填充到缓存区域中单位编号对应的位置。
进一步的,步骤若接受的查询请求为元数据批量查询请求,提供元数据批量查询接口进行元数据批量查询中,提供元数据批量查询接口进行元数据批量查询的步骤包括:
调用元数据批量查询接口,拷贝缓存区域中的数据到任务调度模块,任务调度模块将获取的需要执行重构的单位以并发执行任务。
另一方面,本发明技术方案提供一种独立冗余磁盘阵列重构元数据查询的装置,包括设置模块、初始化模块、接收模块、元数据查询模块、元数据批量查询模块;
设置模块,用于增加用于扩展元数据头的缓存区域改变元数据存储结构;设置模块增加的用于扩展元数据头的缓存区域的长度与批量元数据查询的最大量值一致。
初始化模块,用于对改变后的元数据存储结构进行初始化;
接收模块,用于元数据初始化完成后,接收查询请求,并对接收到的查询请求进行判断;
元数据查询模块,用于若接受的查询请求为元数据查询请求,提供元数据查询接口进行元数据查询;
元数据批量查询模块,用于若接受的查询请求为元数据批量查询请求,提供元数据批量查询接口进行元数据批量查询。
进一步的,初始化模块包括计算单元、内存申请单元、更新单元;
计算单元,用于计算元数据空间的大小进行元数据空间初始化;其中,计算单元,用于根据如下公式进行元数据空间大小的计算,
sm=sh sk sp
其中,变量sm表示改变后的元数据空间大小,为输出值;
变量sh为元数据空间头,该值为设定值,其通过元数据头结构大小计算;
变量sp为元数据空间大小,该值计算方式为每个元数据使用1位进行标识,使用变量count(grain)标识元数据量,其计算公式为:
count(grain)=磁盘容量/冗余单位长度
变量sk表示缓存区域空间大小,其计算公式:
sk=32*max(query)
max(query)表示批量元数据查询的最大值,该值为默认参数。
内存申请单元,用于根据计算的元数据空间大小,进行内存申请;
更新单元,用于更新需要重构的单位到元数据空间,更新需要重构的单位到缓存区域。更新单元包括:扫描子单元、第一判断子单元、标记子单元、第二判断子单元、填充子单元;
扫描子单元,用于扫描冗余单位;
第一判断子单元,用于判断扫描的冗余单位是否需要进行重构,若是,标记子单元,用于重构完成后,将元数据空间单位编号对应的位置标记为1;
第二判断子单元,用于判断缓存区域是否填充完毕;
填充子单元,用于将扫描到的冗余单位的单位编号填充到缓存区域并将其标记为有效。
进一步的,元数据查询模块包括重构结果判断单元、输入单元、位置查找单元、标记单元、列表查找单元和填充单元;
重构结果判断单元,用于判断数据单位重构是否完成;
输入单元,用于提供元数据查询接口输入重构完成的单位编号;
位置查找单元,用于根据输入的重构完成的单位编号,查找单位编号在缓存区域中的位置;
标记单元,用于将查找到的单位编号在元数据列表中标记为0;
列表查找单元,用于查找元数据列表,将标记为1的元数据取出;
填充单元,用于将查找到的标记为1的元数据填充到缓存区域中单位编号对应的位置。
元数据批量查询模块,具体用于调用元数据批量查询接口,拷贝缓存区域中的数据到任务调度模块,任务调度模块将获取的需要执行重构的单位以并发执行任务。
从以上技术方案可以看出,本发明具有以下优点:优化既有的元数据查询方式,使得在大批量元数据的批量查询中其查询速度与单个查询一致。从而保证在一些需要批量查询的场景下其具有与单个查询相同的时间复杂度。
此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
由此可见,本发明与现有技术相比,具有突出的实质性特点和显著地进步,其实施的有益效果也是显而易见的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例的方法的示意性流程图。
图2是本发明实施例提供的进行元数据查询的流程示意图。
图3是本发明一个实施例的装置的示意性框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
如图1所示,本发明实施例提供一种独立冗余磁盘阵列重构元数据查询的方法,包括如下步骤:
s1:增加用于扩展元数据头的缓存区域改变元数据存储结构;
s2:对改变后的元数据存储结构进行初始化;
s3:元数据初始化完成后,接收查询请求,并对接收到的查询请求进行判断;
s4:若接受的查询请求为元数据查询请求,提供元数据查询接口进行元数据查询;
s5:若接受的查询请求为元数据批量查询请求,提供元数据批量查询接口进行元数据批量查询。
需要说明的是,步骤s1中,增加用于扩展元数据头的缓存区域改变元数据存储结构的步骤中,增加的用于扩展元数据头的缓存区域的长度与批量元数据查询的最大量值一致。也就是,对元数据存储结构进行修改:增加对于当前进行的重构单位的缓存结构,该缓存结构的长度与批量元数据查询的最大量值一致。
在有些实施例中,步骤s2中,对改变后的元数据存储结构进行初始化的步骤包括:
s21:计算元数据空间的大小进行元数据空间初始化;需要说明的是,在本实施例中,缓存区域用bank表示,本步骤中,元数据空间的大小计算公式为:
sm=sh sk sp
其中,变量sm表示改变后的元数据空间大小,为输出值;
变量sh为元数据空间头,该值为设定值,其通过元数据头结构大小计算;
变量sp为元数据空间大小,该值计算方式为每个元数据使用1位进行标识,使用变量count(grain)标识元数据量,其计算公式为:
count(grain)=磁盘容量/冗余单位长度
变量sk表示bank空间大小,其计算公式:
sk=32*max(query)
max(query)表示批量元数据查询的最大值,该值为默认参数。
bank实现为数组结构,其存储单个重构单位所需空间为bank数据结构大小32位,其中包含的变量为:
变量vaild,占用1位,标识当前位置对应重构单位是否可用;
变量grain,占用31位,标识当前位置对应重构单位编号,其最大标识为2^31可满足当前系统的容量设计;
s22:根据计算的元数据空间大小,进行内存申请;该步骤依赖于平台接口,调用以实现内存申请(预申请)操作,初始化数据填充0。
s23:更新需要重构的单位到元数据空间,更新需要重构的单位到缓存区域。该步骤依赖于具体的重构算法;具体步骤包括:
s231:扫描冗余单位;
s232:判断扫描的冗余单位是否需要进行重构,若是,执行步骤s233;若否,扫描下一个冗余单位;
s233:将元数据空间单位编号对应的位置标记为1;本步骤是进行元数据空间的更新;
s234:判断缓存区域是否填充完毕,若否,执行步骤s235;若是,扫描下一个冗余单位;
s235:将扫描到的冗余单位的单位编号填充到缓存区域并将其标记为有效,扫描下一个冗余单位,直至扫描完成。本步骤是进行缓存区域的更新。
在有些实施例中,步骤s4中,算法修改原有的元数据查询方案,基于提供的bank进行元数据查询,在进行批量查询时起到加速查询效果,在单个查询时与原有算法时间复杂度一致。
元数据查询算法的使用方式为:根据现有的数据重构算法,数据单位重构完成后,其更新现有的元数据并从中读取新的需要重构的单位直到没有可以重构的区域。本发明中提供元数据查询接口,该接口输入值为重构完成的单位编号grain,当前正在重构的全部单位编号output[],其长度为max(query),输出为正在重构的全部单位编号output[],其长度为max(query)。如图2所示,提供元数据查询接口进行元数据查询的步骤包括:
s41:判断数据单位重构是否完成,若是,执行步骤s42;若否,等待设定时间,继续执行步骤s41;
s42:提供元数据查询接口输入重构完成的单位编号;
s43:根据输入的重构完成的单位编号,查找单位编号在缓存区域中的位置;
s44:将查找到的单位编号在元数据列表中标记为0;
s45:查找元数据列表,将标记为1的元数据取出;
s46:将查找到的标记为1的元数据填充到缓存区域中单位编号对应的位置。
具体的,根据输入的构完成的单位编号grain,查找grain在bank中的位置n,将grain在元数据列表中标记为0查找元数据列表,将标记1的接近的元数据取出,使用newgrain表示将newgrain填充到bank、output中n对应的位置。
在有些实施例中,步骤s5中,元数据批量查询的使用场景为:对于意外的终止情景下,对任务进行重启,此时任务调度模块从元数据批量获取需要执行重构的单位以并发执行任务,此时调用元数据批量查询接口。
元数据批量查询的算法步骤为:拷贝bank中的数据到任务调度模块,此时无需进行启动时的元数据查询操作,从而起到加速查询的目的,避免启动超时从而加速系统重启动。具体的,提供元数据批量查询接口进行元数据批量查询的步骤包括:
调用元数据批量查询接口,拷贝缓存区域中的数据到任务调度模块,任务调度模块将获取的需要执行重构的单位以并发执行任务。
本发明的应用场景为重构任务调度下元数据查询操作,内容为重构任务调度提供依据的元数据查询结构提供部分算法。使用的元数据为持久化的,该功能基于该系统的掉电保护机制实现,非本发明内容。本发明使用的元数据依赖于此功能的实现,仅在保证了该特性的元数据中进行应用。
具体实施时,采用编程语言进行算法实现,使用存储服务器或其他可运行冗余磁盘阵列逻辑的设备作为运行载体,使用者通过函数调用方式调用元数据模块接口,当冗余磁盘阵列成员磁盘发生故障时数据重构开始启动,数据重构算法完成数据重构状态的查询与记录。
如图3所示,本发明实施例提供一种独立冗余磁盘阵列重构元数据查询的装置,包括设置模块、初始化模块、接收模块、元数据查询模块、元数据批量查询模块;
设置模块,用于增加用于扩展元数据头的缓存区域改变元数据存储结构;设置模块增加的用于扩展元数据头的缓存区域的长度与批量元数据查询的最大量值一致。
初始化模块,用于对改变后的元数据存储结构进行初始化;
接收模块,用于元数据初始化完成后,接收查询请求,并对接收到的查询请求进行判断;
元数据查询模块,用于若接受的查询请求为元数据查询请求,提供元数据查询接口进行元数据查询;
元数据批量查询模块,用于若接受的查询请求为元数据批量查询请求,提供元数据批量查询接口进行元数据批量查询。
在有些实施例中,初始化模块包括计算单元、内存申请单元、更新单元;
计算单元,用于计算元数据空间的大小进行元数据空间初始化;其中,计算单元,用于根据如下公式进行元数据空间大小的计算,
sm=sh sk sp
其中,变量sm表示改变后的元数据空间大小,为输出值;
变量sh为元数据空间头,该值为设定值,其通过元数据头结构大小计算;
变量sp为元数据空间大小,该值计算方式为每个元数据使用1位进行标识,使用变量count(grain)标识元数据量,其计算公式为:
count(grain)=磁盘容量/冗余单位长度
变量sk表示缓存区域空间大小,其计算公式:
sk=32*max(query)
max(query)表示批量元数据查询的最大值,该值为默认参数。
内存申请单元,用于根据计算的元数据空间大小,进行内存申请;
更新单元,用于更新需要重构的单位到元数据空间,更新需要重构的单位到缓存区域。更新单元包括:扫描子单元、第一判断子单元、标记子单元、第二判断子单元、填充子单元;
扫描子单元,用于扫描冗余单位;
第一判断子单元,用于判断扫描的冗余单位是否需要进行重构,若是,标记子单元,用于重构完成后,将元数据空间单位编号对应的位置标记为1;
第二判断子单元,用于判断缓存区域是否填充完毕;
填充子单元,用于将扫描到的冗余单位的单位编号填充到缓存区域并将其标记为有效。
在有些实施例中,元数据查询模块包括重构结果判断单元、输入单元、位置查找单元、标记单元、列表查找单元和填充单元;
重构结果判断单元,用于判断数据单位重构是否完成;
输入单元,用于提供元数据查询接口输入重构完成的单位编号;
位置查找单元,用于根据输入的重构完成的单位编号,查找单位编号在缓存区域中的位置;
标记单元,用于将查找到的单位编号在元数据列表中标记为0;
列表查找单元,用于查找元数据列表,将标记为1的元数据取出;
填充单元,用于将查找到的标记为1的元数据填充到缓存区域中单位编号对应的位置。
元数据批量查询模块,具体用于调用元数据批量查询接口,拷贝缓存区域中的数据到任务调度模块,任务调度模块将获取的需要执行重构的单位以并发执行任务。
尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
1.一种独立冗余磁盘阵列重构元数据查询的方法,其特征在于,包括如下步骤:
增加用于扩展元数据头的缓存区域改变元数据存储结构;
对改变后的元数据存储结构进行初始化;
元数据初始化完成后,接收查询请求,并对接收到的查询请求进行判断;
若接受的查询请求为元数据查询请求,提供元数据查询接口进行元数据查询;
若接受的查询请求为元数据批量查询请求,提供元数据批量查询接口进行元数据批量查询。
2.根据权利要求1所述的独立冗余磁盘阵列重构元数据查询的方法,其特征在于,对改变后的元数据存储结构进行初始化的步骤包括:
计算元数据空间的大小进行元数据空间初始化;
根据计算的元数据空间大小,进行内存申请;
更新需要重构的单位到元数据空间,更新需要重构的单位到缓存区域。
3.根据权利要求2所述的独立冗余磁盘阵列重构元数据查询的方法,其特征在于,计算元数据空间的大小进行元数据空间初始化的步骤中,元数据空间的大小计算公式为:
sm=sh sk sp
其中,变量sm表示改变后的元数据空间大小,为输出值;
变量sh为元数据空间头,该值为设定值,其通过元数据头结构大小计算;
变量sp为元数据空间大小,该值计算方式为每个元数据使用1位进行标识,使用变量count(grain)标识元数据量,其计算公式为:
count(grain)=磁盘容量/冗余单位长度
变量sk表示缓存区域空间大小,其计算公式:
sk=32*max(query)
max(query)表示批量元数据查询的最大值,该值为默认参数。
4.根据权利要求3所述的独立冗余磁盘阵列重构元数据查询的方法,其特征在于,增加用于扩展元数据头的缓存区域改变元数据存储结构的步骤中,增加的用于扩展元数据头的缓存区域的长度与批量元数据查询的最大量值一致。
5.根据权利要求2所述的独立冗余磁盘阵列重构元数据查询的方法,其特征在于,更新需要重构的单位到元数据空间,更新需要重构的单位到缓存区域的步骤包括:
扫描冗余单位;
判断扫描的冗余单位是否需要进行重构,若是,将元数据空间单位编号对应的位置标记为1;若否,扫描下一个冗余单位;
判断缓存区域是否填充完毕,若否,将扫描到的冗余单位的单位编号填充到缓存区域并将其标记为有效,扫描下一个冗余单位;若是,扫描下一个冗余单位。
6.根据权利要求2所述的独立冗余磁盘阵列重构元数据查询的方法,其特征在于,步骤若接受的查询请求为元数据查询请求,提供元数据查询接口进行元数据查询中,提供元数据查询接口进行元数据查询的步骤包括:
判断数据单位重构是否完成,若是,提供元数据查询接口输入重构完成的单位编号;
根据输入的重构完成的单位编号,查找单位编号在缓存区域中的位置;
将查找到的单位编号在元数据列表中标记为0;
查找元数据列表,将标记为1的元数据取出;
将查找到的标记为1的元数据填充到缓存区域中单位编号对应的位置,并返回单位编号。
7.根据权利要求2所述的独立冗余磁盘阵列重构元数据查询的方法,其特征在于,步骤若接受的查询请求为元数据批量查询请求,提供元数据批量查询接口进行元数据批量查询中,提供元数据批量查询接口进行元数据批量查询的步骤包括:
调用元数据批量查询接口,拷贝缓存区域中的数据到任务调度模块,任务调度模块将获取的需要执行重构的单位以并发执行任务。
8.一种独立冗余磁盘阵列重构元数据查询的装置,其特征在于,包括设置模块、初始化模块、接收模块、元数据查询模块、元数据批量查询模块;
设置模块,用于增加用于扩展元数据头的缓存区域改变元数据存储结构;
初始化模块,用于对改变后的元数据存储结构进行初始化;
接收模块,用于元数据初始化完成后,接收查询请求,并对接收到的查询请求进行判断;
元数据查询模块,用于若接受的查询请求为元数据查询请求,提供元数据查询接口进行元数据查询;
元数据批量查询模块,用于若接受的查询请求为元数据批量查询请求,提供元数据批量查询接口进行元数据批量查询。
9.根据权利要求8所述的独立冗余磁盘阵列重构元数据查询的装置,其特征在于,初始化模块包括计算单元、内存申请单元、更新单元;
计算单元,用于计算元数据空间的大小进行元数据空间初始化;
内存申请单元,用于根据计算的元数据空间大小,进行内存申请;
更新单元,用于更新需要重构的单位到元数据空间,更新需要重构的单位到缓存区域。
10.根据权利要求9所述的独立冗余磁盘阵列重构元数据查询的装置,其特征在于,元数据查询模块包括重构结果判断单元、输入单元、位置查找单元、标记单元、列表查找单元和填充单元;
重构结果判断单元,用于判断数据单位重构是否完成;
输入单元,用于提供元数据查询接口输入重构完成的单位编号;
位置查找单元,用于根据输入的重构完成的单位编号,查找单位编号在缓存区域中的位置;
标记单元,用于将查找到的单位编号在元数据列表中标记为0;
列表查找单元,用于查找元数据列表,将标记为1的元数据取出;
填充单元,用于将查找到的标记为1的元数据填充到缓存区域中单位编号对应的位置。
技术总结