CN117290442A - 数据库间的数据同步方法、系统、电子设备及存储介质 - Google Patents
数据库间的数据同步方法、系统、电子设备及存储介质 Download PDFInfo
- Publication number
- CN117290442A CN117290442A CN202311252057.6A CN202311252057A CN117290442A CN 117290442 A CN117290442 A CN 117290442A CN 202311252057 A CN202311252057 A CN 202311252057A CN 117290442 A CN117290442 A CN 117290442A
- Authority
- CN
- China
- Prior art keywords
- change
- change record
- data
- record object
- 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
- 238000000034 method Methods 0.000 title claims abstract description 77
- 230000008859 change Effects 0.000 claims abstract description 581
- 230000010354 integration Effects 0.000 claims abstract description 116
- 238000011144 upstream manufacturing Methods 0.000 claims abstract description 42
- 238000007781 pre-processing Methods 0.000 claims abstract description 11
- 238000012545 processing Methods 0.000 claims description 27
- 238000004590 computer program Methods 0.000 claims description 23
- 238000000605 extraction Methods 0.000 claims description 17
- 230000006870 function Effects 0.000 claims description 15
- 238000013475 authorization Methods 0.000 claims description 14
- 238000003780 insertion Methods 0.000 claims description 12
- 230000037431 insertion Effects 0.000 claims description 12
- 238000012217 deletion Methods 0.000 claims description 8
- 230000037430 deletion Effects 0.000 claims description 8
- 230000009191 jumping Effects 0.000 claims description 4
- 230000008569 process Effects 0.000 description 13
- 230000001360 synchronised effect Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 230000008878 coupling Effects 0.000 description 4
- 238000010168 coupling process Methods 0.000 description 4
- 238000005859 coupling reaction Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000013481 data capture Methods 0.000 description 3
- 230000006837 decompression Effects 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000009466 transformation Effects 0.000 description 3
- 230000003190 augmentative effect Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013075 data extraction Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000011068 loading method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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/219—Managing data history or versioning
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请适用于数据库间的数据同步技术领域,提供了数据库间的数据同步方法、系统、电子设备及存储介质,该数据库间的数据同步方法包括:获取上游数据库的数据变更记录,先将数据变更记录进行预存,再进行读取和预处理,得到第一变更记录对象,然后,将相同表名且相同行id的第一变更记录对象划分至同一区域,对于每一个区域,创建一个整合窗口,通过整合窗口接收对应区域中的第一变更记录对象,对整合窗口中的第一变更记录对象进行整合,得到第二变更记录对象,然后将第二变更记录对象进行预存,最后读取第二变更记录对象,并将第二变更记录对象的数据同步到下游数据库中。本申请能够提高数据库间的变更数据的同步效率。
Description
技术领域
本申请属于数据库间的数据同步技术领域,尤其涉及数据库间的数据同步方法、系统、电子设备及存储介质。
背景技术
在大数据时代下,企业数字化转型的步伐不断加快,工作内容不断深入。在数字化转型的过程中,企业多使用SQLServer、MySQL等数据库来存储业务数据。例如,上游子公司先通过SQLServer数据库来存储业务数据,再将SQLServer数据库中的数据同步到总公司的MySQL数据库中。
然而,随着业务数据体量的不断增大、用户数量的不断增多,数据库之间的全量数据的实时同步容易耗费大量资源,而增量数据的同步技术还存在同步效率低的问题。
发明内容
本申请实施例提供了一种数据库间的数据同步方法、系统、电子设备及存储介质,以解决当前上下游数据库之间增量数据的同步效率较低的问题。
本申请是通过如下技术方案实现的:
第一方面,本申请实施例提供了一种数据库间的数据同步方法,包括:在Kafka中创建第一主题和第二主题;获取上游数据库的数据变更记录,并将所述数据变更记录存储在所述第一主题中;从所述第一主题中读取目标数据变更记录,并对所述目标数据变更记录进行预处理,得到第一变更记录对象,所述第一变更记录对象包括表名、行id、表字段和变更操作类型,所述目标数据变更记录为所述数据变更记录中的一个或多个;在Flink执行环境下,将相同表名且相同行id的第一变更记录对象划分至同一区域;对于每一个区域,创建一个整合窗口;通过所述整合窗口接收对应区域中的第一变更记录对象;当所述整合窗口中的第一变更记录对象的数量达到所述整合窗口的容纳数量时,基于所述表字段和所述变更操作类型,对所述整合窗口中的第一变更记录对象进行整合,得到第二变更记录对象,将所述第二变更记录对象存储在所述第二主题中;从所述第二主题中读取第二变更记录对象,并将所述第二变更记录对象中的数据同步到下游数据库中。
结合第一方面,在一些实施例中,所述第一变更记录对象还包括数据字段,所述数据字段为所述表字段对应的数据;所述基于所述表字段和所述变更操作类型,对所述整合窗口中的第一变更记录对象进行整合,得到第二变更记录对象,包括:选取所述整合窗口中的两个第一变更记录对象,通过分析所述两个第一变更记录对象的变更操作类型,将所述两个第一变更记录对象中的变更操作类型进行整合,以及基于所述两个第一变更记录对象的表字段,将所述两个第一变更记录对象中相同的表字段对应的数据进行整合,得到第三变更记录对象;选取所述第三变更记录对象和所述整合窗口中另外的一个第一变更记录对象,通过分析所述第三变更记录对象和该第一变更记录对象的变更操作类型,将所述第三变更记录对象和该第一变更记录对象中的变更操作类型进行整合,以及基于所述第三变更记录对象和该第一变更记录对象的表字段,将所述第三变更记录对象和该第一变更记录对象中相同的表字段对应的数据进行整合,得到新的第三变更记录对象;跳转至选取所述第三变更记录对象和所述整合窗口中另外的一个第一变更记录对象的步骤,进行循环操作,直至所述整合窗口仅包括最新的第三变更记录对象,所述最新的第三变更记录对象为所述第二变更记录对象。
结合第一方面,在一些实施例中,所述第一变更记录对象还包括时间字段;所述选取所述整合窗口中的两个第一变更记录对象,通过分析所述两个第一变更记录对象的变更操作类型,将所述两个第一变更记录对象中的变更操作类型进行整合,包括:根据所述整合窗口的接收顺序,选取在前接收的两个第一变更记录对象;获取所述两个第一变更记录对象的变更操作类型和时间字段,并将所述时间字段转换为毫秒级的时间戳;如果所述两个第一变更记录对象中,时间戳大的第一变更记录对象的变更操作类型为删除,则将所述两个第一变更记录对象的变更操作类型整合为删除;如果所述两个第一变更记录对象中,时间戳大的第一变更记录对象的变更操作类型为插入,则将所述两个第一变更记录对象的变更操作类型整合为插入;如果所述两个第一变更记录对象中,时间戳小的第一变更记录对象的变更操作类型为插入,且时间戳大的第一变更记录对象的变更操作类型为更新,则将所述两个第一变更记录对象的变更操作类型整合为插入;如果所述两个第一变更记录对象中,时间戳大的第一变更记录对象的变更操作类型为更新,且时间戳小的第一变更记录对象的变更操作类型为更新或删除,则将所述两个第一变更记录对象的变更操作类型整合为更新。
结合第一方面,在一些实施例中,所述基于所述两个第一变更记录对象的表字段,将所述两个第一变更记录对象中相同的表字段对应的数据进行整合,包括:基于所述表字段,创建一个数据整合对象,所述数据整合对象包括id值和变更数据;对所述数据整合对象进行赋值,得到数据整合字段;所述数据整合字段的id值为所述两个第一变更记录对象中任意一个第一变更记录对象的行id,所述数据整合字段的变更数据为所述两个第一变更记录对象中时间戳大的第一变更记录对象的表字段对应的数据;将所述数据整合字段设为所述两个第一变更记录对象经过整合之后的数据字段。
结合第一方面,在一些实施例中,所述获取上游数据库的数据变更记录,包括:在上游数据库中配置需要监控的数据库表的信息和用户的授权信息;根据所述数据库表信息和所述用户的授权信息,开启所述上游数据库的CDC功能;基于所述数据库表的信息、用户的授权信息和目标连接器的信息,先在Kafka中对所述目标连接器进行注册,再基于所述上游数据库的CDC功能,通过所述目标连接器捕获所述上游数据库的数据变更记录。
第二方面,本申请实施例提供了一种数据库间的数据同步系统,包括:初始创建模块,用于在Kafka中创建第一主题和第二主题;变更抽取模块,用于获取上游数据库的数据变更记录,并将所述数据变更记录存储在所述第一主题中;变更处理模块,从所述第一主题中读取目标数据变更记录,并对所述目标数据变更记录进行预处理,得到第一变更记录对象,所述第一变更记录对象包括表名、行id、表字段和变更操作类型,所述目标数据变更记录为所述数据变更记录中的一个或多个;所述变更处理模块,还用于在Flink执行环境下,将相同表名且相同行id的第一变更记录对象划分至同一区域;对于每一个区域,创建一个整合窗口;通过所述整合窗口接收对应区域中的第一变更记录对象;所述变更处理模块,还用于当所述整合窗口中的第一变更记录对象的数量达到所述整合窗口的容纳数量时,基于所述表字段和所述变更操作类型,对所述整合窗口中的第一变更记录对象进行整合,得到第二变更记录对象,将所述第二变更记录对象存储在所述第二主题中;变更同步模块,用于从所述第二主题中读取第二变更记录对象,并将所述第二变更记录对象中的数据同步到下游数据库中。
第三方面,本申请实施例提供了一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面任一项所述的数据库间的数据同步方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面任一项所述的数据库间的数据同步方法。
第五方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得电子设备执行上述第一方面中任一项所述的数据库间的数据同步方法。
本申请实施例与相关技术相比存在的有益效果是:
本申请实施例提供了一种数据库间的数据同步方法,该方法包括:首先,在Kafka中创建第一主题和第二主题,然后获取上游数据库的数据变更记录,并将数据变更记录存储在第一主题中;接着,从第一主题中读取目标数据变更记录,并进行预处理,得到第一变更记录对象,该第一变更记录对象包括表名、行id、表字段和变更操作类型,目标数据变更记录为数据变更记录中的一个或多个;之后,在Flink执行环境下,将相同表名且相同行id的第一变更记录对象划分至同一区域,对每一个区域创建一个整合窗口,并通过整合窗口接收对应区域中的第一变更记录对象,当整合窗口中的第一变更记录对象的数量达到整合窗口的容纳数量时,基于表字段和变更操作类型,对整合窗口中的第一变更记录对象进行整合,得到第二变更记录对象,将第二变更记录对象存储在第二主题中;最后,从第二主题中读取第二变更记录对象,并将第二变更记录对象中的数据同步到下游数据库中。这样,在下游数据库进行数据同步之前,先对获取到的上游数据库的数据变更记录进行了整合,可以将多条相同表名、相同行id的数据变更记录整合为一条变更记录,帮助省去大量无效的中间数据,有效地减少了下游数据库的数据负载,降低了下游数据库的压力,提高了上下游数据库间的数据同步的效率。
可以理解的是,上述第二方面至第五方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一实施例提供的数据库间的数据同步方法的应用场景示意图;
图2是本申请一实施例提供的数据库间的数据同步方法的流程示意图;
图3是本申请另一实施例提供的数据库间的数据同步方法的流程示意图;
图4是本申请再一实施例提供的数据库间的数据同步方法的流程示意图;
图5是本申请又一实施例提供的数据库间的数据同步方法的流程示意图;
图6是本申请一实施例提供的两个第一变更记录对象的整合示意图;
图7是本申请实施例提供的数据库间的数据同步系统的架构的示意图;
图8是本申请一实施例提供的数据库间的数据同步方法的流程图;
图9是本申请实施例提供的数据库间的数据同步系统的结构示意图;
图10是本申请实施例提供的电子设备的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、系统、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本申请说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
数据同步是为保持数据源与目的地数据一致性而进行的数据传输及数据处理的过程。本申请实施例中的数据同步可以是主系统与子系统间的数据更新。
在数据库中,变更数据捕获(Change Data Capture,CDC)技术是一组软件设计模式,用于确定和跟踪已改变的数据。
相关技术中,通过采用CDC技术、ETL(Extraction Transformation Load,数据提取、转换和加载)工具和数据库的相关组件,可以实现增量数据的同步。但是,在数据体量不断增大的情况下,如何高效地实现增量数据同步是当前亟待解决的问题。
在BI(Business Intelligence,商业智能)项目中,可以通过增量数据同步,来实现对业务数据的及时监测,进而帮助用户快速且准确地作出商业决策。但是,当面对海量数据的变更同步时,下游数据库在进行数据复现时需要执行大量的变更操作,运算压力过大,导致数据同步的效率明显下降。
基于上述问题,本申请实施例提供了一种数据库间的数据同步方法、系统、电子设备及存储介质。通过捕获数据变更记录的方式来获取上游数据库的变更数据,并在下游数据库进行数据复现之前,先对数据变更记录进行整合处理,以减少下游数据库需要执行的变更操作。因此,在面对海量数据的变更时,本申请实施例中的方法能够大大提高数据同步的效率。
举例说明,本申请实施例可以应用到如图1所示的示例性场景100中。在该场景100中,包括上游数据库110、抽取模块120、处理模块130、同步模块140和下游数据库150。上游数据库110为源数据库,上游数据库110需要将发生变更的数据同步到下游数据库150中,下游数据库150即目的地数据库,下游数据库150需要根据上游数据库110的变更情况进行变更数据的同步。本申请实施例中的方法,可以通过抽取模块120将上游数据库110中的数据变更记录抽取出来,之后将这些数据变更记录传递至处理模块130,通过处理模块130对数据变更记录进行整合,最后将整合后的变更记录传递至同步模块140,通过同步模块140将整合后的变更记录中的数据同步到下游数据库150中。
在一种应用场景中,上游数据库可以是子公司的数据库,下游数据库可以是总公司的数据库,可以通过本申请实施例提供的数据库间的数据同步方法,实现子公司向总公司汇总的业务数据的实时更新,从而能够辅助总公司的管理人员更快、更准确地作出商业决策。
图2是本申请一实施例提供的数据库间的数据同步方法的流程示意图,参照图2,对该数据库间的数据同步方法的详述如下:
S201,在Kafka中创建第一主题和第二主题。
Kafka是一种分布式消息队列,可以用较低的资源消耗来处理高吞吐量的消息。Kafka的基本架构包括:生产者(Producer)、消费者(Consumer)、主题(Topic)和服务器节点(Broker)。其中,生产者向Kafka中发送消息;消费者从Kafka中读取消息;Kafka通过Topic对消息进行分区。生产者向Topic中生产消息,消费者可以从Topic中消费消息。一个Kafka集群由多个Broker组成,一个Broker可以容纳多个Topic。
S202,获取上游数据库的数据变更记录,并将数据变更记录存储在第一主题中。
在一些实施例中,上述步骤S202可以通过步骤S2021至S2023来实现:
S2021,在上游数据库中配置需要监控的数据库表的信息和用户的授权信息。
可选的,上游数据库可以为SQLServer、MongoDB、Oracle或PostgreSQL等数据库,下游数据库可以为MySQL数据库等。
可选的,需要监控的数据库表可以为用户输入的数据同步指令中包含的数据库表。用户的授权信息可以包括用户名和密码等信息。
S2022,根据数据库表的信息和用户的授权信息,开启上游数据库的CDC功能。
S2023,基于需要监控的数据库表的信息、用户的授权信息和目标连接器的信息,先在Kafka中对目标连接器进行注册,再基于上游数据库的CDC功能,通过目标连接器捕获上游数据库的数据变更记录。
在一些实施例中,目标连接器可以为Debezium的连接器。Debezium是一个开源的增量数据同步工具,通过实时抽取数据库日志来获取数据变更记录,并将捕获到的数据变更记录以数据流的形式输出。
可选的,如果上游数据库为SQLServer数据库,则目标连接器为DebeziumSQLServer连接器。
在一种可能实现的实施方式中,基于需要监控的数据库表的信息、用户的授权信息和目标连接器的信息,在Kafka中对目标连接器进行注册,可以通过目标连接器向Kafka发送的注册命令来完成,该注册命令中的信息包含上述数据库表的信息和用户的授权信息。目标连接器的信息为目标连接器在Kafka连接器配置文件中的插件路径。
在一种可能实现的实施方式中,上述目标连接器的注册命令的示例如下:
curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" localhost:8083/connectors/ -d'
{
"name": "score-sqlserver-connector",
"config":{
"connector.class":
"io.debezium.connector.sqlserver.SqlServerConnector", "tasks.max": "1",
"database.hostname": "118.190.208.219",
"database.port": "1433",
"database.user": "sa",
"database.password": "********",
"database.dbname": "testCDC",
"database.server.name": "fullfillment",
"database.whitelist": "dbo.score",
"database.history.kafka.bootstrap.servers": "118.190.208.219:9092",
"database.history.kafka.topic": "mssqlhistory.score2"
}
}'
在上述实施方式中,如果目标连接器注册成功,则输出配置正常字样。该配置正常字样可以为:
{"version":"2.6.0","commit":"62abe01bee039651","kafka_cluster_id":"WeC-6lrLQDWMd2YjWqKMVw"}
在上述实施例中,采用了Debezium的连接器来实现数据变更记录的捕获,这种方式是基于数据库日志来监测源数据库的数据变更的,这样非侵入式的读取方式可以避免数据库性能的大幅下降,对比基于触发器或时间戳的变更数据捕获方法,本申请实施例中的方法不占用源数据库资源,同时也不影响源数据库的性能。
相关技术中,对于SQLServer数据库变更的实时查询可以采用官方推出的SQLServer Management Studio工具来完成,但是该工具不提供增量数据的更新功能,若采用该工具来辅助变更数据的捕获,一来需要对其底层代码原理有一定了解,二来数据更新组件与该工具耦合性高,不方便排查错误以及快速部署。而如果采用本申请实施例中的方法,则只需要在Kafka中注册Debezium SQLServer连接器就可以实现变更数据的实时抽取,因此,本申请实施例中的方法具有简洁、快速和实时性强的优点,可以满足实时对数据进行查询和分析的需求。此外,基于Kafka的分布式和高性能的容错机制,即使应用程序停止服务甚至突然崩溃,在程序重启后,Kafka也不会错过或丢失数据变更记录。
S203,从第一主题中读取目标数据变更记录,并对目标数据变更记录进行预处理,得到第一变更记录对象,第一变更记录对象包括表名、行id、表字段和变更操作类型,目标数据变更记录为数据变更记录中的一个或多个。
在一些实施例中,在S203之前,上述数据库间的数据同步方法还包括:启动Flink执行环境,以及创建Kafka消费者,Kafka消费者用于从第一主题中读取目标数据变更记录。
可选的,上述步骤S203中的对目标数据变更记录进行预处理,得到第一变更记录对象,可以为对目标数据变更记录进行格式转换,将目标数据变更记录转换为适合Flink处理的统一格式的第一变更记录对象。这样,便于后续对这些第一变更记录对象进行统一处理。
在一些实施例中,第一变更记录对象还可以包括数据字段和时间字段。其中,数据字段为表字段对应的数据,例如,数据字段可以包括变更之前的表字段的数据和变更之后的表字段的数据,表字段可以为一个或多个;时间字段可以为变更操作发生的时间。
可选的,将经过预处理后得到的第一变更记录对象以事件流的形式传递至下一步骤进行处理。
S204,在Flink执行环境下,将相同表名且相同行id的第一变更记录对象划分至同一区域;对于每一个区域,创建一个整合窗口;通过整合窗口接收对应区域中的第一变更记录对象。
在一些实施例中,在步骤S204之前,上述数据库间的数据同步方法还可以包括:在Flink执行环境下,使用filter算子滤除无效的或空的第一变更记录对象。其中,无效的第一变更记录对象可以为不包括变更操作类型的第一变更记录对象,也可以为存在数据损坏的第一变更记录对象。上述空的第一变更记录对象可以为存在数据丢失的第一变更记录对象。
在一些实施例中,上述步骤S204可以通过以下步骤来实现:
在Flink执行环境下,采用keyBy算子,对由多个第一变更记录对象构成的数据流进行分区,将具有相同表名且相同行id的第一变更记录对象划分至同一区域。在每一个区域的数据流上,采用countWindow算子创建一个整合窗口;通过整合窗口接收对应区域中的第一变更记录对象。其中,整合窗口的容纳数量可以通过用户输入的窗口参数来定义,或者,根据用户输入的数据同步指令,确定需要同步的数据量,根据该数据量与预设阈值的大小关系,定义整合窗口的容纳数量。keyBy算子和countWindow算子为Flink中的算子。
S205,当整合窗口中的第一变更记录对象的数量达到整合窗口的容纳数量时,基于表字段和变更操作类型,对整合窗口中的第一变更记录对象进行整合,得到第二变更记录对象,将第二变更记录对象存储在第二主题中。
在一些实施例中,参见图3,上述步骤S205中的基于表字段和变更操作类型,对整合窗口中的第一变更记录对象进行整合,得到第二变更记录对象,可以为包括步骤S2051至步骤S2053:
S2051,选取整合窗口中的两个第一变更记录对象,通过分析两个第一变更记录对象的变更操作类型,将两个第一变更记录对象中的变更操作类型进行整合,以及基于两个第一变更记录对象的表字段,将两个第一变更记录对象中相同的表字段对应的数据进行整合,得到第三变更记录对象。
可选的,参见图4,上述步骤S2051中的选取整合窗口中的两个第一变更记录对象,通过分析两个第一变更记录对象的变更操作类型,将两个第一变更记录对象中的变更操作类型进行整合,可以通过以下步骤来实现:
S401,根据整合窗口的接收顺序,选取在前接收的两个第一变更记录对象。
S402,获取上述两个第一变更记录对象的变更操作类型和时间字段,并将时间字段转换为毫秒级的时间戳。
S4031,如果两个第一变更记录对象中,时间戳大的第一变更记录对象的变更操作类型为删除,则将两个第一变更记录对象的变更操作类型整合为删除。
S4032,如果两个第一变更记录对象中,时间戳大的第一变更记录对象的变更操作类型为插入,则将两个第一变更记录对象的变更操作类型整合为插入。
S4033,如果两个第一变更记录对象中,时间戳小的第一变更记录对象的变更操作类型为插入,且时间戳大的第一变更记录对象的变更操作类型为更新,则将两个第一变更记录对象的变更操作类型整合为插入。
S4034,如果两个第一变更记录对象中,时间戳大的第一变更记录对象的变更操作类型为更新,且时间戳小的第一变更记录对象的变更操作类型为更新或删除,则将两个第一变更记录对象的变更操作类型整合为更新。
可选的,参见图5,上述步骤S2051中的基于两个第一变更记录对象的表字段,将两个第一变更记录对象中相同的表字段对应的数据进行整合,可以通过以下步骤来实现:
S501,基于表字段,创建一个数据整合对象,数据整合对象包括id值和变更数据。
S502,对数据整合对象进行赋值,得到数据整合字段;数据整合字段的id值为两个第一变更记录对象中任意一个第一变更记录对象的行id,数据整合字段的变更数据为两个第一变更记录对象中时间戳大的第一变更记录对象的表字段对应的数据。
S503,将数据整合字段设为两个第一变更记录对象经过整合之后的数据字段。
可选的,在上述步骤S503之后,本申请实施例中的数据间的数据同步方法还可以包括:将上述两个第一变更记录对象中时间戳大的第一变更记录对象的时间字段设为两个第一变更记录对象经过整合之后的时间字段。
图6是本申请一实施例提供的两个第一变更记录对象的整合示意图,参见图6,选取了同一整合窗口中的两个第一变更记录对象,分别为变更时间较早的在前第一变更记录对象610和变更时间相对较晚的在后第一变更记录对象620,将在前第一变更记录对象610和在后第一变更记录对象620进行整合后,得到第三变更记录对象630。参见图6,本实施例中的第一变更记录对象包括从左到右的表名、行id、表字段、变更操作类型、数据字段和时间字段。
在前第一变更记录对象610和在后第一变更记录对象620的整合过程为:首先获取到在前第一变更记录对象610的变更操作类型为“插入”,在后第一变更记录对象620的变更操作类型为“更新”,同时获取到在前第一变更记录对象610的时间字段为时间1,在后第一变更记录对象620的时间字段为时间2,将时间1和时间2转换为毫秒级时间戳,根据时间的先后以及时间戳的转换原理,可知,时间1对应的时间戳小,时间2对应的时间戳大。根据上述步骤S4033,由于,时间戳小的在前第一变更记录对象610的变更操作类型为插入,且时间戳大的在后第一变更记录对象620的变更操作类型为更新,因此,将两个第一变更记录对象的变更操作类型整合为插入。再根据上述步骤S501和S503,将数据字段整合为id_001[before(1,5),after(3,5)],可见,整合后的数据字段的数据为在后第一变更记录对象620的数据字段的数据。整合后的时间字段为在后第一变更记录对象620的时间字段。
S2052,选取第三变更记录对象和整合窗口中另外的一个第一变更记录对象,通过分析第三变更记录对象和该第一变更记录对象的变更操作类型,将第三变更记录对象和该第一变更记录对象中的变更操作类型进行整合,以及基于第三变更记录对象和该第一变更记录对象的表字段,将第三变更记录对象和该第一变更记录对象中相同的表字段对应的数据进行整合,得到新的第三变更记录对象。
可选的,上述另外一个第一变更记录对象为该整合窗口中按照接收顺序排列的下一个第一变更记录对象。
S2053,跳转至选取第三变更记录对象和整合窗口中另外的一个第一变更记录对象的步骤,进行循环操作,直至整合窗口仅包括最新的第三变更记录对象,最新的第三变更记录对象为第二变更记录对象。
当上游数据库中的大量数据库表同时进行频繁的数据更新,且数据库表中的表字段很多时,需要同步的数据变更记录可达海量,此时,通过上述实施例中的方法,可以先将同一数据库表且同一行的数据变更记录进行整合,再同步至下游数据库,下游数据库只需执行少量的变更操作就可以实现数据同步,从而有效地降低了下游数据库的压力。
在一种可能实现的实施方式中,在很短的时间内某一个数据库表中可能发生了上万条数据变更操作,若该数据库表共有100行数据,则对应100个不同的行id。对于大量数据的变更,可以将整合窗口的容纳数量设为较大的值,例如一个整合窗口可以容纳40个第一变更记录对象,理想情况下,若平均每行发生200次变更操作,则对于每行的数据变更操作,可以通过整合窗口将200个数据变更记录整合为5个第二变更记录对象,对于100行数据的变更,最后需要下游数据库执行的变更操作可能仅为500个,相比未进行整合时需要执行的上万次操作,将第一变更记录对象进行整合,明显能够提高下游数据库的数据同步的效率。
S206,从第二主题中读取第二变更记录对象,并将第二变更记录对象中的数据同步到下游数据库中。
在一些实施例中,上述步骤S206的实现方式可以为:从第二主题中读取至少一个第二变更记录对象。对至少一个第二变更记录对象进行解析,得到至少一个SQL语句。通过至少一个SQL语句,将至少一个第二变更记录对象中的数据同步到下游数据库中。
对应于上文实施例所述的数据库间的数据同步方法,图7示出了本申请一实施例提供的数据库间的数据同步系统的架构的示意图,该数据库间的数据同步系统的架构包括Web后端700、Web前端750和外围设备。其中,Web后端700包括基础设施层710、变更抽取层720、变更处理层730和变更同步层740。
基础设施层710,包括Hadoop分布式基础架构和多个SQLServer数据库。基础设施层710主要实现服务器环境的搭建和快速部署,同时实现数据的接入工作。变更抽取层720,包括Kafka集群、Flink分布式流处理引擎和Debezium增量数据同步工具(目标连接器)。变更抽取层720首先利用Flink分布式流处理引擎的程序与各个SQLServer数据库建立数据连接,然后通过Debezium增量数据同步工具配合Kafka从SQLServer的数据库日志中实时捕获数据变更记录,并存储在Kafka的Topic中等待消费。
变更处理层730,包括Flink分布式流处理引擎和缓存状态的事件流。利用Kafka消费者和Flink分布式流处理引擎,消费并处理变更抽取层720中的Topic中的数据变更记录,减少变更记录中的无效中间数据,降低后续链路的数据负载,随后存储在另一个Topic中等待消费。
变更同步层740,包括Kafka集群和MySQL数据库。利用Kafka消费者订阅并消费变更处理层730中的Topic中的数据变更记录,并实时同步到MySQL数据库中。
对应上述图7所示的实施例中的数据库间的数据同步系统的架构,图8示出了该系统在实现上述数据库间的数据同步方法时的流程图。在本实施例中,上游数据库为SQLServer数据库,下游数据库为MySQL数据库。在进行数据变更记录捕获之前,控制Debezium SQLServer连接器向Kafka发送注册命令,同时控制Kafka接收该注册命令,对Debezium SQLServer连接器进行配置。之后通过Debezium SQLServer连接器从SQLServer数据库中捕获数据变更记录,并存储到第一主题中。然后,在Flink执行环境下,对第一主题进行消费,即从第一主题中读取目标数据变更记录,并对目标数据变更记录进行预处理,得到第一变更记录对象。接着,创建整合窗口,并通过整合窗口对第一变更记录对象进行整合,得到第二变更记录对象。将第二变更记录对象存储到第二主题中。最后,对第二主题进行消费,即从第二主题中读取第二变更记录对象,再将第二变更记录对象解析为SQL语句,传递至MySQL数据库,MySQL数据库根据SQL语句实现变更数据的同步。
上述图7至图8所示的实施例,具体能够实现以下技术效果:
1、在抽取变更过程中,降低对源数据库的侵入性,不损伤源数据库的性能。采用Debezium SQLServer连接器非侵入式地读取数据库日志,实现数据变更记录的捕获,这种方式可以避免数据库性能大幅下降甚至挂死。对比基于触发器或时间戳的变更数据捕获方法,上述实施例中的方法不占用源数据库资源且不影响源数据库的性能。
2、能够快速实时地同步增量数据。通过Debezium SQLServer连接器来完成数据的抽取,这种方式只需要在Kafka中配置并注册Debezium SQLServer连接器就可以实现实时性的变更数据的抽取,随后通过在MySQL数据库操作Kafka消费者进行变更数据的消费,就可以将变更数据同步至MySQL数据库。
3、提供了一种海量数据的减压策略。在上述实施例中,针对SQLServer数据库的增量数据日志特征编写了数据变更记录的中间减压处理程序。首先对数据库变更记录进行预处理,分析捕获到的SQLServer数据库的数据变更记录,并将其处理为统一格式的第一变更记录对象。随后设立整合窗口对第一变更记录对象进行分析处理,对到达整合窗口的变更记录对象进行对比分析,通过分析这些第一变更记录对象的变更操作类型,进而删除某一时间段内的无效变更操作或整合相关联的变更操作。同时,整合窗口的参数可以根据用户的实际需求进行灵活地调节,从而可以满足工业大数据场景下大量数据的实时更新需求,进而及时响应市场变动。最后,将整合后得到的第二变更记录对象发往下游。由于上述整合过程实时地过滤了无效的中间操作,因此,下游数据库只需要执行少量的变更操作就可以实现数据同步。由此,基于上述实施例中的系统架构,采用上述方法,能够在大数据场景下支撑海量变更记录的实时同步,实现海量数据的减压。
4、具有高一致性和良好的容错机制。在获取数据变更记录时,采用Debezium结合Kafka来进行数据变更记录的实时抽取,受益于kafka的分布式和高性能的容错机制,即使应用程序停止服务甚至突然崩溃,重启后也不会错过或丢失任何一条数据变更记录。
本申请实施例提供的数据库间的数据同步方法,在下游数据库进行数据复现之前,先对数据变更记录进行整合处理,将一个整合窗口内的多条第一变更记录对象整合为一条第二变更记录对象,进而,下游数据库只需根据第二变更记录对象进行数据同步,有效地减少了下游数据库需要执行的变更操作。由此,在面对海量数据的变更时,本申请实施例中的方法能够明显降低下游数据库的压力,提高数据同步的效率。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
对应于上文实施例所述的数据库间的数据同步方法,图9示出了本申请实施例提供的数据库间的数据同步系统900的结构示意图,为了便于说明,仅示出了与本申请实施例相关的部分。
参见图9,本申请实施例中的数据库间的数据同步系统900可以包括初始创建模块910、变更抽取模块920、变更处理模块930和变更同步模块940。
其中,初始创建模块910,用于在Kafka中创建第一主题和第二主题。
变更抽取模块920,用于获取上游数据库的数据变更记录,并将数据变更记录存储在第一主题中。
变更处理模块930,用于从第一主题中读取目标数据变更记录,并对目标数据变更记录进行预处理,得到第一变更记录对象,第一变更记录对象包括表名、行id、表字段和变更操作类型,目标数据变更记录为数据变更记录中的一个或多个。
变更处理模块930,还用于在Flink执行环境下,将相同表名且相同行id的第一变更记录对象划分至同一区域;对于每一个区域,创建一个整合窗口;通过整合窗口接收对应区域中的第一变更记录对象。
变更处理模块930,还用于当整合窗口中的第一变更记录对象的数量达到整合窗口的容纳数量时,基于表字段和变更操作类型,对整合窗口中的第一变更记录对象进行整合,得到第二变更记录对象,将第二变更记录对象存储在第二主题中。
变更同步模块940,用于从第二主题中读取第二变更记录对象,并将第二变更记录对象中的数据同步到下游数据库中。
可选的,变更抽取模块920,具体可以用于在上游数据库中配置需要监控的数据库表信息和用户的授权信息;根据数据库表信息和用户的授权信息,开启上游数据库的CDC功能;基于数据库表信息和目标连接器的信息,先在Kafka中对目标连接器进行注册,再基于上游数据库的CDC功能,通过目标连接器捕获上游数据库的数据变更记录。
可选的,第一变更记录对象还可以包括数据字段,数据字段为表字段对应的数据。变更处理模块930,具体可以用于选取整合窗口中的两个第一变更记录对象,通过分析两个第一变更记录对象的变更操作类型,将两个第一变更记录对象中的变更操作类型进行整合,以及基于两个第一变更记录对象的表字段,将两个第一变更记录对象中相同的表字段对应的数据进行整合,得到第三变更记录对象。选取第三变更记录对象和整合窗口中另外的一个第一变更记录对象,通过分析第三变更记录对象和该第一变更记录对象的变更操作类型,将第三变更记录对象和该第一变更记录对象中的变更操作类型进行整合,以及基于第三变更记录对象和该第一变更记录对象的表字段,将第三变更记录对象和该第一变更记录对象中相同的表字段对应的数据进行整合,得到新的第三变更记录对象。跳转至选取第三变更记录对象和整合窗口中另外的一个第一变更记录对象的步骤,进行循环操作,直至整合窗口仅包括最新的第三变更记录对象,最新的第三变更记录对象为第二变更记录对象。
可选的,第一变更记录对象还可以包括时间字段。变更处理模块930,具体还可以用于根据整合窗口的接收顺序,选取在前接收的两个第一变更记录对象。获取两个第一变更记录对象的变更操作类型和时间字段,并将时间字段转换为毫秒级的时间戳。如果两个第一变更记录对象中,时间戳大的第一变更记录对象的变更操作类型为删除,则将两个第一变更记录对象的变更操作类型整合为删除。如果两个第一变更记录对象中,时间戳大的第一变更记录对象的变更操作类型为插入,则将两个第一变更记录对象的变更操作类型整合为插入。如果两个第一变更记录对象中,时间戳小的第一变更记录对象的变更操作类型为插入,且时间戳大的第一变更记录对象的变更操作类型为更新,则将两个第一变更记录对象的变更操作类型整合为插入。如果两个第一变更记录对象中,时间戳大的第一变更记录对象的变更操作类型为更新,且时间戳小的第一变更记录对象的变更操作类型为更新或删除,则将两个第一变更记录对象的变更操作类型整合为更新。
可选的,变更处理模块930,具体还可以用于基于表字段,创建一个数据整合对象,数据整合对象包括id值和变更数据。对数据整合对象进行赋值,得到数据整合字段;数据整合字段的id值为两个第一变更记录对象中任意一个第一变更记录对象的行id,数据整合字段的变更数据为两个第一变更记录对象中时间戳大的第一变更记录对象的表字段对应的数据。将数据整合字段设为两个第一变更记录对象经过整合之后的数据字段。
可选的,变更同步模块940,具体可以用于从第二主题中读取至少一个第二变更记录对象。对至少一个第二变更记录对象进行解析,得到至少一个SQL语句。通过至少一个SQL语句,将至少一个第二变更记录对象中的数据同步到下游数据库中。
需要说明的是,上述各模块之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能模块次划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述系统的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。另外,各功能模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中各个模块次的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本申请实施例还提供了一种电子设备,参见图10,该电子设备1010可以包括:至少一个处理器1010、存储器1020以及存储在所述存储器1020中并可在所述至少一个处理器1010上运行的计算机程序,所述处理器1010执行所述计算机程序时实现上述任意各个方法实施例中的步骤,例如图2所示实施例中的步骤S101至步骤S106。或者,处理器1010执行所述计算机程序时实现上述各装置实施例中各模块/单元的功能,例如图9所示模块910至模块940的功能。
示例性的,计算机程序可以被分割成一个或多个模块/单元,一个或者多个模块/单元被存储在存储器1020中,并由处理器1010执行,以完成本申请。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序段,该程序段用于描述计算机程序在电子设备1000中的执行过程。
本领域技术人员可以理解,图10仅仅是电子设备的示例,并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如输入输出设备、网络接入设备、总线等。
处理器1010可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器1020可以是电子设备的内部存储单元,也可以是电子设备的外部存储设备,例如插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。所述存储器520用于存储所述计算机程序以及电子设备所需的其他程序和数据。所述存储器520还可以用于暂时地存储已经输出或者将要输出的数据。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
本申请实施例提供的数据库间的数据同步方法可以应用于计算机、可穿戴设备、车载设备、平板电脑、笔记本电脑、上网本、个人数字助理(personal digital assistant,PDA)、增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备、手机等电子设备上,本申请实施例对电子设备的具体类型不作任何限制。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现可实现上述数据库间的数据同步方法各个实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在移动终端上运行时,使得移动终端执行时实现可实现上述数据库间的数据同步方法各个实施例中的步骤。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/电子设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/网络设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/网络设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种数据库间的数据同步方法,其特征在于,包括:
在Kafka中创建第一主题和第二主题;
获取上游数据库的数据变更记录,并将所述数据变更记录存储在所述第一主题中;
从所述第一主题中读取目标数据变更记录,并对所述目标数据变更记录进行预处理,得到第一变更记录对象,所述第一变更记录对象包括表名、行id、表字段和变更操作类型,所述目标数据变更记录为所述数据变更记录中的一个或多个;
在Flink执行环境下,将相同表名且相同行id的第一变更记录对象划分至同一区域;对于每一个区域,创建一个整合窗口;通过所述整合窗口接收对应区域中的第一变更记录对象;
当所述整合窗口中的第一变更记录对象的数量达到所述整合窗口的容纳数量时,基于所述表字段和所述变更操作类型,对所述整合窗口中的第一变更记录对象进行整合,得到第二变更记录对象,将所述第二变更记录对象存储在所述第二主题中;
从所述第二主题中读取所述第二变更记录对象,并将所述第二变更记录对象中的数据同步到下游数据库中。
2.如权利要求1所述的数据库间的数据同步方法,其特征在于,所述第一变更记录对象还包括数据字段,所述数据字段为所述表字段对应的数据;
所述基于所述表字段和所述变更操作类型,对所述整合窗口中的第一变更记录对象进行整合,得到第二变更记录对象,包括:
选取所述整合窗口中的两个第一变更记录对象,通过分析所述两个第一变更记录对象的变更操作类型,将所述两个第一变更记录对象中的变更操作类型进行整合,以及基于所述两个第一变更记录对象的表字段,将所述两个第一变更记录对象中相同的表字段对应的数据进行整合,得到第三变更记录对象;
选取所述第三变更记录对象和所述整合窗口中另外的一个第一变更记录对象,通过分析所述第三变更记录对象和该第一变更记录对象的变更操作类型,将所述第三变更记录对象和该第一变更记录对象中的变更操作类型进行整合,以及基于所述第三变更记录对象和该第一变更记录对象的表字段,将所述第三变更记录对象和该第一变更记录对象中相同的表字段对应的数据进行整合,得到新的第三变更记录对象;
跳转至选取所述第三变更记录对象和所述整合窗口中另外的一个第一变更记录对象的步骤,进行循环操作,直至所述整合窗口仅包括最新的第三变更记录对象,所述最新的第三变更记录对象为所述第二变更记录对象。
3.如权利要求2所述的数据库间的数据同步方法,其特征在于,所述第一变更记录对象还包括时间字段;
所述选取所述整合窗口中的两个第一变更记录对象,通过分析所述两个第一变更记录对象的变更操作类型,将所述两个第一变更记录对象中的变更操作类型进行整合,包括:
根据所述整合窗口的接收顺序,选取在前接收的两个第一变更记录对象;
获取所述两个第一变更记录对象的变更操作类型和时间字段,并将所述时间字段转换为毫秒级的时间戳;
如果所述两个第一变更记录对象中,时间戳大的第一变更记录对象的变更操作类型为删除,则将所述两个第一变更记录对象的变更操作类型整合为删除;
如果所述两个第一变更记录对象中,时间戳大的第一变更记录对象的变更操作类型为插入,则将所述两个第一变更记录对象的变更操作类型整合为插入;
如果所述两个第一变更记录对象中,时间戳小的第一变更记录对象的变更操作类型为插入,且时间戳大的第一变更记录对象的变更操作类型为更新,则将所述两个第一变更记录对象的变更操作类型整合为插入;
如果所述两个第一变更记录对象中,时间戳大的第一变更记录对象的变更操作类型为更新,且时间戳小的第一变更记录对象的变更操作类型为更新或删除,则将所述两个第一变更记录对象的变更操作类型整合为更新。
4.如权利要求3所述的数据库间的数据同步方法,其特征在于,所述基于所述两个第一变更记录对象的表字段,将所述两个第一变更记录对象中相同的表字段对应的数据进行整合,包括:
基于所述表字段,创建一个数据整合对象,所述数据整合对象包括id值和变更数据;
对所述数据整合对象进行赋值,得到数据整合字段;所述数据整合字段的id值为所述两个第一变更记录对象中任意一个第一变更记录对象的行id,所述数据整合字段的变更数据为所述两个第一变更记录对象中时间戳大的第一变更记录对象的表字段对应的数据;
将所述数据整合字段设为所述两个第一变更记录对象经过整合之后的数据字段。
5.如权利要求1所述的数据库间的数据同步方法,其特征在于,所述获取上游数据库的数据变更记录,包括:
在上游数据库中配置需要监控的数据库表的信息和用户的授权信息;
根据所述数据库表的信息和所述用户的授权信息,开启所述上游数据库的CDC功能;
基于所述数据库表的信息、所述用户的授权信息和目标连接器的信息,先在Kafka中对所述目标连接器进行注册,再基于所述上游数据库的CDC功能,通过所述目标连接器捕获所述上游数据库的数据变更记录。
6.如权利要求1所述的数据库间的数据同步方法,其特征在于,所述从所述第二主题中读取所述第二变更记录对象,并将所述第二变更记录对象中的数据同步到下游数据库中,包括:
从所述第二主题中读取至少一个第二变更记录对象;
对所述至少一个第二变更记录对象进行解析,得到至少一个SQL语句;
通过所述至少一个SQL语句,将所述至少一个第二变更记录对象中的数据同步到下游数据库中。
7.如权利要求1所述的数据库间的数据同步方法,其特征在于,所述上游数据库为SQLServer数据库,所述下游数据库为MySQL数据库。
8.一种数据库间的数据同步系统,其特征在于,包括:
初始创建模块,用于在Kafka中创建第一主题和第二主题;
变更抽取模块,用于获取上游数据库的数据变更记录,并将所述数据变更记录存储在所述第一主题中;
变更处理模块,从所述第一主题中读取目标数据变更记录,并对所述目标数据变更记录进行预处理,得到第一变更记录对象,所述第一变更记录对象包括表名、行id、表字段和变更操作类型,所述目标数据变更记录为所述数据变更记录中的一个或多个;
所述变更处理模块,还用于在Flink执行环境下,将相同表名且相同行id的第一变更记录对象划分至同一区域;对于每一个区域,创建一个整合窗口;通过所述整合窗口接收对应区域中的第一变更记录对象;
所述变更处理模块,还用于当所述整合窗口中的第一变更记录对象的数量达到所述整合窗口的容纳数量时,基于所述表字段和所述变更操作类型,对所述整合窗口中的第一变更记录对象进行整合,得到第二变更记录对象,将所述第二变更记录对象存储在所述第二主题中;
变更同步模块,用于从所述第二主题中读取所述第二变更记录对象,并将所述第二变更记录对象中的数据同步到下游数据库中。
9.一种电子设备,包括存储器和处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311252057.6A CN117290442A (zh) | 2023-09-26 | 2023-09-26 | 数据库间的数据同步方法、系统、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311252057.6A CN117290442A (zh) | 2023-09-26 | 2023-09-26 | 数据库间的数据同步方法、系统、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117290442A true CN117290442A (zh) | 2023-12-26 |
Family
ID=89253089
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311252057.6A Pending CN117290442A (zh) | 2023-09-26 | 2023-09-26 | 数据库间的数据同步方法、系统、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117290442A (zh) |
-
2023
- 2023-09-26 CN CN202311252057.6A patent/CN117290442A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109034993B (zh) | 对账方法、设备、系统及计算机可读存储介质 | |
CN107506451B (zh) | 用于数据交互的异常信息监控方法及装置 | |
US11429566B2 (en) | Approach for a controllable trade-off between cost and availability of indexed data in a cloud log aggregation solution such as splunk or sumo | |
CN108228322B (zh) | 一种分布式链路跟踪、分析方法及服务器、全局调度器 | |
CN114363144B (zh) | 一种面向分布式系统的故障信息关联上报方法及相关设备 | |
CN110837423A (zh) | 一种自动导引运输车数据采集的方法和装置 | |
CN111338893A (zh) | 进程日志处理方法、装置、计算机设备以及存储介质 | |
CN111125013B (zh) | 一种数据入库方法、装置、设备及介质 | |
CN113806301B (zh) | 数据同步方法、装置、服务器及存储介质 | |
CN113420032A (zh) | 一种日志的分类存储方法及装置 | |
CN114077518B (zh) | 数据快照方法、装置、设备及存储介质 | |
CN115203159B (zh) | 一种数据存储方法、装置、计算机设备和存储介质 | |
WO2021027331A1 (zh) | 基于图数据的全量关系计算方法、装置、设备及存储介质 | |
CN112417050A (zh) | 数据同步方法和装置、系统、存储介质及电子装置 | |
CN113609091B (zh) | 日志管理方法、装置、设备及存储介质 | |
CN111694801A (zh) | 一种应用于故障恢复的数据去重方法和装置 | |
CN113626869A (zh) | 数据处理方法、系统、电子设备以及存储介质 | |
CN110309206B (zh) | 订单信息采集方法及系统 | |
CN112416557A (zh) | 调用关系的确定方法和装置、存储介质及电子装置 | |
CN116701352A (zh) | 一种数据库数据迁移方法及系统 | |
CN115022402B (zh) | 一种基于一栈式集成技术的agent采集方法及系统 | |
CN117290442A (zh) | 数据库间的数据同步方法、系统、电子设备及存储介质 | |
CN114925078A (zh) | 数据更新方法、系统、电子设备及存储介质 | |
CN111061719B (zh) | 数据收集方法、装置、设备和存储介质 | |
CN113872814A (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 |