CN110309161B - 一种数据同步方法、装置及服务器 - Google Patents
一种数据同步方法、装置及服务器 Download PDFInfo
- Publication number
- CN110309161B CN110309161B CN201910492559.3A CN201910492559A CN110309161B CN 110309161 B CN110309161 B CN 110309161B CN 201910492559 A CN201910492559 A CN 201910492559A CN 110309161 B CN110309161 B CN 110309161B
- Authority
- CN
- China
- Prior art keywords
- data
- change
- database
- task
- synchronization
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2358—Change logging, detection, and notification
-
- 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
- G06F16/258—Data format conversion from or to a database
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据同步方法、装置及服务器,该数据同步方法包括:获取同步关系,同步关系包括数据源信息及对应的数据目的信息,数据源信息包括源数据库信息及源数据库中的源数据表信息;数据目的信息包括目的数据库信息及目的数据库中的目的数据表信息;基于同步关系,通过数据库变更抽取任务抽取源数据库表的变化数据;数据库变更抽取任务使用数据库变更捕获工具来获取源数据库表中的变化数据;基于同步关系,通过数据库变更消费任务将获取的变化数据同步到目的数据表中。通过实施本发明,无需依赖于传统的OGG、DataX等技术,处理过程简单,可以实现数据库实时数据同步,满足数据库备份数据的高实时性要求。
Description
技术领域
本发明涉及数据处理技术领域,具体涉及一种数据同步方法、装置及服务器。
背景技术
数据库的所有操作记录都包含在redo log(重做日志)中,如果数据库宕机导致数据丢失,可以通过解析redo log进行数据重做和恢复。但Redo log保存的重做日志数据经过加密保存,无法直接读取并使用。
现有比较常见的数据库数据变更捕捉技术(Change Data Capature,CDC)有OGG、DataX等,这些技术产品基本都是收费的或者需要复杂的安装操作。在一些数据库备份数据实时性要求比较高的场景中,需要一种可以实现数据库实时数据同步的技术来实现该场景下的需求。
发明内容
有鉴于此,本发明实施例提供了一种数据同步方法、装置及服务器,以实现数据库实时数据同步,满足数据库备份数据的高实时性要求。
根据第一方面,本发明实施例提供了一种数据同步方法,包括:获取同步关系,所述同步关系包括数据源信息及对应的数据目的信息,数据源信息包括源数据库信息及源数据库中的源数据表信息;数据目的信息包括目的数据库信息及目的数据库中的目的数据表信息;基于所述同步关系,通过数据库变更抽取任务抽取所述源数据库表的变化数据;所述数据库变更抽取任务使用数据库变更捕获工具来获取源数据库表中的变化数据;基于所述同步关系,通过数据库变更消费任务将获取的变化数据同步到目的数据表中。
通过实施本发明,获取同步关系,使用该同步关系的抽取任务及消费任务,实现源数据库到目的数据库的数据同步,处理过程简单,无需依赖于传统的OGG、DataX等技术,以实现数据库实时数据同步,满足数据库备份数据的高实时性要求。
结合第一方面,在第一方面第一实施方式中,在基于所述同步关系,通过数据库变更抽取任务抽取所述源数据库表的变化数据之后,所述方法还包括:将抽取的变化数据存储至存储中间件中;基于所述同步关系,通过数据库变更消费任务将获取的变化数据同步到目的数据表中,具体包括:基于所述同步关系,通过数据库变更消费任务将从所述存储中间件获取的变化数据同步至目的数据表中。
结合第一方面第一实施方式,在第一方面第二实施方式中,所述目的数据表具有多个,且数据库变更消费任务的数量与目的数据表的数量相匹配;则在所述基于所述同步关系,通过数据库变更抽取任务抽取所述源数据库表的变化数据之前,所述方法还包括:对各个数据库变更消费任务进行初始化,以将所述源数据库表中变化数据之前的原始数据同步至各个目的数据表中,并分别确定执行最后一条原始数据同步操作后,各个数据库变更消费任务分别对应的初始***变化标识序列号;以及所述基于所述同步关系,通过数据库变更抽取任务抽取所述源数据库表的变化数据,包括:利用所述数据库变更抽取任务,比较各个数据库变更消费任务分别对应的初始***变化标识序列号,以确定最小的初始***变化标识序列号;并从最小的初始***变化标识序列号对应的数据开始,从所述源数据表中抽取变化数据。
结合第一方面第二实施方式,在第一方面第三实施方式中,将抽取的变化数据存储至存储中间件中,包括:将抽取的变化数据和变化数据的第一***变化标识序列号存储至所述存储中间件中;在基于所述同步关系,通过数据库变更消费任务将从所述存储中间件获取的变化数据同步至目的数据表中之前,还包括:对所述存储中间件进行初始化,通过将变化数据的第一***变化标识序列号分别与每个数据库变更消费任务对应的初始***变化标识序列号进行比较,以分别确定出不低于每个数据库变更消费任务对应的初始***变化标识序列号的第一***变化标识序列号;基于所述同步关系,通过数据库变更消费任务将从所述存储中间件获取的变化数据同步至目的数据表中,包括:针对每个数据库变更消费任务,利用该数据库变更消费任务,从不低于该数据库变更消费任务对应的初始***变化标识序列号的第一***变化标识序列号对应的数据开始,从所述存储中间件中获取变化数据并同步至该数据库变更消费任务对应的目的数据表中。
结合第一方面第一实施方式至第三实施方式中的任意一种实施方式,在第一方面第四实施方式中,在所述基于所述同步关系,通过数据库变更抽取任务抽取所述源数据库表的变化数据之前,所述方法还包括:若确定未为所述源数据库建立同步任务,则为所述源数据库建立同步任务并根据所述同步关系建立数据库变更抽取任务和数据库变更消费任务;若所述同步任务已存在且所述同步关系不存在时,则停止所述同步任务并基于所述同步关系建立数据库变更消费任务,并重启所述同步任务,以触发对所述数据库变更消费任务、所述源数据库的数据库变更抽取任务和存储中间件分别进行初始化的操作。
结合第一方面第四实施方式,在第一方面第五实施方式中,所述存储中间件中存储有抽取的每一条变化数据及该条变化数据的第一***变化标识序列号;则对所述数据库变更抽取任务进行初始化,包括:利用所述数据库变更抽取任务,从所述存储中间件中获取所述同步任务停止时、最新一条数据的第一***变化标识序列号;确定所述最新一条数据的第一***变化标识序列号与初始化后的数据库变更消费任务对应的初始***变化标识序列号中的最小值和最大值;从所述源数据库表中所述最小值对应的数据开始抽取变化数据,直至抽取到所述最大值对应的数据为止,并将抽取的变化数据和变化数据的第一***变化标识序列号存储至所述存储中间件中。
结合第一方面第三实施方式或第五实施方式,在第一方面第六实施方式中,将抽取的变化数据和变化数据的第一***变化标识序列号存储至所述存储中间件中,包括:将所述变化数据和变化数据的第一***变化标识序列号暂存至所属事务对应的数据地图集合中;若所述第一***变化标识序列号大于所述存储中间件中最新一条数据的第一***变化标识序列号,则当所属事务执行完成后将暂存在所属事务对应的数据地图集合中的变化数据和变化数据的第一***变化标识序列号存储至所述存储中间件中。
结合第一方面,在第一方面第七实施方式中,所述目的数据库信息包括目的数据库类型,则基于所述同步关系,通过数据库变更抽取任务抽取所述源数据库表的变化数据,包括:通过与所述目的数据库类型相适应的数据库变更抽取任务抽取所述源数据库表的变化数据;基于所述同步关系,通过数据库变更消费任务将获取的变化数据同步到目的数据表中,包括:通过与所述目的数据库类型相适应的数据库变更消费任务将获取的变化数据同步到目的数据表中。
根据第二方面,本发明实施例提供了一种同步关系获取模块,用于获取同步关系,所述同步关系包括数据源信息及对应的数据目的信息,数据源信息包括源数据库信息及源数据库中的源数据表信息;数据目的信息包括目的数据库信息及目的数据库中的目的数据表信息;变化数据获取模块,用于基于所述同步关系,通过数据库变更抽取任务抽取所述源数据库表的变化数据;所述数据库变更抽取任务使用数据库变更捕获工具来获取源数据库表中的变化数据;数据同步模块,用于基于所述同步关系,通过数据库变更消费任务将获取的变化数据同步到目的数据表中。
根据第三方面,本发明实施例提供了一种服务器,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行第一方面或者第一方面的任意一种实施方式中所述的数据同步方法。
根据第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行第一方面或者第一方面的任意一种实施方式中所述的数据同步方法。
本发明实施例的有益效果在于:
1、使用数据库的同步关系的抽取任务及消费任务,实现源数据库到目的数据库的数据同步,处理过程简单,无需依赖于传统的OGG、DataX等技术,可以实现数据库实时数据同步,满足数据库备份数据的高实时性要求;
2、实现数据同步的过程无需太多复杂操作,只需在服务器进行数据库变更捕获组件的安装以及相关的数据库配置即可,对使用者来讲更加方便快捷;
3、能够实现异构数据库之间的数据同步,不需要特殊操作和配置;
4、对于一个源数据库表的多个同步关系,抽取的数据只在存储中间件中保留一份,不会有数据冗余;同时,同步任务可以暂停,且在重启后能够从停止点继续进行同步,避免造成数据的重复。
附图说明
通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
图1A及图1B示出了本发明实施例的应用场景示意图;
图2示出了本发明实施例的数据同步方法的流程示意图;
图3示出了本发明另一实施例的数据同步方法的流程示意图;
图4示出了本发明另一实施例的数据同步方法的流程示意图;
图5示出了本发明另一实施例的数据同步方法的流程示意图;
图6示出了本发明另一实施例的数据同步方法的流程示意图;
图7示出了本发明实施例的记录初始scn值的时序示意图;
图8示出了本发明实施例的数据库实时同步***的架构示意图;
图9示出了本发明实施例的数据同步装置的结构示意图;
图10示出了本发明另一实施例的数据同步装置的结构示意图;
图11示出了本发明另一实施例的数据同步装置的结构示意图;
图12示出了本发明另一实施例的数据同步装置的结构示意图;
图13示出了本发明另一实施例的数据同步装置的结构示意图;
图14示出了本发明实施例的服务器的硬件结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了更好地理解本发明,对本发明涉及的技术术语进行介绍:
(1)Logminer:Oracle数据库的数据库日志解析组件;
(2)CDC:Change Data Capature,数据变更捕捉;
(3)同步关系:一个源数据库表到一个目的数据库表的数据同步关系;
(4)同步任务:一个源数据库对应的所有同步关系组成的一个整体;
(5)OGG:Oracle Golden Gate,Oracle自带的数据库同步工具(收费版);
(6)DataX:一种异构数据库离线数据同步工具;
(7)源数据库:CDC数据的来源数据库;
(8)源数据库表:CDC数据的来源数据库表;
(9)目的数据库:CDC数据同步的目标数据库;
(10)目的数据表:CDC数据同步的目标数据库表;
(11)kafka:存储中间件,kafka是一种高吞吐量的分布式发布订阅消息组件,它可以用以存储数据同步过程中从源数据表中抽取的数据。
(12)CDC Producer:数据库变更抽取任务——例如,负责使用Logminer实时抽取Oracle数据库的数据变更,并发送到kafka中;
(13)CDC Consumer:数据库变更消费任务——例如,负责消费kafka中的数据库变更数据,将数据更新到目的数据库中;
(14)kafka Producer:kafka消息的生产者,负责向kafka发送数据;
(15)kafka Consumer:kafka消息的消费者,负责消费kafka中的数据;
(16)RDBMS:关系型数据库;
(17)SCN:数据库的***变化标识序列号,递增无重复,用于唯一标识数据库的每一个数据变更动作。
数据库中的数据需要进行备份,以备数据库的原始数据出现损坏等问题,然而在对数据库中的数据进行备份的过程中,主要通过数据变更捕捉技术(Change DataCapature,CDC)获取数据,但常用的CDC技术(如OGG、DataX等)基本都需要复杂的安装操作,难以满足一些数据库备份数据实时性要求比较高的场景。如图1A及图1B所示,是本发明实施例的应用场景示意图,是在相同结构或者是不同结构中的数据库之间进行数据同步的场景,例如是,从Oracle数据库(Oracle作为一种功能非常强大的RDBMS(关系型数据库),是目前使用最广泛的RDBMS之一)到Oracle数据库,或是从Oracle数据库到Mysql数据库或sqlServer数据库等,本发明并不以此为限。
在本发明实施例中,可以是通过数据同步模块实现数据库之间的数据同步。如图1A所示,该数据同步模块中可包含对应不同类型数据库的数据同步子模块,用以识别符合自身数据库类型的数据,执行相应的数据同步任务。如图1B所示,在本发明的一可选实施例中,也可以是通过该数据同步模块中设置一数据调度模块,用以识别不同的数据库类型,通过相应的数据同步任务将相应的数据分发至对应类型的数据库进行同步,具体实现过程,将在下文中做详细描述。
为了实现上述目的,本发明实施例提供了一种数据同步方法,如图2所示,该数据同步方法包括:
步骤S1:获取同步关系,该同步关系包括数据源信息及对应的数据目的信息,数据源信息包括源数据库信息及源数据库中的源数据表信息;数据目的信息包括目的数据库信息及目的数据库中的目的数据表信息。
可选地,在本发明的一些实施例中,该同步关系是指,基于要进行数据同步的源数据表及目的数据库构建的同步关系。在实际应用中,可以是获取用户输入的进行同步关系必要的数据库相关信息。例如,用户通过页面(Web)输入数据源信息和数据目的信息,例如,源数据库信息可以但不限于包括统一资源定位符URL、源数据库类型、同步起始时间、源数据库ip、端口、数据库名、、用户名和密码;源数据表信息可以为数据表标识(例如表名)等、而目的数据库信息可以但不限于为:目的数据库URL、目的数据库类型、目的数据库名、ip、端口号、用户名和密码等,而目的数据表信息可以但不限于包括目的数据表标识,根据需求也可进一步输入数据库支持模式信息等。基于这些数据库相关信息所建立的源数据库及目的数据库的同步关系。
基于同步关系进行数据同步时,分两部分执行,一个是用于进行CDC数据抽取的数据库变更抽取任务(CDC producer),一个是用于将抽取的源数据表的CDC数据同步到目的数据表的数据库变更消费任务(CDC consumer)。可选地,在进行数据库同步时,可以为每个源数据库配置至少一个数据库变更抽取任务,当为源数据库配置一个数据库变更抽取任务时,则由该数据表变更抽取任务负责从该源数据库中各个源数据表中分别抽取变化数据。当为该源数据库表配置多个数据库变更抽取任务时,数据库变更抽取任务的数量可以根据可以当前资源占用情况而定,这样当有多个源数据表需要进行数据同步时,多个数据库表变更抽取任务分别从多个源数据表中抽取变化数据,这样也就提高了数据同步的速度,更加满足了实时性需求。
然而实际应用中,数据库变更抽取任务的执行会占用一些资源,为了节省资源消耗,一般情况下一个源数据库对应一个数据库变更抽取任务。但本发明实施例同样支持多个数据库变更抽取任务的情况。当源数据库中源数据表比较少,进而同步关系比较少的情况下,可以考虑配置多个数据库变更抽取任务,这样由于同步关系较少,即使开启多个数据库变更抽取任务执行数据同步时占用的资源也不会太多;然而当源数据库中源数据表较多,进而同步关系会比较多的情况下,在这种情况下,由于同步关系较多,若配置多个数据库变更抽取任务则会占用较大的资源,这样可能会消耗源数据库较多资源,影响源数据库的其他操作,故此时可以配置较少的数据库变更抽取任务,如1个。
此外,本发明对数据库变更消费任务的数量一般不进行限定,数据表变更消费任务的数量可以与同步关系的数据保持1:1的比例关系。在介绍数据库变更抽取任务和数据库变更消费任务的功能后,接下来对变化数据的抽取和同步进行说明。
步骤S2:基于同步关系,通过数据库变更抽取任务抽取源数据库表的变化数据;数据库变更抽取任务使用数据库变更捕获工具来获取源数据库表中的变化数据。
具体地,本发明实施例可以维护一个表标识集合,该表标识集合中存储有各个同步关系的源数据表标识,当数据表标识为数据表名时,则该表标识集合为表名集合,该表名集合中存储各个同步关系的源数据表名。为了描述方便,后续以数据表标识为数据表名为例进行说明。
在此基础之上,当获取到同步关系时,可以将获取的同步关系的源数据表名添加到CDC producer的表名集合中,这样CDC producer可以基于表名集合中的表名进行数据抽取,当源数据库之前同步过数据,然后新增同步关系时,则标记该源数据库的同步任务状态为“ADDNEW”;当源数据库为首次同步数据时,会为该源数据库第一次新增同步关系状态为“NEW”)。
因此,基于步骤S1获取的同步关系,通过源数据库使用的数据库变更抽取任务,抽取源数据库表的变化数据。
可选地,在本发明的一些实施例中,该数据库变更任务是使用数据库变更捕获工具来获取源数据库表中的变化数据。例如,对于Oracle数据库,是启动数据库变更捕获工具Logminer(也可称为Oracle的数据库日志解析组件)来抽取该变化数据。
具体地,一个数据库变更抽取任务对应一个数据库变更抽取线程,则在实施步骤S2时,由该数据库变更抽取任务对应的数据库变更抽取线程从源数据表中抽取变化数据。
步骤S3:基于同步关系,通过数据库变更消费任务将获取的变化数据同步到目的数据表中。
在步骤S2通过数据库变更抽取任务从源数据库表中抽取到变化数据后,通过该同步关系中对应的数据库变更消费任务将该变化数据同步到目的数据表中,从而完成数据从源数据库中的源数据表到目的数据库中的目的数据表的同步。
本发明实施例的数据同步方法,通过上述步骤S1-步骤S3,通过获取同步关系,使用该同步关系的抽取任务及消费任务,实现源数据库到目的数据库的数据同步,处理过程简单,无需依赖于传统的OGG、DataX等技术,以实现数据库实时数据同步,满足数据库备份数据的高实时性要求。
可选地,在本发明的一些实施例中,该数据同步方法不仅可以实现同类型数据库间的数据同步,也可以实现不同类型数据库间的数据同步。上述步骤S2,基于同步关系,通过数据库变更抽取任务抽取源数据库表的变化数据,包括:从目的数据库信息中获取目的数据库类型,通过与目的数据库类型相适应的数据库变更抽取任务抽取源数据库表的变化数据;相应地,步骤S3,基于同步关系,通过数据库变更消费任务将获取的变化数据同步到目的数据表中,包括:通过与目的数据库类型相适应的数据库变更消费任务将获取的变化数据同步到目的数据表中。
在具体实施时,上述过程可以例如是通过如图1A所示的各个目的数据库的数据同步子模块实现,对从源数据库传输的数据进行类型识别,确定该数据是否符合自身的数据库类型,如果符合,则调用相应的数据库变更抽取任务抽取源数据库表的变化数据,并调用相应的数据库变更消费任务将该变化数据同步到该目的数据库中。或者,也可以例如是通过如图1B所示的调度模块实现,对从源数据库传输的数据进行识别、分发,识别出该数据属于何种数据库类型,通过与该数据库类型相适应的数据库变更抽取任务抽取源数据库表的变化数据,并通过与该数据库类型相适应的数据库变更消费任务将抽取的变化数据同步到目的数据表中。
通过上述过程,不仅仅能够实现相同类型数据库之间的数据同步,并且,还能够实现异构数据库之间的数据同步,从而满足不同数据库的数据备份的实时性需求。
可选地,在本发明的一些实施例中,在数据库变更抽取任务抽取变化数据、数据库变更消费任务消费该变化数据将该变化数据同步到目的数据表的过程中,可能存在由于抽取数据的速率及消费数据的速率并不一致的情况,从而导致抽取到的数据不能及时被消费任务消费,因此,需要通过存储中间件存储该数据库变更抽取任务抽取到的变化数据。该存储中间件是指在数据库之间进行数据传输时存储抽取数据的消息队列中间件(例如kafka、RabbitMq、ActiveMQ等)。
在此基础之上,可以按照图3所示的流程实施数据同步方法,包括:
步骤S31:获取同步关系。
具体地,该步骤的过程与上述实施例的步骤S1的过程相同,在此不再赘述;
步骤S32:基于同步关系,通过数据库变更抽取任务抽取源数据库表的变化数据。
该步骤的过程与上述实施例的步骤S2的过程相同,在此不再赘述;
步骤S33:将抽取的变化数据存储至存储中间件中。
步骤S34:基于该同步关系,通过数据库变更消费任务从该存储中间件中获取变化数据,并将该变化数据同步到目的数据表中。
可选地,在本发明的一些实施例中,该同步关系中的目的数据库的目的数据表可以为一个或多个,当该目的数据表为多个时,用以进行数据消费的数据库变更消费任务的数量与目的数据表的数量是相匹配的,例如,1个源数据表同时配置10个目的数据表,则相应地,需要10个数据库变更消费任务来分别消费源数据表的数据到10个目的数据表。
基于上述任一实施例,在配置相应的数据库消费任务后,需要对该数据库消费任务进行初始化,并且,由于数据库变更抽取任务所获取的数据是数据库数据发生变更后的变化数据,因此,为了保证目的数据表中的数据与源数据库表中的数据的一致性,还需在抽取变化数据前进行目的数据表的初始化。基于此,可以按照图4所示的流程实施数据同步方法,包括:
步骤S41:获取同步关系。
该步骤的过程与上述实施例的步骤S1的过程相同,在此不再赘述;
步骤S42:对各个数据库变更消费任务进行初始化,以将源数据库表中变化数据之前的原始数据同步至各个目的数据表中,并分别确定执行最后一条原始数据同步操作后,各个数据库变更消费任务分别对应的初始***变化标识序列号。
具体地,对数据库变更消费任务进行初始化的数据主要包括:目标表信息、源表信息、对应的数据库变更抽取任务以及存储中间件消费者等。使用初始化后的数据库变更消费任务将源数据库表中的变化数据之前的原始数据同步到各个目的数据表中,从而实现各目的数据表的初始化,并记录原始数据同步到各个目的数据表中时的初始***变化标识序列号SCN0 n到存储中间件中。其中,***变化标识序列号(System Change Number,SCN),递增无重复,用于标识数据库的每一个数据变更动作,n表示各***变化标识序列号对应的各数据库变更消费任务的序号,若数据库变更消费任务有N个,则n属于1~N。
在对目的数据表进行初始化后,确定了各数据库变更消费任务在同步原始数据到目的数据表的初始***变化标识序列号SCN0 n,执行步骤S43。
步骤S43:利用数据库变更抽取任务,比较各个数据库变更消费任务分别对应的初始***变化标识序列号SCN0 n,以确定最小的初始***变化标识序列号,并从最小的初始***变化标识序列号对应的数据开始,从源数据表中抽取变化数据。因为每个数据库变更消费任务是独立的,具体什么时候运行完全依赖于操作***的线程调度,所以每个初始***变化标识序列号是不同的,因此,为了保证原始数据的完整性,数据库变更抽取任务应从最小的初始***变化标识序列号对应的数据开始,从源数据表中抽取变化数据。
步骤S44:将抽取的变化数据存储至存储中间件中。该步骤的过程与上述实施例的步骤S33的过程相同,在此不再赘述;
步骤S45:基于该同步关系,通过数据库变更消费任务从该存储中间件中获取变化数据,并将该变化数据同步到目的数据表中。该步骤的过程与上述实施例的步骤S34的过程相同,在此不再赘述。
可选地,在本发明的一些实施例中,如图5所示,该数据同步方法包括:
步骤S51:获取同步关系。该步骤的过程与上述实施例的步骤S1的过程相同,在此不再赘述。
步骤S52:对各个数据库变更消费任务进行初始化,以将源数据库表中变化数据之前的原始数据同步至各个目的数据表中,并分别确定执行最后一条原始数据同步操作后,各个数据库变更消费任务分别对应的初始***变化标识序列号。该步骤的过程与上述实施例的步骤S1的过程相同,在此不再赘述。
步骤S53:基于同步关系,通过数据库变更抽取任务抽取源数据库表的变化数据。除了在数据库变更消费任务导入原始数据时记录其对应的初始***变化标识序列号之外,在数据库变更抽取任务抽取变化数据时,同样会记录数据抽取动作所对应的第一***变化标识序列号,并将该变化数据及该变化数据的第一***变化标识序列号存储至存储中间件中。
步骤S54:将抽取的变化数据及该变化数据的第一***变化标识序列号存储至存储中间件中。
步骤S55:对存储中间件进行初始化,通过将变化数据的第一***变化标识序列号分别与每个数据库变更消费任务对应的初始***变化标识序列号进行比较,以分别确定出不低于每个数据库变更消费任务对应的初始***变化标识序列号的第一***变化标识序列号。
由于每个数据库变更消费任务在存储中间件中的初始***变化标识序列号各不相同,数据库变更抽取任务从***变化标识序列号最小的地方开始抽取,难免会导致初始***变化标识序列号较大的数据库变更消费任务会重复消费一部分数据,未避免造成数据重复,需要对存储中间件进行初始化,将各数据库变更消费任务的初始***变化标识序列号与变化数据的第一***变化标识序列号进行比对,以确定大于或等于每个数据库变更消费任务的初始***变化标识序列号的第一***变化标识序列号。
步骤S56:基于该同步关系,通过数据库变更消费任务,从大于或等于每个数据库变更消费任务的初始***变化标识序列号的第一***变化标识序列号对应的数据开始,从存储中间件中获取变化数据并同步到该数据库变更消费任务对应的目的数据表中。
可选地,在本发明的一些实施例中,如图6所示,该数据同步方法包括:
步骤S61:获取同步关系。该步骤的过程与上述实施例的步骤S1的过程相同,在此不再赘述。
步骤S62:确定该源数据库是否已建立有同步任务,若确定未为源数据库建立同步任务,则执行步骤S63;若已建立同步任务则执行步骤S64。
步骤S63:为源数据库建立同步任务并根据同步关系建立数据库变更抽取任务和数据库变更消费任务,并执行步骤S67。
步骤S64:判断该同步关系是否已经存在;如果该同步关系已存在,则执行步骤S65;否则,将同步关系保存到数据库中,并执行步骤S66。
具体地,判断同步关系是否存在的依据是遍历当前同步任务的所有同步关系集合,判断是否存在当前配置信息中源数据库表名对应的同步关系集合(每个源数据库表对应一个同步关系集合);如果当前配置信息中源数据库表名不存在对应的同步关系集合或其对应的同步关系集合为空,则判定不存在所述同步关系,表明可以直接添加所要配置的同步关系;否则,需要遍历该源数据库表对应的同步关系集合,判断是否所有配置的同步关系均不在集合中,如果所有配置的同步关系均不存在该同步关系集合中,则判定不存在所述同步关系,可以直接添加所要配置的同步关系,否则,提示重复配置的同步关系错误信息(例如可以是通过页面显示该提示信息)。
步骤S65:返回提示错误信息。例如,通过web页面显示该提示信息。
步骤S66:停止源数据库的同步任务,基于同步关系建立数据库变更消费任务,并重启同步任务。
若同步任务已存在且同步关系不存在时,由于同一个源数据库公用一个数据库变更抽取任务,因此,执行步骤S66,先停止已存在的同步任务(包括停止该同步任务对应的CDC producer和所有的CDC consumer)并基于同步关系建立数据库变更消费任务,并重启同步任务,以触发对数据库变更消费任务、源数据库的数据库变更抽取任务和存储中间件分别进行初始化的操作。其中,对数据库变更消费任务和存储中间件的初始化操作,在上文中已经描述,在此不再赘述。因此,经过对数据库变更消费任务和存储中间件的初始化操作,在存储中间件中存储有源数据库表的原始数据及初始***变化标识序列号SCN0 n。
步骤S67:基于同步关系,通过数据库变更抽取任务抽取源数据库表的变化数据。该步骤的过程与上述实施例的步骤S32的过程相同,在此不再赘述。
步骤S68:将抽取的变化数据存储至存储中间件中。该步骤的过程与上述实施例的步骤S33的过程相同,在此不再赘述。
步骤S69:基于该同步关系,通过数据库变更消费任务从该存储中间件中获取变化数据,并将该变化数据同步到目的数据表中。该步骤的过程与上述实施例的步骤S34的过程相同,在此不再赘述。
具体地,当同步任务存在而同步关系不存在时,表明该源数据库之前进行过数据同步,则获取的同步关系为新增同步关系,由于该源数据库的数据库变更抽取任务可能正在执行数据抽取,故为了能够让数据库变变更抽取任务基于新增同步关系抽取数据,一方面为新增同步关系配置数据库变更消费任务,然后暂停源数据库的同步任务,即暂停源数据库的数据库变更抽取任务、数据库变更消费任务和存储中间件等,然后当重启同步任务时,对上述各任务进行初始化,以让初始化后的数据库变更抽取任务获知新增同步关系,从新增同步关系包含的源数据表中抽取变化数据;同时然后初始化后的数据库变更消费任务将抽取的变化数据同步至新增同步关系包含的目的数据表中。
具体地,以源数据库为Oracle数据库为例进行说明,数据库变更抽取工具Logminer是在Oracle源库端安装的一个组件,该组件的运行会占用一些源库的资源,因此当同步关系较多时,仅开启一个Logminer,即源数据库中各个源数据库对应的所有同步关系均使用一个Logminer进行CDC数据抽取,这样可以防止占用过多的源库资源,然而当仅开一个Logminer组件时,当新增一个或多个同步关系时,当前开启的Logminer组件因并未记录新增的同步关系而导致无法基于新增的同步关系同步数据,为了解决这一问题,需要暂停源数据库的同步任务,然后重启Logminer组件,这样当重启成功后,就会对数据库变更抽取任务、数据库变更消费任务和存储中间件进行初始化。初始化过程中,会将新增的同步关系的源数据表名同步到数据库变更抽取任务的表名集合中,这样,数据库变更抽取任务基于表名集合可以看到新增同步关系的数据表名,这样,当同步开始时,数据库变更抽取任务就可以基于表名集合中的数据表名,从数据表标识对应的源数据表中抽取变化数据。另一方面,初始化数据库变更消费任务时,若新增多个同步关系,则初始化与新增的同步关系数量相匹配的数据库变更消费任务,初始化数据库变更消费任务过程中,需要为每一数据库变更消费任务配置一个目的数据表,同时对目的数据表进行初始化以确定同步起点。
当源数据库配置多个Logminer,当有新增同步关系时,则可以为该新增同步关系开启一个新的Logminer组件,这样当前正在运行的Logminer组件就无需暂停,继续执行正在处理的任务,只需由新开启的Logminer组件为新增同步关系按照步骤S2和S3的方法同步数据。
由于同步任务已存在,该存储中间件中存储有该同步任务执行过程中抽取的每一条变化数据及该条变化数据的第一***变化标识序列号,此时,对于数据库变更抽取任务的初始化操作,主要包括:
利用数据库变更抽取任务,从存储中间件中获取同步任务停止时、最新一条数据的第一***变化标识序列号scnnewest;确定最新一条数据的第一***变化标识序列号scnnewest与初始化后的数据库变更消费任务对应的初始***变化标识序列号SCN0 n中的最小值和最大值;
从源数据库表中最小值对应的数据开始抽取变化数据,直至抽取到最大值对应的数据为止,并将抽取的变化数据和变化数据的第一***变化标识序列号存储至存储中间件中。
通过上述过程,能够保证已存在的同步任务上次抽取到的位置连贯,同时,新增的同步关系抽取的数据连贯且不重复。
可选地,在本发明的一些实施例中,上述的将抽取的变化数据和变化数据的第一***变化标识序列号存储至所述存储中间件中的过程,主要包括:将变化数据和变化数据的第一***变化标识序列号暂存至所属事务对应的数据地图集合(map)中;判断该第一***变化标识序列号是否大于存储中间件中最新一条数据的第一***变化标识序列号;若第一***变化标识序列号大于存储中间件中最新一条数据的第一***变化标识序列号,则当所属事务执行完成后将暂存在所属事务对应的数据地图集合中的变化数据和变化数据的第一***变化标识序列号存储至存储中间件中。
在存储中间件中存储的数据时是以事务为单位,保证同步数据的事务性;多个数据库变更消费任务可能同时对应一个存储中间件进行数据消费,但是每个数据库变更消费任务对应的事务id均不同,从而保证相互之间互不影响。
通过本发明实施例的数据同步方法,基于源数据库及目的数据库的同步关系,建立数据库变更抽取任务及消费任务并对其进行初始化操作,通过数据库变更消费任务对目的数据库进行初始化操作,从而通过***变化标识序列号,对数据库变更抽取任务抽取变化数据的起始位置及数据进行调整,并对数据库变更消费任务消费变化数据的位置及数据进行调整,从而保证在数据同步过程中数据的连续性、一致性,从而满足数据库备份数据的高实时性要求。
以下结合具体应用示例对本发明实施例的数据同步方法进行说明,具体地,在此示例中,是以源数据库为Oracle数据库、所使用的数据变更捕获工具为Logminer、存储中间件为kafka为例进行说明,但本领域技术人员应当知晓,上述示例仅为举例说明,而并非用以限制本发明。
1.接收用户在页面等输入进行同步关系必要的数据库相关信息的输入,比如:ip、端口、数据库名、表名(如果数据库支持模式也需要输入模式信息)、用户名和密码、对应的源数据库和目标数据库信息等。
此处假设源数据库表为A表,同时配置10个目的数据表信息(包括数据库ip、端口、数据库名、表名等),此处假设10个表分别为B1-B10;A-B1,A-B2……A-B10是对应的10个同步关系,也就是A表中的数据会分别同步到B1-B10这10个表。
2.根据A-Bn(n为1-10)的关系判断源数据库对应的同步任务是否存在,在此示例中,是以源数据库对应的同步任务不存在的情况进行说明。源数据库对应的同步任务不存在时,则需要创建一个对应源数据库的同步任务(对应的同步关系集合为空)并保存所有配置的同步关系信息,这10个同步关系都是全新增的,然后进行第3步的初始化操作流程。
3.根据10个同步关系数据,初始化1个Logminer抽取任务,初始化Logminer抽取任务的数据包括源数据库、源数据库表、对应的kafka消费者(kafka Consumer)、kafka生产者(kafka Producer)以及表名集合等(此处因为只有一个源表,所以表名集合中只有一个表名),初始化后的Logminer抽取任务用于连接源数据库进行指定表的数据的抽取,抽取的变化数据保存到kafka中间件中;同时,初始化10个数据库变更消费任务,初始化数据库变更消费任务的数据包括目的数据表信息、源数据库表信息、对应Logminer抽取任务以及kafka消费者等,用于消费Logminer抽取后保存在kafka中的变化数据到目的数据表中。
4.在Logminer抽取任务和10个数据库变更消费任务数据初始化后,不会立刻运行,而是需要进行目的数据表的初始化,首先,需要10个数据库变更消费任务进行全量表数据导入到目的数据表,并查询Oracle的v$database***表获取当前时刻的oracle数据库的scn值,并记录该scn值,总共有10个数据库变更消费任务的初始scn值(因为每个数据库变更消费任务是独立的,具体什么时候运行完全依赖于操作***的线程调度,所以每个初始scn值是不同的);如图7所示,数据库的所有操作是有时序的,每个scn相当于一个时刻,就相当于每个数据库变更消费任务的初始时刻不同,有的数据消费更提前,有的滞后,所以为了保证1-10中每个数据库变更消费任务消费的数据不会丢失,就需要从scn1开始抽取(从源表到中间件);即,Logminer抽取任务会从10个数据库变更消费线程初始化的scn的最小值对应的数据开始抽取,并将抽取的数据发送到kafka中间件中。
5.然后,进行kafka中间件的初始化,这个初始化操作是为了防止数据的重复;因为,每个kafka的初始scn不一样,Logminer抽取任务从scn最小值对应的数据开始抽取,难免会导致初始scn较大的数据库变更消费任务会重复消费一部分数据,所以在正式运行任务之前,需要对kafka中间件进行初始化,将数据库变更消费任务的初始scn与kafka中间件中的数据的scn进行比对,找到kafka中间件中数据的scn值大于或等于数据库变更消费任务的初始scn的位置开始消费。
6.在所有初始化完成后,任务开始正式运行,Logminer抽取任务从初始化后确认的scn对应的数据开始抽取,数据库变更消费任务从初始化后确认的scn对应的数据开始消费。
上述示例是以源数据库对应的同步任务不存在的情况进行说明。以下以源数据库对应的同步任务已经存在的情况进行说明。
1’.与上述示例的第1步骤相同,在此不再赘述。
2’.根据A-Bn(n为1-10)的关系判断源数据库对应的同步任务是否存在,当源数据库对应的同步任务已存在时,需要先将新的同步关系添加然后在进行进一步操作;已有同步关系可能是该表对应的同步,也有可能是源库对应的其它表对应的同步,由于同一个源数据库公用一个Logminer抽取线程,此时都是需要先停止已有的同步任务。
3’.初始化10个新的数据库变更消费任务,初始的过程可参见上述示例的第3步所描述的内容;同时,会在已有的同步任务对应的Logminer抽取任务中,添加新的数据,例如,在抽取任务中增加表名到表集合中,将10个数据库变更消费任务到消费集合中。
4’.所有新添加的数据库变更消费任务会先将源数据库表的原始数据初始化导入到目的数据表,并记录对应的初始scn值,此处对应scn1-scn10共10个初始化值;
然后,Logminer抽取任务先获取已存在的表对应的kafka中间件中最新的数据对应的scn值(定义为scnnewest)和事务id信息(idnewst),这两个值是用来确定CDCproducer停止前已经抽取到的CDC数据位置;将scnnewest和scn1-scn10共11个值取scn最小值和最大值(一般情况下,scn最小值是scnnewest,因为这个是添加新的同步关系前,停止抽取时已抽取到的scn点,停止后,才进行的数据库变更消费任务的初始化,即scn1-scn10均在scnnewest之后);Logminer抽取任务从确定的scn最小值开始抽取数据,直到抽取到scn最大值对应的数据后,抽取初始化结束。
具体地,数据库变更抽取任务抽取数据的SQL语句为--SELECT scn,xidusn,xidslt,xidsqn,operation,seg_owner,table_name,row_id,sql_redo,sql_u ndo,username FROM v$logmnr_contents WHERE(table_name='table'and seg_owner='schema')or(operation IN('START','COMMIT','ROLLBACK'),通过where条件table_name和seg_owner指定需要抽取的某个表(多个表通过or关键字组装where条件),抽取出来的数据判断其SCN是否在kafka中间件的scn最大值和CDC consumer的SCN最大值之间,如果满足则保存该数据到对应的事务对象中(事务id由xidusn,xidslt,xidsqn唯一确定),等该事务'COMMIT'命令被抽取到时则提交该事务对象中的数据到对应的kafka中间件中(提交时需要判断最后一条事务的scn是否小于当前的事务scn,小于则提交,否则丢弃该数据)。
通过这个过程,能够保证上次抽取到的位置连贯,同时,新增的同步关系抽取的数据连贯且不重复)。
5’.然后,进行kafka中间件的初始化操作,该操作过程与上述示例的第5步相同,在此不再赘述。
6’.在所有初始化完成后,任务开始正式运行,Logminer抽取任务从初始化后确认的scn对应的数据开始抽取,数据库变更消费任务从初始化后确认的scn对应的数据开始消费。而已有的同步任务对应的数据库变更消费任务不作任何初始操作,在任务启动后,继续从原来的kafka中间件记录的scn对应的数据开始消费数据即可。
通过上述示例也可看出,本发明实施例的数据同步方法,主要具有以下几点优势:
1、能够实现web页面实时进行同步关系配置,操作更简单,查看更方便;
2、使用前无需太多复杂操作,只需在Oracle服务器进行Logminer组件的安装以及相关的数据库配置即可,对使用者来讲更加方便快捷;
3、能够实现Oracle到其它类型RDBMS的数据同步,不需要特殊操作和配置;
4、对于一个源数据库表的多个同步关系,抽取的CDC数据只在kafka中保留一份,不会有数据冗余;同时,同步任务可以暂停,且在重启后能够从停止点继续进行同步,避免造成数据的重复。
可选地,在本发明的一些实施例中,基于该本发明实施例的数据同步方法,能够构建一套完整的数据库实时同步***架构,包括用户进行同步关系配置和任务资源统计展示的web页面,以及实现页面配置的同步关系的后台服务。如图8所示,该数据库实时同步***架构主要包括:
web层,用以通过web页面等接收用户输入的数据同步请求及数据同步相关的信息;
Service层,用以实现数据同步的具体详细逻辑,即,用以实现上述任意方法实施例上述的数据同步方法;
Dao层,用以执行数据持久层的工作,封装负责与数据库进行联络的一些任务,从而保证任务信息持久化;
kafka存储中间件,用以存储数据库数据同步过程中的数据、***变化标识序列号等;
Mybatis,作为持久层框架,能够支持定制化SQL、存储过程以及高级映射等。
本发明实施例还提供一种数据同步装置,如图9所示,该数据同步装置包括:
同步关系获取模块1,用于获取同步关系,同步关系包括数据源信息及对应的数据目的信息,数据源信息包括源数据库信息及源数据库中的源数据表信息;数据目的信息包括目的数据库信息及目的数据库中的目的数据表信息;详细内容可参见上述方法实施例的步骤S1的相关描述。
变化数据获取模块2,用于基于同步关系,通过数据库变更抽取任务抽取源数据库表的变化数据;数据库变更抽取任务使用数据库变更捕获工具来获取源数据库表中的变化数据;详细内容可参见上述方法实施例的步骤S2的相关描述。
数据同步模块3,用于基于同步关系,通过数据库变更消费任务将获取的变化数据同步到目的数据表中;详细内容可参见上述方法实施例的步骤S3的相关描述。
本发明实施例的数据同步装置,通过获取同步关系,使用该同步关系的抽取任务及消费任务,实现源数据库到目的数据库的数据同步,处理过程简单,无需依赖于传统的OGG、DataX等技术,以实现异构数据库实时数据同步,满足数据库备份数据的高实时性要求。
可选地,本发明实施例还提供一种数据同步装置,如图10所示,该装置包括:
同步关系获取模块101,用于获取同步关系,详细内容可参见上述方法实施例的步骤S31的相关描述。
变化数据抽取模块102,用于基于同步关系,通过数据库变更抽取任务抽取源数据库表的变化数据,详细内容可参见上述方法实施例的步骤S32的相关描述。
变化数据存储模块103,用于将抽取的变化数据存储至存储中间件中,详细内容可参见上述方法实施例的步骤S33的相关描述。
数据同步模块104,用于基于该同步关系,通过数据库变更消费任务从该存储中间件中获取变化数据,并将该变化数据同步到目的数据表中,详细内容可参见上述方法实施例的步骤S34的相关描述。
可选地,本发明实施例还提供一种数据同步装置,如图11所示,该装置包括:
同步关系获取模块111,用于获取同步关系,详细内容可参见上述方法实施例的步骤S41的相关描述。
初始化模块112,用于对各个数据库变更消费任务进行初始化,以将源数据库表中变化数据之前的原始数据同步至各个目的数据表中,并分别确定执行最后一条原始数据同步操作后,各个数据库变更消费任务分别对应的初始***变化标识序列号。详细内容可参见上述方法实施例的步骤S42的相关描述。
变化数据抽取模块113,用于基于同步关系,通过数据库变更抽取任务抽取源数据库表的变化数据,详细内容可参见上述方法实施例的步骤S43的相关描述。
变化数据存储模块114,用于将抽取的变化数据存储至存储中间件中,详细内容可参见上述方法实施例的步骤S44的相关描述。
数据同步模块115,用于基于该同步关系,通过数据库变更消费任务从该存储中间件中获取变化数据,并将该变化数据同步到目的数据表中,详细内容可参见上述方法实施例的步骤S45的相关描述。
可选地,本发明实施例还提供一种数据同步装置,如图12所示,该装置包括:
同步关系获取模块121用于获取同步关系。详细内容可参见上述方法实施例的步骤S51的相关描述。
第一初始化模块122,用于对各个数据库变更消费任务进行初始化,以将源数据库表中变化数据之前的原始数据同步至各个目的数据表中,并分别确定执行最后一条原始数据同步操作后,各个数据库变更消费任务分别对应的初始***变化标识序列号。详细内容可参见上述方法实施例的步骤S52的相关描述。
变化数据抽取模块123,用于基于同步关系,通过数据库变更抽取任务抽取源数据库表的变化数据;详细内容可参见上述方法实施例的步骤S53的相关描述。
数据存储模块124:将抽取的变化数据及该变化数据的第一***变化标识序列号存储至存储中间件中。详细内容可参见上述方法实施例的步骤S54的相关描述。
第二初始化模块125,用于对存储中间件进行初始化,通过将变化数据的第一***变化标识序列号分别与每个数据库变更消费任务对应的初始***变化标识序列号进行比较,以分别确定出不低于每个数据库变更消费任务对应的初始***变化标识序列号的第一***变化标识序列号。详细内容可参见上述方法实施例的步骤S55的相关描述。
数据同步模块126,用于基于该同步关系,通过数据库变更消费任务,从大于或等于每个数据库变更消费任务的初始***变化标识序列号的第一***变化标识序列号对应的数据开始,从存储中间件中获取变化数据并同步到该数据库变更消费任务对应的目的数据表中。详细内容可参见上述方法实施例的步骤S56的相关描述。
可选地,本发明实施例还提供一种数据同步装置,如图13所示,该装置包括:
同步关系获取模块131用于获取同步关系,详细内容可参见上述方法实施例的步骤S61的相关描述。
同步任务确认模块132,用于确定该源数据库是否已建立有同步任务,详细内容可参见上述方法实施例的步骤S62的相关描述。
任务建立模块133,用于在确定未为源数据库建立同步任务时,为源数据库建立同步任务并根据同步关系建立数据库变更抽取任务和数据库变更消费任务,详细内容可参见上述方法实施例的步骤S63的相关描述。
数据抽取模块137,用于基于同步关系,通过数据库变更抽取任务抽取源数据库表的变化数据,详细内容可参见上述方法实施例的步骤S67的相关描述。
数据存储模块138,用于将抽取的变化数据存储至存储中间件中,详细内容可参见上述方法实施例的步骤S68的相关描述。
数据同步模块139,用于基于该同步关系,通过数据库变更消费任务从该存储中间件中获取变化数据,并将该变化数据同步到目的数据表中,详细内容可参见上述方法实施例的步骤S69的相关描述。
同步关系判断模块134,用于在判断已存在同步任务时,进一步判断该同步关系是否已经存在,详细内容可参见上述方法实施例的步骤S64的相关描述。
提示信息发送模块135,用于在判断同步关系已存在时,返回提示错误信息,详细内容可参见上述方法实施例的步骤S65的相关描述。
任务停止重启模块136,用于在判断同步关系不存在时,先停止已存在的同步任务并基于同步关系建立数据库变更消费任务,并重启同步任务,以触发对数据库变更消费任务、源数据库的数据库变更抽取任务和存储中间件分别进行初始化的操作,详细内容可参见上述方法实施例的步骤S66的相关描述。然后,触发上述的数据抽取模块137,执行相应的过程。
本发明实施例还提供一种服务器,如图14所示,该车辆终端可以包括处理器141和存储器142,其中处理器141和存储器142可以通过总线或者其他方式连接,图14中以通过总线连接为例。
处理器141可以为中央处理器(Central Processing Unit,CPU)。处理器141还可以为其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
存储器142作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中的数据同步方法对应的程序指令/模块(例如,图9所示的同步关系获取模块1、变化数据获取模块2及数据同步模块3)。处理器141通过运行存储在存储器142中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例中的数据同步方法。
存储器142可以包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需要的应用程序;存储数据区可存储处理器141所创建的数据等。此外,存储器142可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器142可选包括相对于处理器141远程设置的存储器,这些远程存储器可以通过网络连接至处理器141。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述一个或者多个模块存储在所述存储器142中,当被所述处理器141执行时,执行如图2-图8所示实施例中的数据同步方法。
上述服务器具体细节可以对应参阅图1A、图1B至图8所示的实施例中对应的相关描述和效果进行理解,此处不再赘述。
本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)、随机存储记忆体(Random AccessMemory,RAM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,缩写:HDD)或固态硬盘(Solid-State Drive,SSD)等;所述存储介质还可以包括上述种类的存储器的组合。
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下作出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
Claims (10)
1.一种数据同步方法,其特征在于,包括:
获取同步关系,所述同步关系包括数据源信息及对应的数据目的信息,数据源信息包括源数据库信息及源数据库中的源数据表信息;数据目的信息包括目的数据库信息及目的数据库中的目的数据表信息;
基于所述同步关系,通过数据库变更抽取任务抽取所述源数据库表的变化数据;所述数据库变更抽取任务使用数据库变更捕获工具来获取源数据库表中的变化数据;
基于所述同步关系,通过数据库变更消费任务将获取的变化数据同步到目的数据表中;
其中,所述目的数据表具有多个,且数据库变更消费任务的数量与目的数据表的数量相匹配;则在所述基于所述同步关系,通过数据库变更抽取任务抽取所述源数据库表的变化数据之前,所述方法还包括:
对各个数据库变更消费任务进行初始化,以将所述源数据库表中变化数据之前的原始数据同步至各个目的数据表中,并分别确定执行最后一条原始数据同步操作后,各个数据库变更消费任务分别对应的初始***变化标识序列号;以及
所述基于所述同步关系,通过数据库变更抽取任务抽取所述源数据库表的变化数据,包括:
利用所述数据库变更抽取任务,比较各个数据库变更消费任务分别对应的初始***变化标识序列号,以确定最小的初始***变化标识序列号;并从最小的初始***变化标识序列号对应的数据开始,从所述源数据表中抽取变化数据。
2.根据权利要求1所述的数据同步方法,其特征在于,在基于所述同步关系,通过数据库变更抽取任务抽取所述源数据库表的变化数据之后,还包括:
将抽取的变化数据存储至存储中间件中;
基于所述同步关系,通过数据库变更消费任务将获取的变化数据同步到目的数据表中,具体包括:
基于所述同步关系,通过数据库变更消费任务将从所述存储中间件获取的变化数据同步至目的数据表中。
3.如权利要求1所述的数据同步方法,其特征在于,将抽取的变化数据存储至存储中间件中,包括:
将抽取的变化数据和变化数据的第一***变化标识序列号存储至所述存储中间件中;
在基于所述同步关系,通过数据库变更消费任务将从所述存储中间件获取的变化数据同步至目的数据表中之前,还包括:
对所述存储中间件进行初始化,通过将变化数据的第一***变化标识序列号分别与每个数据库变更消费任务对应的初始***变化标识序列号进行比较,以分别确定出不低于每个数据库变更消费任务对应的初始***变化标识序列号的第一***变化标识序列号;
基于所述同步关系,通过数据库变更消费任务将从所述存储中间件获取的变化数据同步至目的数据表中,包括:
针对每个数据库变更消费任务,利用该数据库变更消费任务,从不低于该数据库变更消费任务对应的初始***变化标识序列号的第一***变化标识序列号对应的数据开始,从所述存储中间件中获取变化数据并同步至该数据库变更消费任务对应的目的数据表中。
4.如权利要求2或3所述的数据同步方法,其特征在于,在所述基于所述同步关系,通过数据库变更抽取任务抽取所述源数据库表的变化数据之前,所述方法还包括:
若确定未为所述源数据库建立同步任务,则为所述源数据库建立同步任务并根据所述同步关系建立数据库变更抽取任务和数据库变更消费任务;
若所述同步任务已存在且所述同步关系不存在时,则停止所述同步任务并基于所述同步关系建立数据库变更消费任务,并重启所述同步任务,以触发对所述数据库变更消费任务、所述源数据库的数据库变更抽取任务和存储中间件分别进行初始化的操作。
5.如权利要求4所述的数据同步方法,其特征在于,所述存储中间件中存储有抽取的每一条变化数据及该条变化数据的第一***变化标识序列号;则对所述数据库变更抽取任务进行初始化,包括:
利用所述数据库变更抽取任务,从所述存储中间件中获取所述同步任务停止时、最新一条数据的第一***变化标识序列号;
确定所述最新一条数据的第一***变化标识序列号与初始化后的数据库变更消费任务对应的初始***变化标识序列号中的最小值和最大值;
从所述源数据库表中所述最小值对应的数据开始抽取变化数据,直至抽取到所述最大值对应的数据为止,并将抽取的变化数据和变化数据的第一***变化标识序列号存储至所述存储中间件中。
6.根据权利要求3或5所述的数据同步方法,其特征在于,将抽取的变化数据和变化数据的第一***变化标识序列号存储至所述存储中间件中,包括:
将所述变化数据和变化数据的第一***变化标识序列号暂存至所属事务对应的数据地图集合中;
若所述第一***变化标识序列号大于所述存储中间件中最新一条数据的第一***变化标识序列号,则当所属事务执行完成后将暂存在所属事务对应的数据地图集合中的变化数据和变化数据的第一***变化标识序列号存储至所述存储中间件中。
7.如权利要求1所述的数据同步方法,其特征在于,所述目的数据库信息包括目的数据库类型,则基于所述同步关系,通过数据库变更抽取任务抽取所述源数据库表的变化数据,包括:
通过与所述目的数据库类型相适应的数据库变更抽取任务抽取所述源数据库表的变化数据;
基于所述同步关系,通过数据库变更消费任务将获取的变化数据同步到目的数据表中,包括:
通过与所述目的数据库类型相适应的数据库变更消费任务将获取的变化数据同步到目的数据表中。
8.一种数据同步装置,其特征在于,包括:
同步关系获取模块,用于获取同步关系,所述同步关系包括数据源信息及对应的数据目的信息,数据源信息包括源数据库信息及源数据库中的源数据表信息;数据目的信息包括目的数据库信息及目的数据库中的目的数据表信息;
变化数据获取模块,用于基于所述同步关系,通过数据库变更抽取任务抽取所述源数据库表的变化数据;所述数据库变更抽取任务使用数据库变更捕获工具来获取源数据库表中的变化数据;
数据同步模块,用于基于所述同步关系,通过数据库变更消费任务将获取的变化数据同步到目的数据表中;
其中,所述目的数据表具有多个,且数据库变更消费任务的数量与目的数据表的数量相匹配;则所述装置还包括:
初始化模块,用于对各个数据库变更消费任务进行初始化,以将所述源数据库表中变化数据之前的原始数据同步至各个目的数据表中,并分别确定执行最后一条原始数据同步操作后,各个数据库变更消费任务分别对应的初始***变化标识序列号;以及
所述变化数据抽取模块具体用于:
利用所述数据库变更抽取任务,比较各个数据库变更消费任务分别对应的初始***变化标识序列号,以确定最小的初始***变化标识序列号;并从最小的初始***变化标识序列号对应的数据开始,从所述源数据表中抽取变化数据。
9.一种服务器,其特征在于,包括:
存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行如权利要求1-7中任一项所述的数据同步方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行如权利要求1-7中任一项所述的数据同步方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910492559.3A CN110309161B (zh) | 2019-06-06 | 2019-06-06 | 一种数据同步方法、装置及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910492559.3A CN110309161B (zh) | 2019-06-06 | 2019-06-06 | 一种数据同步方法、装置及服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110309161A CN110309161A (zh) | 2019-10-08 |
CN110309161B true CN110309161B (zh) | 2021-10-29 |
Family
ID=68075208
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910492559.3A Active CN110309161B (zh) | 2019-06-06 | 2019-06-06 | 一种数据同步方法、装置及服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110309161B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111061740B (zh) * | 2019-12-17 | 2023-08-04 | 北京软通智慧科技有限公司 | 一种数据同步方法、设备和存储介质 |
CN111125065B (zh) * | 2019-12-24 | 2023-09-12 | 阳光人寿保险股份有限公司 | 可视化数据同步方法、***、终端和计算机可读存储介质 |
US20220083510A1 (en) * | 2020-09-15 | 2022-03-17 | Open Text Holdings, Inc. | Connector for content repositories |
CN112434043B (zh) * | 2020-12-02 | 2022-12-20 | 新华三大数据技术有限公司 | 一种数据同步方法、装置、电子设备及介质 |
CN112559548B (zh) * | 2020-12-27 | 2023-06-16 | 浙江融象数科控股有限公司 | 消息中间件的数据同步***及方法 |
CN112965949B (zh) * | 2021-03-03 | 2022-11-22 | 上海英方软件股份有限公司 | 一种远程读取oracle日志文件的方法 |
CN112988817B (zh) * | 2021-04-12 | 2024-03-12 | 携程旅游网络技术(上海)有限公司 | 数据比对方法、***、电子设备和存储介质 |
CN113568343B (zh) * | 2021-07-20 | 2023-04-07 | 苏州伟创电气科技股份有限公司 | 捕捉任意数据的方法、装置、设备及存储介质 |
CN114500315A (zh) * | 2021-12-31 | 2022-05-13 | 深圳云天励飞技术股份有限公司 | 设备状态监控方法、装置、计算机设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105095364A (zh) * | 2015-06-26 | 2015-11-25 | 车智互联(北京)科技有限公司 | 一种数据同步***和方法 |
CN107346314A (zh) * | 2016-05-06 | 2017-11-14 | 银联国际有限公司 | 一种数据库单向同步方法 |
CN107391635A (zh) * | 2017-06-30 | 2017-11-24 | 北京奇虎科技有限公司 | 数据同步***及方法 |
-
2019
- 2019-06-06 CN CN201910492559.3A patent/CN110309161B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105095364A (zh) * | 2015-06-26 | 2015-11-25 | 车智互联(北京)科技有限公司 | 一种数据同步***和方法 |
CN107346314A (zh) * | 2016-05-06 | 2017-11-14 | 银联国际有限公司 | 一种数据库单向同步方法 |
CN107391635A (zh) * | 2017-06-30 | 2017-11-24 | 北京奇虎科技有限公司 | 数据同步***及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110309161A (zh) | 2019-10-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110309161B (zh) | 一种数据同步方法、装置及服务器 | |
US11442823B2 (en) | Transaction consistency query support for replicated data from recovery log to external data stores | |
US10133596B2 (en) | System and method for supporting application interoperation in a transactional middleware environment | |
US8996465B2 (en) | Replicating data to a database | |
EP4072097A1 (en) | Method and device for dynamically adding consensus node in blockchain | |
CN107656705B (zh) | 一种计算机存储介质和一种数据迁移方法、装置及*** | |
CN107391634B (zh) | 数据迁移方法及装置 | |
JP7389793B2 (ja) | 分散型異種ストレージシステムにおけるデータ一貫性のリアルタイムチェックのための方法、デバイス、およびシステム | |
CN112434043B (zh) | 一种数据同步方法、装置、电子设备及介质 | |
WO2019057193A1 (zh) | 数据删除方法及分布式存储*** | |
CN107040576A (zh) | 信息推送方法及装置、通讯*** | |
CN105610917B (zh) | 实现***中同步数据修复的方法及*** | |
WO2022242372A1 (zh) | 对象处理方法、装置、计算机设备和存储介质 | |
CN106874343B (zh) | 一种时序数据库的数据删除方法及*** | |
CN109299116B (zh) | 一种数据同步方法、装置、设备及可读存储介质 | |
CN107025257A (zh) | 一种事务处理方法及装置 | |
US20190163776A1 (en) | Ensuring consistent replication of updates in databases | |
US8230444B2 (en) | Global attribute uniqueness (GAU) using an ordered message service (OMS) | |
US20200167179A1 (en) | Cloud platform integration load balancer | |
CN110990360A (zh) | 基于网络存储设备的文件同步方法及相关组件 | |
CN109389271B (zh) | 应用性能管理方法及*** | |
CN116186082A (zh) | 基于分布式的数据汇总方法、第一服务器和电子设备 | |
CN113407629A (zh) | 数据同步的方法、装置、电子设备及存储介质 | |
CN107608662B (zh) | 基于MongoDB的分布式计时*** | |
CN107332679B (zh) | 一种无中心信息同步方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |