数据同步系统、方法及相应计算机设备和存储介质与流程

文档序号:32060333发布日期:2022-11-04 22:56阅读:60来源:国知局
数据同步系统、方法及相应计算机设备和存储介质与流程

1.本技术涉及电数字数据处理领域,尤其涉及数据同步系统。本技术还涉及数据同步方法及相应的计算机设备和计算机可读存储介质。


背景技术:

2.为了满足大系统的部署和资源问题,需要对系统进行功能切分、微服务化。微服务化就需要对多系统的数据进行同步。
3.debezium是一个开源的项目,为捕获数据更改(change data capture,cdc)提供了一个低延迟的流式处理平台。但debezium项目只提供了对单数据源监控的模型。
4.传统的数据同步系统是采用定时采集、定时写入的方式。存在一定的延迟性,这种延迟性使得数据的展示和计算存在一定误差。并且,随着数据量的增多,定时采集和写入给数据库带来的瞬时压力也在日渐增多。
5.目前可用的数据库实时同步方法,均有一定的局限性,即只对单数据库捕获、对单数据库写入并且不能监控表结构的变化。单对单的同步形式,存在不灵活、不能满足大多数的业务需要等一系列的缺陷。
6.因此,需要对debezium进行改造,使其能够监听多个源数据源,并且可以对多个目标数据源进行数据写入。还需要能够监控源数据源的表结构变化并自动更新目标数据源的相应表结构。


技术实现要素:

