CN107357883A - 数据迁移方法及装置 - Google Patents
数据迁移方法及装置 Download PDFInfo
- Publication number
- CN107357883A CN107357883A CN201710554505.6A CN201710554505A CN107357883A CN 107357883 A CN107357883 A CN 107357883A CN 201710554505 A CN201710554505 A CN 201710554505A CN 107357883 A CN107357883 A CN 107357883A
- Authority
- CN
- China
- Prior art keywords
- data
- full dose
- migrated
- tables
- database
- 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.)
- Pending
Links
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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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
Abstract
本发明公开了一种数据迁移方法及装置,用于将数据表从原数据库迁移至含多个存储节点的分布式数据库的目标数据库,方法包括:获取与待迁移的数据表相对应的全量数据,为全量数据中的各条数据记录设置分布列;根据分布列将各条数据记录分别迁移至目标数据库的各个存储节点中;确定与全量数据相对应的日志点位信息;获取在日志点位信息之后产生的日志记录,确定与该日志记录相对应的数据操作,针对目标数据库的各个存储节点中存储的全量数据执行所述数据操作。采用本方案,可以在不影响线上业务的情况下,将数据迁移至有多个存储节点的分布式数据库,避免了分布式主节点的处理能力影响数据迁移的效率,提高数据迁移效率并且保证了数据的实时同步。
Description
技术领域
本发明涉及通信技术领域,具体涉及一种数据迁移方法及装置。
背景技术
随着信息技术的发展,信息系统更换或调整的频率也越来越高。例如,测试数据库转移到线上业务数据库、老旧设备更新升级、对长时间超负荷的设备进行维护操作或机房变更等诸多情形下均需对数据进行迁移,将一个数据库数据迁移至另一个数据库。
但是,发明人在实现本发明的过程中发现,现有技术中至少存在下述缺陷:现今通常将原数据库中的数据通过第三方数据容器转移到目标数据库。例如,可将原数据库中的数据拷贝到磁盘,再通过磁盘拷贝至目标数据库中,但该种方法数据迁移速度慢,无法实现原数据库和目标数据库数据的实时同步,并且在数据迁移过程中还会影响线上数据库的正常运行;又或者,通过对原数据库扩充从库,从从库中将数据迁移至目标数据库中,但采用该种方法资源浪费大,目标数据库与原数据库中数据的同步延时性较高;并且,当目标数据库为含有多个存储节点的分布式数据库时,现有技术中通常采用将所有迁移数据直接发送至分布式数据库主节点,由分布式主节点再对迁移数据进行重分配,然而,当迁移数据量较大时,主节点的处理压力大大增加,从而使得主节点的处理能力限制了整个数据迁移效率。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据迁移方法及装置。
根据本发明的一个方面,提供了一种数据迁移方法,用于将待迁移的数据表从原数据库迁移至目标数据库,所述目标数据库为包含多个存储节点的分布式数据库,该方法包括:从所述原数据库中获取与所述待迁移的数据表相对应的全量数据,并为所述全量数据中的各条数据记录设置分布列;根据所述分布列,将所述全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中;根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作,针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作。
根据本发明的另一方面,提供了一种数据迁移装置,用于将待迁移的数据表从原数据库迁移至目标数据库,所述目标数据库为包含多个存储节点的分布式数据库,所述装置包括:获取模块,适于从所述原数据库中获取与所述待迁移的数据表相对应的全量数据,并为所述全量数据中的各条数据记录设置分布列;全量数据迁移模块,适于根据所述分布列,将所述全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中;确定模块,适于根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;操作模块,适于从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作,针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作。
根据本发明的又一方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述数据迁移方法对应的操作。
根据本发明的再一方面,提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如上述数据迁移方法对应的操作。
根据本发明的数据迁移方法及装置,从原数据库中获取与待迁移的数据表相对应的全量数据,并为全量数据中的各条数据记录设置分布列;根据分布列,将全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中,从而减小了目标数据库主节点对数据的重分配压力,有利于数据迁移效率的提升;并根据待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;从日志文件中获取在所述日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作,针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作,从而实现待迁移数据的增量同步,最终在不影响线上业务的情况下,将数据迁移至有多个存储节点的分布式数据库,并且保证了数据的实时同步。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例提供的一种数据迁移方法的流程图;
图2示出了根据本发明另一个实施例提供的一种数据迁移方法的流程图;
图3示出了根据本发明一个实施例提供的一种数据迁移装置的结构框图;
图4示出了根据本发明一个实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例提供的一种数据迁移方法的流程图,该方法适用于将待迁移的数据表从原数据库迁移至目标数据库,其中,目标数据库为包含多个存储节点的分布式数据库,该方法包括:
步骤S110,从原数据库中获取与待迁移的数据表相对应的全量数据,并为全量数据中的各条数据记录设置分布列。
其中,目标数据库为包含多个存储节点的分布式数据库,例如greenplum数据库等。待迁移的数据表的数量可以为一个,也可以为多个,其与待迁移的数据量有关。数据表中记录有1条或多条数据,待迁移的数据表相对应的全量数据为待迁移的数据表中所有的数据。
具体地,可通过单个或多个线程访问待迁移的数据表,并从待迁移的数据表中读取全量数据中的每条数据,并为全量数据中的各条数据记录设置分布列。其中,分布列用于确定各条数据对应的目标数据库的存储节点信息,具体的对应规则本领域技术人员可自行设置,本实施例不做具体限定。
步骤S120,根据分布列,将全量数据中的各条数据记录分别迁移至目标数据库的各个存储节点中。
具体地,由于分布列用于确定各条数据对应的目标数据库的存储节点信息,则可根据分布列中的信息将全量数据中的各条数据记录分别迁移至目标数据库的各个存储节点中。
可选的,可对每条数据进行解析后,与分布列信息进行综合后生成相应的操作命令,如执行插入操作的sql语句等,并将该操作命令发送至目标数据库,在目标数据库中执行该操作命令,从而将待迁移的数据表所对应的全量数据迁移至目标数据库的各个存储节点中。
步骤S130,根据待迁移的数据表对应的日志文件确定与全量数据相对应的日志点位信息。
数据库中含有记录数据库信息的各类日志文件,如查询日志、错误日志、事务日志、和/或二进制日志等,其中某类日志中按照时间顺序和/或操作顺序记录有针对数据库中的各个数据表执行的数据操作(如,事务日志或二进制日志等)。由于数据表中的每一条数据都是通过执行相应的数据操作而录入的,因此,通过该类日志能够确定数据表在各个时刻所对应的数据存储状态。为了便于确定各个数据操作的执行时间和/或执行顺序,该类日志文件中包含多个按照时间顺序和/或操作顺序排列的日志点位信息,每个日志点位信息对应于一条或多条日志记录,一条日志记录对应于数据库中针对至少一条数据执行的数据操作。相应地,在获取与待迁移的数据表相对应的全量数据时,进一步通过该类日志文件确定与步骤S110中获取的全量数据相对应的日志点位信息。
步骤S140,从日志文件中获取在日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作,针对目标数据库的各个存储节点中存储的全量数据执行所述数据操作。
具体地,日志文件记录有对数据库数据的操作信息。该操作信息中包含对全量数据的删除、更改、和/或插入等信息。根据与全量数据相对应的日志点位信息之后产生的日志记录,可以获知在该日志点位之后对原数据库中该全量数据执行的数据操作。
可选的,可实时获取原数据库中全量数据相对应的日志点位信息之后每条日志记录,在对该日志记录进行解析后获得原数据库执行过的数据操作信息,从而确定与该日志记录相对应的数据操作。举例来说,根据一条bin_log日志信息:
“Query OK,0rowsaffected(0.44sec)
insertinto yong.tb1 values(1,′tom′)”
可判断出其相应的数据操作为“insertinto yong.tb1 values(1,′tom′)”,即在yong.tb1表中插入数据“(1,′tom′)”。
根据确定的与日志记录相对应的数据操作,针对目标数据库的各个存储节点中存储的全量数据执行所述数据操作,从而使目标数据库与待迁移数据库中的数据实现同步更新。
由此可见,本实施例提供的数据迁移方法,从原数据库中获取与待迁移的数据表相对应的全量数据,并为全量数据中的各条数据记录设置分布列;根据分布列,将全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中,从而降低了目标数据库主节点的重分配数据的压力,有利于数据迁移效率的提升;并根据待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;从日志文件中获取在所述日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作,针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作,从而实现待迁移数据的增量同步,最终在不影响线上业务的情况下,将数据迁移至有多个存储节点的分布式数据库,保证了数据的实时同步,并避免了现有技术中扩充从库而带来的资源浪费。
图2示出了根据本发明另一个实施例提供的一种数据迁移方法的流程图。该方法适用于将待迁移的数据表从原数据库迁移至目标数据库,其中,目标数据库为包含多个存储节点的分布式数据库,该方法包括:
步骤S210,从原数据库中获取与待迁移的数据表相对应的全量数据,并根据待迁移的数据表对应的日志文件确定与全量数据相对应的日志点位信息。
其中,本实施例中的原数据库及目标数据库可以为关系型数据库,例如,本方法可适用于将mysql数据库中数据迁移至含有多个存储节点的greenplum数据库中。可选的,本实施例提供的数据迁移方法在内存中执行。本实施例中待迁移的数据表的数量可以为一个,也可以为多个,其与待迁移的数据量有关。数据表中记录有一条或多条数据,待迁移的数据表相对应的全量数据为待迁移的数据表中所有的数据。
具体地,在从原数据库中获取与待迁移的数据表相对应的全量数据过程中,为保证数据的一致性,可针对待迁移的数据表执行加锁操作,开启用于针对待迁移的数据表执行快照处理的事务。具体地,对待迁移的数据表执行加锁操作的锁的类型本领域人员可根据实际业务自行设置,例如可对待迁移的数据表执行加表级锁,也可对待迁移的数据表执行加行级锁等,本实施例对加锁的具体类型不做具体限定。在对待迁移的数据表执行加锁操作后,开启用于针对待迁移的数据表执行快照处理的事务。其中,快照为对数据库数据的只读静态视图,执行快照处理后生成的快照数据与执行快照处理时的数据库中的数据保持一致。所以,在对待迁移的数据表执行快照处理后,快照数据与待迁移的数据表所对应的全量数据保持一致。可选的,当待迁移的数据表为多个时,开启用于针对待迁移的数据表执行快照处理的事务可以由多个线程并行处理,从而提高快照处理速度,其中,一个线程可对应一个或多个待迁移数据表的快照处理事务,具体对应关系本领域技术人员可根据开设的工作线程数及待迁移的数据表个数及容量等进行设定,本实施例不做具体限定。
可选的,当待迁移的数据表为多个时,开启用于针对待迁移的数据表执行快照处理的事务可以由多个线程并行处理,并根据与该数据表相对应的快照数据获取全量数据。从而提高快照处理速度及全量数据获取速度,其中,一个线程可对应一个或多个待迁移数据表的快照处理事务,具体对应关系本领域技术人员可根据开设的工作线程数及待迁移的数据表个数及容量等进行设定,本实施例不做具体限定。
当事务开启完毕后,针对待迁移的数据表执行解锁操作,并根据与待迁移的数据表相对应的快照数据获取全量数据。可选的,当由多个线程执行快照处理的事务时,可对各个线程设置反馈信号,在执行快照处理的事务开启完毕后,反馈给主线程该事务开启完毕的信息。本步骤中当所有工作线程快照处理事务开启完毕后,视为执行快照处理的事务开启完毕。当执行快照处理事务开启完毕后,对待迁移的数据表执行解锁操作,从而原数据库可以对待迁移的数据表进行写操作。由于快照处理事务开启速度快,对待迁移的数据表的锁定过程时间极短,所以不影响原数据库线上业务的处理。可选的,根据与待迁移的数据表相对应的快照数据获取全量数据可由多个线程并行处理,从而提高全量数据的获取效率。
可选的,在根据与待迁移的数据表相对应的快照数据获取全量数据过程中,可将当前已获取的数据记录在快照数据中对应的位置信息记录在预设的第一进度表中,当获取全量数据的过程中断后再次执行时,可根据第一进度表中记录的位置信息从快照数据中获取数据记录,从而可以实现全量数据的断点续传。可选的,当由多个线程根据与待迁移的数据表相对应的快照数据获取全量数据时,可在第一进度表中分别记录各个线程所获取的数据记录在快照数据中对应的位置信息。例如,线程1已获取到Table1中第20条数据,线程2已获取到Table2中第10条数据,线程3已获取到Table3中第4条数据,则第一进度表rows_log中记录有:(worker1,Table1_20),(worker2,Table2_10),以及(worker3,Table3_4),随着工作线程对数据的不断获取,第一进度表rows_log各个工作线程对应的进度值不断刷新。当某一、某几个、或全部线程中断后,可根据rows_log记录的位置信息继续获取数据,如当worker1中断后,rows_log记录的相应的位置信息为(worker1,Table1_23),则worker1中断后再次执行时可继续获取Table1表中的第24条数据。
可根据待迁移的数据表对应的日志文件确定与待迁移的数据表相对应的全量数据相对应的日志点位信息,具体地,将执行加锁操作后对应的日志点位信息确定为与全量数据相对应的日志点位信息。由于数据库中含有记录数据库信息的各类日志文件,如查询日志、错误日志、事务日志、和/或二进制日志等。以bin_log日志(二进制日志)为例,其记录了对数据发生或潜在发生更改的SQL语句,该日志文件的每个点位对应于一条或多条日志信息,一条日志信息对应于对数据的一条或多条操作信息。
步骤S220,为全量数据中的各条数据记录设置分布列。
其中,分布列用于确定各条数据对应的目标数据库的存储节点信息,相应地,分布列中包含各条数据的分布键信息,分布键表征了各条数据对应的目标数据库的存储节点信息。
可选的,在设置分布列时可根据全量数据中的数据记录的相关性进行设置。例如,可对全量数据中同一表中的数据设置相同的分布列;或者,将有数据关联(如主从表关系)的不同表中的数据设置相同的分布列等。具体地分布列的设置规则本领域技术人员可自行设置,本实施例不做具体限定。
步骤S230,针对全量数据中的每条数据记录,根据分布列确定该数据记录中包含的分布键,并按照预设的分布规则确定目标数据库中与分布键相对应的存储节点,并将该数据记录迁移到目标数据库中与所述分布键相对应的存储节点中。
其中,预设的分布规则包括范围规则、和/或哈希规则。例如,范围规则可以为:分布键在“0-50”的数据对应于存储节点1,分布键在“51-100”的数据对应于存储节点2等;而哈希规则可以为:根据存储节点个数对分布键进行哈希运算,形成相应的哈希表,如当目标数据库有6个存储节点时,分布键分别为1到10的正整数,则其分布规则如表1所示。本实施例中预设的分布规则包含但不限于上述分布规则,本领域技术人员可根据实际业务情况自行设置。
表1
可选的,当原数据库与目标数据库数据结构不同时,则原数据库中与目标数据库中的某些字段也存在差异,所以,可确定与原数据库相对应的第一字段规则,以及与目标数据库相对应的第二字段规则,根据第一字段规则与第二字段规则中存在差异的各个字段设置字段转换规则。其中,存在差异的各个字段包括:字段名称不同、和/或字段类型不同的字段等。表2为原数据库为mysql数据库,目标数据库为greenplum时所对应的字段转换规则中的一部分,如表2所示,mysql数据库中整型类型包含tinyint、int、smallin、mediumint、以及bigint类型,greenplum数据库中整型类型包含int4及int8类型,而mysql数据库中tinyint,int,smallin数据类型对应于greenplum中的int4类型,mediumint,bigint对应于greenplum中的int8类型。例如,在将tinyint、int、和/或smallin转换为int4类型时,由于是从低位整型向高位整型转换,则可在低位整型前位补零的方式实现数据类型的转换,也可通过调用预设的转换函数实现数据类型的转换。本实施对具体的字段转换规则不做限定,本领域技术人员可自行设置。
进一步地,可对全量数据的各条数据记录中符合预设的字段转换规则的字段进行转换,并将转换后的各条数据记录分别迁移至目标数据库的各个存储节点中。例如,在从原数据库中获取与待迁移的数据表相对应的全量数据后,对数据进行解析,将数据的分布列信息及各条数据生成相应的执行语句,并将该执行语句发送至目标数据库,在目标数据库中解析该执行语句,根据解析出的分布列确定该数据记录中包含的分布键,并按照预设的分布规则确定目标数据库中与分布键相对应的存储节点,当该数据记录在原数据库中某一或某几个字段与目标数据库中的字段存在差异时,可根据预设的字段转换规则的字段进行转换,并将转换后的数据存储在相应的存储节点,从而将全量数据中各条数据迁移至相应的存储节点中。
表2
mysql | greenplum |
tinyint,int,smallin | int4 |
mediumint,bigint | int8 |
datetime | timestamp |
enum,tinytext,longtext,mediumtext | text |
longblob,mediumblob,blob,tinyblob | bytea |
double | float8 |
float | float4 |
步骤S240,从日志文件中获取在与全量数据相对应的日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作,针对目标数据库的各个存储节点中存储的全量数据执行所述数据操作。
其中,原数据库日志文件中记录对原数据库数据的操作信息。该操作信息中包含对全量数据的删除、更改、和/或插入等信息。根据与全量数据相对应的日志点位信息之后产生的日志记录,可以获知在该日志点位之后原数据库中对全量数据执行的数据操作信息。可选的,可从内存中获取与全量数据相对应的日志点位信息之后产生的日志记录。以bin_log为例,其在内存中存在binlog_cache,binlog_cache记录了对数据发生或潜在发生更改的SQL语句,当binlog_cache达到预设容量,或预设时间时,需将binlog_cache中的数据写入磁盘,但由于磁盘数据读写速度较慢,所以本步骤中可优选地从binlog_cache中读取日志文件中的日志记录,以提高读取速度。可选的,可实时获取原数据库中全量数据相对应的日志点位信息之后的每条日志记录,并在获取后将该日志记录复制到目标数据库中,或者目标数据库直接通过I/O线程从原数据库中获取日志记录。
由于日志文件中的日志点位通常对应于一条或多条日志记录,当与全量数据相对应的日志点位信息对应于多条日志记录时,(其中,各个日志点位信息根据预设的时间间隔进行设置,或者根据预设的日志记录条数进行设置,如每隔5分钟设置一个日志点位,或每隔10条日志记录设置一个日志点位),确定与全量数据相对应的日志点位信息所对应的多条日志记录中产生时间最早的日志记录,并获取产生时间最早的日志记录以及在产生时间最早的日志记录之后产生的各条日志记录。可选的,当确定与日志记录相对应的数据操作的操作类型为插入类型时,进一步获取该数据操作对应的主键信息,并判断全量数据中是否包含与该主键信息相同的数据记录,若是,则删除与主键信息相同的数据记录后执行插入类型的数据操作。举例来说,全量数据相对应的日志点位为102点位,102点位对应于10条日志记录,则确定出102点位对应的10条日志记录中最早的日志记录为102-1,则获取102-1之后的所有日志记录。若根据日志记录102-4确定是对主键为“1”的数据执行插入操作时,则判断全量数据中是否包含与该主键信息相同的数据记录,若有,则将全量数据中的主键为“1”的数据删除后再执行日志记录102-4对应的插入操作,从而保证数据库系统的幂等性。
可选的,在获取与全量数据相对应的日志点位信息之后产生的日志记录时,可将当前已获取的日志记录在日志文件中对应的日志点位信息记录在预设的第二进度表中,当获取在该日志点位信息之后产生的日志记录的过程中断后再次执行时,可根据第二进度表中记录的日志点位信息从日志文件中获取日志记录,从而可以实现数据的断点续传。进一步可选的,当第二进度表中记录的日志点位信息对应于多条日志记录时,可确定第二进度表中记录的日志点位信息所对应的多条日志记录中产生时间最早的日志记录,并获取产生时间最早的日志记录以及在产生时间最早的日志记录之后产生的各条日志记录。可选的,当确定与日志记录相对应的数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息,并判断全量数据中是否包含与所述主键信息相同的数据记录,若是,删除与所述主键信息相同的数据记录后执行所述插入类型的数据操作。此处,本领域技术人员能够理解的是,由于全量数据相对应的日志点位信息之后产生的日志记录往往为多条,因此,通常会针对全量数据依次执行各条日志记录所对应的数据操作。相应地,在判断全量数据中是否包含与主键信息相同的数据记录时,该全量数据是指:截至当前时刻,针对全量数据执行与当前已获取的日志记录相对应的数据操作后的数据内容。例如,假设当前已经在步骤S210获取的全量数据的基础上执行了N条日志记录所对应的数据操作(N为大于或等于1的自然数),那么,当确定与第N+1条日志记录相对应的数据操作的操作类型为插入类型时,获取与第N+1条日志记录相对应的数据操作对应的主键信息,并且,在步骤S210获取的全量数据的基础上执行了N条日志记录所对应的数据操作后得到的数据中,判断是否包含与第N+1条日志记录相对应的数据操作对应的主键信息相同的数据记录,若是,则根据与第N+1条日志记录相对应的数据操作对与该主键信息相同的数据记录进行替换。
举例来说,第二进度表position_log中的一个日志点位对应于10条日志记录,当在102点位的第3条日志记录后发生中断时,position_log中记录的当前已获取的日志记录在日志文件中对应的日志点位为102点位。当再次执行时确定102点位所对应的多条日志记录中产生时间最早的日志记录为102-1(102点位对应的第一条日志记录),则获取102-1之后产生的各条日志记录。由上述可知,当在102点位的第3条日志记录后发生中断时,在再次执行时获取的是102点位的第1条及其以后的日志记录,则使得获取的日志记录中出现冗余数据,即102点位的第1条至第3条日志记录重复获取。若确定与冗余日志记录102-2相对应的数据操作的操作类型为插入类型时,由于已执行过该插入操作,碍于数据库中主键的唯一性,使得在对同一主键数据进行插入时出现故障,所以当确定与日志记录102-2相对应的数据操作的操作类型为插入类型时,获取数据操作对应的主键信息,并判断全量数据中是否已存在与所述主键信息相同的数据记录,若是,删除与主键信息相同的数据记录后执行插入类型的数据操作。
在获取日志记录后,可确定与日志记录相对应的数据操作。其中,与日志记录相对应的数据操作具体为多个按照时间顺序依次排列的数据操作。例如,一条bin_log日志信息:
“update tbl_name set col_name where[data]
update pet set sex=″f″where name=″tom″;
delete from pet where name=″jim″;
其对应的数据操作为:在更新tbl_name为tom所对应的数据,将sex值设为“f”后,删除name为″jim″所对应的数据。
在确定与日志记录相对应的数据操作后,针对目标数据库的各个存储节点中存储的全量数据执行所述数据操作。具体地,针对每个数据操作,根据分布列确定与该数据操作相对应的数据记录中包含的分布键,并按照预设的分布规则确定目标数据库中与所述分布键相对应的存储节点,针对与所述分布键相对应的存储节点中存储的全量数据执行所述数据操作。以上例为例,需根据分布列确定该更新操作所对应的数据记录(tbl_name为tom所对应的数据)中包含的分布键,若分布键为30,预设的分布规则为分布键为“1-50”对应于存储节点1,分布键为“51-100”对应于存储节点1,则需对在存储节点1中存储的全量数据中的tbl_name为tom所对应的数据进行更新。
可选的,可在执行每个数据操作时,确定与该数据操作相对应的数据记录中包含的各个字段,针对其中符合预设的字段转换规则的字段进行转换。以上例为例,若原数据库中tbl_name为tom所对应的数据中某些字段与目标数据库中的字段不一致时,可根据预设的字段转换规则对相应的字段进行转换,并在替换后执行更新操作。
可选的,当原数据库中包括多个数据表,且原数据库对应的日志文件的数量为多个时,则可创建多个并行执行的进程(多个并行执行的进程的数量可根据原数据库对应的日志文件的数量和/或大小、以及同步完成时间等中的至少一个来确定),每个进程分别对应于至少一个日志文件。则步骤S210中根据待迁移的数据表对应的日志文件确定与待迁移的数据表相对应的全量数据相对应的日志点位信息具体为:分别针对每个日志文件,确定该日志文件中与所述备份时间点相对应的日志点位信息;将该日志文件中与所述备份时间点相对应的日志点位信息提供给与该日志文件相对应的进程;而步骤S230具体为:每个进程从该进程对应的日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作,针对目标数据库中存储的全量数据执行所述数据操作。
可选的,当本实施例中的原数据库作为主数据库,且该方法应用于快速创建与主数据库同步的从数据库(即目标数据库)时,可根据预设的同步判断条件确定目标数据库与原数据库中的数据是否同步,若判断目标数据库与原数据库中的数据已同步,则不再对数据进行迁移,本方法结束;或者,在判断出目标数据库与原数据库中的数据已同步时,根据原数据库和目标数据库的类型选择与其类型相对应的其他数据库同步方式(例如传统的或官方的数据库同步方式)继续同步后续过程中新增的增量数据。其中,预设的同步判断条件可以为:将当前执行的数据操作所对应的日志记录在日志文件中的日志点位信息确定为第一日志点位信息;将当前产生时间最晚的日志记录在所述日志文件中的日志点位信息确定为第二日志点位信息;若第一日志点位信息与第二日志点位信息之间的间隔小于预设阈值,则确定目标数据库与原数据库中的数据同步。预设的同步判断条件还可以为:将当前执行的数据操作所对应的日志记录在日志文件中的日志点位信息确定为第一日志点位信息;若第一日志点位信息与预设的同步点位信息相同,则确定目标数据库与原数据库中的数据同步;其中,预设的同步点位信息根据以下中的至少一项确定:原数据库对应的日志文件的文件大小、与全量数据相对应的日志点位信息等。在此,预设的同步判断条件本领域技术人员可自行设置,例如预设的同步判断条件还可以为精准同步,即当原数据库与目标数据库中待迁移的数据表完全同步时,本方法结束。
由此可见,本实施例提供的数据迁移方法,从原数据库中获取与待迁移的数据表相对应的全量数据,并为全量数据中的各条数据记录设置分布列;根据分布列,将全量数据中的各条数据记录分别迁移至目标数据库的各个存储节点中,从而避免了分布式主节点的处理能力制约数据迁移的效率,有利于数据迁移效率的提升;并获取全量数据过程中,针对待迁移的数据表执行加锁操作,从而保证数据的一致性,并在执行快照处理的事务开启完毕后,针对待迁移的数据表执行解锁操作,由于快照处理的事务开启速度快,对待迁移的数据表的锁定时间极短,从而不影响原数据库线上业务的处理;并根据待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;从日志文件中获取在所述日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作,针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作,从而实现待迁移数据的增量同步,最终在不影响线上业务的情况下,将数据迁移至有多个存储节点的分布式数据库,保证了数据的实时同步,并避免了现有技术中扩充从库而带来的资源浪费。此外,本实施例提供的数据迁移方法在内存中执行,从而进一步地提高了数据迁移效率;本方法在执行过程中无临时文件的产生,从而进一步减少了系统的资源浪费。
图3示出了根据本发明一个实施例提供的一种数据迁移装置的结构框图,该装置适用于将待迁移的数据表从原数据库迁移至目标数据库,其中,目标数据库为包含多个存储节点的分布式数据库,该装置包括:获取模块31、全量数据迁移模块32、确定模块33、以及操作模块34。
本实施例中的原数据库及目标数据库可以为关系型数据库,例如,本方法可适用于将mysql数据库中数据迁移至含有多个存储节点的greenplum数据库中。可选的,本实施例提供的数据迁移方法在内存中执行。
获取模块31,适于从原数据库中获取与待迁移的数据表相对应的全量数据,并为所述全量数据中的各条数据记录设置分布列。
其中,本实施例中待迁移的数据表的数量可以为一个,也可以为多个,其与待迁移的数据量有关。数据表中记录有一条或多条数据,待迁移的数据表相对应的全量数据为待迁移的数据表中所有的数据。
具体地,获取模块31进一步适于:针对待迁移的数据表执行加锁操作,开启用于针对待迁移的数据表执行快照处理的事务;当所述事务开启完毕后,针对待迁移的数据表执行解锁操作,并根据与待迁移的数据表相对应的快照数据获取全量数据。
为保证数据的一致性,获取模块31可针对待迁移的数据表执行加锁操作,开启用于针对待迁移的数据表执行快照处理的事务。具体地,对待迁移的数据表执行加锁操作的锁的类型本领域人员可根据实际业务自行设置,例如可对待迁移的数据表执行加表级锁,也可对待迁移的数据表执行加行级锁等,本实施例对加锁的具体类型不做具体限定。在对待迁移的数据表执行加锁操作后,开启用于针对待迁移的数据表执行快照处理的事务。其中,快照为对数据库数据的只读静态视图,执行快照处理后生成的快照数据与执行快照处理时的数据库中的数据保持一致。所以,在对待迁移的数据表执行快照处理后,快照数据与待迁移的数据表所对应的全量数据保持一致。
可选的,当待迁移的数据表为多个时,开启用于针对待迁移的数据表执行快照处理的事务可以由多个线程并行处理,并根据与该数据表相对应的快照数据获取全量数据。从而提高快照处理速度及全量数据获取速度,其中,一个线程可对应一个或多个待迁移数据表的快照处理事务,具体对应关系本领域技术人员可根据开设的工作线程数及待迁移的数据表个数及容量等进行设定,本实施例不做具体限定。
当事务开启完毕后,针对待迁移的数据表执行解锁操作,并根据与待迁移的数据表相对应的快照数据获取全量数据。可选的,当由多个线程执行快照处理的事务时,可对各个线程设置反馈信号,在执行快照处理的事务开启完毕后,反馈给主线程该事务开启完毕的信息。本步骤中当所有工作线程快照处理事务开启完毕后,视为执行快照处理的事务开启完毕。当执行快照处理事务开启完毕后,对待迁移的数据表执行解锁操作,从而原数据库可以对待迁移的数据表进行写操作。由于快照处理事务开启速度快,对待迁移的数据表的锁定过程时间极短,所以不影响原数据库线上业务的处理。可选的,根据与待迁移的数据表相对应的快照数据获取全量数据可由多个线程并行处理,从而提高全量数据的获取效率。
可选的,获取模块31进一步适于:将当前已获取的数据记录在快照数据中对应的位置信息记录在预设的第一进度表中;当获取全量数据的过程中断后再次执行时,根据第一进度表中记录的位置信息从快照数据中获取数据记录。
在根据与待迁移的数据表相对应的快照数据获取全量数据过程中,采用第一进度表可以实现全量数据的断点续传。可选的,当由多个线程根据与待迁移的数据表相对应的快照数据获取全量数据时,可在第一进度表中分别记录各个线程所获取的数据记录在快照数据中对应的位置信息。例如,线程1已获取到Table1中第20条数据,线程2已获取到Table2中第10条数据,线程3已获取到Table3中第4条数据,则第一进度表rows_log中记录有:(worker1,Table1_20),(worker2,Table2_10),以及(worker3,Table3_4),随着工作线程对数据的不断获取,第一进度表rows_log各个工作线程对应的进度值不断刷新。当某一、某几个、或全部线程中断后,可根据rows_log记录的位置信息继续获取数据,如当worker1中断后,rows_log记录的相应的位置信息为(worker1,Table1_23),则worker1中断后再次执行时可继续获取Table1表中的第24条数据。
可根据待迁移的数据表对应的日志文件确定与待迁移的数据表相对应的全量数据相对应的日志点位信息,具体地,将执行加锁操作后对应的日志点位信息确定为与全量数据相对应的日志点位信息。由于数据库中含有记录数据库信息的各类日志文件,如查询日志、错误日志、事务日志、和/或二进制日志等。以bin_log日志(二进制日志)为例,其记录了对数据发生或潜在发生更改的SQL语句,该日志文件的每个点位对应于一条或多条日志信息,一条日志信息对应于对数据的一条或多条操作信息。
此外,分布列用于确定各条数据对应的目标数据库的存储节点信息,相应地,分布列中包含各条数据的分布键信息,分布键表征了各条数据对应的目标数据库的存储节点信息。
可选的,在设置分布列时可根据全量数据中的数据记录的相关性进行设置。例如,可对全量数据中同一表中的数据设置相同的分布列;或者,将有数据关联(如主从表关系)的不同表中的数据设置相同的分布列等。具体地分布列的设置规则本领域技术人员可自行设置,本实施例不做具体限定。
确定模块33,适于根据待迁移的数据表对应的日志文件确定与全量数据相对应的日志点位信息。
具体地,确定模块33适于将获取模块31中执行加锁操作后对应的日志点位信息确定为与全量数据相对应的日志点位信息。
全量数据迁移模块32,适于根据分布列,将全量数据中的各条数据记录分别迁移至目标数据库的各个存储节点中。
具体地,全量数据迁移模块32适于针对全量数据中的每条数据记录,根据分布列确定该数据记录中包含的分布键,并按照预设的分布规则确定目标数据库中与分布键相对应的存储节点,并将该数据记录迁移到目标数据库中与所述分布键相对应的存储节点中。
其中,预设的分布规则包括范围规则、和/或哈希规则。例如,范围规则可以为:分布键在“0-50”的数据对应于存储节点1,分布键在“51-100”的数据对应于存储节点2等;而哈希规则可以为:根据存储节点个数对分布键进行哈希运算,形成相应的哈希表,如当目标数据库有6个存储节点时,分布键分别为1到10的正整数,则其分布规则如表1所示。本实施例中预设的分布规则包含但不限于上述分布规则,本领域技术人员可根据实际业务情况自行设置。
可选的,全量数据迁移模块32具体适于:对全量数据的各条数据记录中符合预设的字段转换规则的字段进行转换,并将转换后的各条数据记录分别迁移至目标数据库的各个存储节点中。
具体地,当原数据库与目标数据库数据结构不同时,则原数据库中与目标数据库中的某些字段也存在差异。
所以,全量数据迁移模块32进一步适于:确定与原数据库相对应的第一字段规则,以及与目标数据库相对应的第二字段规则,根据第一字段规则与第二字段规则中存在差异的各个字段设置字段转换规则。
其中,存在差异的各个字段包括:字段名称不同、和/或字段类型不同的字段等。表2为原数据库为mysql数据库,目标数据库为greenplum时所对应的字段转换规则中的一部分,如表2所示,mysql数据库中整型类型包含tinyint、int、smallin、mediumint、以及bigint类型,greenplum数据库中整型类型包含int4及int8类型,而mysql数据库中tinyint,int,smallin数据类型对应于greenplum中的int4类型,mediumint,bigint对应于greenplum中的int8类型。例如,在将tinyint、int、和/或smallin转换为int4类型时,由于是从低位整型向高位整型转换,则可在低位整型前位补零的方式实现数据类型的转换,也可通过调用预设的转换函数实现数据类型的转换。本实施对具体的字段转换规则不做限定,本领域技术人员可自行设置。
进一步地,可对全量数据的各条数据记录中符合预设的字段转换规则的字段进行转换,并将转换后的各条数据记录分别迁移至目标数据库的各个存储节点中。例如,在从原数据库中获取与待迁移的数据表相对应的全量数据后,对数据进行解析,将数据的分布列信息及各条数据生成相应的执行语句,并将该执行语句发送至目标数据库,在目标数据库中解析该执行语句,根据解析出的分布列确定该数据记录中包含的分布键,并按照预设的分布规则确定目标数据库中与分布键相对应的存储节点,当该数据记录在原数据库中某一或某几个字段与目标数据库中的字段存在差异时,可根据预设的字段转换规则的字段进行转换,并将转换后的数据存储在相应的存储节点,从而将全量数据中各条数据迁移至相应的存储节点中。
操作模块34,适于从日志文件中获取在与全量数据相对应的日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作,针对目标数据库的各个存储节点中存储的全量数据执行所述数据操作。
其中,原数据库日志文件中记录对原数据库数据的操作信息。该操作信息中包含对全量数据的删除、更改、和/或插入等信息。根据与全量数据相对应的日志点位信息之后产生的日志记录,可以获知在该日志点位之后原数据库中对全量数据执行的数据操作信息。可选的,可从内存中获取与全量数据相对应的日志点位信息之后产生的日志记录。以bin_log为例,其在内存中存在binlog_cache,binlog_cache记录了对数据发生或潜在发生更改的SQL语句,当binlog_cache达到预设容量,或预设时间时,需将binlog_cache中的数据写入磁盘,但由于磁盘数据读写速度较慢,所以本模块中可优选地从binlog_cache中读取日志文件中的日志记录,以提高读取速度。可选的,可实时获取原数据库中全量数据相对应的日志点位信息之后的每条日志记录,并在获取后将该日志记录复制到目标数据库中,或者目标数据库直接通过I/O线程从原数据库中获取日志记录。
由于日志文件中的日志点位通常对应于一条或多条日志记录,当与全量数据相对应的日志点位信息对应于多条日志记录时,操作模块34具体适于:确定第二进度表中记录的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;获取产生时间最早的日志记录以及在所述产生时间最早的日志记录之后产生的各条日志记录;并且,当数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息;判断全量数据中是否包含与所述主键信息相同的数据记录,若是,则删除与所述主键信息相同的数据记录后执行所述插入类型的数据操作。
其中,各个日志点位信息根据预设的时间间隔进行设置,或者根据预设的日志记录条数进行设置,如每隔5分钟设置一个日志点位,或每隔10条日志记录设置一个日志点位。举例来说,全量数据相对应的日志点位为102点位,102点位对应于10条日志记录,则确定出102点位对应的10条日志记录中最早的日志记录为102-1,则获取102-1之后的所有日志记录。若根据日志记录102-4确定是对主键为“1”的数据执行插入操作时,则判断全量数据中是否包含与该主键信息相同的数据记录,若有,则将全量数据中的主键为“1”的数据删除后再执行日志记录102-4对应的插入操作,从而保证数据库系统的幂等性。
可选的,操作模块34进一步适于:将当前已获取的日志记录在日志文件中对应的日志点位信息记录在预设的第二进度表中,当获取在该日志点位信息之后产生的日志记录的过程中断后再次执行时,可根据第二进度表中记录的日志点位信息从日志文件中获取日志记录。
通过第二进度表可以从而实现数据的断点续传。进一步可选的,当第二进度表中记录的日志点位信息对应于多条日志记录时,可确定第二进度表中记录的日志点位信息所对应的多条日志记录中产生时间最早的日志记录,并获取产生时间最早的日志记录以及在产生时间最早的日志记录之后产生的各条日志记录。可选的,当确定与日志记录相对应的数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息,并判断全量数据中是否包含与所述主键信息相同的数据记录,若是,删除与所述主键信息相同的数据记录后执行所述插入类型的数据操作。此处,本领域技术人员能够理解的是,由于全量数据相对应的日志点位信息之后产生的日志记录往往为多条,因此,通常会针对全量数据依次执行各条日志记录所对应的数据操作。相应地,在判断全量数据中是否包含与主键信息相同的数据记录时,该全量数据是指:截至当前时刻,针对全量数据执行与当前已获取的日志记录相对应的数据操作后的数据内容。例如,假设当前已经在获取模块31获取的全量数据的基础上执行了N条日志记录所对应的数据操作(N为大于或等于1的自然数),那么,当确定与第N+1条日志记录相对应的数据操作的操作类型为插入类型时,获取与第N+1条日志记录相对应的数据操作对应的主键信息,并且,在步骤S210获取的全量数据的基础上执行了N条日志记录所对应的数据操作后得到的数据中,判断是否包含与第N+1条日志记录相对应的数据操作对应的主键信息相同的数据记录,若是,则根据与第N+1条日志记录相对应的数据操作对与该主键信息相同的数据记录进行替换。
举例来说,第二进度表position_log中的一个日志点位对应于10条日志记录,当在102点位的第3条日志记录后发生中断时,position_log中记录的当前已获取的日志记录在日志文件中对应的日志点位为102点位。当再次执行时确定102点位所对应的多条日志记录中产生时间最早的日志记录为102-1(102点位对应的第一条日志记录),则获取102-1之后产生的各条日志记录。由上述可知,当在102点位的第3条日志记录后发生中断时,在再次执行时获取的是102点位的第1条及其以后的日志记录,则使得获取的日志记录中出现冗余数据,即102点位的第1条至第3条日志记录重复获取。若确定与冗余日志记录102-2相对应的数据操作的操作类型为插入类型时,由于已执行过该插入操作,碍于数据库中主键的唯一性,使得在对同一主键数据进行插入时出现故障,所以当确定与日志记录102-2相对应的数据操作的操作类型为插入类型时,获取数据操作对应的主键信息,并判断全量数据中是否已存在与所述主键信息相同的数据记录,若是,删除与主键信息相同的数据记录后执行插入类型的数据操作。
在获取日志记录后,可确定与日志记录相对应的数据操作。其中,与日志记录相对应的数据操作具体为多个按照时间顺序依次排列的数据操作。例如,一条bin_log日志信息:
“update tbl_name set col_name where[data]
update pet set sex=″f″where name=″tom″;
delete from pet where name=″jim″;
其对应的数据操作为:在更新tbl_name为tom所对应的数据,将sex值设为“f”后,删除name为″jim″所对应的数据。
在确定与日志记录相对应的数据操作后,针对目标数据库的各个存储节点中存储的全量数据执行所述数据操作。
具体地,操作模块34进一步适于:针对每个数据操作,根据分布列确定与该数据操作相对应的数据记录中包含的分布键,并按照预设的分布规则确定目标数据库中与所述分布键相对应的存储节点,针对与所述分布键相对应的存储节点中存储的全量数据执行所述数据操作。
以上例为例,需根据分布列确定该更新操作所对应的数据记录(tbl_name为tom所对应的数据)中包含的分布键,若分布键为30,预设的分布规则为分布键为“1-50”对应于存储节点1,分布键为“51-100”对应于存储节点1,则需对在存储节点1中存储的全量数据中的tbl_name为tom所对应的数据进行更新。
可选的,操作模块34进一步适于:可在执行每个数据操作时,确定与该数据操作相对应的数据记录中包含的各个字段,针对其中符合预设的字段转换规则的字段进行转换。
以上例为例,若原数据库中tbl_name为tom所对应的数据中某些字段与目标数据库中的字段不一致时,可根据预设的字段转换规则对相应的字段进行转换,并在替换后执行更新操作。
可选的,当原数据库中包括多个数据表,且原数据库对应的日志文件的数量为多个时,则可创建多个并行执行的进程(多个并行执行的进程的数量可根据原数据库对应的日志文件的数量和/或大小、以及同步完成时间等中的至少一个来确定),每个进程分别对应于至少一个日志文件。则获取模块31中根据待迁移的数据表对应的日志文件确定与待迁移的数据表相对应的全量数据相对应的日志点位信息具体为:分别针对每个日志文件,确定该日志文件中与所述备份时间点相对应的日志点位信息;将该日志文件中与所述备份时间点相对应的日志点位信息提供给与该日志文件相对应的进程;而操作模块34具体适于:每个进程从该进程对应的日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作,针对目标数据库中存储的全量数据执行所述数据操作。进一步可选的,可根据预设的同步判断条件确定目标数据库与原数据库中的数据是否同步,若判断目标数据库与原数据库中的数据已同步,则本方法结束。其中,预设的同步判断条件可以为:将当前执行的数据操作所对应的日志记录在日志文件中的日志点位信息确定为第一日志点位信息;将当前产生时间最晚的日志记录在所述日志文件中的日志点位信息确定为第二日志点位信息;若第一日志点位信息与第二日志点位信息之间的间隔小于预设阈值,则确定目标数据库与原数据库中的数据同步。预设的同步判断条件还可以为:将当前执行的数据操作所对应的日志记录在日志文件中的日志点位信息确定为第一日志点位信息;若第一日志点位信息与预设的同步点位信息相同,则确定目标数据库与原数据库中的数据同步;其中,预设的同步点位信息根据以下中的至少一项确定:原数据库对应的日志文件的文件大小、与全量数据相对应的日志点位信息等。在此,预设的同步判断条件本领域技术人员可自行设置,例如预设的同步判断条件还可以为精准同步,即当原数据库与目标数据库中待迁移的数据表完全同步时,本方法结束。
可选的,当原数据库中包括多个数据表,且原数据库对应的日志文件的数量为多个时,则可创建多个并行执行的进程(多个并行执行的进程的数量可根据原数据库对应的日志文件的数量和/或大小、以及同步完成时间等中的至少一个来确定),每个进程分别对应于至少一个日志文件。则确定模块42适于:分别针对每个日志文件,确定该日志文件中与所述备份时间点相对应的日志点位信息;将该日志文件中与所述备份时间点相对应的日志点位信息提供给与该日志文件相对应的进程;而操作模块34具体适于:每个进程从该进程对应的日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作,针对目标数据库中存储的全量数据执行所述数据操作。进一步可选的,可根据预设的同步判断条件确定目标数据库与原数据库中的数据是否同步,若判断目标数据库与原数据库中的数据已同步,则本方法结束。其中,预设的同步判断条件可以为:将当前执行的数据操作所对应的日志记录在日志文件中的日志点位信息确定为第一日志点位信息;将当前产生时间最晚的日志记录在所述日志文件中的日志点位信息确定为第二日志点位信息;若第一日志点位信息与第二日志点位信息之间的间隔小于预设阈值,则确定目标数据库与原数据库中的数据同步。预设的同步判断条件还可以为:将当前执行的数据操作所对应的日志记录在日志文件中的日志点位信息确定为第一日志点位信息;若第一日志点位信息与预设的同步点位信息相同,则确定目标数据库与原数据库中的数据同步;其中,预设的同步点位信息根据以下中的至少一项确定:原数据库对应的日志文件的文件大小、与全量数据相对应的日志点位信息等。在此,预设的同步判断条件本领域技术人员可自行设置,例如预设的同步判断条件还可以为精准同步,即当原数据库与目标数据库中待迁移的数据表完全同步时,本方法结束。
可选的,当目标数据库为多个不同类型的数据库时,可设置多个数据迁移模块,用于针对不同类型的数据库提供相应的数据迁移方法,并通过预设的调用接口对多个数据迁移模块进行调用。其中,预设的调用接口可以为一个,其可以通过虚函数来实现。
由此可见,本实施例提供的数据迁移方法,从原数据库中获取与待迁移的数据表相对应的全量数据,并为全量数据中的各条数据记录设置分布列;根据分布列,将全量数据中的各条数据记录分别迁移至目标数据库的各个存储节点中,从而避免了分布式主节点的处理能力制约数据迁移的效率,有利于数据迁移效率的提升;并获取全量数据过程中,针对待迁移的数据表执行加锁操作,从而保证数据的一致性,并在执行快照处理的事务开启完毕后,针对待迁移的数据表执行解锁操作,由于快照处理的事务开启速度快,对待迁移的数据表的锁定时间极短,从而不影响原数据库线上业务的处理;并根据待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;从日志文件中获取在所述日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作,针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作,从而实现待迁移数据的增量同步,最终在不影响线上业务的情况下,将数据迁移至有多个存储节点的分布式数据库,保证了数据的实时同步,并避免了现有技术中扩充从库而带来的资源浪费。此外,本实施例提供的数据迁移方法在内存中执行,从而进一步地提高了数据迁移效率;本装置在执行过程中无临时文件的产生,从而进一步减少了系统的资源浪费。
根据本发明一个实施例提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的数据迁移方法。
图4示出了根据本发明一个实施例提供的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。
如图4所示,该电子设备可以包括:处理器(processor)402、通信接口(Communications Interface)404、存储器(memory)406、以及通信总线408。
其中:处理器402、通信接口404、以及存储器406通过通信总线408完成相互间的通信。
通信接口404,用于与其它设备比如客户端或其它服务器等的网元通信。
处理器402,用于执行程序410,具体可以执行上述数据迁移方法实施例中的相关步骤。
具体地,程序410可以包括程序代码,该程序代码包括计算机操作指令。
处理器402可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器406,用于存放程序410。存储器406可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序410具体可以用于使得处理器402执行以下操作:
从所述原数据库中获取与所述待迁移的数据表相对应的全量数据,并为所述全量数据中的各条数据记录设置分布列;
根据所述分布列,将所述全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中;
根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;
从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作,针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的数据同步装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了:A1.一种数据迁移方法,用于将待迁移的数据表从原数据库迁移至目标数据库,所述目标数据库为包含多个存储节点的分布式数据库,所述方法包括:
从所述原数据库中获取与所述待迁移的数据表相对应的全量数据,并为所述全量数据中的各条数据记录设置分布列;
根据所述分布列,将所述全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中;
根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;
从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作,针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作。
A2.根据A1所述的方法,其中,所述根据所述分布列,将所述全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中的步骤具体包括:
针对所述全量数据中的每条数据记录,根据所述分布列确定该数据记录中包含的分布键;
按照预设的分布规则确定目标数据库中与所述分布键相对应的存储节点,并将该数据记录迁移到目标数据库中与所述分布键相对应的存储节点中。
A3.根据A1或A2所述的方法,其中,所述与所述日志记录相对应的数据操作具体为多个按照时间顺序依次排列的数据操作;
则所述针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作的步骤具体包括:
针对每个数据操作,根据所述分布列确定与该数据操作相对应的数据记录中包含的分布键;
按照预设的分布规则确定目标数据库中与所述分布键相对应的存储节点;
针对与所述分布键相对应的存储节点中存储的全量数据执行所述数据操作。
A4.根据A2或A3所述的方法,其中,所述预设的分布规则包括:范围规则、和/或哈希规则。
A5.根据A1-A4任一所述的方法,其中,所述将所述全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中的步骤具体包括:
对所述全量数据的各条数据记录中符合预设的字段转换规则的字段进行转换,并将转换后的各条数据记录分别迁移至所述目标数据库的各个存储节点中;和/或,
所述针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作的步骤具体包括:
在执行每个数据操作时,确定与该数据操作相对应的数据记录中包含的各个字段,针对其中符合预设的字段转换规则的字段进行转换。
A6.根据A5所述的方法,其中,所述方法执行之前,进一步包括步骤:
确定与所述原数据库相对应的第一字段规则,以及与所述目标数据库相对应的第二字段规则;
根据所述第一字段规则与所述第二字段规则中存在差异的各个字段设置所述字段转换规则;
其中,所述存在差异的各个字段包括:字段名称不同、和/或字段类型不同的字段。
A7.根据A1-A6任一所述的方法,其中,所述从所述原数据库中获取与所述待迁移的数据表相对应的全量数据的步骤具体包括:
针对所述待迁移的数据表执行加锁操作,开启用于针对所述待迁移的数据表执行快照处理的事务;
当所述事务开启完毕后,针对所述待迁移的数据表执行解锁操作,并根据与所述待迁移的数据表相对应的快照数据获取所述全量数据;
则所述根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息的步骤具体包括:将执行加锁操作后对应的日志点位信息确定为与所述全量数据相对应的日志点位信息。
A8.根据A7所述的方法,其中,当所述待迁移的数据表为多个时,所述开启用于针对所述待迁移的数据表执行快照处理的事务的步骤和/或所述根据与所述待迁移的数据表相对应的快照数据获取所述全量数据的步骤由多个线程并行处理。
A9.根据A7或A8所述的方法,其中,所述根据与所述待迁移的数据表相对应的快照数据获取所述全量数据的步骤具体包括:
将当前已获取的数据记录在所述快照数据中对应的位置信息记录在预设的第一进度表中;
当获取所述全量数据的过程中断后再次执行时,根据所述第一进度表中记录的位置信息从所述快照数据中获取数据记录。
A10.根据A1-A9任一所述的方法,其中,当所述与所述全量数据相对应的日志点位信息对应于多条日志记录时,所述从所述日志文件中获取在所述日志点位信息之后产生的日志记录的步骤具体包括:
确定与所述全量数据相对应的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;
获取所述产生时间最早的日志记录以及在所述产生时间最早的日志记录之后产生的各条日志记录;
且所述针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作的步骤具体包括:
当所述数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息;
判断所述全量数据中是否包含与所述主键信息相同的数据记录,若是,则删除所述与所述主键信息相同的数据记录后执行所述插入类型的数据操作。
A11.根据A1-A10任一所述的方法,其中,所述从所述日志文件中获取在所述日志点位信息之后产生的日志记录的步骤具体包括:
将当前已获取的日志记录在所述日志文件中对应的日志点位信息记录在预设的第二进度表中;
当获取在所述日志点位信息之后产生的日志记录的过程中断后再次执行时,根据所述第二进度表中记录的日志点位信息从所述日志文件中获取日志记录。
A12.根据A11所述的方法,其中,当所述第二进度表中记录的日志点位信息对应于多条日志记录时,所述根据所述第二进度表中记录的日志点位信息从所述日志文件中获取日志记录的步骤具体包括:
确定所述第二进度表中记录的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;
获取所述产生时间最早的日志记录以及在所述产生时间最早的日志记录之后产生的各条日志记录;
且所述针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作的步骤具体包括:
当所述数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息;
判断所述全量数据中是否包含与所述主键信息相同的数据记录,若是,则删除所述与所述主键信息相同的数据记录后执行所述插入类型的数据操作。
A13.根据A1-A12任一所述的方法,其中,所述方法在内存中执行,应用于关系型数据库。
本发明还公开了:B14.一种数据迁移装置,用于将待迁移的数据表从原数据库迁移至目标数据库,所述目标数据库为包含多个存储节点的分布式数据库,所述装置包括:
获取模块,适于从所述原数据库中获取与所述待迁移的数据表相对应的全量数据,并为所述全量数据中的各条数据记录设置分布列;
全量数据迁移模块,适于根据所述分布列,将所述全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中;
确定模块,适于根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;
操作模块,适于从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作,针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作。
B15.根据B14所述的装置,其中,所述全量数据迁移模块具体适于:
针对所述全量数据中的每条数据记录,根据所述分布列确定该数据记录中包含的分布键;
按照预设的分布规则确定目标数据库中与所述分布键相对应的存储节点,并将该数据记录迁移到目标数据库中与所述分布键相对应的存储节点中。
B16.根据B14或B15所述的装置,其中,所述与所述日志记录相对应的数据操作具体为多个按照时间顺序依次排列的数据操作;
则所述操作模块具体适于:
针对每个数据操作,根据所述分布列确定与该数据操作相对应的数据记录中包含的分布键;
按照预设的分布规则确定目标数据库中与所述分布键相对应的存储节点;
针对与所述分布键相对应的存储节点中存储的全量数据执行所述数据操作。
B17.根据B15或B16所述的装置,其中,所述预设的分布规则包括:范围规则、和/或哈希规则。
B18.根据B14-B17任一所述的装置,其中,所述全量数据迁移模块具体适于:
对所述全量数据的各条数据记录中符合预设的字段转换规则的字段进行转换,并将转换后的各条数据记录分别迁移至所述目标数据库的各个存储节点中;和/或,
所述操作模块具体适于:
在执行每个数据操作时,确定与该数据操作相对应的数据记录中包含的各个字段,针对其中符合预设的字段转换规则的字段进行转换。
B19.根据B18所述的装置,其中,全量数据迁移模块进一步适于:
确定与所述原数据库相对应的第一字段规则,以及与所述目标数据库相对应的第二字段规则;
根据所述第一字段规则与所述第二字段规则中存在差异的各个字段设置所述字段转换规则;
其中,所述存在差异的各个字段包括:字段名称不同、和/或字段类型不同的字段。
B20.根据B14-18任一所述的装置,其中,所述获取模块具体适于:
针对所述待迁移的数据表执行加锁操作,开启用于针对所述待迁移的数据表执行快照处理的事务;
当所述事务开启完毕后,针对所述待迁移的数据表执行解锁操作,并根据与所述待迁移的数据表相对应的快照数据获取所述全量数据;
则所述确定模块具体适于:将执行加锁操作后对应的日志点位信息确定为与所述全量数据相对应的日志点位信息。
B21.根据B20所述的装置,其中,当所述待迁移的数据表为多个时,所述获取模块具体包括:多个并行处理的线程,分别用于针对各个数据表开启对该数据表执行快照处理的事务,并根据与该数据表相对应的快照数据获取所述全量数据。
B22.根据B20或B21所述的装置,其中,所述获取模块具体适于:
将当前已获取的数据记录在所述快照数据中对应的位置信息记录在预设的第一进度表中;
当获取所述全量数据的过程中断后再次执行时,根据所述第一进度表中记录的位置信息从所述快照数据中获取数据记录。
B23.根据B14-B22任一所述的装置,其中,当所述与所述全量数据相对应的日志点位信息对应于多条日志记录时,所述操作模块具体适于:
确定与所述全量数据相对应的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;
获取所述产生时间最早的日志记录以及在所述产生时间最早的日志记录之后产生的各条日志记录;
且所述操作模块具体适于:
当所述数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息;
判断所述全量数据中是否包含与所述主键信息相同的数据记录,若是,则删除所述与所述主键信息相同的数据记录后执行所述插入类型的数据操作。
B24.根据B14-B23任一所述的装置,其中,所述操作模块具体适于:
将当前已获取的日志记录在所述日志文件中对应的日志点位信息记录在预设的第二进度表中;
当获取在所述日志点位信息之后产生的日志记录的过程中断后再次执行时,根据所述第二进度表中记录的日志点位信息从所述日志文件中获取日志记录。
B25.根据B24所述的装置,其中,当所述第二进度表中记录的日志点位信息对应于多条日志记录时,所述操作模块具体适于:
确定所述第二进度表中记录的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;
获取所述产生时间最早的日志记录以及在所述产生时间最早的日志记录之后产生的各条日志记录;
并且,当所述数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息;
判断所述全量数据中是否包含与所述主键信息相同的数据记录,若是,则删除所述与所述主键信息相同的数据记录后执行所述插入类型的数据操作。
B26.根据B14-B25任一所述的装置,其中,所述装置应用于关系型数据库。
本发明还公开了:C27.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如A1-A13中任一项所述的数据迁移方法对应的操作。
本发明还公开了:D28.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如A1-A13中任一项所述的数据迁移方法对应的操作。
Claims (10)
1.一种数据迁移方法,用于将待迁移的数据表从原数据库迁移至目标数据库,所述目标数据库为包含多个存储节点的分布式数据库,所述方法包括:
从所述原数据库中获取与所述待迁移的数据表相对应的全量数据,并为所述全量数据中的各条数据记录设置分布列;
根据所述分布列,将所述全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中;
根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;
从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作,针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作。
2.根据权利要求1所述的方法,其中,所述根据所述分布列,将所述全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中的步骤具体包括:
针对所述全量数据中的每条数据记录,根据所述分布列确定该数据记录中包含的分布键;
按照预设的分布规则确定目标数据库中与所述分布键相对应的存储节点,并将该数据记录迁移到目标数据库中与所述分布键相对应的存储节点中。
3.根据权利要求1或2所述的方法,其中,所述与所述日志记录相对应的数据操作具体为多个按照时间顺序依次排列的数据操作;
则所述针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作的步骤具体包括:
针对每个数据操作,根据所述分布列确定与该数据操作相对应的数据记录中包含的分布键;
按照预设的分布规则确定目标数据库中与所述分布键相对应的存储节点;
针对与所述分布键相对应的存储节点中存储的全量数据执行所述数据操作。
4.根据权利要求2或3所述的方法,其中,所述预设的分布规则包括:范围规则、和/或哈希规则。
5.根据权利要求1-4任一所述的方法,其中,所述将所述全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中的步骤具体包括:
对所述全量数据的各条数据记录中符合预设的字段转换规则的字段进行转换,并将转换后的各条数据记录分别迁移至所述目标数据库的各个存储节点中;和/或,
所述针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作的步骤具体包括:
在执行每个数据操作时,确定与该数据操作相对应的数据记录中包含的各个字段,针对其中符合预设的字段转换规则的字段进行转换。
6.根据权利要求5所述的方法,其中,所述方法执行之前,进一步包括步骤:
确定与所述原数据库相对应的第一字段规则,以及与所述目标数据库相对应的第二字段规则;
根据所述第一字段规则与所述第二字段规则中存在差异的各个字段设置所述字段转换规则;
其中,所述存在差异的各个字段包括:字段名称不同、和/或字段类型不同的字段。
7.根据权利要求1-6任一所述的方法,其中,所述从所述原数据库中获取与所述待迁移的数据表相对应的全量数据的步骤具体包括:
针对所述待迁移的数据表执行加锁操作,开启用于针对所述待迁移的数据表执行快照处理的事务;
当所述事务开启完毕后,针对所述待迁移的数据表执行解锁操作,并根据与所述待迁移的数据表相对应的快照数据获取所述全量数据;
则所述根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息的步骤具体包括:将执行加锁操作后对应的日志点位信息确定为与所述全量数据相对应的日志点位信息。
8.一种数据迁移装置,用于将待迁移的数据表从原数据库迁移至目标数据库,所述目标数据库为包含多个存储节点的分布式数据库,所述装置包括:
获取模块,适于从所述原数据库中获取与所述待迁移的数据表相对应的全量数据,并为所述全量数据中的各条数据记录设置分布列;
全量数据迁移模块,适于根据所述分布列,将所述全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中;
确定模块,适于根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;
操作模块,适于从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作,针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作。
9.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-7中任一项所述的数据迁移方法对应的操作。
10.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如权利要求1-7中任一项所述的数据迁移方法对应的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710554505.6A CN107357883A (zh) | 2017-06-30 | 2017-06-30 | 数据迁移方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710554505.6A CN107357883A (zh) | 2017-06-30 | 2017-06-30 | 数据迁移方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107357883A true CN107357883A (zh) | 2017-11-17 |
Family
ID=60292377
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710554505.6A Pending CN107357883A (zh) | 2017-06-30 | 2017-06-30 | 数据迁移方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107357883A (zh) |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108055343A (zh) * | 2017-12-26 | 2018-05-18 | 北京奇虎科技有限公司 | 用于机房的数据同步方法及装置 |
CN108280148A (zh) * | 2018-01-02 | 2018-07-13 | 中国民生银行股份有限公司 | 一种数据迁移方法和数据迁移服务器 |
CN108460108A (zh) * | 2018-02-07 | 2018-08-28 | 广州和辰信息科技有限公司 | 一种数据库数据整理迁移方法、系统以及存储介质 |
CN108509150A (zh) * | 2018-03-08 | 2018-09-07 | 华为技术有限公司 | 数据处理方法及装置 |
CN108573019A (zh) * | 2018-01-23 | 2018-09-25 | 北京金山云网络技术有限公司 | 一种数据迁移方法、装置、电子设备及可读存储介质 |
CN108932282A (zh) * | 2018-05-18 | 2018-12-04 | 腾讯科技(深圳)有限公司 | 一种数据库迁移方法、装置和存储介质 |
CN108984660A (zh) * | 2018-06-28 | 2018-12-11 | 中译语通科技股份有限公司 | 一种MySQL数据库主从同步数据去重方法 |
CN109284281A (zh) * | 2018-09-10 | 2019-01-29 | 北京百度网讯科技有限公司 | 用于迁移数据的方法和装置 |
CN109933632A (zh) * | 2019-04-04 | 2019-06-25 | 杭州数梦工场科技有限公司 | 一种数据库的数据迁移方法、装置及设备 |
CN110309126A (zh) * | 2019-07-02 | 2019-10-08 | 拓尔思信息技术股份有限公司 | 关系数据库增量迁移处理方法、关系数据库中数据保存方法 |
CN110413595A (zh) * | 2019-06-28 | 2019-11-05 | 万翼科技有限公司 | 一种应用于分布式数据库的数据迁移方法和相关装置 |
CN110457181A (zh) * | 2019-08-02 | 2019-11-15 | 武汉达梦数据库有限公司 | 一种数据库的日志优化分析方法及装置 |
CN111241068A (zh) * | 2020-01-14 | 2020-06-05 | 阿里巴巴集团控股有限公司 | 信息处理方法、装置及设备、计算机可读存储介质 |
CN111291112A (zh) * | 2018-12-07 | 2020-06-16 | 阿里巴巴集团控股有限公司 | 分布式数据库的读写控制方法和装置以及电子设备 |
CN112015716A (zh) * | 2020-08-04 | 2020-12-01 | 北京人大金仓信息技术股份有限公司 | 数据库数据迁移方法、装置、介质和电子设备 |
CN112181937A (zh) * | 2019-07-04 | 2021-01-05 | 北京京东振世信息技术有限公司 | 一种结转数据的方法和装置 |
CN112486966A (zh) * | 2020-11-26 | 2021-03-12 | 中国国家铁路集团有限公司 | 一种过期数据清理方法、装置和电子设备 |
CN115185930A (zh) * | 2022-09-13 | 2022-10-14 | 中国人寿保险股份有限公司上海数据中心 | 一种it监控系统迁移方法 |
CN116069765A (zh) * | 2023-03-06 | 2023-05-05 | 天翼云科技有限公司 | 数据迁移方法、装置、电子设备及存储介质 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7072919B2 (en) * | 2002-05-08 | 2006-07-04 | Oracle International Corporation | Method for performing data migration |
US7664795B2 (en) * | 2003-09-26 | 2010-02-16 | Microsoft Corporation | Apparatus and method for database migration |
CN102262626A (zh) * | 2010-05-24 | 2011-11-30 | 阿里巴巴集团控股有限公司 | 一种数据库存储数据的方法及装置 |
CN102495906A (zh) * | 2011-12-23 | 2012-06-13 | 天津神舟通用数据技术有限公司 | 一种实现断点续传的增量式数据迁移方法 |
CN102831211A (zh) * | 2012-08-14 | 2012-12-19 | 中山大学 | 一种基于表关联分析的数据表迁移的方法 |
CN102982085A (zh) * | 2012-10-31 | 2013-03-20 | 北京奇虎科技有限公司 | 数据迁移系统和方法 |
CN105183852A (zh) * | 2015-09-08 | 2015-12-23 | 网易(杭州)网络有限公司 | 一种数据库迁移方法和装置 |
CN105528368A (zh) * | 2014-09-30 | 2016-04-27 | 北京金山云网络技术有限公司 | 一种数据库迁移方法及装置 |
CN106055698A (zh) * | 2016-06-14 | 2016-10-26 | 智者四海(北京)技术有限公司 | 数据迁移方法、代理节点及数据库实例 |
CN106528793A (zh) * | 2016-12-14 | 2017-03-22 | 国家测绘地理信息局卫星测绘应用中心 | 一种分布式空间数据库的时空分片存储方法 |
CN106682021A (zh) * | 2015-11-09 | 2017-05-17 | 五八同城信息技术有限公司 | 数据库迁移方法及装置 |
-
2017
- 2017-06-30 CN CN201710554505.6A patent/CN107357883A/zh active Pending
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7072919B2 (en) * | 2002-05-08 | 2006-07-04 | Oracle International Corporation | Method for performing data migration |
US7664795B2 (en) * | 2003-09-26 | 2010-02-16 | Microsoft Corporation | Apparatus and method for database migration |
CN102262626A (zh) * | 2010-05-24 | 2011-11-30 | 阿里巴巴集团控股有限公司 | 一种数据库存储数据的方法及装置 |
CN102495906A (zh) * | 2011-12-23 | 2012-06-13 | 天津神舟通用数据技术有限公司 | 一种实现断点续传的增量式数据迁移方法 |
CN102831211A (zh) * | 2012-08-14 | 2012-12-19 | 中山大学 | 一种基于表关联分析的数据表迁移的方法 |
CN102982085A (zh) * | 2012-10-31 | 2013-03-20 | 北京奇虎科技有限公司 | 数据迁移系统和方法 |
CN105528368A (zh) * | 2014-09-30 | 2016-04-27 | 北京金山云网络技术有限公司 | 一种数据库迁移方法及装置 |
CN105183852A (zh) * | 2015-09-08 | 2015-12-23 | 网易(杭州)网络有限公司 | 一种数据库迁移方法和装置 |
CN106682021A (zh) * | 2015-11-09 | 2017-05-17 | 五八同城信息技术有限公司 | 数据库迁移方法及装置 |
CN106055698A (zh) * | 2016-06-14 | 2016-10-26 | 智者四海(北京)技术有限公司 | 数据迁移方法、代理节点及数据库实例 |
CN106528793A (zh) * | 2016-12-14 | 2017-03-22 | 国家测绘地理信息局卫星测绘应用中心 | 一种分布式空间数据库的时空分片存储方法 |
Cited By (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108055343A (zh) * | 2017-12-26 | 2018-05-18 | 北京奇虎科技有限公司 | 用于机房的数据同步方法及装置 |
CN108055343B (zh) * | 2017-12-26 | 2021-07-13 | 北京奇虎科技有限公司 | 用于机房的数据同步方法及装置 |
CN108280148A (zh) * | 2018-01-02 | 2018-07-13 | 中国民生银行股份有限公司 | 一种数据迁移方法和数据迁移服务器 |
CN108573019B (zh) * | 2018-01-23 | 2021-04-23 | 北京金山云网络技术有限公司 | 一种数据迁移方法、装置、电子设备及可读存储介质 |
CN108573019A (zh) * | 2018-01-23 | 2018-09-25 | 北京金山云网络技术有限公司 | 一种数据迁移方法、装置、电子设备及可读存储介质 |
CN108460108A (zh) * | 2018-02-07 | 2018-08-28 | 广州和辰信息科技有限公司 | 一种数据库数据整理迁移方法、系统以及存储介质 |
CN108509150A (zh) * | 2018-03-08 | 2018-09-07 | 华为技术有限公司 | 数据处理方法及装置 |
CN108932282A (zh) * | 2018-05-18 | 2018-12-04 | 腾讯科技(深圳)有限公司 | 一种数据库迁移方法、装置和存储介质 |
CN108984660A (zh) * | 2018-06-28 | 2018-12-11 | 中译语通科技股份有限公司 | 一种MySQL数据库主从同步数据去重方法 |
CN109284281A (zh) * | 2018-09-10 | 2019-01-29 | 北京百度网讯科技有限公司 | 用于迁移数据的方法和装置 |
CN111291112A (zh) * | 2018-12-07 | 2020-06-16 | 阿里巴巴集团控股有限公司 | 分布式数据库的读写控制方法和装置以及电子设备 |
CN111291112B (zh) * | 2018-12-07 | 2023-04-28 | 阿里巴巴集团控股有限公司 | 分布式数据库的读写控制方法和装置以及电子设备 |
CN109933632A (zh) * | 2019-04-04 | 2019-06-25 | 杭州数梦工场科技有限公司 | 一种数据库的数据迁移方法、装置及设备 |
CN110413595A (zh) * | 2019-06-28 | 2019-11-05 | 万翼科技有限公司 | 一种应用于分布式数据库的数据迁移方法和相关装置 |
CN110309126A (zh) * | 2019-07-02 | 2019-10-08 | 拓尔思信息技术股份有限公司 | 关系数据库增量迁移处理方法、关系数据库中数据保存方法 |
CN112181937A (zh) * | 2019-07-04 | 2021-01-05 | 北京京东振世信息技术有限公司 | 一种结转数据的方法和装置 |
CN112181937B (zh) * | 2019-07-04 | 2023-11-03 | 北京京东振世信息技术有限公司 | 一种结转数据的方法和装置 |
CN110457181B (zh) * | 2019-08-02 | 2023-05-16 | 武汉达梦数据库股份有限公司 | 一种数据库的日志优化分析方法及装置 |
CN110457181A (zh) * | 2019-08-02 | 2019-11-15 | 武汉达梦数据库有限公司 | 一种数据库的日志优化分析方法及装置 |
CN111241068A (zh) * | 2020-01-14 | 2020-06-05 | 阿里巴巴集团控股有限公司 | 信息处理方法、装置及设备、计算机可读存储介质 |
CN111241068B (zh) * | 2020-01-14 | 2023-04-07 | 阿里巴巴集团控股有限公司 | 信息处理方法、装置及设备、计算机可读存储介质 |
CN112015716A (zh) * | 2020-08-04 | 2020-12-01 | 北京人大金仓信息技术股份有限公司 | 数据库数据迁移方法、装置、介质和电子设备 |
CN112015716B (zh) * | 2020-08-04 | 2024-02-09 | 北京人大金仓信息技术股份有限公司 | 数据库数据迁移方法、装置、介质和电子设备 |
CN112486966A (zh) * | 2020-11-26 | 2021-03-12 | 中国国家铁路集团有限公司 | 一种过期数据清理方法、装置和电子设备 |
CN115185930B (zh) * | 2022-09-13 | 2022-12-06 | 中国人寿保险股份有限公司上海数据中心 | 一种it监控系统迁移方法 |
CN115185930A (zh) * | 2022-09-13 | 2022-10-14 | 中国人寿保险股份有限公司上海数据中心 | 一种it监控系统迁移方法 |
CN116069765A (zh) * | 2023-03-06 | 2023-05-05 | 天翼云科技有限公司 | 数据迁移方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107357883A (zh) | 数据迁移方法及装置 | |
CN107391628A (zh) | 数据同步方法及装置 | |
US7769714B2 (en) | Automatic error correction for replication and instantaneous instantiation | |
US5806075A (en) | Method and apparatus for peer-to-peer data replication | |
CN107391635A (zh) | 数据同步系统及方法 | |
US10860457B1 (en) | Globally ordered event stream logging | |
US10254996B1 (en) | Fast migration of metadata | |
JP4573277B2 (ja) | データベース矛盾解消方式 | |
CN103299267B (zh) | 用于执行多租户存储中的交叉存储连接的方法和系统 | |
CN107391634A (zh) | 数据迁移方法及装置 | |
EP2746971A2 (en) | Replication mechanisms for database environments | |
US20090222691A1 (en) | Data Migration Manager | |
CN1848849B (zh) | 复制目录修改的方法和装置 | |
CN108509462B (zh) | 一种同步活动事务表的方法及装置 | |
US11487714B2 (en) | Data replication in a data analysis system | |
US8280917B1 (en) | Batching content management operations to facilitate efficient database interactions | |
CN106777270A (zh) | 一种基于提交点时间线同步的异构数据库复制并行执行系统及方法 | |
JP2006202337A (ja) | データ処理の方法及び装置 | |
EP3391243A1 (en) | Promoted properties in relational structured data | |
EP3391249A1 (en) | Replication of structured data records among partitioned data storage spaces | |
US20200409939A1 (en) | Systems and methods for scalable database technology | |
CN109710698A (zh) | 一种数据汇聚方法、装置、电子设备及介质 | |
US10942912B1 (en) | Chain logging using key-value data storage | |
CN115687359A (zh) | 数据表分区方法及装置、存储介质、计算机设备 | |
US7600149B2 (en) | Failure transparency for update applications under single-master configuration |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171117 |
|
RJ01 | Rejection of invention patent application after publication |