一种映射关系实现方法、系统及计算机设备与流程

文档序号:13875855阅读:195来源:国知局
一种映射关系实现方法、系统及计算机设备与流程

本发明涉及计算机数据处理技术领域,特别涉及一种映射关系实现方法、系统及计算机设备。



背景技术:

在存储系统的体系结构中,存在大量多对一的映射关系。比如,所有的存储设备(比如硬盘、ssd盘等)首先被有效地管理为多个raid组,然后所有的raid组被有效地管理成多个存储池。那么,raid组和存储池之间就形成了多对一的关系。又比如,在一种典型的存储场景中存在多个存储池,每个存储池上能够创建多个逻辑卷以供主机映射使用,而每个逻辑卷只属于一个存储池。因此,虚拟卷和存储池之间也同样形成了多对一的关系。在映射关系中,称虚拟卷域和存储池域之间是多对一的映射关系,在下面的描述中也会以虚拟卷域和存储池域作为例子来描述。

在存储系统的实现过程中,往往需要在虚拟卷域所在的处理环境中访问某个特定的虚拟卷所在存储池的某些属性,为了实现这样的特性,通常做法是在每个虚拟卷对象中包含存储池的引用,同时在每个存储池对象中维护多个虚拟卷的引用。这样存在弊端,并非域中所有属性都需要建立映射关系,而且两个相关域太过紧密,不容易修改映射关系。

因此,如何在存储系统中能够更加灵活地维护映射关系,高效地维护逆向映射关系,是本领域技术人员亟待解决的问题。



技术实现要素:

有鉴于此,本发明的目的在于提供一种映射关系实现方法、系统及计算机设备,能够在存储系统中能够更加灵活地维护映射关系,高效地维护逆向映射关系。其具体方案如下:

一方面,本发明提供一种映射关系实现方法,包括:

获取第一元素组中每一第一元素与第二元素组中第二元素的对应关系;

利用所述对应关系对每一第一元素建立单链表。

优选地,还包括:

在单链表中增加第一元素对应的第二元素。

优选地,还包括:

在单链表中删除第一元素对应的第二元素。

优选地,还包括:

销毁所述单链表,以删除所述对应关系。

优选地,

所述第一元素为存储池;

所述第二元素为虚拟卷。

第二方面,本发明提供一种映射关系实现系统,包括:

关系获取模块,用于获取第一元素组中每一第一元素与第二元素组中第二元素的对应关系;

链表建立模块,用于利用所述对应关系对所述第一元素建立单链表。

优选地,还包括:

元素增加模块,用于在所述单链表中增加第一元素对应的第二元素。

优选地,还包括:

元素删除模块,用于在所述单链表中删除第一元素对应的第二元素。

优选地,还包括:

关系销毁模块,用于销毁所述单链表,以删除所述对应关系。

第三方面,本发明还一种计算机设备,包括:

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

处理器,用于执行所述计算机程序时实现上述一种映射关系实现方法的步骤。

本发明提供一种映射关系实现方法,包括:获取第一元素组中每一第一元素与第二元素组中第二元素的对应关系;利用所述对应关系对每一第一元素建立单链表。将复杂的映射关系实现在单链表中,能够利用单链表实现映射关系的修改,与现有技术相比能够更加灵活地维护映射关系,高效地维护逆向映射关系。

本发明提供的一种映射关系实现系统及计算机设备也具有上述有益效果,在此不再赘述。

附图说明

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

图1为本发明一种具体实施方式所提供的一种映射关系实现方法的流程图;

图2为本发明一种具体实施方式所提供的一种映射关系实现方法的拓展流程示意图;

图3为本发明一种具体实施方式所提供的一种映射关系实现方法应用于存储系统的示意图;

图4为本发明一种具体实施方式所提供的一种映射关系实现系统的结构示意图;

图5为本发明一种具体实施方式所提供的一种映射关系实现系统的结构拓展示意图。

具体实施方式

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

请参考图1,图1为本发明一种具体实施方式所提供的一种映射关系实现方法的流程图,该方法包括:

步骤s11:获取第一元素组中每一第一元素与第二元素组中第二元素的对应关系。

在本发明的第一种具体实施方式中,本发明具体实施方式所提供的一种映射关系实现放手,首先要获取两组元素的映射关系,可以取第一元素组中的每一个元素对应第二元素组中的元素的对应关系,例如第一元素组的元素为:a、b、c、d,第二元素组的元素为1、2、3、4、5、6、7、8、9。假如第一元素中的元素a对应第二元素组中的1、3、7、9,元素b对应2、4,元素c对应5、6、8,元素d没有对应元素。那么就获得了第一元素组中每一第一元素与第一元素组中第二元素的对应关系。

步骤s12:利用所述对应关系对每一第一元素建立单链表。

在步骤s11的基础上,就可以分别利用第一元素组中的元素:a、b、c、d的对应关系,分别建立单链表。

在程序中实现时,可以:首先需要定义结构体listentry和lists:

结构体lists维护多对一逆向映射关系。其中,entries是listentry数组,每个元素代表一条链表,链表的个数由cnt_entry描述,与多对一关系中“少”方的数目保持一致,也就是与第一元素组的元素个数保持一致;elements是辅助的一维数组,数组中元素的数量由cnt_element描述,与多对一关系中个“多”方的数目保持一致,也就是与第二元素组的元素个数保持一致。

