数据迁移的方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据迁移的方法和装置。
背景技术
数据迁移是将所需的数据从源数据库迁移到目标数据库的过程。现有技术主要采用两种方式对数据进行迁移:
方式一、将源关系数据库中的数据转换为TLV格式的数据,通过迁移实例将TLV格式文件中的数据迁移至目标数据库;
方式二、将待迁移数据存储到堆栈内存,然后根据目标数据库类型和表的字段列数量,把数据转换成匹配该目标数据库的行记录,并封装成符合ETL可用的数据对象,最后写入目标数据库。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
1.采用上述第一种方式进行数据迁移对部分原有类型的数据不支持,并且无法做到高效的数据迁移。
2.采用上述第二种方式进行数据迁移需要逐表写入、不能多表并发写入、效率低,且抽取数据放在内存堆栈中,容易造成***异常数据丢失风险。
发明内容
有鉴于此,本发明实施例提供一种数据迁移的方法和装置,能够解决现有技术在表结构变更或新增表代码需要重新上线发布数据迁移的工具的技术缺陷,进而达到当表结构变更时、新增表结构时均无需修改数据迁移装置的代码的有益效果。
为实现上述目的,根据本发明实施例的一个方面,提供了一种数据迁移的装置,包括:
迁移前置模块,用于监听迁移请求信息,根据所述迁移请求信息生成迁移任务,并将迁移前置模块生成的迁移任务写入至所述迁移任务表;
任务获取模块,用于扫描所述迁移任务表,获取所述迁移表中待处理的迁移任务,将所述迁移任务发送至迁移模块;
迁移模块,用于根据所述迁移任务获取源账户的源数据,将所述源数据以目标账户数据存储的形式存储在目标账户下。
可选地,根据所述迁移请求信息生成迁移任务,包括:
根据所述迁移请求信息,查询分布式集群统一配置的迁移表;
组装所述迁移请求信息和在所述迁移表查询到的数据,生成迁移任务;
其中,迁移请求信息,包括:源账户信息、目标账户信息、迁移请求号。
可选地,所述任务获取模块,还用于:将所述迁移任务发送至迁移工具之后,采用乐观锁将已经写入所述迁移任务表的迁移任务的状态设置为已发送。
可选地,所述迁移模块,还用于:将所述源数据以目标账户的形式存储在目标账户下之前,
分别定位所述迁移任务对应的源账户的源数据库和源数据表、目标账户的目标数据库和目标数据表;
分别计算源账户数据库和数据表信息、目标账户的数据库和数据表信息;和/或,
将源账户、目标账户的数据库连接信息保存到当前线程的变量中。
可选地,根据所述迁移任务获取源账户的源数据,将所述源数据以目标账户的形式存储在目标账户下,包括:
根据所述迁移任务对源账户的待迁移数据进行分页数据抽取;
将抽取到的所述分页数据以目标账户的形式进行数据转换;
将所述数据转换的结果存储在目标账户下。
可选地,还包括迁移校验模块,用于:
判断迁移前的源账户与迁移后的目标账户的数据总量是否一致;
若数据总量不一致,则重新将所述源数据以目标账户的形式存储在目标账户下;
若数据总量一致,则比较所述源账户与所述目标账户配置的特殊字段总额是否一致;
若所述特殊字段总额一致,则说明所述源账户与所述目标账户的数据一致;若所述特殊字段总额不一致,则重新将所述源数据以目标账户的形式存储在目标账户下。
根据本发明实施例的一个方面,提供了一种数据迁移的方法,包括:
迁移前置模块监听迁移请求信息,根据所述迁移请求信息生成迁移任务,并将生成的迁移任务写入至所述迁移任务表;
任务获取模块扫描所述迁移任务表,获取所述迁移表中待处理的迁移任务,将所述迁移任务发送至迁移模块;
迁移模块根据所述迁移任务获取源账户的源数据,将所述源数据以目标账户数据存储的形式存储在目标账户下。
可选地,根据所述迁移请求信息生成迁移任务,包括:
根据所述迁移请求信息,查询分布式集群统一配置的迁移表;
组装所述迁移请求信息和在所述迁移表查询到的数据,生成迁移任务;
其中,迁移请求信息,包括:源账户信息、目标账户信息、迁移请求号。
可选地,将所述迁移任务发送至迁移工具之后,采用乐观锁将已经写入所述迁移任务表的迁移任务的状态设置为已发送。
可选地,将所述源数据以目标账户的形式存储在目标账户下之前,
分别定位所述迁移任务对应的源账户的源数据库和源数据表、目标账户的目标数据库和目标数据表;
分别计算源账户数据库和数据表信息、目标账户的数据库和数据表信息;和/或,
将源账户、目标账户的数据库连接信息保存到当前线程的变量中。
可选地,根据所述迁移任务获取源账户的源数据,将所述源数据以目标账户的形式存储在目标账户下,包括:
根据所述迁移任务对源账户的待迁移数据进行分页数据抽取;
将抽取到的所述分页数据以目标账户的形式进行数据转换;
将所述数据转换的结果存储在目标账户下。
可选地,还包括迁移校验模块判断迁移前的源账户与迁移后的目标账户的数据总量是否一致;
若数据总量不一致,则重新将所述源数据以目标账户的形式存储在目标账户下;
若数据总量一致,则比较所述源账户与所述目标账户配置的特殊字段总额是否一致;
若所述特殊字段总额一致,则说明所述源账户与所述目标账户的数据一致;若所述特殊字段总额不一致,则重新将所述源数据以目标账户的形式存储在目标账户下。
根据本发明实施例的另一个方面,提供了一种数据迁移电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明提供的数据迁移装置。
根据本发明实施例的还一个方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明提供的数据迁移装置。
上述发明中的一个实施例具有如下优点或有益效果:
本发明采用将获取任务的模块设置在所述迁移模块外,由任务获取模块统一获取的技术手段,解决了现有技术在表结构变更或新增表代码需要重新上线发布数据迁移的工具、数据迁移后可能存在多个重复主键的技术缺陷,进而达到当表结构变更时、新增表结构时均无需修改数据迁移装置的代码的有益效果。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的数据迁移的装置的主要模块的示意图;
图2是根据本发明实施例的数据迁移的装置的***原理图;
图3是根据本发明实施例的数据迁移方法的主要流程的示意图;
图4是根据本发明实施例的数据迁移方法的具体流程的示意图;
图5是本发明实施例可以应用于其中的示例性***架构图;
图6是适于用来实现本发明实施例的终端设备或服务器的计算机***的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明实施例的数据迁移的装置100的主要模块的示意图,如图1所示,
迁移前置模块101,用于监听迁移请求信息,根据所述迁移请求信息生成迁移任务,并将迁移前置模块生成的迁移任务写入至所述迁移任务表;
任务获取模块102,用于扫描所述迁移任务表,获取所述迁移表中待处理的迁移任务,将所述迁移任务发送至迁移模块;
迁移模块103,用于根据所述迁移任务获取源账户的源数据,将所述源数据以目标账户数据存储的形式存储在目标账户下。
所述源账户和目标账户可以位于同一数据库中也可以是不同的数据库。
所述监听迁移请求信息是通过消息队列异步的方式获取,大大提高了***的并发性,避免了现有技术数据迁移耗时较长、效率较低的缺陷。
将所述迁移任务发送至迁移模块也是通过异步方式发送给迁移模块的,进一步提高***的并发性能、达到提高数据迁移的效率。
所述任务获取模块可以采用定时扫描的方式获取迁移任务表中的待数据迁移的任务,也可以采取利用迁移任务表向所述任务获取模块发送信息。
本发明采用将获取任务的模块设置在所述迁移模块外,由任务获取模块统一获取的技术手段,解决了现有技术在表结构变更或新增表代码需要重新上线发布数据迁移的工具、数据迁移后可能存在多个重复主键的技术缺陷,进而达到当表结构变更时、或新增表结构时均无需修改数据迁移装置的代码的有益效果。
通过基于分布式集群完成数据迁移的技术手段,避免了现有技术采用多线程进行数据迁移时只能将数据库中的整张表进行迁移,而不能将表中部分数据进行迁移、迁移速度慢的技术缺陷,进而达到数据迁移更灵活、迁移效率高的技术效果。并且依赖分布式集群进行数据迁移可以提高数据迁移的并发率,使得数据迁移的效率更高。
可选地,根据所述迁移请求信息生成迁移任务,包括:
根据所述迁移请求信息,查询分布式集群统一配置的迁移表;
组装所述迁移请求信息和在所述迁移表查询到的数据,生成迁移任务;
其中,迁移请求信息,包括:源账户信息、目标账户信息、迁移请求号。
通过所述迁移请求信息无需在需要迁移部分数据时将整个数据表进行迁移,可以对每个表的部分数据进行迁移。
分布式集群统一配置的迁移表是动态配置的需要迁移的表,进而达到灵活配置、提高数据迁移完整程度,确保数据迁移流程高效可靠的技术效果。
可选地,所述任务获取模块,还包括:在将所述迁移任务发送至迁移模块之后,采用乐观锁将已经写入所述迁移任务表的迁移任务的状态设置为已发送。
通过所述乐观锁,避免了现有技术在迁移后可能出现重复主键的情况,解决了数据迁移一致性的技术问题。
可选地,所述迁移模块,还包括:在将所述源数据以目标账户的形式存储在目标账户下之前,
分别定位所述迁移任务对应的源账户的源数据库和源数据表、目标账户的目标数据库和目标数据表,进而确定所述迁移任务数据迁出的位置以及目的地;
分别计算源账户数据库和数据表信息、目标账户的数据库和数据表信息;和/或,
将源账户、目标账户的数据库连接信息保存到当前线程的变量中,,便于后续数据查询、***、更新操作。
源账户数据库和数据表信息、目标账户的数据库和数据表信息的内容为其哈希编码(hashcode)的值。
具体地,源账户或目标账户数据库信息的计算公式为:
数据库信息=hashcode值%(数据库数量*表数量)/表数量;
源账户或目标账户数据表信息的计算公式为:
表信息=hashcode值%表数量。
可选地,根据所述迁移任务获取源账户的源数据,将所述源数据以目标账户的形式存储在目标账户下,包括:
根据所述迁移任务对源账户的待迁移数据进行分页数据抽取;
将抽取到的所述分页数据以目标账户的形式进行数据转换;
将所述数据转换的结果存储在目标账户下。
根据表的数据量、表配置的权重可以进行加权动态设置。
可选地,还包括:迁移校验模块,用于对迁移到目标账户的数据进行校验。其中,数据库中的每个表的校验字段基于分布式配置***可配置的,增加***的灵活性。
通过数据迁移后校验的技术手段解决了现有技术由于抽取数据放在内存堆栈中,容易造成***异常数据丢失风险,而且没有风险规避方案的技术缺陷,进而达到提高数据迁移更准确度的技术效果。
具体地,对迁移到目标账户的数据进行校验,包括:
判断迁移前的源账户与迁移后的目标账户的数据总量是否一致;
若数据总量不一致,则重新将所述源数据以目标账户的形式存储在目标账户下;
若数据总量一致,则比较所述源账户与所述目标账户配置的特殊字段总额是否一致;
若所述特殊字段总额一致,则说明所述源账户与所述目标账户的数据一致;若所述特殊字段总额不一致,则重新将所述源数据以目标账户的形式存储在目标账户下。
迁移后数据校验主要为源账户和目标账户之间部分数据的比对,而且对比信息可配置更灵活。通过数据校验进一步可以确定迁移后的数据的完整性。
图2是根据本发明实施例的数据迁移的装置的***原理图,如图2所示:
迁移前置模块201,用于监听迁移请求信息,根据所述迁移请求信息确定分布式集群统一配置的迁移表所对应的信息,并根据上述两种信息生成迁移任务,并将所述迁移任务写入至所述迁移任务表;
任务获取模块202,用于扫描所述迁移任务表,获取所述迁移表中待处理的迁移任务,并将所述迁移任务发送至迁移模块;
迁移模块203,用于根据任务获取模块发送的任务,定位所述迁移任务对应的源账户的源数据库和源数据表、目标账户的目标数据库和目标数据表,进而确定所述迁移任务数据迁出的位置以及目的地;然后分别计算源账户数据库和数据表信息、目标账户的数据库和数据表信息;将源账户、目标账户的数据库连接信息保存到当前线程的变量中;最后将所述源数据以目标账户的形式存储在目标账户下。
图3是根据本发明实施例的数据迁移方法的主要流程的示意图;
如图,本实施例提供了一种数据迁移的方法,包括:
步骤S301、迁移前置模块监听迁移请求信息,根据所述迁移请求信息生成迁移任务,并将生成的迁移任务写入至所述迁移任务表;
步骤S302、任务获取模块扫描所述迁移任务表,获取所述迁移表中待处理的迁移任务,将所述迁移任务发送至迁移模块;
步骤S303、迁移模块根据所述迁移任务获取源账户的源数据,将所述源数据以目标账户数据存储的形式存储在目标账户下。
可选地,根据所述迁移请求信息生成迁移任务,包括:
根据所述迁移请求信息,查询分布式集群统一配置的迁移表;
组装所述迁移请求信息和在所述迁移表查询到的数据,生成迁移任务;
其中,迁移请求信息,包括:源账户信息、目标账户信息、迁移请求号。
可选地,所述任务获取模块将所述迁移任务发送至迁移工具之后,采用乐观锁将已经写入所述迁移任务表的迁移任务的状态设置为已发送。
可选地,所述迁移模块将所述源数据以目标账户的形式存储在目标账户下之前,
分别定位所述迁移任务对应的源账户的源数据库和源数据表、目标账户的目标数据库和目标数据表;
分别计算源账户数据库和数据表信息、目标账户的数据库和数据表信息;和/或,
将源账户、目标账户的数据库连接信息保存到当前线程的变量中。
可选地,根据所述迁移任务获取源账户的源数据,将所述源数据以目标账户的形式存储在目标账户下,包括:
根据所述迁移任务对源账户的待迁移数据进行分页数据抽取;
将抽取到的所述分页数据以目标账户的形式进行数据转换;
将所述数据转换的结果存储在目标账户下。
可选地,还包括迁移校验模块,用于:
判断迁移前的源账户与迁移后的目标账户的数据总量是否一致;
若数据总量不一致,则重新将所述源数据以目标账户的形式存储在目标账户下;
若数据总量一致,则比较所述源账户与所述目标账户配置的特殊字段总额是否一致;
若所述特殊字段总额一致,则说明所述源账户与所述目标账户的数据一致;若所述特殊字段总额不一致,则重新将所述源数据以目标账户的形式存储在目标账户下。
图4是根据本发明实施例的数据迁移方法的具体流程的示意图,如图4所示:
S401、监听迁移请求信息;
S402、根据所述迁移请求信息,查询分布式集群统一配置的迁移表;
S403、组装所述迁移请求信息和在所述迁移表查询到的数据,生成迁移任务,***到迁移任务表中;
S404、定时扫描所述迁移表;
S405、根据扫描记录判断所述扫描结果是否为0,当所述扫描结果为0,则表示迁移表内没有需要数据迁移的任务,执行S406结束操作;当所述扫描结果不为0,则表示迁移表内存在需要数据迁移的任务,执行S407将所述待数据进行迁移;
S408、判断参数校验是否成功;
若不成功,则执行S409结束此次数据迁移;若成功,则执行S410分别定位源账户和目标账户的数据库和数据表;
S411、将源账户待迁移的数据进行抽取、转换的处理操作;
S412、将经过处理操作的数据迁移到目标账户中;
S413、将迁移后的数据进行校验操作;
S414、判断校验是否成功,若校验成功则结束;若不成功则重新进行数据迁移。
图5示出了可以应用本发明实施例的数据迁移方法或数据迁移装置的示例性***架构500。
如图5所示,***架构500可以包括终端设备501、502、503,网络504和服务器505。网络504用以在终端设备501、502、503和服务器505之间提供通信链路的介质。网络504可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备501、502、503通过网络504与服务器505交互,以接收或发送消息等。终端设备501、502、503上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备501、502、503可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器505可以是提供各种服务的服务器,例如对用户利用终端设备501、502、503所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息--仅为示例)反馈给终端设备。
需要说明的是,本发明实施例所提供的数据迁移方法一般由服务器505执行,相应地,数据迁移装置一般设置于服务器505中。
应该理解,图5中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图6,其示出了适于用来实现本发明实施例的终端设备的计算机***600的结构示意图。图6示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图6所示,计算机***600包括中央处理模块(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有***600操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理模块(CPU)601执行时,执行本发明的***中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括发送模块、获取模块、确定模块和第一处理模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,发送模块还可以被描述为“向所连接的服务端发送图片获取请求的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:
迁移前置模块监听迁移请求信息,根据所述迁移请求信息生成迁移任务,并将生成的迁移任务写入至所述迁移任务表;
任务获取模块扫描所述迁移任务表,获取所述迁移表中待处理的迁移任务,将所述迁移任务发送至迁移模块;
迁移模块根据所述迁移任务获取源账户的源数据,将所述源数据以目标账户数据存储的形式存储在目标账户下。
根据本发明实施例的技术方案,可以达到如下有益效果:
本发明采用将获取任务的模块设置在所述迁移模块外,由任务获取模块统一获取的技术手段,解决了现有技术在表结构变更或新增表代码需要重新上线发布数据迁移的工具、数据迁移后可能存在多个重复主键的技术缺陷,进而达到当表结构变更时、新增表结构时均无需修改数据迁移装置的代码的有益效果。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。