发明内容
有鉴于此,为了解决现有技术的不足,本发明提供一种基于数据增量写方式的快照版本数据迁移方法。
本发明提供的一种基于数据增量写方式的快照版本数据迁移方法,包括:
步骤S1:将待迁移快照版本数据与上一个快照版本的差异数据从源pool复制到目标pool;
步骤S2:修改当前版本数据的元数据信息,将layout信息中记录的源pool修改为目标pool;
步骤S3:遍历待迁移快照版本数据之后的所有快照版本数据和当前的快照版本数据,根据遍历结果修改相应快照版本数据的元数据;
步骤S4:删除源pool中的待迁移快照版本数据。
进一步地,本发明方法中,采用B+树对步骤S2中当前版本数据的元数据的存储位置进行管理,将每个数据段的文件偏移file_offset作为key,将每个数据段的存放位置layout作为value,其中,layout包括file_offset、 file_len、pool_id以及obj_id。
进一步地,本发明方法的步骤S2,包括:当待迁移数据段是当前已存在的数据段时,修改当前数据段起始节点存放位置layout的pool属性。
进一步地,本发明方法中,当待迁移数据段的起始位置与当前数据段的起始位置相同时,步骤S2,包括:
步骤S211:将当前数据段起始节点存放位置layout的pool属性修改为目标pool;
步骤S212:将当前数据段起始节点的长度length修改为待迁移数据段的长度;
步骤S213:在当前数据段中新增一个key值与待迁移数据段尾段节点的key值相同的节点,所述节点的pool为源pool,长度length为当前数据段尾段节点的长度与待迁移数据段尾段节点长度的差值。
进一步地,本发明方法中,当待迁移数据段的起始位置和尾段位置均处于当前数据段内部时,步骤S2,包括:
步骤S221:将待迁移数据段起始节点长度与当前数据段起始节点的长度的差值作为当前数据段起始节点的新的长度length;
步骤S222:在当前数据段中新增一个key值与待迁移数据段起始节点的key值相同的节点,所述节点的pool为目标pool,长度length为待迁移数据段的长度;
步骤S223:在当前数据段中新增一个key值与待迁移数据段尾端节点的key值相同的节点,所述节点的pool为源pool,长度length为当前数据段尾段节点的长度与待迁移数据段尾段节点长度的差值。
进一步地,本发明方法中,当待迁移数据段的尾端位置与当前数据段的尾端位置相同时且与目标pool数据段的起始段位置相同,步骤S2,包括:
步骤S231:修改当前数据段起始节点的长度,将待迁移数据段起始节点长度与当前数据段起始节点的长度的差值作为当前数据段起始节点的新的长度length;
步骤S232:在当前数据段中新增一个key值与待迁移数据段起始节点的key值相同的节点,所述节点的pool为目标pool,长度length为待迁移数据段的长度;
步骤S233:将当前数据段尾段节点的存放位置layout的pool属性修改为目标pool;
步骤S234:将步骤S232中新增节点的长度length修改为目标pool数据段尾段节点长度与当前数据段尾段节点长度的差值,删除当前数据段尾段节点。
进一步地,本发明方法中,步骤S3,包括:遍历迁移快照版本数据之后的所有快照版本数据和当前的快照版本数据,遍历顺序由创建时间较早的低版本到创建时间较迟的高版本,如果某个快照版本数据使用了迁移数据块的全部或部分数据,则根据步骤S2的修改方法修改该版本的元数据,如果没有使用迁移数据块的数据,则该版本及后续版本的元数据则无需修改。
进一步地,本发明方法中,快照版本数据迁移过程中,文件的读IO继续执行,如果收到写请求,则优先执行写IO任务,快照版本数据迁移停止。
进一步地,本发明方法中,在修改元数据信息时,如果收到读写请求,等待当前版本和快照版本的layout信息修改完成后再执行读写请求。
最后,本发明还提供一种终端设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现所述方法的步骤。
本发明基于数据增量写方式的快照版本数据迁移方法,在不增加额外的存储容量的情况下,允许任意一个快照版本数据的迁移,解决了传统方案中需要快照版本和当前版本一起迁移,或者至少快照版本一起迁移的问题;同时不会增加额外的存储空间。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合;并且,基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
图1为根据本发明示例性第一实施例的一种基于数据增量写方式的快照版本数据迁移方法的流程图,如图1所示,本实施例所述方法,包括:
步骤S1:将待迁移快照版本数据与上一个快照版本的差异数据从源pool复制到目标pool;
步骤S2:修改当前版本数据的元数据信息,将layout信息中记录的源pool修改为目标pool;
步骤S3:遍历待迁移快照版本数据之后的所有快照版本数据和当前的快照版本数据,根据遍历结果修改相应快照版本数据的元数据;
步骤S4:删除源pool中的待迁移快照版本数据。
本实施例的方法中,步骤S1将待迁移快照版本数据与上一个版本的差异数据从源pool复制到目标pool,一方面在后续迁移过程中不影响待迁移快照版本数据在源pool中被正常访问和调用;另一方面,可以避免重复数据段的复制。
本实施例的方法中,采用B+树对步骤S2中当前版本数据的元数据的存储位置进行管理,将每个数据段的文件偏移file_offset作为key,将每个数据段的存放位置layout作为value,其中,layout包括file_offset、file_len、pool_id以及obj_id。
本实施例的方法中,步骤S3,包括:遍历迁移快照版本数据之后的所有快照版本数据和当前的快照版本数据,遍历顺序由创建时间较早的低版本到创建时间较迟的高版本,如果某个快照版本数据使用了迁移数据块的全部或部分数据,则根据步骤S2的修改方法修改该版本的元数据,如果没有使用迁移数据块的数据,则该版本及后续版本的元数据则无需修改。
本实施例的方法中,快照版本数据迁移过程中,文件的读IO继续执行,如果收到写请求,则优先执行写IO任务,快照版本数据迁移停止。
本实施例的方法中,在修改元数据信息时,如果收到读写请求,等待当前版本和快照版本的layout信息修改完成后再执行读写请求。
本发明示例性第二实施例提供一种基于数据增量写方式的快照版本数据迁移方法,本实施例方法是图1所示方法的优选实施例,本实施例方法的步骤S2,包括:当待迁移数据段是当前已存在的数据段时,修改当前数据段起始节点存放位置layout的pool属性。
图2为根据本发明示例性第三实施例的一种基于数据增量写方式的快照版本数据迁移方法的流程图,本实施例方法是图1所示方法的优选实施例,本实施例方法中,当待迁移数据段的起始位置与当前数据段的起始位置相同时,步骤S2,包括:
步骤S211:将当前数据段起始节点存放位置layout的pool属性修改为目标pool;
步骤S212:将当前数据段起始节点的长度length修改为待迁移数据段的长度;
步骤S213:在当前数据段中新增一个key值与待迁移数据段尾段节点的key值相同的节点,所述节点的pool为源pool,长度length为待迁移数据段的长度。
图3为根据本发明示例性第四实施例的一种基于数据增量写方式的快照版本数据迁移方法的流程图,本实施例方法是图1所示方法的优选实施例,本实施例方法中,当待迁移数据段的起始位置和尾段位置均处于当前数据段内部时,步骤S2,包括:
步骤S221:将待迁移数据段起始节点长度与当前数据段起始节点的长度的差值作为当前数据段起始节点的新的长度length;
步骤S222:在当前数据段中新增一个key值与待迁移数据段起始节点的key值相同的节点,所述节点的pool为目标pool,长度length为待迁移数据段的长度;
步骤S223:在当前数据段中新增一个key值与待迁移数据段尾端节点的key值相同的节点,所述节点的pool为源pool,长度length为当前数据段尾段节点的长度与待迁移数据段尾段节点长度的差值。
图4为根据本发明示例性第五实施例的一种基于数据增量写方式的快照版本数据迁移方法的流程图,本实施例方法是图1所示方法的优选实施例,本实施例方法中,当待迁移数据段的尾端位置与当前数据段的尾端位置相同时且与目标pool数据段的起始段位置相同,步骤S2,包括:
步骤S231:修改当前数据段起始节点的长度,将待迁移数据段起始节点长度与当前数据段起始节点的长度的差值作为当前数据段起始节点的新的长度length;
步骤S232:在当前数据段中新增一个key值与待迁移数据段起始节点的key值相同的节点,所述节点的pool为目标pool,长度length为待迁移数据段的长度;
步骤S233:将当前数据段尾段节点的存放位置layout的pool属性修改为目标pool;
步骤S234:将步骤S232中新增节点的长度length修改为目标pool数据段尾段节点长度与当前数据段尾段节点长度的差值,删除当前数据段尾段节点。
本发明示例性第六实施例提供一种基于数据增量写方式的快照版本数据迁移方法,具体的,本实施例方法可按以下方式应用。
采用本实施例方法对如图5所示的数据组织进行数据迁移,如图5所示,文件大小为1000,其中[0, 100],[200, 400]存储在pool1中,[100, 200],[600, 1000]存储在pool2中,[400,600]存储在pool3中;当进行快照版本数据迁移中,需要将某个数据段从一个pool迁移到另一个pool,修改layout的情况有:
当待迁移数据段是图5中当前已存在的数据段[100, 200],只需要修改key值为100的layout中的pool属性即可。
当待迁移数据段的起始位置为当前数据段起始位置,例如将图5中[200, 300]迁移到pool3中,此时修改key值为200的layout信息,修改点包括:pool改为pool3,length改为100;同时新增一个key值为300的节点,其pool为pool1,length为100,修改后的数据段如图6所示。
当待迁移数据段为原数据段的一部分时,例如将图5中[250, 350]迁移到pool3中,修改key值为200的layout信息,修改点包括:pool改为pool3,length改为50;新增一个key值为250的节点,其pool为pool3,length为100;新增一个key值为350的节点,pool为pool1,length为50。修改后的数据段如图7所示。
当待迁移数据段为原数据段尾部,例如将图4中[300, 400]迁移到pool3中,修改key值为200的layout信息,修改点包括:length修改为100;新增一个key值为300的节点,其pool为pool3,length为100;此时检测到key值300和key值400的pool一致,且二者连续,则将二者合并。将key值300的length修改为300,删除key值为400的节点。修改后的数据段如图8所示。
本发明还提供一种终端设备,备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现所述方法的步骤。
该终端设备具有上述一种基于数据增量写方式的快照版本数据迁移方法相应的技术效果。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。