listentry结构体描述一条链表。其中,first成员描述链表上的第一个元素在lists.elements数组中的下标,last成员描述链表上的最后一个元素在lists.elements数组中的下标,count成员描述链表上的元素个数。

可以规定如果lists.elements[k]为-1,代表k元素是它所在listentry链表上的最后一个元素;如果lists.elements[k]等于j,那么在listentry链表上j元素是k元素的下一个。

为了初始化各个单链表可以采用下列程序来实现:

lists*lists_init(intcnt_many,intcnt_few)

{

lists*lists=(lists*)malloc{sizeof(structlists));

lists->entries=(listentry*)malloc<sizeof(structlistentry)*cnt_few);

for(inti=0;i<cnt_few;++i)

{

lists->entries[i].first=-l;lists->entries[i].last=-l;lists->entries[i].count=0;

}

lists->cnt_entry=cnt_few;

lists->eleinents=(uintl6*)malloc{sizeof(uintl6)*many_few);

for(inti=c.;i<many_few;++i)

{lists->eleinents[i]=-1;

}

lists->cnt_eleinent=cnt_many;

returnlists;}。

请参考图2,图2为本发明一种具体实施方式所提供的一种映射关系实现方法的拓展流程示意图。

在上一实施例的基础上,可以更进一步地,为了在已经构建完成的单链表中添加元素,在单链表中增加第一元素对应的第二元素可以采用下列程序来实现:

voidefsts_add_head{lists*lists,intlists_idx,intidx)

{

listentry*entry=&(lists->entries[lists_idx]);

uintl6*eleinents=lists->eleinents;

if(-1=entry->first){

entry->first=entry->last=idx;

}

else{

elements[idx]=entry->first;

entry->first=idx;

++entry->count。

上述程序可以在链表头部添加一个元素,具体地,将单链表的第一个元素指向新增加的元素,同时设置由现在的第一个元素跳到原来的第一个元素,完成在表头增加元素的目的。

进一步地,在上述实施方式的基础上,为了在单链表中删除第一元素对应的第二元素,可以用下程序实现:

uintl6lists_remove_head(lists*lists,intlists_idx)

{

listentry*entry=&(lists->entries[lists_idx]);

uintl6*eleinents=lists->eleinents;

uintl6node=entry->first;if(-1!=node)i

if(node=entry->last){

entry->first=entry->last=-1;

}

else{

entry->first=elements[node];

}

elements[node]=-1;

--entry->count;

returnnode。

上述程序可以在单链表的头部删除一个元素。具体地,将单链表的第一个元素指向原第二个元素即可。

更进一步地,在上述一个或多个具体实施方式的基础上,为了销毁所述单链表,以删除所述对应关系。可以在采用free函数释放链表:

voidlistsdestroy(lists*lists)

free(lists->entries);free(lists->eleinents);free(lists)。

请参考图3,3为本发明一种具体实施方式所提供的一种映射关系实现方法应用于存储系统的示意图。

在本发明的一种具体实施方式中,可以将所述第一元素设定为存储池;所述第二元素设定为虚拟卷。

如图3典型的应用场景示意图,描述了从虚拟卷域向存储池域的逆向映射效果,示意图中描述了执行lists_add_head(lists,1,7)操作(也就是在单链表的头部增加元素)的效果图。

图中可以看到,有3个存储池,能够分配10个虚拟卷,而实际上从存储池0中分配了四个虚拟卷,编号分别为0/1/3/5;从存储池1中分配了一个虚拟卷,编号为4;没有从存储池2中分配虚拟卷。那么相应的映射关系从图中可以看到lists分配了3条链表分别由entry[0]、entry[1]、entry[2]描述三个存储池,而elements[10]描述了最多能够创建10个虚拟卷。在执行add操作之前,entry[0]上关联4个元素,分别描述编号为0、1、3、5的虚拟卷;entry[1]上关联1个元素,描述编号为4的虚拟卷;entry[2]上没有关联。

当从存储池1中新创建虚拟卷7时,相应地会在lists上执行lists_add_head(lists,1,7)操作,此时需要修改链表entry[1]:first值需要修改为7,因为新创建的卷被添加到链表的起始位置;count值增加为2。同时,需要修改elements[7]为4,其他保持不变。从而完成了向存储池的单链表中添加元素的操作,存储系统的系统设计中,在多对一映射关系中设计有效的逆向映射关系,能够大大提高系统的可维护性及开发效率。

请参考图4、图5,图4为本发明一种具体实施方式所提供的一种映射关系实现系统的结构示意图;图5为本发明一种具体实施方式所提供的一种映射关系实现系统的结构拓展示意图。

本发明提供一种映射关系实现系统400,包括:

关系获取模块401,用于获取第一元素组中每一第一元素与第二元素组中第二元素的对应关系;

链表建立模块402,用于利用所述对应关系对所述第一元素建立单链表。

优选地,映射关系实现系统400还包括:

元素增加模块403,用于在所述单链表中增加第一元素对应的第二元素。

优选地,映射关系实现系统400还包括:

元素删除模块404,用于在所述单链表中删除第一元素对应的第二元素。

优选地,映射关系实现系统400还包括:

关系销毁模块405,用于销毁所述单链表,以删除所述对应关系。

本发明还一种计算机设备,包括:

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

处理器,用于执行所述计算机程序时实现上述任一种具体实施方式中的一种映射关系实现方法的步骤。

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

以上对本发明所提供的一种映射关系实现方法、系统及计算机设备进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1