一种数据迁移方法及装置
技术领域
本申请涉及数据处理领域,尤其涉及一种数据迁移方法及装置。
背景技术
随着互联网和计算机技术的迅速发展,越来越多的业务可以在网上进行。
用户可以通过互联网向业务系统提交业务请求,业务系统根据接收的业务请求进行相应的业务处理,并向用户返回业务处理结果,在此过程中,业务系统会生成相应的业务数据,并将这些业务数据以数据记录的形式存储在该业务系统的数据库中。
在实际应用中,为了提高业务处理能力,经常需要对业务系统进行更新。当要将原业务系统升级为新业务系统时,若新业务系统使用的数据库(称为:目标数据库)与原业务系统使用的数据库(称为:源数据库)不相同,则需要相应地将源数据库中的数据向目标数据库中迁移,以便于新业务系统能够正常地为用户服务。
在现有技术中,有两种常用的数据迁移方式。第一种数据迁移方式,采用数据泵技术从源数据库中导出数据并转换为中间文件,再通过中间文件向目标数据库中导入从源数据库导出的数据。第二种数据迁移方式,是将原业务系统停止服务,然后,将根据源数据库中各数据记录的数据主键,将各数据记录向目标数据库迁移。
但是,第一种数据迁移方式仅适用于于待迁移数据量较小的场景,而当待迁移数据量较大时,迁移效率较低,而且,在迁移过程中由于原业务系统未停止服务,因此,源数据库中数据仍在变化,从而会影响用户业务的数据准确性。而第二种数据迁移方式需要将原业务系统停止服务,当待迁移数据量较大时,迁移效率较低,也会严重影响用户业务的处理及时性。
综上所述,现有技术中的数据迁移方式当待迁移数据量较大时,迁移效率较低,而且会对用户业务造成不良影响。
发明内容
本申请实施例提供一种数据迁移方法及装置,用以解决现有技术中的数据迁移方式当待迁移数据量较大时,迁移效率较低,而且会对用户业务造成不良影响的问题。
本申请实施例提供的一种数据迁移方法,所述方法用于基于迁移游标值,将源数据库中的数据向目标数据库迁移,所述迁移游标值初始时为所述源数据库中的各数据记录的最新修改时间中的最小时间,所述方法包括:
按照预定定时间隔,周期性地定时执行以下步骤:
确定当前迁移游标值,以及从当前迁移游标值开始,按照时间前进方向,划分出连续的多个时间区间,将当前迁移游标值更新为所述多个时间区间内的最大时间,所述最大时间不超过当前时间;
针对划分出的每个时间区间,分别生成对应于该时间区间的迁移任务,该迁移任务用于将所述源数据库中的各数据记录中,当前最新修改时间属于该时间区间的数据记录向所述目标数据库迁移;
并发执行生成的各迁移任务。
本申请实施例提供的一种数据迁移装置,所述装置用于基于迁移游标值,将源数据库中的数据向目标数据库迁移,所述迁移游标值初始时为所述源数据库中的各数据记录的最新修改时间中的最小时间,所述装置包括:
游标值更新模块,用于确定当前迁移游标值,以及从当前迁移游标值开始,按照时间前进方向,划分出连续的多个时间区间,将当前迁移游标值更新为所述多个时间区间内的最大时间,所述最大时间不超过当前时间;
任务生成模块,用于针对划分出的每个时间区间,分别生成对应于该时间区间的迁移任务,该迁移任务用于将所述源数据库中的各数据记录中,当前最新修改时间属于该时间区间的数据记录向所述目标数据库迁移;
迁移模块,用于并发执行生成的各迁移任务。
本申请实施例通过上述至少一种技术方案,无需将源数据库对应的原业务系统停止服务,就可以将源数据库中的数据向目标数据库迁移,而且即使在迁移过程中,源数据库中的数据发生变化,也可以在迁移游标值向前推移的过程中对变化后的数据再次迁移(也即,支持对增量数据的迁移),因此,可以保证数据迁移的准确性,不会对用户业务造成不良影响;不仅如此,由于是通过生成多个迁移任务并行执行的方式进行数据迁移,因此,可以提高数据迁移效率。从而解决了现有技术中的问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例提供的数据迁移方法的过程;
图2为本申请实施例提供的在实际应用场景下,本申请的方案的一种具体实施过程的简略示意图;
图3为本申请实施例提供的对迁移任务和单条数据记录的补偿示意图;
图4为本申请实施例提供的在实际应用场景下,一种执行迁移任务的过程;
图5为本申请实施例提供的数据迁移装置结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的数据迁移方法的过程,该方法用于基于迁移游标值,将源数据库中的数据向目标数据库迁移,迁移游标值初始时为源数据库中的各数据记录的最新修改时间中的最小时间。当然,在实际应用中,迁移游标值初始时也可以为该最小时间之前的任意时间,该最小时间只是初始时的迁移游标值的一个示例。
为了便于理解,首先对该方法的总体思路说明如下:将整个迁移过程分为多个周期执行,在每个周期分别将迁移游标值向时间前进方向推移一段距离,并将源数据库中与这段距离对应的数据(具体为源数据库中最新修改时间属于这段距离表示的时间区间内的各数据记录)向目标数据库迁移,以使迁移游标值与当前时间越来越接近(需要说明的是,由于当前时间也会不断前进,因此,应当使迁移游标值的推移速度大于当前时间的前进速度),从而,使得目标数据库与源数据库中的数据越来越接近。
当迁移游标值追上当前时间后,可以一边继续执行下一个周期,一边根据源数据库对应的原业务系统涉及的实时用户业务情况,以确定何时(如业务空闲时)将实时用户业务切换至目标数据库对应的新业务系统上,且在切换业务后源数据库上不存在尚未迁移的数据。
在本申请实施例中,对何时切换业务并不做限定。在上述的周期较短时(如当周期可以为秒级时),可以使目标数据库与源数据库中的数据尽量接近,因此,有利于尽快切换业务。
下面对本申请的方案进行具体说明。
图1中的方法的执行主体可以是具有数据迁移功能的终端或服务器,所述数据迁移功能可以以模块、装置或系统等形式实现。所述终端包括但不限于:个人计算机、手机、平板电脑、智能手表、车载移动台等;所述服务器包括但不限于:作为服务器的个人计算机、大中型计算机、计算机集群等。执行主体并不构成对本申请的限定。
图1中的方法的过程具体可以包括以下步骤:
S101:按照预定定时间隔,周期性地定时执行步骤S102~S104。
在本申请实施例中,一个周期即为一个预定定时间隔。在单节点的环境下,可以通过普通的定时器预先设定定时间隔,并周期性地自动触发步骤S102~S104的执行;而在分布式的环境下,可以通过相应的分布式定时调度框架预先设定定时间隔,并周期性地自动触发步骤S102~S104的执行。本申请对定时间隔的长度并不做限定。一般可以将定时间隔的长度设定在秒级程度。
需要说明的是,在本申请的方案的实施过程中,预定定时间隔也可以被修改,在这种情况下,所述的周期性对应的各个周期的长度也可能相应的发生变化。
S102:确定当前迁移游标值,以及从当前迁移游标值开始,按照时间前进方向,划分出连续的多个时间区间,将当前迁移游标值更新为所述多个时间区间内的最大时间,所述最大时间不超过当前时间。
在本申请实施例中,是基于迁移游标值,控制整个数据迁移过程的进度的,而迁移游标值则是基于源数据库中的数据记录的最新修改时间进行更新的。
由于在实施本申请的方案的过程中,并未停止源数据库对应的原业务系统的服务,因此,源数据库中的任一条数据记录都可能会更新,当某条数据记录更新时,该数据记录的最新修改时间会相应地更新为该数据记录更新时的时间。其中,数据记录的最新修改时间一般可以用数据记录中的特定字段自动记录,本申请对所述特定字段的名称和格式并不做限定。
根据上面的说明可知,源数据库中的每条数据记录的最新修改时间只可能向时间前进方向推进(也即,最新修改时间只可能不变或者变大),而不可能变小。因此,在初始时(也即,第一个周期开始时),可以将迁移游标值确定为源数据库中的各数据记录的最新修改时间中的最小时间,该最小时间对应的数据记录可以作为第一条被迁移的数据记录。
在本申请实施例中,在每一个周期内,可以将迁移游标值按照时间前进方向,推移一段距离。需要说明的是,所述距离是指两个时间之间的距离,而不是指两个地点之间的距离,比如,假定所述两个时间分别为:同一天的3点、5点,则所述两个时间之间的距离为2个小时。
在步骤S102中,所述两个时间分别为:所述当前迁移游标值、更新后的所述当前迁移游标值。相应地,这个周期对应的任务可以为:将源数据库中最新修改时间属于这两个时间之间的区间的各数据记录向目标数据库迁移。
进一步地,为了提高数据迁移速度,在步骤S102中,可以将上述的距离划分为连续的多个时间区间,以便于后续对应地生成多个迁移任务并发地执行。需要说明的是,本申请对划分出的时间区间的数量和每个时间区间的长度并不做限定。一般地,时间区间的长度可以设定在分钟级别或小时级别。
在本申请实施例中,在任意时刻,迁移游标值都是不大于当前时间的。
S103:针对划分出的每个时间区间,分别生成对应于该时间区间的迁移任务,该迁移任务用于将所述源数据库中的各数据记录中,当前最新修改时间属于该时间区间的数据记录向所述目标数据库迁移。
在本申请实施例中,对迁移任务的表示方法并不做限定。一般的,可以采用特定格式对迁移任务进行表示,特定格式中可以包括若干字段,用于描述迁移任务的相关信息,比如迁移任务对应的时间区间、迁移任务对应的时间区间在各时间区间中的顺序、迁移任务的状态(执行成功或执行失败等)、源数据库地址等信息。
在本申请实施例中,可以在执行迁移任务时,再实时地获取迁移任务对应的各数据记录,也可以在生成迁移任务时,就获取迁移任务对应的各数据记录。
S104:并发执行生成的各迁移任务。
在本申请实施例中,生成的各迁移任务可以由执行主体采用多线程的方式并发执行,或者,也可以将生成的各迁移任务分发给分布式集群,由分布式集群采用多机器和/多线程的方式并发执行,等等。
需要说明的是,“并发执行”指的是各迁移任务可以分别由不同的机器或者不同的线程独立执行,这些独立执行的过程在时间上可以发生重叠,这些独立执行的过程可以同步地进行,也可以不同步地进行。
通过图1中的方法,无需将源数据库对应的原业务系统停止服务,就可以将源数据库中的数据向目标数据库迁移,而且即使在迁移过程中,源数据库中的数据发生变化,也可以在迁移游标值向前推移的过程中对变化后的数据再次迁移,因此,可以保证数据迁移的准确性,不会对用户业务造成不良影响;不仅如此,由于是通过生成多个迁移任务并行执行的方式进行数据迁移,因此,可以提高数据迁移效率。从而解决了现有技术中的问题。
为了便于理解,下面对图1中的步骤以及本申请提供了其他扩展方案进一步地说明。
在本申请实施例中,对于步骤S104,在执行迁移任务前以及执行迁移任务的过程中,可能会发生异常导致迁移任务无法被成功执行,异常包括但不限于:设备断电停机、执行迁移任务的进程或线程被杀死、程序异常退出,等等。为了防止异常导致的迁移数据遗漏的问题,可以分别对每个迁移任务的状态进行维护,迁移任务的状态至少可以包括:失败状态、成功状态;每个迁移任务在任一时刻只能被标记其中一种状态。
进而,对于步骤S104,在生成迁移任务后,执行迁移任务前,可以将迁移任务默认地标记为失败状态,相应地,在执行迁移任务后,当确定迁移任务执行成功时,可以对迁移任务的状态由失败状态修改为成功状态,也即,将迁移任务标记为成功状态。这样的话,由于迁移任务在被执行成功之前,都是被标记为失败状态的,因此,即使有一些迁移任务由于上述异常的原因,导致未开始执行或者未能成功执行,也可以根据这些迁移任务被标记的失败状态,实时地或者定时地触发这些迁移任务重新执行。
以“定时地重新执行这些迁移任务”这种处理方式为例。具体地,可以按照预定定时间隔,周期性地定时执行:确定被标记为失败状态的迁移任务,以及执行确定的迁移任务。需要说明的是,该段中的“预定定时间隔”与步骤S101中的“预定定时间隔”可以不同,也可以相同,本申请对此并不做限定。本段中的“定时地重新执行这些迁移任务”的过程可以提高数据迁移的可靠性、容错性,该过程与图1中的过程可以是相对独立地并行执行的。
进一步地,由于并非每个处于失败状态的迁移任务都是执行失败的,因此,在实际应用中,还可以为每个迁移任务设定超时门限用于进行超时检查。具体地,在确定被标记为失败状态的迁移任务后,可以判断该迁移任务自生成时的时间与当前时间之间的时间间隔是否大于超时门限,若是,则可以认为该迁移任务是异常的,进而可以重新执行该迁移任务,否则,可以认为该迁移任务上还没有来得及被执行,而并非是异常的,进而可以暂时不重新执行该迁移任务。
需要说明的是,上面提到的“失败状态”、“成功状态”只是迁移任务的状态的示例。在实际应用中,迁移任务的状态还可以进一步地细分为更多数量的状态。
例如,迁移任务的状态可以包括:尚未执行状态、首次执行中状态、执行失败状态、重试执行中状态、执行成功状态等。在这种情况下,迁移任务在首次执行前,可以被默认地标记为尚未执行状态,在执行步骤S104的同时,可以按照预定定时间隔,周期性地定时执行:确定被标记为尚未执行状态或执行失败状态的迁移任务,以及执行确定的迁移任务。类似地,在该段的过程中也可以进行超时检查。
在本申请实施例中,对于步骤S104中并发执行的各迁移任务,每个迁移任务可以按照如下方式执行:根据迁移任务对应的时间区间,从源数据库中获取当前最新修改时间属于该时间区间的数据记录;将获取的数据记录向目标数据库迁移。在实际应用中,迁移任务的执行可以有不同的具体实施过程,下面进行说明。
在步骤S104中通过并发执行各迁移任务的方式提高了数据迁移效率,在此基础上还可以进一步地提高数据迁移效率,通过本申请提供的迁移任务的执行的一种具体实施过程可以实现。这种具体实施过程的总体思路是:将每个迁移任务进一步地拆分为多个子任务,采用多线程并发执行拆分出的多个子任务。
对于这种具体实施过程,根据所述迁移任务对应的时间区间,从所述源数据库中获取当前最新修改时间属于该时间区间的数据记录,可以包括:根据所述迁移任务对应的时间区间,将所述迁移任务拆分为具有先后顺序的多个子任务,其中,每个子任务分别用于将所述源数据库中的各数据记录中当前最新修改时间属于该时间区间的、不大于预定数量的数据记录向所述目标数据库迁移;根据所述源数据库中数据记录的主键值和所述多个子任务的顺序,依次获取每个子任务对应的各数据记录,以使每个子任务对应的各数据记录的最小主键值大于这个子任务的前一个子任务对应的各数据记录的最大主键值。
其中,迁移任务对应的数据记录的数量,与该迁移任务拆分出的各子任务对应的数据记录的总数量相等。
可以看到,在上一段获取数据记录的过程中,基于相邻的子任务对应的数据记录的主键值,对各子任务进行了限定。作此限定的原因是为了防止在拆分出各子任务以及获取各子任务对应的数据记录的过程中,由于各数据记录可能会发生更新,进而导致数据遗漏的问题。下面举例进行说明。
假定未基于主键值获取由迁移任务拆分出的各子任务对应的数据记录。则可以采用诸如以下结构化查询语言(Structured Query Language,SQL)语句获取各子任务对应的数据记录:
“select * from source_table where#start#<=gmt_modified and gmt_modified<#end#order by gmt_modified limit n*100,100;”。
其中,“start”为该迁移任务对应的时间区间的起始时间,“end”为该迁移任务对应的时间区间的结束时间;“gmt_modified”为数据记录的最新修改时间。
但是,在上述SQL语句的情况下,在已获取某个子任务对应的数据记录(假定为第1~100条)后,若这个子任务对应的某条数据(假定为第99条)记录发生更新(则第99条将不属于该时间区间),更新后若再获取下一个子任务对应的数据记录(会获取到第102~201条、),将会遗漏1条数据记录(即为第101条)。
为了解决以上问题,可以基于主键值获取由迁移任务拆分出的各子任务对应的数据记录,具体地,可以采用诸如以下SQL语句获取各子任务对应的数据记录:
“select * from source_table where#start#<=gmt_modified and gmt_modified<#end#and id>#last_max_id#order by gmt_modified,id limit n*100,100;”。
其中,“id”为数据记录的主键值,“last_max_id”为上一个子任务的对应的各数据记录的最大主键值。
进一步地,对于这种具体实施过程,将获取的数据记录向所述目标数据库迁移,可以包括:基于多线程并发执行所述多个子任务,其中,按照如下方式执行每个子任务:将获取的这个子任务对应的各数据记录向所述目标数据库迁移。
在本申请实施例中,新业务系统可能对原业务系统的业务涉及的数据结构进行了修改,使得新业务系统和原业务系统的业务互为异构业务。在这种情况下,将源数据库中的数据向目标数据库进行迁移时,也需要对这些数据进行相应的数据结构转换,再写入目标数据库中,否则,可能会导致迁移的数据无法正常使用。因此,上面提到的“将获取的数据记录向所述目标数据库迁移”,可以包括:根据预定数据结构转换规则,对获取的数据记录进行数据结构转换;将数据结构转换后的数据记录写入所述目标数据库中。其中,预定数据结构转换规则可以根据新业务系统和原业务系统的业务确定,本申请对此并不做限定。
进一步地,为了减少提高本申请的方案的实施成本,可以将“获取数据记录”、“对获取的数据记录进行数据结构转换”、“将转换后的数据记录写入目标数据库”等通用性较高的步骤的抽象为业务逻辑模板,以便于在各种应用场景下复用。
在本申请实施例中,根据上面的说明可知,执行任一迁移任务的过程即为将这个迁移任务对应的各数据记录进行迁移的过程。对数据记录的迁移可能会失败,为了防止少数的数据记录迁移失败导致对应的迁移任务执行失败,还可以实时地或定时地对迁移失败的数据记录重新进行迁移。
以“定时地对迁移失败的数据记录重新进行迁移”这种处理方式为例。具体地,可以按照预定定时间隔,周期性地定时执行:确定迁移失败的数据记录,以及重新迁移确定的数据记录。需要说明的是,该段中的“预定定时间隔”与步骤S101中的“预定定时间隔”可以不同,也可以相同,本申请对此并不做限定。
根据上面的说明,本申请针对迁移过程中可能出现的异常,提供有两种解决方案,一种是对标记为失败状态的迁移任务的重试,一种是对迁移失败的数据记录的重试。这两种解决方案提高了数据迁移的可靠性、容错性。
在本申请实施例中,由于数据迁移需要花费一定的时间,因此,源数据库中的数据的最新修改时间与将该数据迁移至目标数据库中的生效时间之间会有延迟,可以会根据延迟大小,调整各迁移任务的并发执行数和/或各子任务的并发执行数,从而将后续迁移数据的延迟控制在可以接受的范围内。
具体地,迁移数据记录后,可以执行:确定迁移成功的数据记录在所述目标数据库中的生效时间,以及所述数据记录在迁移前的最新修改时间;根据确定的所述生效时间和所述最新修改时间,确定所述数据记录的迁移延迟时间;根据所述迁移延迟时间,对所述各迁移任务的并发执行数和/或所述多个子任务的并发执行数进行调整。例如,当迁移延迟时间较大时,可以增加并发执行数,当迁移延迟时间足够小时,也可以适当地减少并发执行数。
以上对图1中的步骤以及本申请提供了其他扩展方案进一步地进行了说明。基于这些说明,对比于现有技术,对本申请的方案的优点进行总结。
相比于背景技术中提到的第一种数据迁移方式,第一种数据迁移方式只适用于待迁移数据量较小的场景。本申请的方案则不受待迁移数据量多少的限制,无需中间文件来暂存要迁移的数据,提高了数据迁移的效率;而且可以将迁移过程中的很多步骤抽象为容易复用的业务逻辑模板,以及针对容易产生瓶颈的读取和写入数据的步骤(包含在迁移任务的过程中),设计了分布式、多线程的扩展方案,从而实现了数据迁移在效率上的高效性和扩展性。
相比于背景技术中提到的第二种数据迁移方式,第二种数据迁移方式需要停止原业务系统的服务,这对于诸如互联网应用等有持续用户访问需求的系统是不可接受的。本申请的方案则无需停止原业务系统的服务,而且由于源数据库最新被修改的数据记录的最新修改时间总是会大于迁移游标值,因此,可以保证最新被修改的数据记录随着迁移游标值的向前推移总是能够被向目标数据库中迁移,从而实现了增量数据的迁移,避免了对用户业务造成不良影响。
需要说明的是,现有技术中除了有上述的两种数据迁移方式以外,常用的还有另一种数据迁移方式。另一种数据迁移方式为:基于源数据库的操作日志,在目标数据库上回放源数据库上的所有操作,也即,将源数据库中的每条数据记录的每个操作记录都同步到目标数据库上。其缺点是不支持数据结构的变更。而本申请的方案通过在迁移过程中对数据记录进行数据结构转换,可以解决这个问题。
在本申请实施例中,还提供了在实际应用场景中,本申请的方案的一种具体实施过程的简略示意图。如图2所示。
在图2中,一共涉及五个设备或功能模块,即:分布式定时调度、迁移系统、迁移系统存储、源数据库、目标数据库。
图2中的过程主要包括三部分。
第一部分,周期性地定时生成迁移任务,以及执行迁移任务;
第二部分,周期性地定时进行失败补偿,这里的失败补偿是指对单条数据记录执行失败时的补偿(简称为:单条补偿);
第三部分,周期性地定时进行迁移任务补偿,这里的迁移任务补偿是指对迁移任务执行失败或超时的补偿;
其中,上述的补偿的具体方式可以是重试。具体地,对于单条数据记录,是重新进行迁移,对于迁移任务,是重新执行。
在本申请实施例中,通过单条补偿和迁移任务补偿,提高了数据迁移的可靠性、容错性,采用图3进行说明。
在图3中,示出了在某个周期内生成的n个迁移任务,其中,“min_modify”是n个迁移任务对应的数据记录的最新修改时间中的最小时间,“max_modify”是n个迁移任务对应的数据记录的最新修改时间中的最大时间。其中,n为不小于2的整数。
将迁移任务的执行状况分为三种。
第一种是由于系统异常导致迁移任务异常,针对这种状况,可以通过迁移任务补偿应对;
第二种是迁移任务执行成功。
第三种是迁移任务对应的各数据记录中,至少有一条数据记录迁移失败(执行异常),针对这种状况,可以通过针对迁移失败的数据记录分别进行单条补偿应对。
在本申请实施例中,还提供了在实际应用场景中,一种执行迁移任务的过程,该过程如图4所示。
在图4中,任务分片即为上述的迁移任务。通过两次分片(物理分片、内部分片)以及并发执行提高了数据迁移的效率。
由加载器(Loader)在每个周期内根据迁移游标值,将这个周期对应的任务进行物理分片,对应地生成多个任务分片,每个任务分片包含有这个任务分片相关信息,比如描述这个任务分片对应的数据记录的最新修改时间中的最小时间的“ST_GMT”字段信息、描述这个任务分片对应的时间区间长度(也可以成为:时间步长)的“STEP”字段信息、描述这个任务分片的状态的“STATUS”字段信息,等等。
加载器可以将各任务分片分发给多个执行器(Executor)并发执行,执行器可以进一步地对任务分片进行内部分片,生成多个子任务(比如,每个子任务可以对应于100条数据记录),并采用多线程的方式并发执行各子任务。
以上为本申请实施例提供的数据迁移方法,基于同样的思路,本申请实施例还提供相应的数据迁移装置,如图5所示。
图5为本申请实施例提供的数据迁移装置结构示意图,所述装置用于基于迁移游标值,将源数据库中的数据向目标数据库迁移,所述迁移游标值初始时为所述源数据库中的各数据记录的最新修改时间中的最小时间,所述装置包括:
游标值更新模块501,用于确定当前迁移游标值,以及从当前迁移游标值开始,按照时间前进方向,划分出连续的多个时间区间,将当前迁移游标值更新为所述多个时间区间内的最大时间,所述最大时间不超过当前时间;
任务生成模块502,用于针对划分出的每个时间区间,分别生成对应于该时间区间的迁移任务,该迁移任务用于将所述源数据库中的各数据记录中,当前最新修改时间属于该时间区间的数据记录向所述目标数据库迁移;
迁移模块503,用于并发执行生成的各迁移任务。
通过图5中的装置,无需将源数据库对应的原业务系统停止服务,就可以将源数据库中的数据向目标数据库迁移,而且即使在迁移过程中,源数据库中的数据发生变化,也可以在迁移游标值向前推移的过程中对变化后的数据再次迁移,因此,可以保证数据迁移的准确性,不会对用户业务造成不良影响;不仅如此,由于是通过生成多个迁移任务并行执行的方式进行数据迁移,因此,可以提高数据迁移效率。从而解决了现有技术中的问题
可选地,所述装置还包括:
状态标记模块504,用于在迁移模块503并发执行生成的各迁移任务前,将所述迁移任务默认地标记为失败状态;以及
用于在迁移模块503并发执行生成的各迁移任务后,当确定所述迁移任务执行成功时,将所述迁移任务标记为成功状态。
可选地,所述装置还包括:
任务补偿模块505,用于按照预定定时间隔,周期性地定时执行:确定被标记为失败状态的迁移任务,以及执行确定的迁移任务。
可选地,迁移模块503具体用于按照如下方式执行生成的每个迁移任务:根据所述迁移任务对应的时间区间,从所述源数据库中获取当前最新修改时间属于该时间区间的数据记录;将获取的数据记录向所述目标数据库迁移。
可选地,迁移模块503具体用于:根据所述迁移任务对应的时间区间,将所述迁移任务拆分为具有先后顺序的多个子任务,其中,每个子任务分别用于将所述源数据库中的各数据记录中当前最新修改时间属于该时间区间的、不大于预定数量的数据记录向所述目标数据库迁移;根据所述源数据库中数据记录的主键值和所述多个子任务的顺序,依次获取每个子任务对应的各数据记录,以使每个子任务对应的各数据记录的最小主键值大于这个子任务的前一个子任务对应的各数据记录的最大主键值。
可选地,迁移模块503具体用于:基于多线程并发执行所述多个子任务,其中,按照如下方式执行每个子任务:将获取的这个子任务对应的各数据记录向所述目标数据库迁移。
可选地,迁移模块503具体用于:根据预定数据结构转换规则,对获取的数据记录进行数据结构转换;将数据结构转换后的数据记录写入所述目标数据库中。
可选地,所述装置还包括:
记录补偿模块506,用于按照预定定时间隔,周期性地定时执行:确定迁移失败的数据记录,以及重新迁移确定的数据记录。
可选地,所述装置还包括:
并发数调整模块507,用于确定迁移成功的数据记录在所述目标数据库中的生效时间,以及所述数据记录在迁移前的最新修改时间;根据确定的所述生效时间和所述最新修改时间,确定所述数据记录的迁移延迟时间;根据所述迁移延迟时间,对所述各迁移任务的并发执行数和/或所述多个子任务的并发执行数进行调整。
具体的上述如图5所示的装置可以位于具有数据迁移功能的终端或服务器上。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。