掌桥专利:专业的专利平台
掌桥专利
首页

异构数据库数据同步的方法、装置、设备和存储介质

文献发布时间:2023-06-19 19:33:46


异构数据库数据同步的方法、装置、设备和存储介质

技术领域

本发明涉及数据库同步技术领域,特别涉及一种异构数据库数据同步的方法、装置、设备和存储介质。

背景技术

企业的数据管理系统中通常都设置有多种不同架构的数据库(即多种异构的数据库),例如,分别设置关系型数据库和非关系型数据库。为了保证这些异构的数据库都能正常工作,需要实现多个异构数据库之间的数据同步,即一个数据库的数据被更新后,需要同步更新其他的数据库。

目前在多个异构的数据库之间实现数据同步的一种方式是,企业的开发人员在开发访问数据库的业务程序时,在业务程序中实现针对数据管理系统中每一个数据库的数据更新代码。由此,业务程序每次更新数据库的数据时,就可以分别执行各个数据库的数据更新代码,从而同步更新每个数据库。

这种同步方式的问题是,每开发一个业务程序,都需要针对多个数据库重复实现多次数据更新代码,这增大了开发业务程序的工作量。

发明内容

针对上述现有技术的缺点,本发明提供一种异构数据库数据同步的方法、装置、设备和存储介质,以便减小业务程序开发的工作量。

本申请第一方面提供一种异构数据库数据同步的方法,包括:

截获用于更新第一数据库的第一更新语句,所述第一数据库为关系型数据库;

根据数据库映射关系解析所述第一更新语句,以确定第二数据库的更新对象信息和更新值,所述数据库映射关系包括所述第一数据库的表和所述第二数据库的索引片区的映射关系,以及所述第一数据库的字段和所述第二数据库的字段的映射关系,所述第二数据库为非关系型数据库;

根据所述第二数据库的更新对象信息和更新值生成第二更新语句,所述第二更新语句用于更新所述第二数据库;

执行所述第一更新语句和所述第二更新语句。

可选的,所述截获用于更新第一数据库的第一更新语句,包括:

截获针对第一数据库的数据库操作语句;

识别所述数据库操作语句对应的操作是否属于写操作;

若所述数据库操作语句对应的操作属于写操作,确定所述数据库操作语句为第一更新语句;

若所述数据库操作语句对应的操作不属于写操作,确定所述数据库操作语句不为第一更新语句,并执行所述数据库操作语句。

可选的,所述识别所述数据库操作语句对应的操作是否属于写操作,包括:

识别所述数据库操作语句是否包含预设的写操作关键字;

若所述数据库操作语句包含所述写操作关键字,确定所述数据库操作语句对应的操作属于写操作;

若所述数据库操作语句不包含所述写操作关键字,确定所述数据库操作语句对应的操作不属于写操作。

可选的,所述更新对象信息包括需要更新的目标字段和所述目标字段所属的目标索引片区;

所述根据数据库映射关系解析所述第一更新语句,以确定第二数据库的更新对象信息和更新值,包括:

解析所述第一更新语句,以确定所述第一数据库的待更新字段和所述待更新字段所属的目标表;

根据数据库映射关系,确定所述第二数据库中和所述目标表对应的目标索引片区,以及所述第二数据库中和所述待更新字段对应的目标字段;

解析得到所述第一更新语句包含的字段值,并将所述字段值确定为更新值。

本申请第二方面提供一种异构数据库数据同步的装置,包括:

截获单元,用于截获用于更新第一数据库的第一更新语句,所述第一数据库为关系型数据库;

解析单元,用于根据数据库映射关系解析所述第一更新语句,以确定第二数据库的更新对象信息和更新值,所述数据库映射关系包括所述第一数据库的表和所述第二数据库的索引片区的映射关系,以及所述第一数据库的字段和所述第二数据库的字段的映射关系,所述第二数据库为非关系型数据库;

生成单元,用于根据所述第二数据库的更新对象信息和更新值生成第二更新语句,所述第二更新语句用于更新所述第二数据库;

执行单元,用于执行所述第一更新语句和所述第二更新语句。

可选的,所述截获单元截获用于更新第一数据库的第一更新语句时,具体用于:

截获针对第一数据库的数据库操作语句;

识别所述数据库操作语句对应的操作是否属于写操作;

若所述数据库操作语句对应的操作属于写操作,确定所述数据库操作语句为第一更新语句;

