CN108304553B - 数据迁移方法、装置、计算机设备和存储介质 - Google Patents
数据迁移方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN108304553B CN108304553B CN201810103315.7A CN201810103315A CN108304553B CN 108304553 B CN108304553 B CN 108304553B CN 201810103315 A CN201810103315 A CN 201810103315A CN 108304553 B CN108304553 B CN 108304553B
- Authority
- CN
- China
- Prior art keywords
- imported
- data
- database
- current index
- index
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/214—Database migration support
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种数据迁移方法、系统、计算机设备和存储介质。所述方法包括:查询中间数据库中是否存在未从源数据库导入至目标数据库的数据的当前索引;若存在,则从中间数据库获取与当前索引对应的未导入数据;将与当前索引对应的未导入数据导入目标数据库;获取与当前索引对应的未导入数据导入目标数据库的综合导入结果,并查询中间数据库中是否存在未从源数据库导入至目标数据库的新的数据的索引;若存在,则根据综合导入结果和新的数据的索引更新当前索引;根据从中间数据库中获取与更新后的当前索引对应的未导入数据,并将与更新后的当前索引对应的未导入数据导入目标数据库。采用本方法能够提高数据迁移的准确性。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种数据迁移方法、装置、计算机设备和存储介质。
背景技术
随着现代科技的发展,人们的生活越来越离不开数据,而我们日常所用的各种存储系统也是依托数据来执行各种功能,数据库管理得到越来越广泛的应用,而在使用数据库的过程中,由于系统的切换和对不同系统中数据的统计和筛选等需求,经常需要进行数据迁移。
在传统的数据迁移过程中,由于迁移数据的数量庞大,需要较长的迁移时间,而在此期间如果目标数据库或者迁移线路出现异常,则会导致数据丢失,造成数据迁移的不准确。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高数据迁移准确性的数据迁移方法、装置、计算机设备和存储介质。
一种数据迁移方法,所述方法包括:
查询中间数据库中是否存在未从源数据库导入至目标数据库的数据的当前索引;若存在,则从所述中间数据库获取与所述当前索引对应的未导入数据;
将与所述当前索引对应的所述未导入数据导入所述目标数据库;
获取与所述当前索引对应的所述未导入数据导入所述目标数据库的综合导入结果,并查询所述中间数据库中是否存在未从源数据库导入至目标数据库的新的数据的索引;若存在,则根据所述综合导入结果和所述新的数据的索引更新所述当前索引;
根据从所述中间数据库中获取与更新后的所述当前索引对应的未导入数据,并将与更新后的所述当前索引对应的所述未导入数据导入目标数据库。
在其中一个实施例中,所述将与所述当前索引对应的所述未导入数据导入所述目标数据库,包括:
按照预设分批逻辑将与所述当前索引对应的所述未导入数据进行分批处理;
将分批处理后的所述未导入数据分批导入所述目标数据库;
所述获取与所述当前索引对应的所述未导入数据导入所述目标数据库的综合导入结果,包括:
获取每一批所述未导入数据导入所述目标数据库的批次导入结果,并根据所述批次导入结果得到综合导入结果。
在其中一个实施例中,所述将与更新后的所述当前索引对应的所述未导入数据导入目标数据库,包括:
统计与更新后的所述当前索引对应的所述未导入数据的条数,当与更新后的所述当前索引对应的所述未导入数据的条数大于0且小于预设条数时,将所述更新后的当前索引清空;
将与更新后的所述当前索引对应的所述未导入数据导入到目标数据库中。
在其中一个实施例中,所述将与更新后的所述当前索引对应的所述未导入数据导入目标数据库,包括:
统计与更新后的所述当前索引对应的所述未导入数据的条数,当与更新后的所述当前索引对应的所述未导入数据的条数大于等于预设条数时,将与更新后的所述当前索引对应的所述未导入数据导入到所述目标数据库中,并获取与更新后的所述当前索引对应的所述未导入数据导入到所述目标数据库后的综合导入结果后;继续查询所述中间数据库中是否存在未从源数据库导入至目标数据库的新的数据的索引。
在其中一个实施例中,所述统计与更新后的所述当前索引对应的所述未导入数据的条数之后,还包括:
当与更新后的所述当前索引对应的所述未导入数据的条数小于等于0时,则将所述更新后的当前索引清空。
在其中一个实施例中,所述方法还包括:
当未获取到与所述当前索引对应的未导入数据时,则输出索引错误信息;
接收针对所述当前索引的修正指令;
根据所述修正指令建立所述当前索引以及所述当前索引对应的未导入数据的映射关系,并继续从所述中间数据库获取与所述当前索引对应的未导入数据。
一种数据迁移装置,所述装置包括:
查询模块,用于查询中间数据库中是否存在未从源数据库导入至目标数据库的数据的当前索引;若存在,则从所述中间数据库获取与所述当前索引对应的未导入数据;
第一导入模块,用于将与所述当前索引对应的所述未导入数据导入所述目标数据库;
更新模块,用于获取与所述当前索引对应的所述未导入数据导入所述目标数据库的综合导入结果,并查询所述中间数据库中是否存在未从源数据库导入至目标数据库的新的数据的索引;若存在,则根据所述综合导入结果和所述新的数据的索引更新所述当前索引;
第二导入模块,用于根据从所述中间数据库中获取与更新后的所述当前索引对应的未导入数据,并将与更新后的所述当前索引对应的所述未导入数据导入目标数据库。
在其中一个实施例中,所述第一导入模块包括:
数据单元,用于按照预设分批逻辑将与所述当前索引对应的所述未导入数据进行分批处理;
批次导入单元,用于将分批处理后的所述未导入数据分批导入所述目标数据库;
则所述第二查询模块,还用于获取每一批所述未导入数据导入所述目标数据库的批次导入结果,并根据所述批次导入结果得到综合导入结果。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述的方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的方法的步骤。
上述数据迁移方法、装置、计算机设备和存储介质,涉及两次数据迁移的过程:第一次是在查询到存在未从源数据库导入至目标数据库的数据的当前索引,即将中间数据库中的未导入数据导入到目标数据库;若第一次数据迁移已经将中间数据库中的全部数据导入目标数据库且在此过程中中间数据库中未生成其他待导入数据,则可直接结束此次迁移。否则,则需进行第二次数据迁移的检查,将第一次数据导入失败的数据和在第一次导入过程中中间数据库新生成的异常数据导入目标数据库。上述的数据迁移方法、装置、计算机设备和存储介质,使用中间数据库中的索引生成的当前索引,作为数据导入的执行目录,通过两次的数据检测和导入的过程,能够提高数据迁移的准确性。
附图说明
图1为一个实施例中数据迁移方法的应用场景图;
图2为一个实施例中数据迁移方法的流程示意图;
图3为一个实施例中人工干预步骤的流程示意图;
图4为一个实施例中数据迁移装置的结构框图;
图5为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的数据迁移方法,可以应用于如图1所示的应用环境中。其中,控制器通过网络传输、无线电通讯或者内部线路连接的方式控制源数据库、中间数据库和目的数据库之间的数据交互。在本场景中,将数据从源数据库迁移到目标数据库;当目标数据库发生异常或者在迁移过程中存在数据迁移的线路错误等问题,需要先将异常发生期间未迁移至目标数据库的数据线存储在中间数据库中,待异常问题被解决后,将中间数据库中存储的数据迁移至目标数据库,并通过二次查询当前索引以确定是否所有未迁移的数据均迁移到目标数据库,以保证所有待迁移数据都可以从源数据库迁移至目标数据库,提高数据迁移的准确性。其中,控制器可以是但不限于是个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,控制器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图2所示,提供了一种数据迁移方法,以该方法应用于图1中的控制器为例进行说明,包括以下步骤:
S202,查询中间数据库中是否存在未从源数据库导入至目标数据库的数据的当前索引;若存在,则从中间数据库获取与当前索引对应的未导入数据。
具体地,在数据从源数据库导入至目的数据库时,若目的数据库发生异常或者传输线路发生异常,则先将这期间需要迁移的数据先存储在中间数据库中;待异常问题被解决后,再将中间数据库中的数据迁移至目的数据库中。
其中,中间数据库是通过索引管理存储的数据,即一个索引对应一条数据,如Oracle数据库(一款关系数据库管理系统,数据存储方式包括索引管理),源数据库和目标数据库可以为RMS(一款实际生活中常用的数字资源管理共享系统)或MongoDB(是一个基于分布式文件存储的数据库,由C++语言编写),当前索引是本次需要迁移的数据对应的索引,是根据中间数据库中的索引建立的。
具体地,控制器可以通过设置任务开关的方式控制数据迁移方法的启动和结束,当任务开关打开时,则控制器控制中间数据库检测在这段时间内是否存在需要导入目的数据库中的数据的索引,若存在,则开始数据导入。
控制器还可以通过设置定时器的方式,每隔一段时间,定时器触发任务开关开启,启动一次本数据迁移方法,检测在这段时间内中间数据库中是否存在需要导入目的数据库中的异常信息。其中定时器启动时间间隔可根据具体的网络环境以及目的数据库的运行稳定度来设置;若网络状况较差或者目的数据库不稳定,可相应缩短间隔时间。避免由于间隔时间过长,造成中间数据库中存储的数据量过大,则要迁移这部分数据会占用过多的软硬件设施,造成数据迁移的效率较低。例如,控制器可以获取到当前网络环境参数和/目标数据库的运行稳定度,并根据所获取到的当前网络环境参数和/目标数据库的运行稳定度计算定时器启动时间间隔,通过所计算得到的定时器启动时间间隔相应地调整定时器的周期。其中可以通过表格的方式预设当前网络环境参数以及目标数据库的运行稳定度与定时器启动时间间隔的关联关系,从而可以通过查表来获取到与当前网络环境参数以及目标数据库的运行稳定度对应的定时器启动时间间隔。
每次在将源数据库中的数据迁移到目标数据库时,控制器控制中间数据库检查中间数据库中是否存在需要执行迁移的数据的索引,若存在需要执行迁移的数据的索引,则表示存在需要迁移的数据,即在将源数据库导入到目标数据库时所产生的未导入数据。将这一部分的数据的索引作为当前索引,若中间数据库中不存在索引,则表示中间数据库中不存在需要迁移至目标数据库的数据,即在将源数据库中的数据导入到目标数据库的时候,未产生未导入数据,因此结束此次的数据迁移,任务开关关闭,不做任何动作。
S204,将与当前索引对应的未导入数据导入目标数据库。
具体地,在检查出中间数据库中存在需要迁移的数据后,继续根据当前索引,找到当前索引所对应的未导入数据在中间数据库中的存储位置,将未导入数据从当前存储位置导入到目标数据库中的指定位置即可,为方便说明,以下均称此次数据导入为第一次数据导入。
S206,获取与当前索引对应的未导入数据导入目标数据库的综合导入结果,并查询中间数据库中是否存在未从源数据库导入至目标数据库的新的数据的索引;若存在,则根据综合导入结果和新的数据的索引更新当前索引。
其中,综合导入结果是将与当前索引对应的未导入数据导入至目标数据库后,控制器检测当前索引对应的数据是否成功导入目标数据库,生成的导入结果,即将未导入数据从中间数据库导入到目标数据库时所产生的未导入的数据,即上文中第一次数据导入所产生的未导入数据。
具体地,在控制器生成针对第一次数据导入的综合导入结果后,再检测在第一次数据导入过程中,是否存在新的数据索引,然后控制器根据此次生成的导入结果和检测到的新的数据索引来更新当前索引,即将上次未导入成功的数据和在上次导入过程中中间数据库新产生的数据对应的索引更新到当前索引中,从而可以保证数据的完整性,避免将在第一数据导入过程中,源数据库向目标数据库导入所产生的新的未导入数据丢失,进一步保证将源数据库的数据全部导入到目标数据库中。且在第一次数据导入完成后,如果将中间数据库中的数据均导入到了目标数据库,则控制器可以直接关闭任务开关,不进行其他操作,而如果中间数据库中还存在未导入成功的数据时,例如导入失败或者产生了新的数据时,则控制开关保持任务开关的开启状态,控制器检测到任务开关仍保持开启状态后,可以先根据更新后的当前索引校验当前索引对应的数据导入任务是否已经执行,若执行,则结束数据迁移流程;若存在未被执行的数据导入任务,则从而可以继续将中间数据库中的未导入数据导入到目标数据库。
S208,根据从中间数据库中获取与更新后的当前索引对应的未导入数据,并将与更新后的当前索引对应的未导入数据导入目标数据库。
具体地,在步骤S206中更新了当前索引后,则需根据更新后的索引获取对应的数据在中间数据库中存储的位置,再将这部分数据导入到目标数据库中的指定位置,这次数据导入的过程为方便理解,以下均称为第二次数据导入。
例如,在一次数据迁移操作中的应用场景中,所述源数据库为RMS系统,目的数据库为MongoDB,中间数据库为Oracle。正常流程为将即RMS系统的业务日志直接通过多线程批量插入至MongoDB,但在实际处理过程中,若MongoDB出现异常,则会导致异常期间的数据丢失;为保证迁移过程中不发生数据丢失的情况,则在MongoDB发生异常时,先将MongoDB异常期间的数据存储到Oracle中,等MongoDB恢复正常后再将存储于Oracle的数据导入到MongoDB中;导入后,根据导入的结果更新索引;再检查更新后的索引中的任务未被执行的数据,将Oracle中对应的未执行的日志数据到入Mongo中,直至接收到任务开关关闭的指令,结束数据检查,将正在导入的数据导入结束后,数据迁移结束。在实际的RMS数据导入MongoDB的过程中,需要实时监测导入结果的准确性,但长时间开启Oracle迁移Mongo的线程,易造成系统资源的浪费;故开启一个定时器任务,将2小时作为一个固定时间段,每过两小时,则触发检测任务开关开启,开始检测这两小时内的导入进程中,检查是否存在未从源数据库导入目的数据库的数据,开始上面实例中的数据迁移进程。
上述数据迁移方法中,第一次数据导入是在检测到任务开关开启后,查询中间数据库中存在未从源数据库导入至目标数据库的数据的当前索引,即将中间数据库中的未导入数据导入到目标数据库;若第一次数据迁移已经将中间数据库中的全部数据导入目标数据库且在此过程中中间数据库中未生成其他待导入数据,则可关闭任务开关,直接结束此次数据迁移。否则,则继续保持任务开关开启,进行第二次数据导入的检查,将第一次数据导入失败的数据和在第一次导入过程中中间数据库新生成的异常数据导入目标数据库,待检测到任务开关关闭后,则结束整个数据迁移的过程。上述的数据迁移方法,使用中间数据库中存储的数据的索引生成的当前索引,作为数据导入的执行目录,通过两次的数据检测和导入的过程,能够提高数据迁移的准确性。通过定时任务的设置,在预定时间段内进行一次数据的检测、迁移,可以充分利用系统资源,同时也可以保证迁移数据的时效性,不会因为待迁移数据堆积,造成系统堵塞。
在其中一个实施例中,图2所示实施例中的数据迁移方法的流程图中,步骤S204中将与当前索引对应的未导入数据导入目标数据库,可以包括:按照预设分批逻辑将与当前索引对应的未导入数据进行分批处理;再将分批处理后的未导入数据分批导入目标数据库。从而在图2中的S206,即获取与当前索引对应的未导入数据导入目标数据库的综合导入结果,可以包括:获取每一批未导入数据导入目标数据库的批次导入结果,并根据批次导入结果得到综合导入结果。
其中,预设分批逻辑是按照待导入数据的大小、数据条数和导入速度得出的,为方便数据导入过程而设置的将待导入数据分成多个批次的预设逻辑。如待导入数据为1000条,则可按照每批次100条,将待导入数据根据预设分批逻辑分为10个批次。或者可按照数据大小设置此预设分批逻辑,将待导入数据分为数据大小相同的多个批次。且对于上述任务开关,由于将未导入数据划分为多个批次,当判断每一个批次都导入成功后,才会将任务开关关闭,当至少有一个批次未导入成功,则继续保持任务开关的开启状态,直至本次任务中的未导入数据均导入至目标数据库中。
具体地,在将中间数据库中存储的数据导入到目的数据库的过程中,由于,数据量较大,可以使用Redis开启多线程导入,每个线程获取任务文件中的相应索引,执行数据导入的操作,各线程相互独立,不会相互影响。Redis是一个高性能的key-value数据库,支持主从同步,可以将数据从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器,使得Redis可执行单层树复制,具有多线程、低频发的特点。
上述的Redis多线程数据导入的步骤可以具体描述为:将根据中间数据库中的索引生成的当前索引根据预设分批逻辑分为多个批次,可根据索引的条数或者是数据的大小进行分批;再通过Redis将分批完的数据的每一批次启动一个线程执行数据导入的操作,最后对所有批次的导入结果(即批次导入结果)进行统计汇总,得到综合导入结果。只有当所有的批次导入结果都为导入成功时,即综合导入结果为成功,才关闭任务开关,数据迁移结束;若批次导入结果中有失败的结果,即综合导入结果中有导入失败的情况,仍然保持任务开关开启,进入第二次数据导入前的检查过程。
上述实施例中,通过对数据的分批次导入,提高了数据迁移的效率,且在导入过程中,各批次之间不会相互干扰,某一批次在导入过程中若存在问题,也不影响其他的导入线程,使得上述的数据迁移方法执行时的准确性更高,并且通过对批次导入结果的追踪,方便后续的检测和管理。
在其中一个实施例中,将与更新后的当前索引对应的未导入数据导入目标数据库,包括:统计与更新后的当前索引对应的未导入数据的条数,当与更新后的当前索引对应的未导入数据的条数大于0且小于预设条数时,将更新后的当前索引清空。
其中,预设条数是在根据测试经验所得出的一次导入时成功率最高的待导入数据的条数,如在测试中我们得出每次导入30条数据时,所有的30条数据都能够被导入成功。
具体地,在第二次数据导入时,先检查第一次数据导入的综合导入结果和中间数据库中是否有新的需要导入到目的数据库中的数据,然后将这部分数据的索引更新至当前索引中,然后查询更新后的当前索引所对应的未导入数据的条数,若条数小于预设条数且大于0时,表示已经遍历中间数据库中的所有的待导入数据,且中间数据库中待迁移的数据数量较少,在预设条数之内,能够保证此次的数据导入全部成功,只需将这些数据进行迁移即可,无需再进行下一循环的数据检查,即将更新后的当前索引清空,关闭任务开关,表示数据迁移的检查步骤结束。第二次数据导入的数据量通常要比第一次导入的少,所以可按照实际的数据量情况,考虑是否要起用多线程操作。将与更新后的当前索引对应的未导入数据导入到目标数据库中。而由于在上一步骤中清空更新后的当前索引之前,已经读取了对应的需要迁移的数据,在此步骤中需要对这一部分进行迁移。
上述实施例中,描述了在第二次导入过程中,检测到的待导入数据的条数大于0小于预设条数时,可将待迁移数据全部进行一次性导入,即可结束数据迁移的操作,保证了数据迁移的成功率和准确性,且不需继续检测,也保证了数据迁移的操作简洁。
在其中一个实施例中,图2中的步骤S208中将与更新后的当前索引对应的未导入数据导入目标数据库包括:统计与更新后的当前索引对应的未导入数据的条数;当与更新后的当前索引对应的未导入数据的条数大于等于预设条数时,将与更新后的当前索引对应的未导入数据导入到目标数据库中。获取与更新后的当前索引对应的未导入数据导入到目标数据库后的综合导入结果。继续S206中查询中间数据库中是否存在未从源数据库导入至目标数据库的新的数据的索引。
对比于上面的一个实施例中的步骤,此实施例中介绍了当统计后的待更新数据的条数大于等于预设条数时,即表明当前检查到的待更新数据已经达到检查的数据条数计数表的上限,但不能排除在中间数据库中除当前的未执行条数之外还存在未遍历到的数据,所以要进行下一循环的检测过程,故此实施例中需要保持任务开关的打开,先将当前检查到的待迁移数据导入至目的数据库中,并获取导入的结果,在将此次的导入结果作为综合导入结果,回到图2中的步骤S206中查询中间数据库中是否存在未从源数据库导入至目标数据库的新的数据的索引。
例如,当预设条数为30条时,当在中间数据库中检测到的待导入数据的条数为30条时,先将这30条数据导入到目的数据库中,得到导入结果作为综合导入结果,但仍然保持任务开关开启;控制器识别到任务开关开启后,继续检测中间数据库中是否存在需要导入目的数据库的待导入数据的索引,然后再统计待导入数据的条数,若又检测出大于30条的数据后,再进行一次前述导入的操作,直至最后一次检测出的待导入数据的条数为小于30条,则关闭任务开关,将最后一次检测出的待导入数据导入到目的数据库中,数据迁移结束。
上述实施例中,介绍了当第二次需要导入的数据条数超过了检查时的上限时,则发起一个检测循环,每次检测到的待导入的数据条数达到预设条数时,则发起一起导入过程,在根据其导入结果继续检查待导入数据,直至所有中间数据库中的待导入数据都导入至目的数据库中为止,通过多次的检测和循环,保证了所有的待导入数据全部导入目的数据库中,没有遗漏,保证了数据迁移的准确性。
在其中一个实施例中,统计与更新后的当前索引对应的未导入数据的条数之后,还包括:当与更新后的当前索引对应的未导入数据的条数小于等于0时,则将当前索引清空。
相对于上述的两个实施例中的情况,还存在第三种:在第一次数据导入结束后,控制器仍检测到任务开关开启,则需要进行第二次数据导入的检查,当中间数据库中被检测出的待导入数据的条数小于等于0,即第一次数据导入已经将所有的待导入数据迁移到目的数据库,并且在第一次数据导入过程中未生成其他的待导入数据,可以直接将更新后的当前索引清空,关闭任务开关,结束数据迁移。
上述实施例中,介绍了当第二次数据迁移过程中任务开关仍开启,但实际不存在需要导入目的库的数据时结束操作的过程,保证了数据迁移过程中逻辑的准确性,通过预设条数的比较这一步骤,可以避免在无需要二次导入数据时,还发起线程,造成的系统资源浪费。
上述的三个实施例完整地描述了在第二次数据导入过程中针对数据检查结果而进行不同的数据导入的过程,涵盖了所有的方面,且通过上述的判断方法,也能够保证在检查过程中能够遍历中间数据库的所有待导入数据,不会遗漏,保证了数据迁移的准确性。
在其中一个实施例中,请参见图3,上述数据迁移方法还可以包括一人工干预步骤,该人工干预步骤可以包括:
S302,当未获取到与当前索引对应的未导入数据时,则输出索引错误信息。
其中,在使用key-value数据库时,如Redis、Oracle等,可能存在数据库中索引值为空或者索引值为0的情况,而此时数据库中存储有数据,但未生成对应的正确的索引值。当进行数据迁移的过程中,若存在此种情况,则需要控制器输出索引错误的信息通知相应的技术人员对这些索引值进行处理。
S304,接收针对当前索引的修正指令。
具体地,技术人员在收到上述的索引错误的信息后,根据错误信息的具体内容和错误的问题反映,得出一套对应的修正指令,具体地,该修正指令可以为重新给错误的索引赋值,然后手动将赋值后的索引与无索引的数据联系起来。
S306,根据修正指令建立当前索引以及当前索引对应的未导入数据的映射关系,并继续从中间数据库获取与当前索引对应的未导入数据。
中间服务器中收到修正指令后,需要根据修正指令将错误的索引值和索引对应的数据重新建立映射关系,形成正确的当前索引,再将当前索引对应的数据导入至目的数据库中,以保证根据当前索引进行数据迁移的准确性。
例如,在一种Redis异常的情况下,如同时开启的线程过多,将Redis线程池撑爆,Redis异常,此时Oracle中的未执行数据的索引值row_index都为0,无法调用与索引值对应的数据,并将此数据导入目的数据库,所以需要手动将这部分数据的索引值设置为非0且不重复的索引值(即同步索引值),然后将设置后的索引值更新到现有的索引中,使得这些未执行数据可以通过上述方法导入MongoDB中。
上述实施例中,介绍了在使用索引型key-value数据库中,当数据库的索引和存储的数据的映射关系错误,无法根据索引迁移对应的数据时,需要人工或者机器检测,重新建立二者的映射关系,保证上述数据迁移方法在此种异常情况下仍然适用。
应该理解的是,虽然2至3流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2至3中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图4所示,提供了一种数据迁移装置,包括:第一查询模块100、第一导入模块200、更新模块300、第二导入模块400,其中:
查询模块100,用于查询中间数据库中是否存在未从源数据库导入至目标数据库的数据的当前索引;若存在,则从中间数据库获取与当前索引对应的未导入数据。
第一导入模块200,用于将未导入数据导入目标数据库。
更新模块300,用于获取未导入数据导入目标数据库的综合导入结果,并查询中间数据库中是否存在未从源数据库导入至目标数据库的新的数据的索引,根据综合导入结果和新的数据的索引更新当前索引。
第二导入模块400,用于根据更新后的当前索引获取中间数据库中对应的未导入数据,并将未导入数据导入目标数据库。
在其中一个实施例中,第一导入模块200可以包括:
分批单元,用于按照预设分批逻辑将与当前索引对应的未导入数据进行分批处理。
批次导入单元,用于再将分批处理后的未导入数据分批导入目标数据库。
则第二查询模块,还可用于获取每一批未导入数据导入目标数据库的批次导入结果,并根据批次导入结果得到综合导入结果。
在其中的一个实施例中,第二导入模块400,还可以用于:
统计与更新后的当前索引对应的未导入数据的条数,当与更新后的当前索引对应的未导入数据的条数大于0且小于预设条数时,将更新后的当前索引清空。
在其中的一个实施例中,第二导入模块400,还可以用于:
统计与更新后的当前索引对应的未导入数据的条数,当与更新后的当前索引对应的未导入数据的条数大于等于预设条数时,将与更新后的当前索引对应的未导入数据导入到目标数据库中,并获取与更新后的当前索引对应的未导入数据导入到目标数据库后的综合导入结果后;继续查询中间数据库中是否存在未从源数据库导入至目标数据库的新的数据的索引。
在其中一个实施例中,第二导入模块400,还可以用于:
当与更新后的当前索引对应的未导入数据的条数小于等于0时,则将更新后的当前索引清空。
在其中一个实施例中,上述数据迁移装置还可以包括:
错误检索单元,用于当未获取到与当前索引对应的未导入数据时,则输出索引错误信息。
修正指令模块,用于接收针对当前索引的修正指令。
修正导入模块,用于根据修正指令建立当前索引以及当前索引对应的未导入数据的映射关系,并继续从中间数据库获取与当前索引对应的未导入数据。
关于数据迁移装置的具体限定可以参见上文中对于数据迁移方法的限定,在此不再赘述。上述数据迁移装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据迁移方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现以下步骤:查询中间数据库中是否存在未从源数据库导入至目标数据库的数据的当前索引;若存在,则从中间数据库获取与当前索引对应的未导入数据;将与当前索引对应的未导入数据导入目标数据库;获取与当前索引对应的未导入数据导入目标数据库的综合导入结果,并查询中间数据库中是否存在未从源数据库导入至目标数据库的新的数据的索引;若存在,则根据综合导入结果和新的数据的索引更新当前索引;根据从中间数据库中获取与更新后的当前索引对应的未导入数据,并将与更新后的当前索引对应的未导入数据导入目标数据库。
在其中一个实施例中,处理器执行计算机程序时实现的将与当前索引对应的未导入数据导入目标数据库,可以包括:按照预设分批逻辑将与当前索引对应的未导入数据进行分批处理;将分批处理后的未导入数据分批导入目标数据库;处理器执行计算机程序时实现的获取与当前索引对应的未导入数据导入目标数据库的综合导入结果,可以包括:获取每一批未导入数据导入目标数据库的批次导入结果,并根据批次导入结果得到综合导入结果。
在其中一个实施例中,处理器执行计算机程序时实现的将与更新后的当前索引对应的未导入数据导入目标数据库,可以包括:统计与更新后的当前索引对应的未导入数据的条数,当与更新后的当前索引对应的未导入数据的条数大于0且小于预设条数时,将更新后的当前索引清空;将与更新后的当前索引对应的未导入数据导入到目标数据库中。
在其中一个实施例中,处理器执行计算机程序时实现的将与更新后的当前索引对应的未导入数据导入目标数据库,可以包括:统计与更新后的当前索引对应的未导入数据的条数,当与更新后的当前索引对应的未导入数据的条数大于等于预设条数时,将与更新后的当前索引对应的未导入数据导入到目标数据库中,并获取与更新后的当前索引对应的未导入数据导入到目标数据库后的综合导入结果后;继续查询中间数据库中是否存在未从源数据库导入至目标数据库的新的数据的索引。
在其中一个实施例中,处理器执行计算机程序时实现的统计与更新后的当前索引对应的未导入数据的条数之后,还可以包括:当与更新后的当前索引对应的未导入数据的条数小于等于0时,则将更新后的当前索引清空。
在一个实施例中,处理器执行计算机程序时还可以实现:当未获取到与当前索引对应的未导入数据时,则输出索引错误信息;接收针对当前索引的修正指令;根据修正指令建立当前索引以及当前索引对应的未导入数据的映射关系,并继续从中间数据库获取与当前索引对应的未导入数据。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:查询中间数据库中是否存在未从源数据库导入至目标数据库的数据的当前索引;若存在,则从中间数据库获取与当前索引对应的未导入数据;将与当前索引对应的未导入数据导入目标数据库;获取与当前索引对应的未导入数据导入目标数据库的综合导入结果,并查询中间数据库中是否存在未从源数据库导入至目标数据库的新的数据的索引;若存在,则根据综合导入结果和新的数据的索引更新当前索引;根据从中间数据库中获取与更新后的当前索引对应的未导入数据,并将与更新后的当前索引对应的未导入数据导入目标数据库。
在其中一个实施例中,计算机程序被处理器执行时实现的将与当前索引对应的未导入数据导入目标数据库,可以包括:按照预设分批逻辑将与当前索引对应的未导入数据进行分批处理;将分批处理后的未导入数据分批导入目标数据库;处理器执行计算机程序时实现的获取与当前索引对应的未导入数据导入目标数据库的综合导入结果,可以包括:获取每一批未导入数据导入目标数据库的批次导入结果,并根据批次导入结果得到综合导入结果。
在其中一个实施例中,计算机程序被处理器执行时实现的将与更新后的当前索引对应的未导入数据导入目标数据库,可以包括:统计与更新后的当前索引对应的未导入数据的条数,当与更新后的当前索引对应的未导入数据的条数大于0且小于预设条数时,将当前索引清空;将与更新后的当前索引对应的未导入数据导入到目标数据库中。
在其中一个实施例中,计算机程序被处理器执行时实现的将与更新后的当前索引对应的未导入数据导入目标数据库,可以包括:统计与更新后的当前索引对应的未导入数据的条数,当与更新后的当前索引对应的未导入数据的条数大于等于预设条数时,将与更新后的当前索引对应的未导入数据导入到目标数据库中,并获取与更新后的当前索引对应的未导入数据导入到目标数据库后的综合导入结果后;继续查询中间数据库中是否存在未从源数据库导入至目标数据库的新的数据的索引。
在其中一个实施例中,计算机程序被处理器执行时实现的统计与更新后的当前索引对应的未导入数据的条数之后,还可以包括:当与更新后的当前索引对应的未导入数据的条数小于等于0时,则将当前索引清空。
在一个实施例中,计算机程序被处理器执行时还可以实现:当未获取到与当前索引对应的未导入数据时,则输出索引错误信息;接收针对当前索引的修正指令;根据修正指令建立当前索引以及当前索引对应的未导入数据的映射关系,并继续从中间数据库获取与当前索引对应的未导入数据。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种数据迁移方法,所述方法包括:
查询中间数据库中是否存在未从源数据库导入至目标数据库的数据的当前索引;若存在,则从所述中间数据库获取与所述当前索引对应的未导入数据;其中,在数据从源数据库导入至目的数据库时,若目的数据库发生异常或者传输线路发生异常,则先将这期间需要迁移的数据先存储在中间数据库中;待异常问题被解决后,再将中间数据库中的数据迁移至目的数据库中;中间数据库是通过索引管理存储的数据,一个索引对应一条数据;当前索引是根据中间数据库中的索引建立的;每隔一段时间,检测在这段时间内中间数据库中是否存在需要导入目的数据库中的异常信息;
将根据中间数据库中的索引生成的当前索引根据预设分批逻辑分为多个批次;再通过Redis将分批完的数据的每一批次启动一个线程执行数据导入的操作,最后对所有批次的导入结果进行统计汇总,得到综合导入结果;
获取所述综合导入结果,并查询所述中间数据库中是否存在未从源数据库导入至目标数据库的新的数据的索引;若存在,则根据所述综合导入结果和所述新的数据的索引更新所述当前索引;
根据从所述中间数据库中获取与更新后的所述当前索引对应的未导入数据,并将与更新后的所述当前索引对应的所述未导入数据导入目标数据库。
2.根据权利要求1所述的方法,其特征在于,将与所述当前索引对应的所述未导入数据导入所述目标数据库,包括:
按照预设分批逻辑将与所述当前索引对应的所述未导入数据进行分批处理;
将分批处理后的所述未导入数据分批导入所述目标数据库;
所述获取与所述当前索引对应的所述未导入数据导入所述目标数据库的综合导入结果,包括:
获取每一批所述未导入数据导入所述目标数据库的批次导入结果,并根据所述批次导入结果得到综合导入结果。
3.根据权利要求1所述的方法,其特征在于,所述将与更新后的所述当前索引对应的所述未导入数据导入目标数据库,包括:
统计与更新后的所述当前索引对应的所述未导入数据的条数,当与更新后的所述当前索引对应的所述未导入数据的条数大于0且小于预设条数时,将更新后的当前索引清空;
将与更新后的所述当前索引对应的所述未导入数据导入到目标数据库中。
4.根据权利要求1所述的方法,其特征在于,所述将与更新后的所述当前索引对应的所述未导入数据导入目标数据库,包括:
统计与更新后的所述当前索引对应的所述未导入数据的条数,当与更新后的所述当前索引对应的所述未导入数据的条数大于等于预设条数时,将与更新后的所述当前索引对应的所述未导入数据导入到所述目标数据库中,并获取与更新后的所述当前索引对应的所述未导入数据导入到所述目标数据库后的综合导入结果后;继续查询所述中间数据库中是否存在未从源数据库导入至目标数据库的新的数据的索引。
5.根据权利要求3或4所述的方法,其特征在于,所述统计与更新后的所述当前索引对应的所述未导入数据的条数之后,还包括:
当与更新后的所述当前索引对应的所述未导入数据的条数小于等于0时,则将更新后的当前索引清空。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当未获取到与所述当前索引对应的未导入数据时,则输出索引错误信息;
接收针对所述当前索引的修正指令;
根据所述修正指令建立所述当前索引以及所述当前索引对应的未导入数据的映射关系,并继续从所述中间数据库获取与所述当前索引对应的未导入数据。
7.一种数据迁移装置,其特征在于,所述装置包括:
查询模块,用于查询中间数据库中是否存在未从源数据库导入至目标数据库的数据的当前索引;若存在,则从所述中间数据库获取与所述当前索引对应的未导入数据;其中,在数据从源数据库导入至目的数据库时,若目的数据库发生异常或者传输线路发生异常,则先将这期间需要迁移的数据先存储在中间数据库中;待异常问题被解决后,再将中间数据库中的数据迁移至目的数据库中;中间数据库是通过索引管理存储的数据,一个索引对应一条数据;当前索引是根据中间数据库中的索引建立的;每隔一段时间,检测在这段时间内中间数据库中是否存在需要导入目的数据库中的异常信息;
第一导入模块,将根据中间数据库中的索引生成的当前索引根据预设分批逻辑分为多个批次;再通过Redis将分批完的数据的每一批次启动一个线程执行数据导入的操作,最后对所有批次的导入结果进行统计汇总,得到综合导入结果;
更新模块,用于获取所述综合导入结果,并查询所述中间数据库中是否存在未从源数据库导入至目标数据库的新的数据的索引;若存在,则根据所述综合导入结果和所述新的数据的索引更新所述当前索引;
第二导入模块,用于根据从所述中间数据库中获取与更新后的所述当前索引对应的未导入数据,并将与更新后的所述当前索引对应的所述未导入数据导入目标数据库。
8.根据权利要求7所述的装置,其特征在于,所述第一导入模块包括:
数据单元,用于按照预设分批逻辑将与所述当前索引对应的所述未导入数据进行分批处理;
批次导入单元,用于将分批处理后的所述未导入数据分批导入所述目标数据库;
则第二查询模块,还用于获取每一批所述未导入数据导入所述目标数据库的批次导入结果,并根据所述批次导入结果得到综合导入结果。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810103315.7A CN108304553B (zh) | 2018-02-01 | 2018-02-01 | 数据迁移方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810103315.7A CN108304553B (zh) | 2018-02-01 | 2018-02-01 | 数据迁移方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108304553A CN108304553A (zh) | 2018-07-20 |
CN108304553B true CN108304553B (zh) | 2021-04-27 |
Family
ID=62850676
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810103315.7A Active CN108304553B (zh) | 2018-02-01 | 2018-02-01 | 数据迁移方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108304553B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110019372B (zh) * | 2018-08-21 | 2023-04-11 | 平安科技(深圳)有限公司 | 数据监控方法、装置、服务器及存储介质 |
CN111046016A (zh) * | 2018-10-15 | 2020-04-21 | 珠海格力电器股份有限公司 | 数据处理方法、装置、系统和服务器 |
CN109726243A (zh) * | 2019-01-03 | 2019-05-07 | 中国银行股份有限公司 | 一种数据归集方法、装置及系统 |
CN109901799B (zh) * | 2019-02-28 | 2022-08-19 | 新华三信息安全技术有限公司 | 一种日志读写方法及装置 |
CN110580246B (zh) * | 2019-07-30 | 2023-10-20 | 平安科技(深圳)有限公司 | 迁徙数据的方法、装置、计算机设备及存储介质 |
CN110674108A (zh) * | 2019-08-30 | 2020-01-10 | 中国人民财产保险股份有限公司 | 数据处理方法及装置 |
CN110851421B (zh) * | 2019-11-06 | 2022-04-08 | 珠海格力电器股份有限公司 | 减少数据迁移耗时的方法、装置、存储介质及电子设备 |
CN111259023B (zh) * | 2020-01-13 | 2023-04-07 | 泰康保险集团股份有限公司 | 一种数据调度方法、装置、电子设备及存储介质 |
CN113190563B (zh) * | 2021-06-30 | 2021-11-26 | 阿里云计算有限公司 | 索引生成方法、设备及存储介质 |
CN113656406A (zh) * | 2021-08-17 | 2021-11-16 | 北京金山云网络技术有限公司 | 一种索引页合并方法、装置、设备及介质 |
CN116431566B (zh) * | 2023-06-09 | 2023-09-22 | 北京随信云链科技有限公司 | 数据迁移方法、装置、电子设备及介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101620624B (zh) * | 2009-08-13 | 2011-07-06 | 公安部第一研究所 | 一种物理隔离条件下不同数据库间数据同步的方法 |
CN102495906A (zh) * | 2011-12-23 | 2012-06-13 | 天津神舟通用数据技术有限公司 | 一种实现断点续传的增量式数据迁移方法 |
CN104021123B (zh) * | 2013-02-28 | 2017-10-31 | 国际商业机器公司 | 用于数据迁移的方法和系统 |
CN106570086B (zh) * | 2016-10-19 | 2020-08-14 | 上海携程商务有限公司 | 数据迁移系统及数据迁移方法 |
-
2018
- 2018-02-01 CN CN201810103315.7A patent/CN108304553B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN108304553A (zh) | 2018-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108304553B (zh) | 数据迁移方法、装置、计算机设备和存储介质 | |
CN110069572B (zh) | 基于大数据平台的hive任务调度方法、装置、设备及存储介质 | |
CN110209650B (zh) | 数据规整迁移方法、装置、计算机设备和存储介质 | |
CN111221800B (zh) | 数据库迁移方法、装置、电子设备及存储介质 | |
CN106940699B (zh) | 一种内存数据的同步处理方法、装置、服务器及系统 | |
CN106940671B (zh) | 一种集群中任务线程运行的监控方法、装置及系统 | |
US20200026427A1 (en) | System and method for handling data storage on storage devices | |
WO2015116125A1 (en) | File system analysis in user daemon | |
CN114860846A (zh) | 数据处理方法、装置及电子设备 | |
CN110866011B (zh) | 数据表同步方法、装置、计算机设备和存储介质 | |
CN104866388B (zh) | 数据处理方法及装置 | |
US20220039001A1 (en) | Network search method and apparatus, device and storage medium | |
CN111078418B (zh) | 操作同步方法、装置、电子设备及计算机可读存储介质 | |
CN111694724B (zh) | 分布式表格系统的测试方法、装置、电子设备及存储介质 | |
CN116069765A (zh) | 数据迁移方法、装置、电子设备及存储介质 | |
CN115994189A (zh) | 多环境数据库的结构同步方法、装置、设备及介质 | |
CN116010446A (zh) | 数据库切换方法、装置、设备及介质 | |
CN114791900A (zh) | 基于Operator的Redis运维方法、装置、系统及存储介质 | |
CN110059071B (zh) | 基于存储过程的数据对比监控方法、系统、设备及介质 | |
CN113934573A (zh) | 一种内存数据库的数据恢复方法及装置 | |
CN112699129A (zh) | 一种数据处理系统、方法及装置 | |
CN114416689A (zh) | 数据迁移方法、装置、计算机设备、存储介质 | |
CA3129150C (en) | Interface message test method and device, computer equipment and storage medium | |
CN109542598A (zh) | 定时任务管理方法及装置 | |
US20230273820A1 (en) | Thread management system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |