一种基于表关联分析的数据表迁移的方法技术领域
本发明涉及数据处理技术领域,尤其涉及一种基于表关联分析的
数据表迁移的方法。
背景技术
随着云计算的兴起,有着大量的用户数据都存储到了云端数据库
中。但当一个云平台或者云端的存储系统需要升级改造或者兼容合并
或者是处于安全的考虑,都将会用到数据迁移技术。数据迁移技术就
是将用户数据从一个数据库中迁移到另一个数据库的过程。一个数据
迁移系统的设计必须考虑迁移过程的稳定性和可持续性以及对用户
正常使用数据库的影响应该是越小越好的。
现有的数据迁移方法有数据管道,数据库工具方法,备份复制,
磁盘内复制等方法。它们应用于不同的场景,各具优势。一般将数据
迁移,发生在一个数据库到另外一个数据库时,会包含三个主要的步
骤:数据提取、数据转换和数据装载,其结构和流程示意如图1所示。
Step1:数据提取。需要迁移的数据从源数据库中进行提取。和
一般的读取数据库操作一样,可以用jdbc或者odbc等方式,一般和所
用的数据库系统以及编程语言相关。
Step2:数据转换。包括对数据的整理和转换以及一些额外的数
据加工,以满足设计者的特殊用途。
Step3:数据装载。将经过转换的数据插入到目标数据库中的目
标表中的过程。
现有技术方案一般没有在迁移前进行迁移检查,很容易导致迁移
过程因为数据类型的不一致而导致迁移中断的问题。
有的虽然加入了迁移的预检查,但是并没有分析迁移数据表之间
的关联性,这样需要用户手工的去判断需要迁移的依赖数据,大大的
影响了迁移的效率和准确性。
有的是基于单线程的方案,在分布式的云端不易扩展,也就制约
了系统的并发性。
发明内容
本发明的目的是为了克服现有技术的缺陷,提供一种基于表关联
分析的数据表迁移的方法,通过方法可以提高系统并行性,更加适用
于分布式系统。在迁移过程采用复制表策略,将对正常用户的影响降
到最低。
一种基于表关联分析的数据表迁移的方法,该方法在预迁移检查
模块引入表关联性分析,自动识别需要迁移数据,并采用多线程并行
机制进行迁移检查;具体步骤如下:
Step1:确认迁移,用户确认需要迁移的用户数据;
Step2:预迁移检查,根据检查结果预先制定完善的转换规则和
程序;
Step3:数据提取,从源数据库中提取出数据;
Step4:数据转换,将源数据按照预处理制定的转换程序进行类
型等的转换,产生目标数据;
Step5:根据目标数据,先判断是否需要建立新的表,如果要则
建立新表,否则直接跳过;
Step6:是否进行共享表的特殊处理,若是转Step7,否则转Step8;
Step7:复制表处理,对共享表采用复制表策略,提高系统的并
发性能;
Step8:数据装载,最终将目标数据装载到目标数据库的目标表
中,完毕。
预迁移检查的具体流程如下:
Step21:用户确认迁移;用户通过用户界面和系统交互,确认需
要进行迁移的用户数据;
Step22:分析表的关联;一个用户的数据往往不止和一个表相关;
表与表之间通过外键相关联,迁移一个用户数据可能需要迁移多个
表;
Step23:提取表元数据信息;主要包含数据库信息,连接接口信
息,Schema信息,表信息,约束信息和列类型信息;
Step24:根据表个数分配线程;采用多线程机制可以加快对元数
据的解析速度,并在大规模并行系统中适用;
Step25:数据隔离模式匹配检查;
Step26:表层数据检查;检查表一级别的信息,包含一些约束信
息;
Step27:列层信息检查;在每个表中逐列的进行匹配检查,主要
是类型的匹配和兼容检查;
Step28:生成检查结果文件XML。
涉及到表关联性的分析时本发明的方法能够自动识别需要进行
迁移的相关表格,具体步骤如下:
Step1:读取中心表元数据信息;
Step2:读取列信息;
Step3:判断该列是否为外键;在数据库中可以通过检查表信息
的SQL语句foreign key(id)references outTable(id))方式即可识别,在元
数据中记录;
Step4:读取关联表信息;通过外键,读取以该外键为键的数据
表;
Step5:迁移必要性计算;主要有迁移的关联深度因素,迁移的
权限以及迁移的成本;当系统设定迁移关联深度为3时,超过的不予
考虑;当数据表权限设定不可以迁移时,不能迁移;当在目标数据库
没有该表时,需要新建该表则需要考虑在目标数据库新建该表带来的
成本和影响;
Step6:是否需要迁移;根据迁移必要性计算,得出是否需要迁
移该表;如果否则忽略该表,否则将该关联表加入到需要迁移的队列
中;
Step7:是否还有列,如果有转Step2,否则结束。
本发明是采用多线程机制的,因为云数据中心一般是多机多线程
的,所以采用多线程机制不仅有利于提高检查速度而且也是符合分布
运算需求,具体流程如下:
Step1:主线程对象获取迁移列表中元素,getltems(),返回迁移
列表;
Step2:根据迁移列表创建等量的子线程,子进程对象返回创建
成功;
Step3:分配任务。遍历迁移列表,把每个表对应一个子线程的
分配;
Step4:子进程分配到任务,读取表的元数据信息;
Step5:进行匹配检查,每个子线程各自进行表的匹配检查,主
要是模式、表约束、列类型检查,源与目标的匹配检查;
Step6:子线程生成检查结果文件XML,并通知父线程;
Step7:父线程接收到通知并建立一个XML文件,文件中引用各
个子线程的XML文件,完毕。
在经过转换后的目标数据在装载到目标表之前多了一步,表复
制,具体为根据目标表信息新建一个结构完全一样的MidTable中间表
格,然后将转换后的目标数据先写入到该MidTable中,当所有数据都
迁移完毕后,再一次性的将MidTable中的数据写入到目标表
TargetTable中;因为MidTable和TargetTable是同一个数据库内,所以
数据传输速率非常快,这样就避免了直接将目标数据装载到
TargetTable导致的长时间锁住TargetTable的问题,经过复制表策略的
处理,将数据迁移对用户正常使用SaaS服务的影响降到了最低。
本发明技术方案带来的有益效果:
1、将验证前置,即在数据迁移之前做好类型转换等工作,这样
避免了传统的数据迁移方法在迁移进行后突然因为数据类型不兼容
或者模式不兼容等问题导致的中断。和现有的技术相比,增加了数据
表相关性的分析,自动的识别需要一并迁移的数据表,不需要用户指
定。对于不熟悉该数据库设计的用户而言,人工指定是比较困难的一
个工作。往往需要耗费较长时间,并且不能保证正确。
2、提高系统的并行性。在检查模块中采用多线程机制,使得模
块不仅运行速度提升,而且方便移植到分布式等并行系统中。在数据
迁移过程中引入复制表策略也提高了系统的并行性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面
将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而
易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域
普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些
附图获得其它的附图。
图1是现有技术中数据迁移的结构流程图;
图2是本发明系统结构图;
图3是本发明预迁移检查的流程图;
图4是本发明中自动分析表格关联性方法流程图;
图5是本发明中多线程并发预迁移检查序列图;
图6是本发明数据迁移系统流程图;
图7是本发明中复制表策略的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方
案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部
分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普
通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,
都属于本发明保护的范围。
本发明在预迁移检查模块引入表关联性分析,自动识别需要迁移
数据,并采用多线程并行机制进行迁移检查,提高系统并行性,更加
适用于分布式系统。在迁移过程采用复制表策略,将对正常用户的影
响降到最低。
本发明针对云计算中SaaS中的用户数据迁移问题提出,系统架
构包含三大模块:用户界面、预迁移检查模块和迁移主模块,如图2
所示。用户界面模块是系统用户和迁移系统进行交互的接口。预迁移
检查模块完成数据迁移之前的表关联性检查、类型检查和模式检查等
匹配检查的模块,其结果采用XML存储。迁移主模块是完成迁移的
真正过程,包含数据提取,转换和装载。
在现有技术中一种适应SaaS多租户模式的数据迁移方法中也提
出了一种预检查方法,也是用XML进行数据的持久化,但本发明增
加了重要的数据关联性的分析,使得用户不需要人工指定所有需要迁
移的数据表。如果一些表没有迁移,那么所迁移的数据不够完整也将
导致在目标数据库中不能够使用。此外,本发明采用多线程技术,使
得系统并行性增加而且适合云计算平台。
图3是预迁移检查的流程图,是一种按照由数据库模式到表列逐
层检查的过程。具体步骤如下:
Step1:用户确认迁移;用户通过用户界面和系统交互,确认需
要进行迁移的用户数据;
Step2:分析表的关联;一个用户的数据往往不止和一个表相关;
表与表之间通过外键相关联,迁移一个用户数据可能需要迁移多个
表;
Step3:提取表元数据信息;主要包含数据库信息,连接接口信
息,Schema信息,表信息,约束信息和列类型信息等;
Step4:根据表个数分配线程;采用多线程机制可以加快对元数
据的解析速度,并在大规模并行系统中可以适用;
Step5:数据隔离模式匹配检查;一般SaaS的数据都可能涉及到
不同模式的存储,现在主流的有三种,独立数据库、独立Schema和
共享表的数据隔离;
Step6:表层数据检查;检查表一级别的信息,包含一些约束信
息;
Step7:列层信息检查;在每个表中逐列的进行匹配检查;主要
是类型的匹配和兼容检查;
Step8:生成检查结果文件XML。
在上述流程中涉及到表关联性的分析。在现有的技术中需要用户
指定表格才能够进行,而本发明的方法能够自动识别需要进行迁移的
相关表格。如图4所示,具体如下:
Step1:读取中心表元数据信息。
Step2:读取列信息。
Step3:判断该列是否为外键。在数据库中可以通过检查表信息
的SQL语句foreign key(id)references outTable(id));等方式即可识别,
可以在元数据中记录。
Step4:读取关联表信息。通过外键,读取以该外键为键的数据
表。
Step5:迁移必要性计算。主要有迁移的关联深度因素,迁移的
权限以及迁移的成本。当系统设定迁移关联深度为3时,超过的不予
考虑。当数据表权限设定不可以迁移时,不能迁移。当在目标数据库
没有该表时,需要新建该表则需要考虑在目标数据库新建该表带来的
成本和影响。
Step6:是否需要迁移。根据迁移必要性计算,得出是否需要迁
移该表。如果否则忽略该表,否则将该关联表加入到需要迁移的队列
中。
Step7:是否还有列,如果有转Step2,否则结束。
上述步骤中提到本发明是采用多线程机制的,因为云数据中心一
般是多机多线程的,所以采用多线程机制不仅有利于提高检查速度而
且也是符合分布运算需求。如图5所示,具体流程如下。
Step1:主线程对象获取迁移列表中元素,getltems()。返回迁移
列表。
Step2:根据迁移列表创建等量的子线程。子进程对象返回创建
成功。
Step3:分配任务。遍历迁移列表,把每个表对应一个子线程的
分配。
Step4:子进程分配到任务,读取表的元数据信息。
Step5:进行匹配检查。每个子线程各自进行表的匹配检查。主
要是模式、表约束、列类型等检查,源与目标的匹配检查。
Step6:子线程生成检查结果文件XML,并通知父线程。
Step7:父线程接收到通知并建立一个XML文件,文件中引用各
个子线程的XML文件。完毕。
在引入了预迁移检测的迁移方法其方法流程如图6所示。在数据
提取之前增加了预迁移检查,在数据转换和数据装载之间增加了是否
新建表和共享表的特殊处理过程。具体过程如下:
Step1:确认迁移。用户确认需要迁移的用户数据。
Step2:预迁移检查。根据检查结果预先制定完善的转换规则和
程序。
Step3:数据提取。从源数据库中提取出数据。
Step4:数据转换。将源数据按照预处理制定的转换程序进行类
型等的转换,产生目标数据。
Step5:根据目标数据,先判断是否需要建立新的表,如果要则
建立新表,否则直接跳过;
Step6:是否进行共享表的特殊处理,若是转Step7,否则转Step8;
Step7:复制表处理。对共享表采用复制表策略,提高系统的并
发性能。
Step8:数据装载。最终将目标数据装载到目标数据库的目标表
中,完毕。
上述过程提及复制表策略,图7是复制表策略的示意图。在源数
据库中的数据表sourceTable需要进行迁移,它首先经过检查处理和
数据转换,这部分内容在上述章节已经有过详细的说明。而我们的策
略在于在经过转换后的目标数据在装载到目标表之前多了一步,表复
制。具体为根据目标表信息新建一个结构完全一样的MidTable中间
表格。然后将转换后的目标数据先写入到该MidTable中,当所有数
据都迁移完毕后,再一次性的将MidTable中的数据写入到目标表
TargetTable中。因为MidTable和TargetTable是同一个数据库内,所
以数据传输速率非常快。这样就避免了直接将目标数据装载到
TargetTable导致的长时间锁住TargetTable的问题。经过复制表策略的
处理,将数据迁移对用户正常使用SaaS服务的影响降到了最低。
本发明的优点:
1、将验证前置,即在数据迁移之前做好类型转换等工作,这样
避免了传统的数据迁移方法在迁移进行后突然因为数据类型不兼容
或者模式不兼容等问题导致的中断。和现有的技术相比,增加了数据
表相关性的分析,自动的识别需要一并迁移的数据表,不需要用户指
定。对于不熟悉该数据库设计的用户而言,人工指定是比较困难的一
个工作。往往需要耗费较长时间,并且不能保证正确。
2、提高系统的并行性。在检查模块中采用多线程机制,使得模
块不仅运行速度提升,而且方便移植到分布式等并行系统中。在数据
迁移过程中引入复制表策略也提高了系统的并行性能。
以上对本发明实施例所提供的一种基于表关联分析的数据表迁
移的方法,进行了详细介绍,本文中应用了具体个例对本发明的原理
及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明
的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发
明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,
本说明书内容不应理解为对本发明的限制。