若所述数据库操作语句对应的操作不属于写操作,确定所述数据库操作语句不为第一更新语句,并执行所述数据库操作语句。

可选的,所述截获单元识别所述数据库操作语句对应的操作是否属于写操作时,具体用于:

识别所述数据库操作语句是否包含预设的写操作关键字;

若所述数据库操作语句包含所述写操作关键字,确定所述数据库操作语句对应的操作属于写操作;

若所述数据库操作语句不包含所述写操作关键字,确定所述数据库操作语句对应的操作不属于写操作。

可选的,所述更新对象信息包括需要更新的目标字段和所述目标字段所属的目标索引片区;

所述解析单元根据数据库映射关系解析所述第一更新语句,以确定第二数据库的更新对象信息和更新值时,具体用于:

解析所述第一更新语句,以确定所述第一数据库的待更新字段和所述待更新字段所属的目标表;

根据数据库映射关系,确定所述第二数据库中和所述目标表对应的目标索引片区,以及所述第二数据库中和所述待更新字段对应的目标字段;

解析得到所述第一更新语句包含的字段值,并将所述字段值确定为更新值。

本申请第三方面提供一种计算机存储介质,用于存储计算机程序,所述计算机程序被执行时,具体用于实现本申请第一方面任意一项所提供的异构数据库数据同步的方法。

本申请第四方面提供一种电子设备,包括存储器和处理器;

所述存储器用于存储计算机程序;

所述处理器用于执行所述计算机程序,具体用于实现本申请第一方面任意一项所提供的异构数据库数据同步的方法。

本申请提供一种异构数据库数据同步的方法、装置、设备和存储介质,方法包括,截获用于更新关系型的第一数据库的第一更新语句,第一数据库为关系型数据库;根据数据库映射关系解析第一更新语句,以确定非关系型的第二数据库的更新对象信息和更新值,根据第二数据库的更新对象信息和更新值生成第二更新语句,第二更新语句用于更新第二数据库;执行第一更新语句和第二更新语句。本方案通过解析第一更新语句自动对第二数据库进行同步更新,解决了由业务程序同步更新导致的开发工作量大的问题。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例提供的异构数据库数据同步的方法的流程图;

图2为本申请实施例提供的异构数据库数据同步的装置的示意图;

图3为本申请实施例提供的一种电子设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了便于理解本申请的技术方案,首先对可能涉及的部分术语进行说明。

JAVA:Java是一门现象对象的编程语言。

Elasticsearch:是一个基于Lucene的搜索服务器,提供了一个分布式多用户能力的全文搜索引擎。

关系型数据库:关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。常见的关系型数据库有Oracle、Mysql、Postgresql等。

SQL:SQL(StructuredQueryLanguage)是具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。

切面编程:是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

如背景技术所述,在现有更新方式中,开发人员每开发一个业务程序,就需要在该业务程序中针对数据管理系统的多个数据库重复实现多次数据更新代码,这一方面增大了业务程序开发的工作量,另一方面也导致业务程序中的代码冗余度和复杂度提高,不利于后续对业务程序的维护和迭代更新。

为了解决上述问题,本申请提供一种异构数据库数据同步的方案,该方案的实现原理如下:

通过研究发现,关系型数据库(例如SQL)是用于访问和处理数据库的标准语言,并且是结构化的查询语言。针对同一类的关系型数据库,SQL的增删改查语句格式是固定的,变化的只是表名、更新数据列和查询条件。根据SQL的结构化特性,可以针对不同的数据库操作进行固定的反向解析,分解出写操作和读操作,由于读操作不会影响业务数据,因此只针对数据库写操作进行特定处理即可获取数据库的数据变化信息。

在业务操作数据库提交的同时,通过固定的反向解析方案,对数据库的插入(insertinto)、更新(update)、删除(delete)操作进行处理,分解出SQL关键字和业务信息,根据此业务信息和数据库关键字,组装非关系型数据库的操作语句,就可以对非关系型数据库进行和关系型数据库相同的数据更新操作,从而实现关系型数据库和非关系型数据库之间的数据实时同步。

下面结合附图对本申请的技术方案进行详细说明。

请参见图1,为本申请实施例提供的一种异构数据库数据同步的方法的流程图,该方法可以包括如下步骤。

需要说明,本实施例提供的方法,可以由一个专门用于异构数据库之间数据同步的同步程序来执行。

