CN107391635A - 数据同步系统及方法 - Google Patents
数据同步系统及方法 Download PDFInfo
- Publication number
- CN107391635A CN107391635A CN201710556355.2A CN201710556355A CN107391635A CN 107391635 A CN107391635 A CN 107391635A CN 201710556355 A CN201710556355 A CN 201710556355A CN 107391635 A CN107391635 A CN 107391635A
- Authority
- CN
- China
- Prior art keywords
- data
- target database
- database
- full dose
- log recording
- 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/25—Integrating or interfacing systems involving database management systems
-
- 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
Abstract
本发明公开了一种数据同步系统及方法,其中,系统包括:调用模块,以及多个与所述调用模块分别相连的数据同步模块,其中,所述调用模块,适于确定与接收到的数据同步请求相对应的目标数据库的类型,向与该目标数据库的类型相对应的数据同步模块发送调用请求;每个数据同步模块分别对应于至少一种类型的目标数据库,适于在接收到所述调用模块的调用请求时,确定与所述调用请求相对应的目标数据库,并将待同步的数据同步至所述目标数据库。采用本方案,可以实现将原数据库中数据自动化同步至相应的目标数据库,并能满足同时将原数据库中数据同步至不同类型的目标数据库的需求,提高了数据同步效率。
Description
技术领域
本发明涉及通信技术领域,具体涉及一种数据同步系统及方法。
背景技术
随着信息技术的发展,信息系统更换或调整的频率也越来越高。例如,测试数据库数据同步至线上业务数据库、扩充备用库、读写数据库分离、对长时间超负荷的设备进行维护操作或机房变更等诸多情形下均需将一个数据库中的数据同步至另一个数据库。
但是,发明人在实现本发明的过程中发现,现有技术中至少存在下述缺陷:在将一个数据库中的数据同步至另一个数据库时,均需在对原数据库和目标数据库的特性做出详细分析后,制定出相应的数据同步方案,并编译相应的数据同步代码,从而实现数据的同步。然而,采用该方法无法实现原数据库向目标数据库数据的自动同步,数据同步效率低下,人工成本高。并且,现今的数据同步系统仅针对于一种类型的目标数据库,系统可拓展性差,无法满足同时将原数据库中数据同步至不同类型的目标数据库的需求。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据同步系统及方法。
根据本发明的一个方面,提供了一种数据同步系统,包括:调用模块,以及多个与调用模块分别相连的数据同步模块,其中,调用模块,适于确定与接收到的数据同步请求相对应的目标数据库的类型,向与该目标数据库的类型相对应的数据同步模块发送调用请求;每个数据同步模块分别对应于至少一种类型的目标数据库,适于在接收到所述调用模块的调用请求时,确定与所述调用请求相对应的目标数据库,并将待同步的数据同步至所述目标数据库。
根据本发明的另一方面,提供了一种数据同步方法,包括:确定与接收到的数据同步请求相对应的目标数据库的类型,向与该目标数据库的类型相对应的数据同步模块发送调用请求;接收到调用请求的数据同步模块确定与所述调用请求相对应的目标数据库,并将待同步的数据同步至所述目标数据库。
根据本发明的又一方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述数据同步方法对应的操作。
根据本发明的再一方面,提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如上述数据同步方法对应的操作。
根据本发明的数据同步系统及方法,通过确定与接收到的数据同步请求相对应的目标数据库的类型,向与该目标数据库的类型相对应的数据同步模块发送调用请求,接收到调用请求的数据同步模块确定与调用请求相对应的目标数据库,并将待同步的数据同步至所述目标数据库。采用本方案,可以实现将原数据库中数据自动化同步至相应的目标数据库,并能满足同时将原数据库中数据同步至不同类型的目标数据库的需求,提高了数据同步效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例提供的一种数据同步系统的结构框图;
图2示出了根据本发明另一个实施例提供的一种数据同步系统的结构框图;
图3示出了根据本发明一个实施例提供的一种数据同步模块的结构框图;
图4示出了根据本发明另一个实施例提供的一种数据同步模块的结构框图;
图5示出了根据本发明又一个实施例提供的一种数据同步模块的结构框图;
图6示出了根据本发明一个实施例提供的一种数据同步方法的流程图;
图7示出了根据本发明另一个实施例提供的一种数据同步方法的流程图;
图8示出了根据本发明再一个实施例提供的一种数据同步方法的流程图;
图9示出了根据本发明又一个实施例提供的一种数据同步方法的流程图;
图10示出了根据本发明又一个实施例提供的一种数据同步方法的流程图;
图11示出了根据本发明一个实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例提供的一种数据同步系统的结构框图。如图1所示,该系统包括:调用模块11,以及多个与调用模块11分别相连的数据同步模块12。
调用模块11,适于确定与接收到的数据同步请求相对应的目标数据库的类型,向与该目标数据库的类型相对应的数据同步模块发送调用请求。
其中,与接收到的数据同步请求相对应的目标数据库的类型可以为一种,也可以为多种。目标数据库的类型可以为MySQL类型、Redis类型、Mongo类型、和/或Greenplum类型等。
可选的,可通过预设的请求接口接收用户触发的数据同步请求。预设的请求接口既可以接收用户从预设的数据库类型列表中选择目标数据库而生成的数据同步请求,也可以接收用户直接输入的数据同步请求语句,在对该数据同步请求语句进行语义分析后可确定与接收到的数据同步请求相对应的目标数据库的类型而生成的数据同步请求。
在确定与接收到的数据同步请求相对应的目标数据库的类型后,向与该目标数据库的类型相对应的数据同步模块发送调用请求。例如,可通过预设的调用函数向与该目标数据库的类型相对应的数据同步模块发送调用请求。
数据同步模块12,适于在接收到调用模块的调用请求时,确定与所述调用请求相对应的目标数据库,并将待同步的数据同步至所述目标数据库。
其中,每个数据同步模块分别对应于至少一种类型的目标数据库。
可选的,在接收到调用模块的调用请求时,可对该调用请求进行解析,通过解析后确定与调用请求相对应的目标数据库。例如,调用请求中可包含目标数据库的编码信息(如Mysql数据库编码为1)等,则对该调用请求解析后解析出目标数据库的编码,并根据该编码信息确定相应的目标数据库。
在确定出调用请求相对应的目标数据库后,可根据预设的与该目标数据库相对应的数据同步方法,并将待同步的数据同步至目标数据库。其中,待同步的数据可以为原数据库中的全部或一部分数据。
由此可见,本实施例提供的数据同步系统,通过调用模块确定与接收到的数据同步请求相对应的目标数据库的类型,向与该目标数据库的类型相对应的数据同步模块发送调用请求,接收到调用请求的数据同步模块确定与调用请求相对应的目标数据库,并将待同步的数据同步至目标数据库。采用本系统,可以实现将原数据库中数据自动化同步至相应的目标数据库,并能满足同时将原数据库中数据同步至不同类型的目标数据库的需求,提高数据同步效率。并且,本系统具有结构简单,便于操作与维护,可拓展性好的优势。
图2示出了根据本发明另一个实施例提供的一种数据同步系统的结构框图。如图2所示,该系统在图1所示装置的基础上进一步包括:数据同步接口13。
调用模块11,适于通过数据同步接口向与该目标数据库的类型相对应的数据同步模块发送调用请求。
当接收到的数据同步请求相对应的目标数据库为多个不同类型的数据库时,调用模块21具体适于:确定与多个不同类型的数据库相对应的各个数据同步模块,分别向每个数据同步模块发送对应的调用请求。
数据同步模块12,适于在接收到调用模块的调用请求时,确定与所述调用请求相对应的目标数据库,并将待同步的数据同步至所述目标数据库。
其中,每个数据同步模块分别对应于至少一种类型的目标数据库。另外,多个数据同步模块可以包括以下中的至少两个:与MySQL类型的目标数据库相对应的数据同步模块、与Redis类型的目标数据库相对应的数据同步模块、与Mongo类型的目标数据库相对应的数据同步模块、以及与Greenplum类型的目标数据库相对应的数据同步模块。
每个数据同步模块均有其相对应的数据同步方法,在确定出调用请求相对应的目标数据库后,可根据预设的与该目标数据库相对应的数据同步方法,并将待同步的数据同步至目标数据库。其中,待同步的数据可以为原数据库中的全部或一部分数据。
可选的,为了避免由于临时文件而耗费大量的资源,也为了提高迁移效率,数据同步模块执行的所有操作均在内存中进行。
数据同步接口13,适于连接调用模块以及各个数据同步模块。
其中,数据同步接口13可通过虚函数实现。虚函数的个数大于或等于1。
可选的,在具体的实施过程中,可定义一个基类(如,interface类),基类中定义有1个或多个虚函数。其中,虚函数只有定义,其在基类中声明为virtual(虚基类),并在一个或多个派生类中被重新定义的成员函数,其并无具体的实现过程,多个数据同步模块中分别有相应的应用函数来实现数据同步接口中的基类中的所有虚函数。
以以下代码为例,tamp类中定义有apply_binlog以及apply_synchronou两个虚函数,apply_binlog以及apply_synchronou两个虚函数无具体的实现过程。当需将原数据库数据同步至redis数据库时,则先需声明tamp_redis类,通过与redis数据库相对应的数据同步模块中相应的应用函数来实现apply_binlog以及apply_synchronou函数。
由此可见,本实施例提供的数据同步系统,通过调用模块确定与接收到的数据同步请求相对应的目标数据库的类型,通过数据同步接口向与该目标数据库的类型相对应的数据同步模块发送调用请求,接收到调用请求的数据同步模块确定与调用请求相对应的目标数据库,并将待同步的数据同步至目标数据库。采用本系统,可以实现将原数据库中数据自动化同步至相应的目标数据库,并能满足同时将原数据库中数据同步至不同类型的目标数据库的需求,提高数据同步效率。并且,本系统具有结构简单,便于操作与维护,可拓展性好的优势;此外,数据同步接口采用虚函数的方式实现,避免了需为每个数据同步模块设置相应的接口而产生的资源的浪费,节省了内存资源。
图3为根据本发明一个实施例提供的一种数据同步模块的结构框图。该种数据同步模块可应用于关系型数据库,如mysql数据库等。如图3所示,该数据同步模块包括:获取单元1231、确定单元1232、以及操作单元1233。在此本领域技术人员应该理解的是,本实施例数据同步模块具有本实施例中获取单元1231、确定单元1232、以及操作单元1233所具有的所有特征。可选的,为了避免由于临时文件而耗费大量的资源,也为了提高迁移效率,本实施例提供的数据同步模块在内存中执行。
获取单元1231,适于获取与待迁移的数据表相对应的全量数据,并根据所述待迁移的数据表对应的日志文件确定与全量数据相对应的日志点位信息。
其中,获取单元1231具体适于从原数据库中获取与待迁移的数据表相对应的全量数据。具体地,获取单元1231适于针对待迁移的数据表执行加锁操作,开启用于针对待迁移的数据表执行快照处理的事务;当事务开启完毕后,针对待迁移的数据表执行解锁操作,并根据与待迁移的数据表相对应的快照数据获取全量数据。
本实施例中待迁移的数据表的数量可以为一个,也可以为多个,其与待迁移的数据量有关。数据表中记录有1条或多条数据,待迁移的数据表相对应的全量数据为待迁移的数据表中所有的数据。另外,由于实际业务中,数据表中的数据是随时间动态变化的,因此,本单元中确定的待迁移的数据表相对应的全量数据实质上是指:在获取单元1231执行获取与待迁移的数据表相对应的全量数据的时刻,待迁移的数据表中存储的全部数据。
可选的,为保证数据的一致性,在获取全量数据之前,需对待迁移的数据表执行加锁操作,加锁期间对待迁移的数据表无法执行写操作。具体的锁的类型本领域人员可根据实际业务自行设置,例如可对待迁移的数据表执行加表级锁,也可对待迁移的数据表执行加行级锁等,本实施例对加锁的具体类型不做具体限定。
在对待迁移的数据表执行加锁操作后,开启用于针对待迁移的数据表执行快照处理的事务。其中,快照为对数据库数据的只读静态视图,执行快照处理后生成的快照数据与执行快照处理时的数据库中的数据状态保持一致。所以,在对待迁移的数据表执行快照处理后,快照数据与待迁移的数据表所对应的全量数据保持一致。
其中,将执行加锁操作后对应的日志点位信息确定为与全量数据相对应的日志点位信息。数据库中含有记录数据库信息的各类日志文件,如查询日志、错误日志、事务日志、和/或二进制日志等。以bin_log日志(二进制日志)为例,其记录了对数据发生或潜在发生更改的SQL语句,该日志文件的每个点位对应于一条或多条日志信息,一条日志信息对应于对数据的一条或多条操作信息。
当执行快照处理事务开启完毕后,对待迁移的数据表执行解锁操作,从而原数据库可以对待迁移的数据表进行写操作。由于快照处理事务开启速度快,对待迁移的数据表的锁定过程时间极短,所以不影响原数据库线上业务的处理。
进一步地,可根据与待迁移的数据表相对应的快照数据获取全量数据。可选的,在读取与待迁移的数据表相对应的快照数据后,对数据进行解析,生成相应的操作命令,并将该操作命令发送至目标数据库,在目标数据库中执行该操作命令,从而将待迁移的数据表所对应的全量数据同步至目标数据库。例如,可从快照数据中读取预设数目数据(如1条,1万条,或快照数据所有数据条数等),在对数据进行解析后,生成将该预设数目数据写入的SQL语句,并将该SQL语句发送至目标数据库,在目标数据库中执行该SQL语句,从而将数据同步至目标数据库,重复此操作直至与待迁移的数据表相对应的快照数据中的所有数据均同步至目标数据库后,完成将待迁移的数据表所对应的全量数据同步至目标数据库。
当待迁移的数据表为多个时,获取单元1231进一步包括:多个并行处理的线程,分别用于针对各个数据表开启对该数据表执行快照处理的事务,并根据与该数据表相对应的快照数据获取所述全量数据。采用多个线程(或进程)并行进行快照处理及根据快照数据获取全量数据,可以大幅提高快照处理速度及全量数据的获取速度。其中,一个线程(或进程)可对应一个或多个待迁移数据表的快照处理事务,具体对应关系本领域技术人员可根据开设的线程(或进程)数及待迁移的数据表个数及容量等进行设定,本实施例不做具体限定。可选的,当由多个线程(或进程)执行快照处理的事务时,可对各个线程设置反馈信号,在执行快照处理的事务开启完毕后,反馈给主线程该事务开启完毕的信息。本模块中当所有线程(或进程)快照处理事务开启完毕后,视为执行快照处理的事务开启完毕。
可选的,获取单元1231进一步适于:将当前已获取的数据记录在快照数据中对应的位置信息记录在预设的第一进度表中;当获取全量数据的过程中断后再次执行时,根据第一进度表中记录的位置信息从所述快照数据中获取数据记录。从而可以实现全量数据的断点续传。可选的,当由多个线程根据与待迁移的数据表相对应的快照数据获取全量数据时,可在第一进度表中分别记录各个线程所获取的数据记录在快照数据中对应的位置信息。例如,线程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条数据。
确定单元1232,适于从日志文件中获取在所述日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作。
其中,原数据库日志文件中记录有对原数据库数据的操作信息。该操作信息中包含对全量数据的删除、更改、和/或插入等信息。根据与全量数据相对应的日志点位信息之后产生的日志记录,可以获知在该日志点位之后原数据库中对全量数据执行的数据操作信息。
可选的,可优先从内存中获取与全量数据相对应的日志点位信息之后产生的日志记录。以bin_log为例,其在内存中存在binlog_cache,binlog_cache记录了对数据发生或潜在发生更改的SQL语句,当binlog_cache达到预设容量,或预设时间时,需将binlog_cache中的数据写入磁盘,但由于磁盘数据读写速度较慢,所以本步骤中可优选地从binlog_cache中读取日志文件中的日志记录,以提高读取速度。
可选的,可实时获取原数据库中全量数据相对应的日志点位信息之后的每条日志记录,并在获取后将该日志记录复制到目标数据库中,或者目标数据库直接通过I/O线程从原数据库中获取日志记录。在对每条日志记录进行解析后,获得原数据库中在记录日志点位信息之后对全量数据的数据操作信息,从而确定与该日志记录相对应的数据操作。举例来说,根据一条bin_log日志信息:
“Query OK,0 rowsaffeeted(0.44sec)
insertinto yong.tbl values(1,′tom′)”
可判断出其相应的数据操作为“insertinto yong.tbl values(1,′tom′)”,即在yong.tbl表中插入数据“(1,′tom′)”。
当与全量数据相对应的日志点位信息对应于多条日志记录时,确定单元1232进一步适于:确定与全量数据相对应的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;获取产生时间最早的日志记录以及在所述产生时间最早的日志记录之后产生的各条日志记录。
其中,各个日志点位信息根据预设的时间间隔进行设置,或者根据预设的日志记录条数进行设置,如每隔5分钟设置一个日志点位,或每隔10条日志记录设置一个日志点位。
并且,当确定与日志记录相对应的数据操作的操作类型为插入类型时,操作单元1233适于:当确定单元1232确定的数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息;判断全量数据中是否包含与所述主键信息相同的数据记录,若是,则根据所述数据操作对所述与所述主键信息相同的数据记录进行替换。举例来说,全量数据相对应的日志点位为102点位,102点位对应于10条日志记录,则确定出102点位对应的10条日志记录中最早的日志记录为102-1,则获取102-1之后的所有日志记录。若根据日志记录102-4确定是对主键为“1”的数据执行插入操作时,则判断全量数据中是否包含与该主键信息相同的数据记录,若有,则将全量数据中的主键为“1”的数据进行替换,从而保证数据库系统的幂等性。
可选的,确定单元1232进一步适于:将当前已获取的日志记录在日志文件中对应的日志点位信息记录在预设的第二进度表中;当获取在日志点位信息之后产生的日志记录的过程中断后再次执行时,根据第二进度表中记录的日志点位信息从日志文件中获取日志记录。通过第二进度表可以实现数据的断点续传。
进一步可选的,当第二进度表中记录的日志点位信息对应于多条日志记录时,确定单元1232进一步适于:确定第二进度表中记录的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;获取产生时间最早的日志记录以及在产生时间最早的日志记录之后产生的各条日志记录。
并且,当确定与日志记录相对应的数据操作的操作类型为插入类型时,操作单元1233适于:获取数据操作对应的主键信息,并判断全量数据中是否包含与所述主键信息相同的数据记录,若是,则根据所述数据操作对与所述主键信息相同的数据记录进行替换。此处,本领域技术人员能够理解的是,由于全量数据相对应的日志点位信息之后产生的日志记录往往为多条,相应地,在操作单元1233中,通常会针对全量数据依次执行各条日志记录所对应的数据操作。相应地,在判断全量数据中是否包含与主键信息相同的数据记录时,该全量数据是指:截至当前时刻,针对全量数据执行与当前已获取的日志记录相对应的数据操作后的数据内容。例如,假设当前已经在获取单元1231获取的全量数据的基础上执行了N条日志记录所对应的数据操作(N为大于或等于1的自然数),那么,当确定与第N+1条日志记录相对应的数据操作的操作类型为插入类型时,获取与第N+1条日志记录相对应的数据操作对应的主键信息,并且,在获取单元1231获取的全量数据的基础上执行了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相对应的数据操作的操作类型为插入类型时,获取数据操作对应的主键信息,并判断全量数据中是否已存在与所述主键信息相同的数据记录,若是,则根据数据操作对与所述信息相同的数据记录进行替换。例如,在mysql数据库中,当全量数据中已存在与主键信息相同的数据记录时,可直接应用“replace_into”命令将所述主键信息相同的数据记录进行替换。
操作单元1233,适于针对全量数据执行确定单元1232确定的数据操作,得到与待迁移的数据表相对应的迁移数据。
其中,操作单元1233适于将迁移数据从原数据库中同步到目标数据库。
具体地,根据确定单元1232中确定的数据操作,对目标数据库中的全量数据执行该数据操作,从而得到与待迁移的数据表相对应的迁移数据,使迁移数据从原数据库中同步到目标数据库。例如,若确定单元1232中确定与日志记录相对应的数据操作为对table1中的主键值为“1”的数据进行删除,则在目标数据库的全量数据中对table1中的主键值为“1”的数据执行删除操作。
具体实施时,确定单元1232和操作单元1233可以依次循环执行,直至符合预设的结束条件。该预设的结束条件可以是原数据库与目标数据库精确同步,或者,也可以是达到预设的同步点位。例如,每当通过确定单元1232获取到至少一条日志记录相对应的数据操作后,即通过操作单元1233执行对应的数据操作,即:确定单元1232和操作单元1233循环执行多次,从而实现实时更新的目的。或者,操作单元1233也可以在确定单元1232获取到符合预设的结束条件时的全部日志记录所对应的数据操作后执行一次。本发明对确定单元1232和操作单元1233的具体执行方式不做限定。
由此可见,本实施例提供的数据同步模块,针对待迁移的数据表执行加锁操作,从而保证数据的一致性,并在执行快照处理的事务开启完毕后,针对待迁移的数据表执行解锁操作,由于快照处理的事务开启速度快,对待迁移的数据表的锁定时间极短,从而不影响原数据库线上业务的处理;并且,通过从快照数据中获取全量数据,避免了现有技术中从线上数据库获取数据时对线上数据库业务的影响;并且可通过多个线程获取全量数据,提高了数据迁移效率;并通过从日志文件中获取在与全量数据相对应的日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作,并针对全量数据执行所述数据操作,从而实现数据的增量及实时同步。最终实现在不影响线上业务的情况下,实现数据的迁移,提高了数据迁移效率,保证了数据的实时同步,并避免了现有技术中扩充从库而带来的资源浪费;此外,本实施例提供的数据同步模块在内存中执行,从而进一步地提高了数据同步效率,并且本方法在执行过程中无临时文件的产生,从而进一步减少了系统资源的浪费。
图4示出了根据本发明另一个实施例提供的一种数据同步模块的结构框图。该模块适用于将数据从原数据库迁移至目标数据库,其中,目标数据库为包含多个存储节点的分布式数据库,该装置包括:获取单元1241、全量数据迁移单元1242、确定单元1243、以及操作单元1244。在此本领域技术人员应当理解的是,本实施例中的数据同步模块包含本实施例中获取单元1241、全量数据迁移单元1242、确定单元1243、以及操作单元1244所具有的所有特征。本实施例中的原数据库及目标数据库可以为关系型数据库,例如,本方法可适用于将mysql数据库中数据迁移至含有多个存储节点的greenplum数据库中。可选的,本实施例提供的数据同步模块在内存中执行。
获取单元1241,适于从原数据库中获取与待迁移的数据表相对应的全量数据,并为所述全量数据中的各条数据记录设置分布列。
其中,本实施例中待迁移的数据表的数量可以为一个,也可以为多个,其与待迁移的数据量有关。数据表中记录有一条或多条数据,待迁移的数据表相对应的全量数据为待迁移的数据表中所有的数据。
可选的,获取单元1241进一步适于:针对待迁移的数据表执行加锁操作,开启用于针对待迁移的数据表执行快照处理的事务;当所述事务开启完毕后,针对待迁移的数据表执行解锁操作,并根据与待迁移的数据表相对应的快照数据获取全量数据。
为保证数据的一致性,获取单元1241可针对待迁移的数据表执行加锁操作,开启用于针对待迁移的数据表执行快照处理的事务。具体地,对待迁移的数据表执行加锁操作的锁的类型本领域人员可根据实际业务自行设置,例如可对待迁移的数据表执行加表级锁,也可对待迁移的数据表执行加行级锁等,本实施例对加锁的具体类型不做具体限定。在对待迁移的数据表执行加锁操作后,开启用于针对待迁移的数据表执行快照处理的事务。其中,快照为对数据库数据的只读静态视图,执行快照处理后生成的快照数据与执行快照处理时的数据库中的数据保持一致。所以,在对待迁移的数据表执行快照处理后,快照数据与待迁移的数据表所对应的全量数据保持一致。
可选的,当待迁移的数据表为多个时,开启用于针对待迁移的数据表执行快照处理的事务可以由多个线程并行处理,并根据与该数据表相对应的快照数据获取全量数据。从而提高快照处理速度及全量数据获取速度,其中,一个线程可对应一个或多个待迁移数据表的快照处理事务,具体对应关系本领域技术人员可根据开设的工作线程数及待迁移的数据表个数及容量等进行设定,本实施例不做具体限定。
当事务开启完毕后,针对待迁移的数据表执行解锁操作,并根据与待迁移的数据表相对应的快照数据获取全量数据。可选的,当由多个线程执行快照处理的事务时,可对各个线程设置反馈信号,在执行快照处理的事务开启完毕后,反馈给主线程该事务开启完毕的信息。本步骤中当所有工作线程快照处理事务开启完毕后,视为执行快照处理的事务开启完毕。当执行快照处理事务开启完毕后,对待迁移的数据表执行解锁操作,从而原数据库可以对待迁移的数据表进行写操作。由于快照处理事务开启速度快,对待迁移的数据表的锁定过程时间极短,所以不影响原数据库线上业务的处理。可选的,根据与待迁移的数据表相对应的快照数据获取全量数据可由多个线程并行处理,从而提高全量数据的获取效率。
可选的,获取单元1241进一步适于:将当前已获取的数据记录在快照数据中对应的位置信息记录在预设的第一进度表中;当获取全量数据的过程中断后再次执行时,根据第一进度表中记录的位置信息从快照数据中获取数据记录。
在根据与待迁移的数据表相对应的快照数据获取全量数据过程中,采用第一进度表可以实现全量数据的断点续传。可选的,当由多个线程根据与待迁移的数据表相对应的快照数据获取全量数据时,可在第一进度表中分别记录各个线程所获取的数据记录在快照数据中对应的位置信息。例如,线程1已获取到Table1中第20条数据,线程2已获取到Table2中第10条数据,线程3已获取到Table3中第4条数据,则第一进度表rows_log中记录有:(worker1,Table1_20),(worker2,Tablc2_10),以及(worker3,Table3_4),随着工作线程对数据的不断获取,第一进度表rows_log各个工作线程对应的进度值不断刷新。当某一、某几个、或全部线程中断后,可根据rows_log记录的位置信息继续获取数据,如当worker1中断后,rows_log记录的相应的位置信息为(worker1,Table1_23),则worker1中断后再次执行时可继续获取Table1表中的第24条数据。
可根据待迁移的数据表对应的日志文件确定与待迁移的数据表相对应的全量数据相对应的日志点位信息,具体地,将执行加锁操作后对应的日志点位信息确定为与全量数据相对应的日志点位信息。由于数据库中含有记录数据库信息的各类日志文件,如查询日志、错误日志、事务日志、和/或二进制日志等。以bin_log日志(二进制日志)为例,其记录了对数据发生或潜在发生更改的SQL语句,该日志文件的每个点位对应于一条或多条日志信息,一条日志信息对应于对数据的一条或多条操作信息。
此外,分布列用于确定各条数据对应的目标数据库的存储节点信息,相应地,分布列中包含各条数据的分布键信息,分布键表征了各条数据对应的目标数据库的存储节点信息。
可选的,在设置分布列时可根据全量数据中的数据记录的相关性进行设置。例如,可对全量数据中同一表中的数据设置相同的分布列;或者,将有数据关联(如主从表关系)的不同表中的数据设置相同的分布列等。具体地分布列的设置规则本领域技术人员可自行设置,本实施例不做具体限定。
确定单元1243,适于根据待迁移的数据表对应的日志文件确定与全量数据相对应的日志点位信息。
可选的,确定单元1243适于将获取单元1241中执行加锁操作后对应的日志点位信息确定为与全量数据相对应的日志点位信息。
全量数据迁移单元1242,适于根据分布列,将全量数据中的各条数据记录分别迁移至目标数据库的各个存储节点中。
具体地,全量数据迁移单元1242适于针对全量数据中的每条数据记录,根据分布列确定该数据记录中包含的分布键,并按照预设的分布规则确定目标数据库中与分布键相对应的存储节点,并将该数据记录迁移到目标数据库中与所述分布键相对应的存储节点中。
其中,预设的分布规则包括范围规则、和/或哈希规则。例如,范围规则可以为:分布键在“0-50”的数据对应于存储节点1,分布键在“51-100”的数据对应于存储节点2等;而哈希规则可以为:根据存储节点个数对分布键进行哈希运算,形成相应的哈希表,如当目标数据库有6个存储节点时,分布键分别为1到10的正整数,则其分布规则如表1所示。本实施例中预设的分布规则包含但不限于上述分布规则,本领域技术人员可根据实际业务情况自行设置。
表1
可选的,全量数据迁移单元1242具体适于:对全量数据的各条数据记录中符合预设的字段转换规则的字段进行转换,并将转换后的各条数据记录分别迁移至目标数据库的各个存储节点中。
具体地,当原数据库与目标数据库数据结构不同时,则原数据库中与目标数据库中的某些字段也存在差异。所以,全量数据迁移单元1242进一步适于:确定与原数据库相对应的第一字段规则,以及与目标数据库相对应的第二字段规则,根据第一字段规则与第二字段规则中存在差异的各个字段设置字段转换规则。
其中,存在差异的各个字段包括:字段名称不同、和/或字段类型不同的字段等。表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 |
进一步地,可对全量数据的各条数据记录中符合预设的字段转换规则的字段进行转换,并将转换后的各条数据记录分别迁移至目标数据库的各个存储节点中。例如,在从原数据库中获取与待迁移的数据表相对应的全量数据后,对数据进行解析,将数据的分布列信息及各条数据生成相应的执行语句,并将该执行语句发送至目标数据库,在目标数据库中解析该执行语句,根据解析出的分布列确定该数据记录中包含的分布键,并按照预设的分布规则确定目标数据库中与分布键相对应的存储节点,当该数据记录在原数据库中某一或某几个字段与目标数据库中的字段存在差异时,可根据预设的字段转换规则的字段进行转换,并将转换后的数据存储在相应的存储节点,从而将全量数据中各条数据迁移至相应的存储节点中。
操作单元1244,适于从日志文件中获取在与全量数据相对应的日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作,针对目标数据库的各个存储节点中存储的全量数据执行所述数据操作。
其中,原数据库日志文件中记录对原数据库数据的操作信息。该操作信息中包含对全量数据的删除、更改、和/或插入等信息。根据与全量数据相对应的日志点位信息之后产生的日志记录,可以获知在该日志点位之后原数据库中对全量数据执行的数据操作信息。可选的,可从内存中获取与全量数据相对应的日志点位信息之后产生的日志记录。以bin_log为例,其在内存中存在binlog_cache,binlog_caehe记录了对数据发生或潜在发生更改的SQL语句,当binlog_cache达到预设容量,或预设时间时,需将binlog_cache中的数据写入磁盘,但由于磁盘数据读写速度较慢,所以本模块中可优选地从binlog_cache中读取日志文件中的日志记录,以提高读取速度。可选的,可实时获取原数据库中全量数据相对应的日志点位信息之后的每条日志记录,并在获取后将该日志记录复制到目标数据库中,或者目标数据库直接通过I/O线程从原数据库中获取日志记录。
由于日志文件中的日志点位通常对应于一条或多条日志记录,当与全量数据相对应的日志点位信息对应于多条日志记录时,操作单元1244具体适于:确定第二进度表中记录的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;获取产生时间最早的日志记录以及在所述产生时间最早的日志记录之后产生的各条日志记录;并且,当数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息;判断全量数据中是否包含与所述主键信息相同的数据记录,若是,则删除与所述主键信息相同的数据记录后执行所述插入类型的数据操作。
其中,各个日志点位信息根据预设的时间间隔进行设置,或者根据预设的日志记录条数进行设置,如每隔5分钟设置一个日志点位,或每隔10条日志记录设置一个日志点位。举例来说,全量数据相对应的日志点位为102点位,102点位对应于10条日志记录,则确定出102点位对应的10条日志记录中最早的日志记录为102-1,则获取102-1之后的所有日志记录。若根据日志记录102-4确定是对主键为“1”的数据执行插入操作时,则判断全量数据中是否包含与该主键信息相同的数据记录,若有,则将全量数据中的主键为“1”的数据删除后再执行日志记录102-4对应的插入操作,从而保证数据库系统的幂等性。
可选的,操作单元1244进一步适于:将当前已获取的日志记录在日志文件中对应的日志点位信息记录在预设的第二进度表中,当获取在该日志点位信息之后产生的日志记录的过程中断后再次执行时,可根据第二进度表中记录的日志点位信息从日志文件中获取日志记录。
通过第二进度表可以从而实现数据的断点续传。进一步可选的,当第二进度表中记录的日志点位信息对应于多条日志记录时,可确定第二进度表中记录的日志点位信息所对应的多条日志记录中产生时间最早的日志记录,并获取产生时间最早的日志记录以及在产生时间最早的日志记录之后产生的各条日志记录。可选的,当确定与日志记录相对应的数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息,并判断全量数据中是否包含与所述主键信息相同的数据记录,若是,删除与所述主键信息相同的数据记录后执行所述插入类型的数据操作。此处,本领域技术人员能够理解的是,由于全量数据相对应的日志点位信息之后产生的日志记录往往为多条,因此,通常会针对全量数据依次执行各条日志记录所对应的数据操作。相应地,在判断全量数据中是否包含与主键信息相同的数据记录时,该全量数据是指:截至当前时刻,针对全量数据执行与当前已获取的日志记录相对应的数据操作后的数据内容。例如,假设当前已经在获取单元1241获取的全量数据的基础上执行了N条日志记录所对应的数据操作(N为大于或等于1的自然数),那么,当确定与第N+1条日志记录相对应的数据操作的操作类型为插入类型时,获取与第N+1条日志记录相对应的数据操作对应的主键信息,并且,在获取单元1241获取的全量数据的基础上执行了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″所对应的数据。
在确定与日志记录相对应的数据操作后,针对目标数据库的各个存储节点中存储的全量数据执行所述数据操作。
具体地,操作单元1244进一步适于:针对每个数据操作,根据分布列确定与该数据操作相对应的数据记录中包含的分布键,并按照预设的分布规则确定目标数据库中与所述分布键相对应的存储节点,针对与所述分布键相对应的存储节点中存储的全量数据执行所述数据操作。
以上例为例,需根据分布列确定该更新操作所对应的数据记录(tbl_name为tom所对应的数据)中包含的分布键,若分布键为30,预设的分布规则为分布键为“1-50”对应于存储节点1,分布键为“51-100”对应于存储节点1,则需对在存储节点1中存储的全量数据中的tbl_name为tom所对应的数据进行更新。
可选的,操作单元1244进一步适于:可在执行每个数据操作时,确定与该数据操作相对应的数据记录中包含的各个字段,针对其中符合预设的字段转换规则的字段进行转换。
以上例为例,若原数据库中tbl_name为tom所对应的数据中某些字段与目标数据库中的字段不一致时,可根据预设的字段转换规则对相应的字段进行转换,并在替换后执行更新操作。
由此可见,本实施例提供的数据同步模块,从原数据库中获取与待迁移的数据表相对应的全量数据,并为全量数据中的各条数据记录设置分布列;根据分布列,将全量数据中的各条数据记录分别迁移至目标数据库的各个存储节点中,从而避免了分布式主节点的处理能力制约数据迁移的效率,有利于数据迁移效率的提升;并获取全量数据过程中,针对待迁移的数据表执行加锁操作,从而保证数据的一致性,并在执行快照处理的事务开启完毕后,针对待迁移的数据表执行解锁操作,由于快照处理的事务开启速度快,对待迁移的数据表的锁定时间极短,从而不影响原数据库线上业务的处理;并根据待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;从日志文件中获取在所述日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作,针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作,从而实现待迁移数据的增量同步,最终在不影响线上业务的情况下,将数据迁移至有多个存储节点的分布式数据库,保证了数据的实时同步,并避免了现有技术中扩充从库而带来的资源浪费。此外,本实施例提供的数据同步模块在内存中执行,从而进一步地提高了数据迁移效率;本数据同步模块在执行过程中无临时文件的产生,从而进一步减少了系统的资源浪费。
图5示出了根据本发明又一个实施例提供的一种数据同步模块的结构框图。如图5所示,该模块包括:获取单元1251、点位信息确定单元1252、数据操作确定单元1253、以及同步单元1254。在此本领域技术人员应了解的是:本实施例中的数据同步模块包含本实施例中获取单元1251、点位信息确定单元1252、数据操作确定单元1253、以及同步单元1254所具有的所有特征。本实施例中的数据同步模块可应用于关系型数据库,如mysql数据库等。可选的,为了避免由于临时文件而耗费大量的资源,也为了提高数据同步效率,本实施例提供的数据同步模块在内存中执行。
获取单元1251,适于获取与原数据库相对应的备份数据,在目标数据库中创建与所述备份数据相对应的全量数据。
其中,在数据库中为避免发生意外停机等数据丢失的情况,会对数据库中的数据进行备份。通常情况下,数据库不对备份后产生的备份数据进行写操作。并且,备份后产生的备份数据可以为完全备份数据,或差异性备份数据等。其中,完全备份数据为对数据库中的用户表、系统表、索引、视图和存储过程等所有数据库对象进行备份产生的数据,而差异性备份为只针对自上次完全备份以来所改变的数据进行备份所产生的备份数据。本发明中的备份数据包含完全备份数据、和/或差异备份数据等,本发明对具体的备份数据类型不做具体限定。
可选的,原数据库相对应的备份数据包括多个不同时间备份的备份数据,则本步骤中可获取最近时间备份的备份数据,或者获取预设的备份数据。获取的备份数据可以为多个不同时间备份的备份数据,如获取2017.05.12.16:00时备份的完全备份数据,以及2017.06.12.16:00备份的差异备份数据等。具体的备份文件的选择本领域人员可根据实际业务情况自行设置。
其中,在目标数据库中创建与备份数据相对应的全量数据时,可通过多种方式实现。例如,由于备份数据通常以文本文件形式存在,则可在获取与原数据库相对应的备份数据后,根据文本文件中记录的表结构、及表数据等,通过CREATE等语句,将文件中的所有记录转换成INSERT语句。然后通过在目标库中执行该语句,从而创建出与备份数据相对应的全量数据。
并且,在本实施例中,不仅可以通过单线程实现备份数据的获取及全量数据的创建,也可以通过多线程实现备份数据的获取及全量数据的创建。通过多个并行执行的线程能够大幅缩短全量数据的创建时间。
可选的,由于备份数据中除了包含可供创建全量数据的表结构、表数据等信息外,还包含与创建全量数据无关的数据,如某些控制备份数据等。则可设定相应的过滤规则,将与创建全量数据无关的备份数据进行过滤。
可选的,本步骤中的全量数据还可以通过快照数据获得。具体地,为保证数据一致性,需针对待迁移的数据表执行加锁操作,开启用于针对待迁移的数据表执行快照处理的事务;当事务开启完毕后,针对待迁移的数据表执行解锁操作,并根据与待迁移的数据表相对应的快照数据获取全量数据。其中,在将执行加锁操作后对应的日志点位信息确定为与全量数据相对应的日志点位信息。进一步可选的,当待迁移的数据表为多个时,开启用于针对待迁移的数据表执行快照处理的事务的步骤和/或根据与待迁移的数据表相对应的快照数据获取所述全量数据的步骤由多个线程并行处理,以此来提高快照处理和/或全量数据的获取速度。
点位信息确定单元1252,适于确定备份数据的备份时间点,根据原数据库对应的日志文件确定与所述备份时间点相对应的日志点位信息。
其中,数据库中含有记录数据库信息的各类日志文件,如查询日志、错误日志、事务日志、和/或二进制日志等,其中某类日志中按照时间顺序和/或操作顺序记录有针对数据库中的各个数据表执行的数据操作(如,事务日志或二进制日志等)。由于数据表中的每一条数据都是通过执行相应的数据操作而录入的,因此,通过该类日志能够确定数据表在各个时刻所对应的数据存储状态。为了便于确定各个数据操作的执行时间和/或执行顺序,该类日志文件中包含多个按照时间顺序和/或操作顺序排列的日志点位信息,每个日志点位信息对应于一条或多条日志记录,一条日志记录对应于数据库中针对至少一条数据执行的数据操作。相应地,在确定备份数据的备份时间点时,根据原数据库对应的日志文件确定与备份时间点相对应的日志点位信息。
可选的,为便于数据的管理,数据库通常为每一个或每几个数据表分配相应的日志文件。当原数据库含有多个表以及原数据库对应多个日志文件时,可创建多个进程。则点位信息确定单元1252具体适于:分别针对每个日志文件,确定该日志文件中与备份时间点相对应的日志点位信息;将该日志文件中与所述备份时间点相对应的日志点位信息提供给与该日志文件相对应的进程。
数据操作确定单元1253,适于从日志文件中获取在与备份时间点相对应的日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作。
具体地,日志文件中在与备份时间点相对应的日志点位信息之后,记录有在上述全量数据的基础上新增的操作信息。该新增的操作信息中包含对全量数据的删除、更改、和/或插入等信息。根据与备份时间点相对应的日志点位信息之后产生的日志记录,可以获知在该日志点位之后对原数据库中数据执行的数据操作。可选的,可实时获取原数据库中备份时间点相对应的日志点位信息之后产生的每条日志记录,对该日志记录进行解析后获得原数据库执行过的数据操作信息,从而确定与该日志记录相对应的数据操作。
可选的,当原数据库中包括多个数据表,且原数据库对应的日志文件的数量为多个时,数据操作确定单元1243具体适于:创建多个并行执行的进程,每个进程分别对应于至少一个日志文件;每个进程从该进程对应的日志文件中获取在所述日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作。
其中,多个并行执行的进程的数量根据以下中的至少一个确定:所述原数据库对应的日志文件的数量和/或大小、以及同步完成时间。例如,若原数据库对应的日志文件的数据量较多和/或日志文件较大时,而要求的同步完成时间较短,则可创建较多的并行执行的进程。本实施例对创建的进程数目及创建的具体规则不做限定,本领域技术人员可自行设定。
每个进程从该进程对应的日志文件中获取在日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作。
可选的,可优先从内存中获取与备份时间点相对应的日志点位信息之后产生的日志记录。以bin_log为例,其在内存中存在binlog_cache,binlog_cache记录了对数据发生或潜在发生更改的SQL语句,当binlog_cache达到预设容量,或预设时间时,需将binlog_cache中的数据写入磁盘,但由于磁盘数据读写速度较慢,所以本步骤中可优选地从binlog_cache中读取日志文件中的日志记录,以提高日志读取速度。
可选的,由于日志文件中的日志点位通常对应于一条或多条日志记录,当与备份时间点相对应的日志点位信息对应于多条日志记录时,数据操作确定单元1253具体适于:确定与备份时间点相对应的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;获取所述产生时间最早的日志记录以及在所述产生时间最早的日志记录之后产生的各条日志记录。其中,各个日志点位信息根据预设的时间间隔进行设置,或者根据预设的日志记录条数进行设置,如每隔5分钟设置一个日志点位,或每隔10条日志记录设置一个日志点位。
并且,后续的同步单元1254具体适于当确定与日志记录相对应的数据操作的操作类型为插入类型时,进一步获取该数据操作对应的主键信息,并判断全量数据中是否包含与该主键信息相同的数据记录,若是,则根据该数据操作对与主键信息相同的数据记录进行替换。举例来说,与备份时间点相对应的日志点位为102点位,102点位对应于10条日志记录,则确定出102点位对应的10条日志记录中最早的日志记录为102-1,则获取102-1之后的所有日志记录。若根据日志记录102-4确定是对主键为“1”的数据执行插入操作时,则判断全量数据中是否包含与该主键信息相同的数据记录,若有,则将全量数据中的主键为“1”的数据进行替换,从而保证数据库系统的幂等性。
可选的,数据操作确定单元1253,适于将当前已获取的日志记录在日志文件中对应的日志点位信息记录在预设的进度表中,当获取在该日志点位信息之后产生的日志记录的过程中断后再次执行时,可根据进度表中记录的日志点位信息从日志文件中获取日志记录。从而可以实现数据的断点续传。另外,当创建了多个并行执行的进程时,可为每个进程分配相应的进度表,并将每个进程已获取的日志记录在日志文件中对应的日志点位信息记录在与该进程相对应的进度表中。
进一步可选的,当进度表中记录的日志点位信息对应于多条日志记录时,数据操作确定单元1253进一步适于:确定进度表中记录的日志点位信息所对应的多条日志记录中产生时间最早的日志记录,并获取产生时间最早的日志记录以及在产生时间最早的日志记录之后产生的各条日志记录。并且,当确定与日志记录相对应的数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息,并判断全量数据中是否包含与所述主键信息相同的数据记录,若是,则根据所述数据操作对与所述主键信息相同的数据记录进行替换。此处,本领域技术人员能够理解的是,由于备份时间点相对应的日志点位信息之后产生的日志记录往往为多条,相应地,在后续的同步单元1254中,通常会针对全量数据依次执行各条日志记录所对应的数据操作。相应地,在判断全量数据中是否包含与主键信息相同的数据记录时,该全量数据是指:截至当前时刻,针对全量数据执行与当前已获取的日志记录相对应的数据操作后的数据内容。例如,假设当前已经在获取单元1251创建的全量数据的基础上执行了N条日志记录所对应的数据操作(N为大于或等于1的自然数),那么,当确定与第N+1条日志记录相对应的数据操作的操作类型为插入类型时,获取与第N+1条日志记录相对应的数据操作对应的主键信息,并且,在获取单元1251创建的全量数据的基础上执行了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相对应的数据操作的操作类型为插入类型时,获取数据操作对应的主键信息,并判断全量数据中是否已存在与所述主键信息相同的数据记录,若是,则根据数据操作对与所述信息相同的数据记录进行替换。例如,在mysql数据库中,当全量数据中已存在与主键信息相同的数据记录时,可直接应用“replace_into”命令将所述主键信息相同的数据记录进行替换。
同步单元1254,适于针对目标数据库中存储的全量数据执行所述数据操作。
根据数据操作确定单元1253确定的与日志记录相对应的数据操作,对目标数据库中存储的全量数据执行该数据操作。例如,若数据操作确定单元1253中确定与日志记录相对应的数据操作为对table1中的主键值为“1”的数据进行删除,则将目标数据库中的全量数据中table1中的主键值为“1”的数据进行删除。
当数据操作确定单元1253中有多个并行执行的进程时,同步单元1254具体适于:每个进程根据步骤数据操作确定单元1253确定的与日志记录相对应的数据操作,对目标数据库中存储的全量数据执行所述数据操作。
例如,若数据操作确定单元1253中进程1确定的数据操作为在tab.1中插入data1,进程2确定的数据操作为在tab.2中更新data21,进程3确定的数据操作为在tab.3中删除data31,则进程1、2和3分别执行插入、更新、以及删除操作。
可选的,同步单元1254进一步适于:根据预设的同步判断条件确定目标数据库与原数据库中的数据是否同步。例如,当本实施例中的原数据库作为主数据库,且应用于快速创建与主数据库同步的从数据库(即目标数据库)时,可根据预设的同步判断条件确定目标数据库与原数据库中的数据是否同步,若判断目标数据库与原数据库中的数据已同步,则本方法结束;或者,在判断出目标数据库与原数据库中的数据已同步时,根据原数据库和目标数据库的类型选择与其类型相对应的其他数据库同步方式(例如传统的或官方的数据库同步方式)继续同步后续过程中新增的增量数据。
其中,在一种情形中,预设的同步判断条件可以为:将当前执行的数据操作所对应的日志记录在日志文件中的日志点位信息确定为第一日志点位信息;将当前产生时间最晚的日志记录在所述日志文件中的日志点位信息确定为第二日志点位信息;若第一日志点位信息与第二日志点位信息之间的间隔小于预设阈值,则确定目标数据库与原数据库中的数据同步。例如,当前执行的数据操作对应于的日志记录在日志文件中的日志点位为102点位(第一日志点位信息),则表明目标数据库已完成了在102点位之前的数据的同步,而当前原数据库中产生时间最晚的日志记录对应于日志点位111,当预设阈值为10时,则确定当前目标数据库与原数据库中的数据同步,本方法结束。
在另一种情形中,预设的同步判断条件还可以为:将当前执行的数据操作所对应的日志记录在日志文件中的日志点位信息确定为第一日志点位信息;若所述第一日志点位信息与预设的同步点位信息相同,则确定目标数据库与原数据库中的数据同步。其中,预设的同步点位信息根据以下中的至少一项确定:原数据库对应的日志文件的文件大小、与备份时间点相对应的日志点位信息、以及获取与原数据库相对应的备份数据时产生时间最晚的日志记录在所述日志文件中的日志点位信息。举例来说,可根据原数据库对应的日志文件的文件大小及与备份时间点相对应的日志点位信息确定预设的同步点位信息,如,若日志文件的文件大小为x,与备份时间点相对应的日志点位为a,则同步点位信息设定为kx+a,其中k可根据实际的业务情况自行设置;也可将获取与原数据库相对应的备份数据时产生时间最晚的日志记录在日志文件中的日志点位信息作为预设的同步点位信息,若在获取备份数据时对应的时间为16日12时,其最晚的日志记录在日志文件中的日志点位为324点位,备份时间点对应的日志点位为102点位,则当同步到324点位时,判定目标数据库与原数据库同步,此时目标数据库中与获取备份数据时原数据库中数据保持一致。
由此可见,本实施例提供的数据同步模块,根据备份数据获得相应的全量数据,由于原数据库通常不会对已经生成的备份数据执行写操作,所以在获取备份数据的过程中,无需对原数据库执行加锁操作,所以不会造成原数据库线上业务的中断,从而不影响原数据库的正常运行;在获取全量数据之后,不对原数据库中的数据进行读取等操作,仅需获取原数据库中的日志信息,通过日志信息对数据进行操作,从而实现原数据库与目标数据库的数据同步,并提高了数据同步效率;另外,当原数据库中包括多个数据表,对应的日志文件的数量为多个时,本实施例通过创建多个并行执行的进程,每个进程从该进程对应的日志文件中获取日志记录,确定与日志记录相对应的数据操作,最终针对目标数据库中存储的全量数据执行所述数据操作,从而进一步地提高了数据同步效率,降低同步延迟;此外,本实施例提供的数据同步模块在内存中执行,从而进一步地提高了数据同步效率,并且本方法在执行过程中无临时文件的产生,从而减少了系统资源的浪费。
另外,本发明中的数据同步系统既可以同时包含图3至图5的三个数据同步模块,也可以仅包含其中的一个或两个数据同步模块,具体取决于数据库系统的架构。
图6示出了根据本发明一个实施例提供的一种数据同步方法的示意图。如图6所示,该方法包括:
步骤S610,确定与接收到的数据同步请求相对应的目标数据库的类型,向与该目标数据库的类型相对应的数据同步模块发送调用请求。
其中,与接收到的数据同步请求相对应的目标数据库的类型可以为一种,也可以为多种。目标数据库的类型可以为MySQL类型、Redis类型、Mongo类型、和/或Greenplum类型等。
可选的,可通过预设的请求接口接收用户触发的数据同步请求。预设的请求接口既可以接收用户从预设的数据库类型列表中选择目标数据库而生成的数据同步请求,也可以接收用户直接输入的数据同步请求语句,在对该数据同步请求语句进行语义分析后可确定与接收到的数据同步请求相对应的目标数据库的类型。
在确定与接收到的数据同步请求相对应的目标数据库的类型后,向与该目标数据库的类型相对应的数据同步模块发送调用请求。例如,可通过预设的调用函数向与该目标数据库的类型相对应的数据同步模块发送调用请求。
步骤S620,接收到调用请求的数据同步模块确定与所述调用请求相对应的目标数据库,并将待同步的数据同步至目标数据库。
其中,每个数据同步模块分别对应于至少一种类型的目标数据库。
可选的,在接收到调用模块的调用请求时,可对该调用请求进行解析,通过解析后确定与调用请求相对应的目标数据库。例如,调用请求中可包含目标数据库的编码信息(如Mysql数据库编码为1)等,则对该调用请求解析后解析出目标数据库的编码,并根据该编码信息确定相应的目标数据库。
在确定出调用请求相对应的目标数据库后,可根据预设的与该目标数据看相对应的数据同步方法,并将待同步的数据同步至目标数据库。其中,待同步的数据可以为原数据库中的全部或一部分数据。
由此可见,本实施例提供的数据同步方法,确定与接收到的数据同步请求相对应的目标数据库的类型,向与该目标数据库的类型相对应的数据同步模块发送调用请求,接收到调用请求的数据同步模块确定与调用请求相对应的目标数据库,并将待同步的数据同步至目标数据库。采用本方案,可以实现将原数据库中数据自动化同步至相应的目标数据库,并能满足同时将原数据库中数据同步至不同类型的目标数据库的需求,提高数据同步效率。
图7示出了根据本发明另一个实施例提供的一种数据同步方法的流程图。如图7所示,该方法包括:
步骤S710,通过预设的数据同步接口向与该目标数据库的类型相对应的数据同步模块发送调用请求。
其中,与接收到的数据同步请求相对应的目标数据库的类型可以为一种,也可以为多种。目标数据库的类型可以为MySQL类型、Redis类型、Mongo类型、和/或Greenplum类型等。
可选的,可通过预设的请求接口接收用户触发的数据同步请求。预设的请求接口既可以接收用户从预设的数据库类型列表中选择目标数据库而生成的数据同步请求,也可以接收用户直接输入的数据同步请求语句,在对该数据同步请求语句进行语义分析后可确定与接收到的数据同步请求相对应的目标数据库的类型。
在确定与接收到的数据同步请求相对应的目标数据库的类型后,通过数据同步接口向与该目标数据库的类型相对应的数据同步模块发送调用请求。
当接收到的数据同步请求相对应的目标数据库为多个不同类型的数据库时,确定与多个不同类型的数据库相对应的各个数据同步模块,分别向每个数据同步模块发送对应的调用请求。
其中,数据同步接口可通过虚函数实现。虚函数的个数大于或等于1。可选的,在具体的实施过程中,可定义一个基类(如,interface类),基类中定义有1个或多个虚函数。其中,虚函数只有定义,其是在基类中声明为virtual(虚基类),并在一个或多个派生类中被重新定义的成员函数,其并无具体的实现过程,多个数据同步模块中分别有相应的应用函数来实现数据同步接口中的基类中的所有虚函数。
步骤S720,在接收到调用模块的调用请求时,确定与所述调用请求相对应的目标数据库,并将待同步的数据同步至目标数据库。
其中,每个数据同步模块分别对应于至少一种类型的目标数据库。另外,多个数据同步模块可以包括以下中的至少两个:与MySQL类型的目标数据库相对应的数据同步模块、与Redis类型的目标数据库相对应的数据同步模块、与Mongo类型的目标数据库相对应的数据同步模块、以及与Greenplum类型的目标数据库相对应的数据同步模块。
每个数据同步模块均有其相对应的数据同步方法,在确定出调用请求相对应的目标数据库后,可根据预设的与该目标数据库相对应的数据同步方法,并将待同步的数据同步至目标数据库。其中,待同步的数据可以为原数据库中的全部或一部分数据。
可选的,为了避免由于临时文件而耗费大量的资源,也为了提高迁移效率,执行数据同步模块中的所有操作均在内存中进行。
由此可见,本实施例提供的数据同步方法,通过确定与接收到的数据同步请求相对应的目标数据库的类型,通过数据同步接口向与该目标数据库的类型相对应的数据同步模块发送调用请求,接收到调用请求的数据同步模块确定与调用请求相对应的目标数据库,并将待同步的数据同步至目标数据库。采用本系统,可以实现将原数据库中数据自动化同步至相应的目标数据库,并能满足同时将原数据库中数据同步至不同类型的目标数据库的需求,提高数据同步效率。此外,数据同步接口采用虚函数的方式实现,避免了需为每个数据同步模块设置相应的接口而产生的资源的浪费,节省了内存资源。
图8示出了根据本发明又一个实施例提供的一种数据同步方法的流程图。如图8所示,该方法包括:
步骤S810,通过预设的数据同步接口向与该目标数据库的类型相对应的数据同步模块发送调用请求。
步骤S820,在接收到调用模块的调用请求时,确定与所述调用请求相对应的目标数据库,并将待同步的数据同步至目标数据库。
其中,并将待同步的数据同步至目标数据库具体包括以下步骤:
步骤S821,获取与待迁移的数据表相对应的全量数据,并根据待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息。
步骤S282,从日志文件中获取在与全量数据相对应的日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作。
步骤S283,针对全量数据执行所述数据操作,得到与待迁移的数据表相时应的迁移数据。
步骤S821-步骤S823可参照图3所示数据同步模块,在此不再赘述。
另外,上述的数据同步方法可以基于本发明提供的数据同步系统实现,因此,有关该方法的具体实现细节可参照系统实施例中相应部分的描述。
由此可见,本实施例提供的数据同步方法,针对待迁移的数据表执行加锁操作,从而保证数据的一致性,并在执行快照处理的事务开启完毕后,针对待迁移的数据表执行解锁操作,由于快照处理的事务开启速度快,对待迁移的数据表的锁定时间极短,从而不影响原数据库线上业务的处理;并且,通过从快照数据中获取全量数据,避免了现有技术中从线上数据库获取数据时对线上数据库业务的影响;并且可通过多个线程获取全量数据,提高了数据迁移效率;并通过从日志文件中获取在与全量数据相对应的日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作,并针对全量数据执行所述数据操作,从而实现数据的增量及实时同步。最终实现在不影响线上业务的情况下,实现数据的迁移,提高了数据迁移效率,保证了数据的实时同步,并避免了现有技术中扩充从库而带来的资源浪费;此外,本实施例提供的数据同步方法在内存中执行,从而进一步地提高了数据迁移效率,并且本方法在执行过程中无临时文件的产生,从而进一步减少了系统资源的浪费。
图9示出了根据本发明又一个实施例提供的一种数据同步方法的流程图。如图9所示,该方法包括:
步骤S910,通过预设的数据同步接口向与该目标数据库的类型相对应的数据同步模块发送调用请求。
步骤S920,在接收到调用模块的调用请求时,确定与所述调用请求相对应的目标数据库,并将待同步的数据同步至目标数据库。
其中,并将待同步的数据同步至目标数据库具体包括以下步骤:
步骤S921,从原数据库中获取与待迁移的数据表相对应的全量数据,并为全量数据中的各条数据记录设置分布列。
步骤S922,根据分布列,将全量数据中的各条数据记录分别迁移至目标数据库的各个存储节点中。
步骤S923,根据待迁移的数据表对应的日志文件确定与全量数据相对应的日志点位信息。
步骤S924,从日志文件中获取在日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作,针对目标数据库的各个存储节点中存储的全量数据执行所述数据操作。
步骤S921-步骤S924可参照图4所示数据同步模块,在此不再赘述。
另外,上述的数据同步方法可以基于本发明提供的数据同步系统实现,因此,有关该方法的具体实现细节可参照系统实施例中相应部分的描述。
由此可见,本实施例提供的数据迁移方法,从原数据库中获取与待迁移的数据表相对应的全量数据,并为全量数据中的各条数据记录设置分布列;根据分布列,将全量数据中的各条数据记录分别迁移至目标数据库的各个存储节点中,从而避免了分布式主节点的处理能力制约数据迁移的效率,有利于数据迁移效率的提升;并获取全量数据过程中,针对待迁移的数据表执行加锁操作,从而保证数据的一致性,并在执行快照处理的事务开启完毕后,针对待迁移的数据表执行解锁操作,由于快照处理的事务开启速度快,对待迁移的数据表的锁定时间极短,从而不影响原数据库线上业务的处理;并根据待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;从日志文件中获取在所述日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作,针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作,从而实现待迁移数据的增量同步,最终在不影响线上业务的情况下,将数据迁移至有多个存储节点的分布式数据库,保证了数据的实时同步,并避免了现有技术中扩充从库而带来的资源浪费。此外,本实施例提供的数据同步方法在内存中执行,从而进一步地提高了数据迁移效率;本方法在执行过程中无临时文件的产生,从而进一步减少了系统的资源浪费。
图10示出了根据本发明又一个实施例提供的一种数据同步方法的流程图。如图10所示,该方法包括:
步骤S1010,通过预设的数据同步接口向与该目标数据库的类型相对应的数据同步模块发送调用请求。
步骤S1020,在接收到调用模块的调用请求时,确定与所述调用请求相对应的目标数据库,并将待同步的数据同步至目标数据库。
其中,并将待同步的数据同步至目标数据库进一步包括:
步骤S1021,获取与原数据库相对应的备份数据,在目标数据库中创建与所述备份数据相对应的全量数据。
步骤S1022,确定备份数据的备份时间点,根据原数据库对应的日志文件确定与所述备份时间点相对应的日志点位信息。
步骤S1023,从日志文件中获取在与备份时间点相对应的日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作。
步骤S1024,针对目标数据库中存储的全量数据执行所述数据操作,直至目标数据库与原数据库中的数据同步。
步骤S1021-步骤S1024可参照图5所示数据同步模块,在此不再赘述。
另外,上述的数据同步方法可以基于本发明提供的数据同步系统实现,因此,有关该方法的具体实现细节可参照系统实施例中相应部分的描述。
由此可见,本方案根据备份数据获得相应的全量数据,由于原数据库通常不会对已经生成的备份数据执行写操作,所以在获取备份数据的过程中,无需对原数据库执行加锁操作,所以不会造成原数据库线上业务的中断,从而不影响原数据库的正常运行;在获取全量数据之后,不对原数据库中的数据进行读取等操作,仅需获取原数据库中的日志信息,通过日志信息对数据进行操作,从而实现原数据库与目标数据库的数据同步,并提高了数据同步效率;另外,当原数据库中包括多个数据表,对应的日志文件的数量为多个时,本实施例通过创建多个并行执行的进程,每个进程从该进程对应的日志文件中获取日志记录,确定与日志记录相对应的数据操作,最终针对目标数据库中存储的全量数据执行所述数据操作,从而进一步地提高了数据同步效率,降低同步延迟;此外,本实施例提供的数据同步方法在内存中执行,从而进一步地提高了数据同步效率,并且本方法在执行过程中无临时文件的产生,从而减少了系统资源的浪费。
根据本发明一个实施例提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的数据同步方法。
图11示出了根据本发明一个实施例提供的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。
如图1所示,该电子设备可以包括:处理器(processor)1102、通信接口(Communications Interface1104、存储器(memory)1106、以及通信总线1108。
其中:处理器1102、通信接口1104、以及存储器1106通过通信总线1108完成相互间的通信。
通信接口1104,用于与其它设备比如客户端或其它服务器等的网元通信。
处理器1102,用于执行程序1110,具体可以执行上述数据同步方法实施例中的相关步骤。
具体地,程序1110可以包括程序代码,该程序代码包括计算机操作指令。
处理器1102可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器1106,用于存放程序1110。存储器1106可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序1110具体可以用于使得处理器1102执行以下操作:
确定与接收到的数据同步请求相对应的目标数据库的类型,向与该目标数据库的类型相对应的数据同步模块发送调用请求;
接收到调用请求的数据同步模块确定与所述调用请求相对应的目标数据库,并将待同步的数据同步至所述目标数据库。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的数据同步系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了:A1.一种数据同步系统,包括:调用模块,以及多个与所述调用模块分别相连的数据同步模块,其中,
所述调用模块,适于确定与接收到的数据同步请求相对应的目标数据库的类型,向与该目标数据库的类型相对应的数据同步模块发送调用请求;
每个数据同步模块分别对应于至少一种类型的目标数据库,适于在接收到所述调用模块的调用请求时,确定与所述调用请求相对应的目标数据库,并将待同步的数据同步至所述目标数据库。
A2.根据A1所述的系统,其中,所述系统进一步包括:
数据同步接口,用于连接所述调用模块以及各个数据同步模块;
则所述调用模块具体适于:通过所述数据同步接口向与该目标数据库的类型相对应的数据同步模块发送调用请求。
A3.根据A2所述的系统,其中,所述数据同步接口通过虚函数实现。
A4.根据A1-A3任一所述的系统,其中,当所述与接收到的数据同步请求相对应的目标数据库为多个不同类型的数据库时,
所述调用模块具体适于:确定与所述多个不同类型的数据库相对应的各个数据同步模块,分别向每个数据同步模块发送对应的调用请求。
A5.根据A1-A4任一所述的系统,其中,所述多个与所述调用模块分别相连的数据同步模块包括以下中的至少两个:
与MySQL类型的目标数据库相对应的数据同步模块、与Redis类型的目标数据库相对应的数据同步模块、与Mongo类型的目标数据库相对应的数据同步模块、以及与Greenplum类型的目标数据库相对应的数据同步模块。
A6.根据A1-A5任一所述的系统,其中,所述数据同步模块具体适于:
获取与原数据库相对应的备份数据,在目标数据库中创建与所述备份数据相对应的全量数据;
确定所述备份数据的备份时间点,根据所述原数据库对应的日志文件确定与所述备份时间点相对应的日志点位信息;
从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作;
针对所述目标数据库中存储的全量数据执行所述数据操作,直至所述目标数据库与所述原数据库中的数据同步。
A7.根据A6所述的系统,其中,所述原数据库中包括多个数据表,且所述原数据库对应的日志文件的数量为多个;
则所述数据同步模块具体适于:创建多个并行执行的进程,每个进程分别对应于至少一个日志文件;每个进程从该进程对应的日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作;针对所述目标数据库中存储的全量数据执行所述数据操作。
A8.根据A7所述的系统,其中,所述数据同步模块具体适于:
分别针对每个日志文件,确定该日志文件中与所述备份时间点相对应的日志点位信息;
将该日志文件中与所述备份时间点相对应的日志点位信息提供给与该日志文件相对应的进程。
A9.根据A1-A8任一所述的系统,其中,所述数据同步模块进一步适于:
根据预设的同步判断条件确定所述目标数据库与所述原数据库中的数据是否同步。
A10.根据A9所述的系统,其中,所述预设的同步判断条件包括:将当前执行的数据操作所对应的日志记录在日志文件中的日志点位信息确定为第一日志点位信息;将当前产生时间最晚的日志记录在所述日志文件中的日志点位信息确定为第二日志点位信息;若所述第一日志点位信息与所述第二日志点位信息之间的间隔小于预设阈值,则确定所述目标数据库与所述原数据库中的数据同步;或者,
所述预设的同步判断条件包括:将当前执行的数据操作所对应的日志记录在日志文件中的日志点位信息确定为第一日志点位信息;若所述第一日志点位信息与预设的同步点位信息相同,则确定所述目标数据库与所述原数据库中的数据同步;其中,所述预设的同步点位信息根据以下中的至少一项确定:所述原数据库对应的日志文件的文件大小、与所述备份时间点相对应的日志点位信息、以及获取与原数据库相对应的备份数据时产生时间最晚的日志记录在所述日志文件中的日志点位信息。
A11.根据A1-A5任一所述的系统,其中,所述数据同步模块具体适于:
获取与待迁移的数据表相对应的全量数据,并根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;
从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作;
针对所述全量数据执行所述数据操作,得到与待迁移的数据表相对应的迁移数据。
A12.根据A1-A5任一所述的系统,其中,所述数据同步模块具体适于:
从所述原数据库中获取与所述待迁移的数据表相对应的全量数据,并为所述全量数据中的各条数据记录设置分布列;
根据所述分布列,将所述全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中;
根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;
从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作,针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作。
A13.根据A12所述的系统,其中,所述数据同步模块具体适于:
针对所述全量数据中的每条数据记录,根据所述分布列确定该数据记录中包含的分布键;
按照预设的分布规则确定目标数据库中与所述分布键相对应的存储节点,并将该数据记录迁移到目标数据库中与所述分布键相对应的存储节点中。
A14.根据A12或A13所述的系统,其中,所述与所述日志记录相对应的数据操作具体为多个按照时间顺序依次排列的数据操作;
则所述数据同步模块具体适于:针对每个数据操作,根据所述分布列确定与该数据操作相对应的数据记录中包含的分布键;按照预设的分布规则确定目标数据库中与所述分布键相对应的存储节点;针对与所述分布键相对应的存储节点中存储的全量数据执行所述数据操作。
A15.根据A12-A14任一所述的系统,其中,所述数据同步模块具体适于:
对所述全量数据的各条数据记录中符合预设的字段转换规则的字段进行转换,并将转换后的各条数据记录分别迁移至所述目标数据库的各个存储节点中;
并且,在执行每个数据操作时,确定与该数据操作相对应的数据记录中包含的各个字段,针对其中符合预设的字段转换规则的字段进行转换。
A16.根据A15所述的系统,其中,所述数据同步模块进一步适于:
确定与所述原数据库相对应的第一字段规则,以及与所述目标数据库相对应的第二字段规则;
根据所述第一字段规则与所述第二字段规则中存在差异的各个字段设置所述字段转换规则;
其中,所述存在差异的各个字段包括:字段名称不同、和/或字段类型不同的字段。
A17.根据A11-A16任一所述的系统,其中,所述数据同步模块具体适于:
针对所述待迁移的数据表执行加锁操作,开启用于针对所述待迁移的数据表执行快照处理的事务;
当所述事务开启完毕后,针对所述待迁移的数据表执行解锁操作,并根据与所述待迁移的数据表相对应的快照数据获取所述全量数据;
其中,将执行加锁操作后对应的日志点位信息确定为与所述全量数据相对应的日志点位信息。
A18.根据A17所述的系统,其中,当所述待迁移的数据表为多个时,所述数据同步模块通过多个并行处理的线程进行数据同步。
A19.根据A17或A18所述的系统,其中,所述数据同步模块具体适于:
将当前已获取的数据记录在所述快照数据中对应的位置信息记录在预设的第一进度表中;
当获取所述全量数据的过程中断后再次执行时,根据所述第一进度表中记录的位置信息从所述快照数据中获取数据记录。
A20.根据A10-A19任一所述的系统,其中,当所述与所述全量数据相对应的日志点位信息对应于多条日志记录时,所述数据同步模块具体适于:
确定与所述全量数据相对应的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;
获取所述产生时间最早的日志记录以及在所述产生时间最早的日志记录之后产生的各条日志记录;
并且,当所述数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息,判断所述全量数据中是否包含与所述主键信息相同的数据记录;
若是,则根据所述数据操作对所述与所述主键信息相同的数据记录进行替换;或者,删除所述与所述主键信息相同的数据记录后执行所述插入类型的数据操作。
A21.根据A10-A20任一所述的系统,其中,所述数据同步模块具体适于:
将当前已获取的日志记录在所述日志文件中对应的日志点位信息记录在预设的第二进度表中;
当获取在所述日志点位信息之后产生的日志记录的过程中断后再次执行时,根据所述第二进度表中记录的日志点位信息从所述日志文件中获取日志记录。
A22.根据A21所述的系统,其中,当所述第二进度表中记录的日志点位信息对应于多条日志记录时,所述数据同步模块具体适于:
确定所述第二进度表中记录的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;
获取所述产生时间最早的日志记录以及在所述产生时间最早的日志记录之后产生的各条日志记录;
并且,当所述数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息,判断所述全量数据中是否包含与所述主键信息相同的数据记录;
若是,则根据所述数据操作对所述与所述主键信息相同的数据记录进行替换;或者,删除所述与所述主键信息相同的数据记录后执行所述插入类型的数据操作。
本发明还公开了:B23.一种数据同步方法,包括:
确定与接收到的数据同步请求相对应的目标数据库的类型,向与该目标数据库的类型相对应的数据同步模块发送调用请求;
接收到调用请求的数据同步模块确定与所述调用请求相对应的目标数据库,并将待同步的数据同步至所述目标数据库。
B24.根据B23所述的方法,其中,所述向与该目标数据库的类型相对应的数据同步模块发送调用请求的步骤具体包括:通过预设的数据同步接口向与该目标数据库的类型相对应的数据同步模块发送调用请求。
B25.根据B24所述的方法,其中,所述数据同步接口通过虚函数实现。
B26.根据B23-B25任一所述的方法,其中,所述数据同步模块的数量为多个,每个数据同步模块分别对应于至少一种类型的目标数据库;
当所述与接收到的数据同步请求相对应的目标数据库为多个不同类型的数据库时,所述向与该目标数据库的类型相对应的数据同步模块发送调用请求的步骤具体包括:确定与所述多个不同类型的数据库相对应的各个数据同步模块,分别向每个数据同步模块发送对应的调用请求。
B27.根据B23-B26任一所述的方法,其中,所述数据同步模块包括以下中的至少两个:
与MySQL类型的目标数据库相对应的数据同步模块、与Redis类型的目标数据库相对应的数据同步模块、与Mongo类型的目标数据库相对应的数据同步模块、以及与Greenplum类型的目标数据库相对应的数据同步模块。
B28.根据B23-B27任一所述的方法,其中,所述将待同步的数据同步至所述目标数据库的步骤具体包括:
获取与原数据库相对应的备份数据,在目标数据库中创建与所述备份数据相对应的全量数据;
确定所述备份数据的备份时间点,根据所述原数据库对应的日志文件确定与所述备份时间点相对应的日志点位信息;
从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作;
针对所述目标数据库中存储的全量数据执行所述数据操作,直至所述目标数据库与所述原数据库中的数据同步。
B29.根据B28所述的方法,其中,所述原数据库中包括多个数据表,且所述原数据库对应的日志文件的数量为多个;
则所述从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作;针对所述目标数据库中存储的全量数据执行所述数据操作的步骤具体包括:
创建多个并行执行的进程,每个进程分别对应于至少一个日志文件;
每个进程从该进程对应的日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作;针对所述目标数据库中存储的全量数据执行所述数据操作。
B30.根据B29所述的方法,其中,所述根据所述原数据库对应的日志文件确定与所述备份时间点相对应的日志点位信息的步骤具体包括:
分别针对每个日志文件,确定该日志文件中与所述备份时间点相对应的日志点位信息;
将该日志文件中与所述备份时间点相对应的日志点位信息提供给与该日志文件相对应的进程。
B31.根据B23-B30任一所述的方法,其中,所述针对所述目标数据库中存储的全量数据执行所述数据操作,直至所述目标数据库与所述原数据库中的数据同步的步骤进一步包括:
根据预设的同步判断条件确定所述目标数据库与所述原数据库中的数据是否同步。
B32.根据B31所述的方法,其中,所述预设的同步判断条件包括:将当前执行的数据操作所对应的日志记录在日志文件中的日志点位信息确定为第一日志点位信息;将当前产生时间最晚的日志记录在所述日志文件中的日志点位信息确定为第二日志点位信息;若所述第一日志点位信息与所述第二日志点位信息之间的间隔小于预设阈值,则确定所述目标数据库与所述原数据库中的数据同步;或者,
所述预设的同步判断条件包括:将当前执行的数据操作所对应的日志记录在日志文件中的日志点位信息确定为第一日志点位信息;若所述第一日志点位信息与预设的同步点位信息相同,则确定所述目标数据库与所述原数据库中的数据同步;其中,所述预设的同步点位信息根据以下中的至少一项确定:所述原数据库对应的日志文件的文件大小、与所述备份时间点相对应的日志点位信息、以及获取与原数据库相对应的备份数据时产生时间最晚的日志记录在所述日志文件中的日志点位信息。
B33.根据B23-B27任一所述的方法,其中,所述将待同步的数据同步至所述目标数据库的步骤具体包括:
获取与待迁移的数据表相对应的全量数据,并根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;
从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作;
针对所述全量数据执行所述数据操作,得到与待迁移的数据表相对应的迁移数据。
B34.根据B23B-27任一所述的方法,其中,所述将待同步的数据同步至所述目标数据库的步骤具体包括:
从所述原数据库中获取与所述待迁移的数据表相对应的全量数据,并为所述全量数据中的各条数据记录设置分布列;
根据所述分布列,将所述全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中;
根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;
从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作,针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作。
B35.根据B34所述的方法,其中,所述根据所述分布列,将所述全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中的步骤具体包括:
针对所述全量数据中的每条数据记录,根据所述分布列确定该数据记录中包含的分布键;
按照预设的分布规则确定目标数据库中与所述分布键相对应的存储节点,并将该数据记录迁移到目标数据库中与所述分布键相对应的存储节点中。
B36.根据B34或B35所述的方法,其中,所述与所述日志记录相对应的数据操作具体为多个按照时间顺序依次排列的数据操作;
则所述针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作的步骤具体包括:
针对每个数据操作,根据所述分布列确定与该数据操作相对应的数据记录中包含的分布键;
按照预设的分布规则确定目标数据库中与所述分布键相对应的存储节点;
针对与所述分布键相对应的存储节点中存储的全量数据执行所述数据操作。
B37.根据B34-B36任一所述的方法,其中,所述将所述全量数据中的各条数据记录分别迁移至所述目标数据库的各个存储节点中的步骤具体包括:
对所述全量数据的各条数据记录中符合预设的字段转换规则的字段进行转换,并将转换后的各条数据记录分别迁移至所述目标数据库的各个存储节点中;和/或,
所述针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作的步骤具体包括:
在执行每个数据操作时,确定与该数据操作相对应的数据记录中包含的各个字段,针对其中符合预设的字段转换规则的字段进行转换。
B38.根据B37所述的方法,其中,所述方法执行之前,进一步包括步骤:
确定与所述原数据库相对应的第一字段规则,以及与所述目标数据库相对应的第二字段规则;
根据所述第一字段规则与所述第二字段规则中存在差异的各个字段设置所述字段转换规则;
其中,所述存在差异的各个字段包括:字段名称不同、和/或字段类型不同的字段。
B39.根据B33-B38任一所述的方法,其中,所述从所述原数据库中获取与所述待迁移的数据表相对应的全量数据的步骤具体包括:
针对所述待迁移的数据表执行加锁操作,开启用于针对所述待迁移的数据表执行快照处理的事务;
当所述事务开启完毕后,针对所述待迁移的数据表执行解锁操作,并根据与所述待迁移的数据表相对应的快照数据获取所述全量数据;
则所述根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息的步骤具体包括:将执行加锁操作后对应的日志点位信息确定为与所述全量数据相对应的日志点位信息。
B40.根据B39所述的方法,其中,当所述待迁移的数据表为多个时,所述开启用于针对所述待迁移的数据表执行快照处理的事务的步骤和/或所述根据与所述待迁移的数据表相对应的快照数据获取所述全量数据的步骤由多个线程并行处理。
B41.根据B39或B40所述的方法,其中,所述根据与所述待迁移的数据表相对应的快照数据获取所述全量数据的步骤具体包括:
将当前已获取的数据记录在所述快照数据中对应的位置信息记录在预设的第一进度表中;
当获取所述全量数据的过程中断后再次执行时,根据所述第一进度表中记录的位置信息从所述快照数据中获取数据记录。
B42.根据B33-B41任一所述的方法,其中,当所述与所述全量数据相对应的日志点位信息对应于多条日志记录时,所述从所述日志文件中获取在所述日志点位信息之后产生的日志记录的步骤具体包括:
确定与所述全量数据相对应的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;
获取所述产生时间最早的日志记录以及在所述产生时间最早的日志记录之后产生的各条日志记录;
且所述针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作的步骤具体包括:
当所述数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息,判断所述全量数据中是否包含与所述主键信息相同的数据记录;
若是,则根据所述数据操作对所述与所述主键信息相同的数据记录进行替换;或者,删除所述与所述主键信息相同的数据记录后执行所述插入类型的数据操作。
B43.根据B33-B42任一所述的方法,其中,所述从所述日志文件中获取在所述日志点位信息之后产生的日志记录的步骤具体包括:
将当前已获取的日志记录在所述日志文件中对应的日志点位信息记录在预设的第二进度表中;
当获取在所述日志点位信息之后产生的日志记录的过程中断后再次执行时,根据所述第二进度表中记录的日志点位信息从所述日志文件中获取日志记录。
B44.根据B43所述的方法,其中,当所述第二进度表中记录的日志点位信息对应于多条日志记录时,所述根据所述第二进度表中记录的日志点位信息从所述日志文件中获取日志记录的步骤具体包括:
确定所述第二进度表中记录的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;
获取所述产生时间最早的日志记录以及在所述产生时间最早的日志记录之后产生的各条日志记录;
且所述针对所述目标数据库的各个存储节点中存储的全量数据执行所述数据操作的步骤具体包括:
当所述数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息,判断所述全量数据中是否包含与所述主键信息相同的数据记录;
若是,则根据所述数据操作对所述与所述主键信息相同的数据记录进行替换;或者,删除所述与所述主键信息相同的数据记录后执行所述插入类型的数据操作。
本发明还公开了:C45.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如B23-B44中任一项所述的数据同步方法对应的操作。
本发明还公开了:D46.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如B23-B44中任一项所述的数据同步方法对应的操作。
Claims (10)
1.一种数据同步系统,包括:调用模块,以及多个与所述调用模块分别相连的数据同步模块,其中,
所述调用模块,适于确定与接收到的数据同步请求相对应的目标数据库的类型,向与该目标数据库的类型相对应的数据同步模块发送调用请求;
每个数据同步模块分别对应于至少一种类型的目标数据库,适于在接收到所述调用模块的调用请求时,确定与所述调用请求相对应的目标数据库,并将待同步的数据同步至所述目标数据库。
2.根据权利要求1所述的系统,其中,所述系统进一步包括:
数据同步接口,用于连接所述调用模块以及各个数据同步模块;
则所述调用模块具体适于:通过所述数据同步接口向与该目标数据库的类型相对应的数据同步模块发送调用请求。
3.根据权利要求2所述的系统,其中,所述数据同步接口通过虚函数实现。
4.根据权利要求1-3任一所述的系统,其中,当所述与接收到的数据同步请求相对应的目标数据库为多个不同类型的数据库时,
所述调用模块具体适于:确定与所述多个不同类型的数据库相对应的各个数据同步模块,分别向每个数据同步模块发送对应的调用请求。
5.根据权利要求1-4任一所述的系统,其中,所述多个与所述调用模块分别相连的数据同步模块包括以下中的至少两个:
与MySQL类型的目标数据库相对应的数据同步模块、与Redis类型的目标数据库相对应的数据同步模块、与Mongo类型的目标数据库相对应的数据同步模块、以及与Greenplum类型的目标数据库相对应的数据同步模块。
6.根据权利要求1-5任一所述的系统,其中,所述数据同步模块具体适于:
获取与原数据库相对应的备份数据,在目标数据库中创建与所述备份数据相对应的全量数据;
确定所述备份数据的备份时间点,根据所述原数据库对应的日志文件确定与所述备份时间点相对应的日志点位信息;
从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作;
针对所述目标数据库中存储的全量数据执行所述数据操作,直至所述目标数据库与所述原数据库中的数据同步。
7.根据权利要求6所述的系统,其中,所述原数据库中包括多个数据表,且所述原数据库对应的日志文件的数量为多个;
则所述数据同步模块具体适于:创建多个并行执行的进程,每个进程分别对应于至少一个日志文件;每个进程从该进程对应的日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作;针对所述目标数据库中存储的全量数据执行所述数据操作。
8.一种数据同步方法,包括:
确定与接收到的数据同步请求相对应的目标数据库的类型,向与该目标数据库的类型相对应的数据同步模块发送调用请求;
接收到调用请求的数据同步模块确定与所述调用请求相对应的目标数据库,并将待同步的数据同步至所述目标数据库。
9.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求8中所述的数据同步方法对应的操作。
10.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如权利要求8中所述的数据同步方法对应的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710556355.2A CN107391635A (zh) | 2017-06-30 | 2017-06-30 | 数据同步系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710556355.2A CN107391635A (zh) | 2017-06-30 | 2017-06-30 | 数据同步系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107391635A true CN107391635A (zh) | 2017-11-24 |
Family
ID=60335486
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710556355.2A Pending CN107391635A (zh) | 2017-06-30 | 2017-06-30 | 数据同步系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107391635A (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108121827A (zh) * | 2018-01-15 | 2018-06-05 | 农信银资金清算中心有限责任公司 | 一种全量数据的同步方法及装置 |
CN108304527A (zh) * | 2018-01-25 | 2018-07-20 | 杭州哲信信息技术有限公司 | 一种数据提取方法 |
CN108763003A (zh) * | 2018-05-25 | 2018-11-06 | 厦门集微科技有限公司 | 一种测试方法、装置和系统 |
CN109271450A (zh) * | 2018-10-10 | 2019-01-25 | 北京百度网讯科技有限公司 | 数据库同步方法、装置、服务器和存储介质 |
CN110019484A (zh) * | 2018-01-04 | 2019-07-16 | 腾讯科技(深圳)有限公司 | 数据库系统及实现方法、管理设备、数据接口设备和介质 |
CN110209726A (zh) * | 2018-02-12 | 2019-09-06 | 中兴通讯股份有限公司 | 分布式数据库集群系统、数据同步方法及存储介质 |
CN110309161A (zh) * | 2019-06-06 | 2019-10-08 | 新华三大数据技术有限公司 | 一种数据同步方法、装置及服务器 |
CN110795496A (zh) * | 2018-08-02 | 2020-02-14 | 阿里巴巴集团控股有限公司 | 数据同步方法、装置及系统 |
CN110825802A (zh) * | 2019-11-15 | 2020-02-21 | 北京锐安科技有限公司 | 多类型数据库数据的备份方法、装置、设备及存储介质 |
CN110928899A (zh) * | 2019-11-29 | 2020-03-27 | 中孚安全技术有限公司 | 一种通用数据库备份方法及系统 |
CN111414424A (zh) * | 2020-03-23 | 2020-07-14 | 北京思特奇信息技术股份有限公司 | 一种配置数据自动同步redis的方法、系统、介质及设备 |
CN111625396A (zh) * | 2019-02-27 | 2020-09-04 | 阿里巴巴集团控股有限公司 | 备份数据的校验方法、服务器及存储介质 |
CN112163037A (zh) * | 2020-09-17 | 2021-01-01 | 彩讯科技股份有限公司 | 一种数据同步方法、装置、计算机设备及存储介质 |
CN115599870A (zh) * | 2022-12-15 | 2023-01-13 | 云筑信息科技(成都)有限公司(Cn) | 基于消息队列的存量数据与增量数据融合的数据同步方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102129478A (zh) * | 2011-04-26 | 2011-07-20 | 广州从兴电子开发有限公司 | 数据库同步方法及系统 |
CN102982085A (zh) * | 2012-10-31 | 2013-03-20 | 北京奇虎科技有限公司 | 数据迁移系统和方法 |
CN103699580A (zh) * | 2013-12-03 | 2014-04-02 | 中铁程科技有限责任公司 | 数据库同步方法及装置 |
CN103729442A (zh) * | 2013-12-30 | 2014-04-16 | 华为技术有限公司 | 记录事务日志的方法和数据库引擎 |
CN105528368A (zh) * | 2014-09-30 | 2016-04-27 | 北京金山云网络技术有限公司 | 一种数据库迁移方法及装置 |
CN106055698A (zh) * | 2016-06-14 | 2016-10-26 | 智者四海(北京)技术有限公司 | 数据迁移方法、代理节点及数据库实例 |
-
2017
- 2017-06-30 CN CN201710556355.2A patent/CN107391635A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102129478A (zh) * | 2011-04-26 | 2011-07-20 | 广州从兴电子开发有限公司 | 数据库同步方法及系统 |
CN102982085A (zh) * | 2012-10-31 | 2013-03-20 | 北京奇虎科技有限公司 | 数据迁移系统和方法 |
CN103699580A (zh) * | 2013-12-03 | 2014-04-02 | 中铁程科技有限责任公司 | 数据库同步方法及装置 |
CN103729442A (zh) * | 2013-12-30 | 2014-04-16 | 华为技术有限公司 | 记录事务日志的方法和数据库引擎 |
CN105528368A (zh) * | 2014-09-30 | 2016-04-27 | 北京金山云网络技术有限公司 | 一种数据库迁移方法及装置 |
CN106055698A (zh) * | 2016-06-14 | 2016-10-26 | 智者四海(北京)技术有限公司 | 数据迁移方法、代理节点及数据库实例 |
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110019484B (zh) * | 2018-01-04 | 2023-06-02 | 腾讯科技(深圳)有限公司 | 数据库系统及实现方法、管理设备、数据接口设备和介质 |
CN110019484A (zh) * | 2018-01-04 | 2019-07-16 | 腾讯科技(深圳)有限公司 | 数据库系统及实现方法、管理设备、数据接口设备和介质 |
CN108121827A (zh) * | 2018-01-15 | 2018-06-05 | 农信银资金清算中心有限责任公司 | 一种全量数据的同步方法及装置 |
CN108304527A (zh) * | 2018-01-25 | 2018-07-20 | 杭州哲信信息技术有限公司 | 一种数据提取方法 |
CN110209726A (zh) * | 2018-02-12 | 2019-09-06 | 中兴通讯股份有限公司 | 分布式数据库集群系统、数据同步方法及存储介质 |
CN110209726B (zh) * | 2018-02-12 | 2023-10-20 | 金篆信科有限责任公司 | 分布式数据库集群系统、数据同步方法及存储介质 |
CN108763003A (zh) * | 2018-05-25 | 2018-11-06 | 厦门集微科技有限公司 | 一种测试方法、装置和系统 |
CN110795496A (zh) * | 2018-08-02 | 2020-02-14 | 阿里巴巴集团控股有限公司 | 数据同步方法、装置及系统 |
CN110795496B (zh) * | 2018-08-02 | 2023-05-30 | 阿里巴巴集团控股有限公司 | 数据同步方法、装置及系统 |
CN109271450B (zh) * | 2018-10-10 | 2020-12-04 | 北京百度网讯科技有限公司 | 数据库同步方法、装置、服务器和存储介质 |
CN109271450A (zh) * | 2018-10-10 | 2019-01-25 | 北京百度网讯科技有限公司 | 数据库同步方法、装置、服务器和存储介质 |
CN111625396A (zh) * | 2019-02-27 | 2020-09-04 | 阿里巴巴集团控股有限公司 | 备份数据的校验方法、服务器及存储介质 |
CN111625396B (zh) * | 2019-02-27 | 2023-05-26 | 阿里云计算有限公司 | 备份数据的校验方法、服务器及存储介质 |
CN110309161A (zh) * | 2019-06-06 | 2019-10-08 | 新华三大数据技术有限公司 | 一种数据同步方法、装置及服务器 |
CN110309161B (zh) * | 2019-06-06 | 2021-10-29 | 新华三大数据技术有限公司 | 一种数据同步方法、装置及服务器 |
CN110825802A (zh) * | 2019-11-15 | 2020-02-21 | 北京锐安科技有限公司 | 多类型数据库数据的备份方法、装置、设备及存储介质 |
CN110928899A (zh) * | 2019-11-29 | 2020-03-27 | 中孚安全技术有限公司 | 一种通用数据库备份方法及系统 |
CN110928899B (zh) * | 2019-11-29 | 2023-06-20 | 中孚安全技术有限公司 | 一种通用数据库备份方法及系统 |
CN111414424A (zh) * | 2020-03-23 | 2020-07-14 | 北京思特奇信息技术股份有限公司 | 一种配置数据自动同步redis的方法、系统、介质及设备 |
CN111414424B (zh) * | 2020-03-23 | 2023-08-04 | 北京思特奇信息技术股份有限公司 | 一种配置数据自动同步redis的方法、系统、介质及设备 |
CN112163037A (zh) * | 2020-09-17 | 2021-01-01 | 彩讯科技股份有限公司 | 一种数据同步方法、装置、计算机设备及存储介质 |
CN115599870B (zh) * | 2022-12-15 | 2023-04-07 | 云筑信息科技(成都)有限公司 | 基于消息队列的存量数据与增量数据融合的数据同步方法 |
CN115599870A (zh) * | 2022-12-15 | 2023-01-13 | 云筑信息科技(成都)有限公司(Cn) | 基于消息队列的存量数据与增量数据融合的数据同步方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107391635A (zh) | 数据同步系统及方法 | |
US11604804B2 (en) | Data replication system | |
CN107357883A (zh) | 数据迁移方法及装置 | |
US7873684B2 (en) | Automatic and dynamic provisioning of databases | |
CN107391628A (zh) | 数据同步方法及装置 | |
US9135071B2 (en) | Selecting processing techniques for a data flow task | |
CN110019138B (zh) | 一种基于Zabbix的传输表空间自动迁移方法和系统 | |
GB2468742A (en) | Database migration or synchronization with ordering of data replication instructions based upon dependencies between data to prevent errors | |
CN104598376A (zh) | 一种数据驱动的分层自动化测试系统和方法 | |
CN107391634A (zh) | 数据迁移方法及装置 | |
US11226985B2 (en) | Replication of structured data records among partitioned data storage spaces | |
US20210081358A1 (en) | Background dataset maintenance | |
US10235406B2 (en) | Reminder processing of structured data records among partitioned data storage spaces | |
Narang | Database management systems | |
US20110153562A1 (en) | Error prevention for data replication | |
US20150006485A1 (en) | High Scalability Data Management Techniques for Representing, Editing, and Accessing Data | |
CN108255994A (zh) | 一种基于数据库快照的数据库版本管理方法 | |
Krechowicz et al. | Highly scalable distributed architecture for NoSQL datastore supporting strong consistency | |
US10552440B1 (en) | System for performing data transformations using a set of independent software components | |
CN114328759A (zh) | 一种数据仓库的数据构建与管理方法及终端 | |
Sreemathy et al. | Data validation in ETL using TALEND | |
CN104699811B (zh) | 一种无侵入式表单数据变化记录和回溯的方法及装置 | |
Verma et al. | Big data analytics: performance evaluation for high availability and fault tolerance using mapreduce framework with hdfs | |
CN108256019A (zh) | 数据库主键生成方法、装置、设备及其存储介质 | |
Thanekar et al. | A study on MapReduce: Challenges and Trends |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171124 |