7.本发明至少提供一种数据同步系统,其能够实现目标数据源的自动建表并实现源数据源与目标数据源之间的灵活同步。
8.在本发明的第一方面,提供一种数据同步系统,所述系统包括:
9.源数据源配置模块,用于配置至少一拟同步的源数据源;
10.目标数据源配置模块,用于配置至少一拟接收同步数据的目标数据源;
11.源表选择模块,用于选择所述源数据源的要监控同步的源表;
12.目标表确定模块,用于响应于监控的源表发生数据变化,确定所述目标数据源中启用的至少一目标数据源是否存在对应的目标表;
13.目标表新建模块,用于响应于所述目标数据源中启用的至少一目标数据源不存在对应的目标表,基于相应源数据源在启用的至少一目标数据源自动新建对应的目标表;
14.同步模块,用于将监控的源表的数据同步到启用的至少一目标数据源的对应的目标表。
15.在本发明的第二方面,提供一种数据同步方法,所述方法包括:
16.配置至少一拟同步的源数据源;
17.配置至少一拟接收同步数据的目标数据源;
18.选择所述源数据源的要监控同步的源表;
19.响应于监控的源表发生数据变化,确定所述目标数据源中启用的至少一目标数据源是否存在对应的目标表;
20.响应于所述目标数据源中启用的至少一目标数据源不存在对应的目标表,基于相应源数据源在启用的至少一目标数据源自动新建对应的目标表;
21.将监控的源表的数据同步到启用的至少一目标数据源的对应的目标表。
22.在本发明的第三方面,提供一种计算机设备,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中所述处理器执行所述计算机程序时实现根据本发明的第一方面的系统的功能或者实现根据本发明的第二方面的方法的步骤。
23.根据本发明的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据本发明的第一方面的系统的功能或者实现根据本发明的第二方面的方法的步骤。
24.按照本发明,通过配置至少一拟同步的源数据源,配置至少一拟接收同步数据的目标数据源,选择源数据源的要监控同步的源表,在监控的源表发生数据变化时,确定目标数据源中启用的至少一目标数据源是否存在对应的目标表,在不存在对应的目标表时,基于相应源数据源在启用的至少一目标数据源自动新建对应的目标表,及将监控的源表的数据同步到启用的至少一目标数据源的对应的目标表,能够实现目标数据源的自动建表,能够灵活、方便地实现单一源数据源到单一目标数据源、单一源数据源到多个目标数据源、多个源数据源到多个目标数据源的同时同步。本发明只需要简单的配置,即可对多个不同类型数据库进行监控,同时实时写入到多个不同类型的数据库,操作简单,时效性高,同时自动化程度高。
25.结合附图阅读本发明实施方式的详细描述后,本发明的其它特点和优点将变得更加清楚。
附图说明
26.图1为根据本发明系统的一实施例的框图;
27.图2为根据本发明方法的一实施例的流程图。
28.为清晰起见,这些附图均为示意性及简化的图,它们只给出了对于理解本发明所必要的细节,而省略其他细节。
具体实施方式
29.下面参照附图对本发明的实施方式和实施例进行详细说明。
30.通过下面给出的详细描述,本发明的适用范围将显而易见。然而,应当理解,在详细描述和具体例子表明本发明优选实施例的同时,它们仅为说明目的给出。
31.图1示出了根据本发明的数据同步系统的一优选实施例的框图,其中:
32.源数据源配置模块102用于配置至少一拟同步的源数据源。对于每一源数据源,可配置并保存源数据源名称、用户名、密码、数据库类型、数据库驱动、数据库连接等,并且可以测试配置的源数据源是否可以连通,以确保配置的正确性。可配置一个源数据源进行监控,也可以配置多个源数据源进行监控。
33.目标数据源配置模块104用于配置至少一拟接收同步数据的目标数据源。对于每
一目标数据源,可配置并保存目标数据源名称、用户名、密码、数据库类型、数据库驱动、数据库连接、是否启用等,并且可以测试配置的目标数据源是否可以连通,以确保配置的正确性。可配置一个目标数据源,也可以配置多个目标数据源。可根据需要修改一个或多个配置的目标数据源的启用状态,也可编辑或删除一个或多个目标数据源的配置。
34.源表选择模块106用于选择源数据源的要监控同步的源表并进行监控。在debezium中,可通过开启cdc进行监控。可列出配置的所有源数据源的所有数据表(也称为源表),可配置每一数据表的cdc开启或关闭状态。在数据表的cdc处于开启状态时,该数据表即为要监控同步的源表。debezium部署简单,通过内嵌的java程序就可实现而且更改配置可视化、自动化。在其它实施例中,也可以通过flink cdc实现监控,flink cdc部署相对复杂一些,需要部署原有的flink依赖而且每次更改配置需要重新部署。
35.目标表确定模块108用于在监控的源表发生数据变化时,确定配置的目标数据源中启用的目标数据源是否存在对应的目标表。例如,可通过监控数据库日志的变化,判断出哪个表的数据发生了改变,然后通过sql查询的方式判断目标表是否存在。数据的每次变更都会有对应的记录,方便查询数据的变化和系统的操作。
36.目标表新建模块110用于在目标数据源中启用的一个或多个目标数据源不存在对应的目标表时,基于相应源数据源在一个或多个目标数据源自动新建对应的目标表。
37.在实施例中,在启用的一个或多个目标数据源不存在对应的目标表时,获取源数据源的相应源表的建表语句,根据启用的一个或多个目标数据源的数据库类型将相应源表的建表语句转换为适合相应数据库类型的建表语句,然后在相应目标数据源执行相应转换后的建表语句从而在相应目标数据源新建对应的目标表,实现目标数据源的自动建表。例如,源数据源的数据库为sql server数据库,而目标数据源为mysql数据库,sql server数据库的自动递增列为identity关键字,而mysql数据库为auto_increment,此时需要将源表的建表语句的关键字进行替换处理。
38.同步模块112用于将监控的源表的数据同步到启用的至少一目标数据源的对应的目标表。根据配置的源数据源数量、配置并启用的目标数据源数量,在监控到源数据源的数据变化时,能够同时将数据更新到一个或多个目标数据源,灵活、方便地实现单一源数据源到单一目标数据源、单一源数据源到多个目标数据源、多个源数据源到多个目标数据源的同时同步。
39.在实施例中,同步模块112包括实时同步子模块、全量同步子模块、增量同步子模块和/或补偿同步子模块。
40.实时同步子模块用于在完成首次如全量同步后在源表数据发生变化时将数据变化实时同步到启用的目标数据源的相应目标数据表(也称为目标表)。
41.在一实施例中,通过debezium监控到数据库的数据变化的dml语句,在获得这些语句后,通过解析、判断、转换等操作,将语句拆分成适用的java程序对象,再通过对java程序对象的属性进行关键字判断,判断出该条语句的操作类型包括增加、删除、修改,获取配置的全部目标数据源,根据数据库类型的不同,转换成符合相应数据库类型的语句,更新到对应的目标数据源。数据发生变化时,会监控到一个新的java程序对象,这时将该对象进行程序上的转换,从而得到我们需要的java程序对象,通过判断java程序对象的属性字段,得到该数据是发生了新增、修改还是删除,从而拼接对应的sql语句,在目标数据库中执行。例
如,一个数据新增操作,会将该操作的操作符记录、新增数据字段记录、表名和主键名都转换成java对象,从而在后面的程序中判断操作符字段为新增insert操作,再将数据字段进行拼接insert语句,在目标数据库执行该insert语句,实现相应目标数据源的更新(同步)。
42.全量同步子模块用于:在例如通过按压全量同步按钮而确定进行全量同步时,将cdc状态修改为全量同步中,创建拟同步的源数据源在确定全量同步时的数据库快照,同时监控拟同步的源数据源自确定全量同步开始的数据更新变化并且写入到中间数据记录中,该数据更新变化暂时不会写入到目标数据源对应目标表中,然后确定启用的目标数据源的相应目标表是否存在数据库快照中的数据,在存在时基于数据库快照进行更新操作,在不存在时基于数据库快照进行直接插入操作,然后写入更新日志,检查数据一致性。
43.增量同步子模块用于:在全量同步完成并确定增量同步时,将cdc状态修改为增量同步中,读取前述中间数据记录中的数据并更新到相应的目标表,对比源表和目标表的lsn码和序列号,在源表和目标表的lsn码和序列号不一致时,再次读取中间数据记录中的数据并更新到相应的目标表,直到源表和目标表的lsn码和序列号一致为止,将cdc状态修改为监控中。
44.数据库快照是静态的,可保证数据库在同步时不会发生变化。同时监控正常的数据更新变化,并且写入到中间数据记录中,但不会写入到目标数据源对应目标表中,从而保证数据的更新的顺序性。在全量同步完成后,进行增量同步操作,读取中间数据记录中的数据,将目标数据源的数据和源数据源拉平。
45.补偿同步子模块用于:在运行时发生异常时,将数据库更新状态改为异常但继续监控拟同步的源数据源的数据更新变化并且写入到异常数据记录中,但不向目标数据源对应的目标表写入。在将异常处理完成后,将异常数据记录中的数据更新到相应的目标表,对比源表和目标表的lsn码和序列号,在源表和目标表的lsn码和序列号不一致时,再次读取异常数据记录中的数据并更新到相应的目标表,直到源表和目标表的lsn码和序列号一致为止,将数据库更新状态改为正常,从而实现数据的自动补偿同步。
46.在实施例中,本发明的数据同步系统还包括:源表结构变化确定模块,用于确定监控的源表的表结构是否发生变化;目标表结构更新模块,用于在确定监控的源表的表结构发生变化且所述目标数据源中启用的至少一目标数据源存在对应的目标表时,基于发生变化的源表自动更新相应的目标表的表结构。可通过debezium监控到源数据源的表结构变化的ddl语句,在获得这些ddl语句后,通过解析、判断、转换等操作,将语句拆分成适用的java程序对象,获取配置的全部目标数据源,根据目标数据源的数据库类型的不同,将源数据源的ddl语句转换成符合相应数据库类型的ddl语句,将转换后的ddl语句更新到对应的目标数据源。与dml语句类似,监测到ddl语句时,会监控到一个新的java程序对象,这时将该对象进行程序上的转换,从而得到我们需要的java程序对象,通过判断java程序对象的属性字段判断,得到该语句执行的是何种操作,例如新增字段、删除字段、修改字段、或新增表等数据库的表结构变化,从而拼接对应的sql语句,在目标数据库中执行。例如,源数据源的数据库为sql server数据库,而目标数据源为mysql数据库,操作为新增表。sql server数据库的数据类型为nchar、nvarchar、ntext类型,而mysql是不支持这种类型的,此时需要将对应ddl语句替换数据类型为char、varchar、text,形成适合mysql的ddl语句在目标数据库中执行,从而自动更新目标表的表结构。
47.将debezium引擎引入到java web程序中,原debezium引擎需要的配置需要在配置中写死,这样的设计并不符合程序设计的初衷。本发明主要是基于debezium项目进行的整改,可配置多个源数据源、多个目标数据源、多类型数据库,方便操作人员进行修改并且可以自动将修改的配置及时应用到程序中,同时优化同步方式,支持全量数据初始化同步、增量数据同步、实时同步等多种同步方式,同时支持目标数据源的自动建表、自动更改表结构。
48.图2示出了根据本发明的数据同步方法的一优选实施例的流程图。
49.在步骤s202,配置至少一拟同步的源数据源;
50.在步骤s204,配置至少一拟接收同步数据的目标数据源;
51.在步骤s206,选择所述源数据源的要监控同步的源表;
52.在步骤s208,响应于监控的源表发生数据变化,确定所述目标数据源中启用的至少一目标数据源是否存在对应的目标表;
53.在步骤s210,响应于所述目标数据源中启用的至少一目标数据源不存在对应的目标表,基于相应源数据源在启用的至少一目标数据源自动新建对应的目标表;
54.在步骤s212,将监控的源表的数据同步到启用的至少一目标数据源的对应的目标表。
55.在另一实施例中,本发明提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现结合图1所示所述的系统实施例或其它相应系统实施例的功能或者实现结合图2所示所述的方法实施例或其它相应方法实施例的步骤,在此不再赘述。
56.在另一实施例中,本发明提供一种计算机设备,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中所述处理器执行所述计算机程序时实现结合图1所示所述的系统实施例或其它相应系统实施例的功能或者实现结合图2所示所述的方法实施例或其它相应方法实施例的步骤,在此不再赘述。
57.在此所述的多个不同实施方式或者其特定特征、结构或特性可在本发明的一个或多个实施方式中适当组合。另外,在某些情形下,只要适当,流程图中和/或流水处理描述的步骤顺序可修改,并不必须精确按照所描述的顺序执行。另外,本发明的多个不同方面可使用软件、硬件、固件或者其组合和/或执行所述功能的其它计算机实施的模块或装置进行实施。本发明的软件实施可包括保存在计算机可读介质中并由一个或多个处理器执行的可执行代码。计算机可读介质可包括计算机硬盘驱动器、rom、ram、闪存、便携计算机存储介质如cd-rom、dvd-rom、闪盘驱动器和/或具有通用串行总线(usb)接口的其它装置,和/或任何其它适当的有形或非短暂计算机可读介质或可执行代码可保存于其上并由处理器执行的计算机存储器。本发明可结合任何适当的操作系统使用。
58.除非明确指出,在此所用的单数形式“一”、“该”均包括复数含义(即具有“至少一”的意思)。应当进一步理解,说明书中使用的术语“具有”、“包括”和/或“包含”表明存在所述的特征、步骤、操作、元件和/或部件,但不排除存在或增加一个或多个其他特征、步骤、操作、元件、部件和/或其组合。如在此所用的术语“和/或”包括一个或多个列举的相关项目的任何及所有组合。
59.前面说明了本发明的一些优选实施例,但是应当强调的是,本发明不局限于这些
实施例,而是可以本发明主题范围内的其它方式实现。本领域技术人员可以在本发明技术构思的启发和不脱离本发明内容的基础上对本发明做出各种变型和修改,这些变型或修改仍落入本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1