为了便于说明,本实施例中的关系型数据库均以SQL数据库为示例,非关系型数据库均以Elasticsearch为示例。可以理解的,该方法可以适用于其他的关系型数据库和非关系型数据库之间的数据同步。

S101,截获用于更新第一数据库的第一更新语句,第一数据库为关系型数据库。

可选的,步骤S101的具体执行过程可以包括:

A1,截获针对第一数据库的数据库操作语句;

A2,识别数据库操作语句对应的操作是否属于写操作;

A3,若数据库操作语句对应的操作属于写操作,确定数据库操作语句为第一更新语句;

A4,若数据库操作语句对应的操作不属于写操作,确定数据库操作语句不为第一更新语句,并执行数据库操作语句。

在步骤A1中,每次业务程序向第一数据库发送数据库操作语句后,本实施例的同步程序可以利用面向切面编程技术拦截该数据库操作语句。

业务程序对数据库的操作,可以分为读操作和写操作两种。根据所要执行的操作的不同,数据库操作语句中包含的关键字也不同,因此,在步骤A2中可以通过识别拦截到的数据库操作语句中是否包含特定的关键词,来确定该数据库操作语句对应的操作是否属于写操作。

具体的,步骤A2中识别的过程可以是:

识别数据库操作语句是否包含预设的写操作关键字;

当第一数据库为SQL数据库时,本实施例中定义的写操作关键字可以包括insertinto,delete和update。可以理解,在其他实施例中,根据第一数据库的类型的不同,写操作关键字的具体内容可以不同,本实施例不做限定。

若数据库操作语句包含写操作关键字,确定数据库操作语句对应的操作属于写操作;

若数据库操作语句不包含写操作关键字,确定数据库操作语句对应的操作不属于写操作。

也就是说,以第一数据库时SQL数据库为例,在执行A2时,可以判断拦截到的数据库操作语句是否包含insertinto,delete和update这三个关键词中任意一个,如果包括其中任意一个,则认为该数据库操作语句包含写操作关键字,进而确定该数据库操作语句对应的操作属于写操作,如果该数据库操作语句不包含上述三个关键字中的任意一个,则认为该数据库操作语句对应的操作不属于写操作。

在步骤A3和A4中,如果确定当前拦截到的数据库操作语句对应的操作属于写操作,则可以将该数据库操作语句确定为第一更新语句,然后执行步骤S102,如果确定当前拦截到的数据库操作语句对应的操作不属于写操作,则可以确定该数据库操作语句不是需要拦截的第一更新语句,即执行该数据库操作语句不会导致第一数据库中的数据被更新,所以可以直接对第一数据库执行该数据库操作语句,不需要执行本实施例的后续步骤。

S102,根据数据库映射关系解析第一更新语句,以确定第二数据库的更新对象信息和更新值。

数据库映射关系包括第一数据库的表和第二数据库的索引片区的映射关系,以及第一数据库的字段和第二数据库的字段的映射关系,第二数据库为非关系型数据库。

可选的,更新对象信息包括需要更新的目标字段和目标字段所属的目标索引片区;

根据数据库映射关系解析第一更新语句,以确定第二数据库的更新对象信息和更新值,包括:

解析第一更新语句,以确定第一数据库的待更新字段和待更新字段所属的目标表;

根据数据库映射关系,确定第二数据库中和目标表对应的目标索引片区,以及第二数据库中和待更新字段对应的目标字段;

解析得到第一更新语句包含的字段值,并将字段值确定为更新值。

下面结合具体示例对步骤S102的解析过程进行具体说明。

以第一数据库是SQL数据库为例,当第一更新语句所要执行的操作为insertinto操作时,一方面可以识别第一更新语句中关键字insetinto后的表名称,确定该数据表为上述目标表,另一方面可以识别第一更新语句中的values关键字,将位于该关键字之前,位于上述目标表的表名称之后的字段识别为待更新字段。

然后,以第二数据库是Elasticsearch为示例,根据第一数据库的表和第二数据库的索引片区的映射关系,可以确定上述目标表对应于第二数据库中的哪个索引片区,也就是确定目标索引片区,根据第一数据库的字段和第二数据库的字段的映射关系,可以确定上述待更新字段在第二数据库中对应哪些字段,也就是确定第二数据库中的目标字段。

最后,可以将上述values关键字之后出现的字段值识别为更新值,至此,就从第一更新语句解析得到了更新对象信息和更新值。

当第一更新语句所要执行的操作为update操作时,一方面可以识别第一更新语句中关键字update后的表名称,确定该数据表为上述目标表;另一方面可以识别第一更新语句中的set关键字和where关键字,将这两个关键字之间出现的字段识别为待更新字段,将这两个关键字之间出现的字段值识别为更新值。

进一步的,可以识别where关键字之后出现的字段,字段值和运算符(包括大于,等于,小于),根据这些where关键字之后出现的信息确定该第一更新语句的查询条件。

最后,和前一示例相同,根据第一数据库的表和第二数据库的索引片区的映射关系,以及第一数据库的字段和第二数据库的字段的映射关系,将目标表和待更新字段映射为第二数据库中的目标索引片区和目标字段。

当第一更新语句所要执行的操作为update操作时,其对应的更新对象信息包括目标表和查询条件。

当第一更新语句所要执行的操作为delete操作时,一方面可以识别第一更新语句中关键字deletefrom后的表名称,确定该数据表为上述目标表;另一方面可以识别where关键字之后出现的字段,字段值和运算符(包括大于,等于,小于),根据这些where关键字之后出现的信息确定该第一更新语句的查询条件。

当第一更新语句所要执行的操作为delete操作时,其对应的更新对象信息包括目标表和查询条件,且此时解析出的结果不包括更新值。

S103,根据第二数据库的更新对象信息和更新值生成第二更新语句,第二更新语句用于更新第二数据库。

在步骤S103中,可以先根据第一更新语句所要执行的操作,确定出在第二数据库的语法规则中,执行同样操作所需的语句模板,然后将该语句模板和S102中解析出的更新对象信息和更新值进行组装,从而得到第二更新语句。

以第二数据库是Elasticsearch为示例,当第一更新语句对应的操作为insertinto操作时,在第二数据库的语法规则中,执行同样操作的语句模板为PUT操作,因此可以将执行insertinto操作的第一更新语句所携带的更新对象信息和更新值添加到PUT操作的数据体(body)中,由此获得用于对第二数据库执行insertinto操作的第二更新语句。

当第一更新语句对应的操作为update操作时,在第二数据库的语法规则中,执行同样操作的语句模板为POST操作,因此可以将执行update操作的第一更新语句所携带的更新对象信息(包括目标索引片区,目标字段和查询条件)和更新值拼装到POST操作语句的指定位置,得到用于对第二数据库执行update操作的第二更新语句。

当第一更新语句对应的操作为delete操作时,在第二数据库的语法规则中,执行同样操作的语句模板为_delete_by_query操作,因此可以将执行delete操作的第一更新语句所携带的更新对象信息(包括目标索引片区和查询条件)拼装到_delete_by_query操作语句的指定位置,得到用于对第二数据库执行delete操作的第二更新语句。

S104,执行第一更新语句和第二更新语句。

在步骤S104中,同步程序可以同时执行第一更新语句和第二更新语句,第二更新语句是根据第一更新语句中携带的更新对象信息和更新值生成的,因此,执行第一更新语句后第一数据库中被更新的内容和执行第二更新语句后第二数据库中被更新的内容相同。

例如,业务程序发送的第一更新语句用于将第一数据库中账户甲的存款余额更新为1000元,那么根据第一更新语句生成的第二更新语句,同样用于将第二数据库中记录的账户甲的存款余额更新为1000元。

由此,业务程序通过同时执行第一更新语句和第二更新语句,就可以实现对第一数据库和第二数据库的实时同步更新。

本申请提供一种异构数据库数据同步的方法,方法包括,截获用于更新关系型的第一数据库的第一更新语句,第一数据库为关系型数据库;根据数据库映射关系解析第一更新语句,以确定非关系型的第二数据库的更新对象信息和更新值,根据第二数据库的更新对象信息和更新值生成第二更新语句,第二更新语句用于更新第二数据库;执行第一更新语句和第二更新语句。本方案通过解析第一更新语句自动对第二数据库进行同步更新,解决了由业务程序同步更新导致的开发工作量大的问题。

具体来说,本实施例提供的方法利用针对第一数据库的第一更新语句,生成对第二数据库进行相同的更新操作的第二更新语句,从而实现第一数据库和第二数据库之间实时数据同步。这种同步方式中,因为对第二数据库的同步更新由专门的同步程序来执行,业务程序只需要按照自身需求更新第一数据库即可,不需要主动更新第二数据库,所以开发人员在开发业务程序时就不需要重复实现针对多种异构数据库的数据更新代码,而只需要实现用于更新特定的第一数据库的数据更新代码即可,这显然减少了业务程序开发时的工作量和业务程序本身的代码量,有利于提高业务程序的开发效率,降低业务程序的代码冗余度和复杂度。

根据本申请实施例提供的异构数据库数据同步的方法,本申请实施例还提供一种异构数据库数据同步的装置,请参见图2,为该装置的结构示意图,该装置可以包括如下单元。

截获单元201,用于截获用于更新第一数据库的第一更新语句,第一数据库为关系型数据库;

解析单元202,用于根据数据库映射关系解析第一更新语句,以确定第二数据库的更新对象信息和更新值,数据库映射关系包括第一数据库的表和第二数据库的索引片区的映射关系,以及第一数据库的字段和第二数据库的字段的映射关系,第二数据库为非关系型数据库;

生成单元203,用于根据第二数据库的更新对象信息和更新值生成第二更新语句,第二更新语句用于更新第二数据库;

执行单元204,用于执行第一更新语句和第二更新语句。

可选的,截获单元201截获用于更新第一数据库的第一更新语句时,具体用于:

截获针对第一数据库的数据库操作语句;

识别数据库操作语句对应的操作是否属于写操作;

若数据库操作语句对应的操作属于写操作,确定数据库操作语句为第一更新语句;

若数据库操作语句对应的操作不属于写操作,确定数据库操作语句不为第一更新语句,并执行数据库操作语句。

可选的,截获单元201识别数据库操作语句对应的操作是否属于写操作时,具体用于:

识别数据库操作语句是否包含预设的写操作关键字;

若数据库操作语句包含写操作关键字,确定数据库操作语句对应的操作属于写操作;

若数据库操作语句不包含写操作关键字,确定数据库操作语句对应的操作不属于写操作。

可选的,更新对象信息包括需要更新的目标字段和目标字段所属的目标索引片区;

解析单元202根据数据库映射关系解析第一更新语句,以确定第二数据库的更新对象信息和更新值时,具体用于:

解析第一更新语句,以确定第一数据库的待更新字段和待更新字段所属的目标表;

根据数据库映射关系,确定第二数据库中和目标表对应的目标索引片区,以及第二数据库中和待更新字段对应的目标字段;

解析得到第一更新语句包含的字段值,并将字段值确定为更新值。

本申请实施例提供的异构数据库数据同步的装置,其具体工作原理可以参见本申请实施例提供的异构数据库数据同步的方法中相关步骤,此处不再赘述。

本申请提供一种异构数据库数据同步的装置,包括,截获单元201,用于截获用于更新第一数据库的第一更新语句,第一数据库为关系型数据库;解析单元202,用于根据数据库映射关系解析第一更新语句,以确定第二数据库的更新对象信息和更新值,数据库映射关系包括第一数据库的表和第二数据库的索引片区的映射关系,以及第一数据库的字段和第二数据库的字段的映射关系,第二数据库为非关系型数据库;生成单元203,用于根据第二数据库的更新对象信息和更新值生成第二更新语句,第二更新语句用于更新第二数据库;执行单元204,用于执行第一更新语句和第二更新语句。本方案通过解析第一更新语句自动对第二数据库进行同步更新,解决了由业务程序同步更新导致的开发工作量大的问题。

本申请实施例还提供一种电子设备,请参见图3,包括存储器301和处理器302。

其中,存储器301用于存储计算机程序。

处理器302用于执行计算机程序,计算机程序被执行时,具体用于实现本申请任一实施例所提供的异构数据库数据同步的方法。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

需要注意,本发明中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。

专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

相关技术
  • 基于双控的存储设备数据同步方法、装置、设备及介质
  • 数据同步方法、装置、计算机设备及存储介质
  • 区块链的数据同步方法、装置、计算机设备及存储介质
  • 产品数据同步方法、装置、计算机设备及存储介质
  • 产品数据的数据同步方法、装置、计算机设备及存储介质
  • 异构数据库之间数据同步方法、系统、设备及存储介质
  • 异构数据库数据同步方法和装置、存储介质及电子装置
技术分类

06120115954889