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

数据库的同步方法、装置、计算机设备以及存储介质

文献发布时间:2023-06-19 18:37:28


数据库的同步方法、装置、计算机设备以及存储介质

技术领域

本申请涉及大数据技术领域,特别是涉及一种数据库的同步方法、装置、计算机设备、存储介质和计算机程序产品。

背景技术

随着网络技术的发展,数据量也呈指数级别的增长,互联网及金融系统中单体应用连接单个数据库的方式,已无法满足数据量快速增长的需求。而大数据技术的出现,使得系统可以通过分布式应用来解决高并发及大数据量问题。其通过将单体应用系统拆分成各个子系统,使得各个子系统连接独立数据库,彼此通过API接口(Application ProgrammingInterface,应用程序编程接口)调用串联业务逻辑,以对外提供服务。

在单体应用向分布式应用过渡的过程中,对外存在新、旧服务并行的过渡态,不仅需要保证业务功能不能中断,且在技术层面需要保证用户通过新、旧服务访问的数据同步,即在原单体应用所连的主数据库和拆分后的子系统所连的子数据库一致。

传统技术中,关系型数据库管理系统(MySQL)可以实现主从复制。但MySQL的主从复制依赖于数据库的支持,且只支持将主库数据同步到从库(即子数据库),而不支持将从库的数据同步到主库。且当网络无法直连的情况下两个数据库无法同步。因此,传统的MySQL的主从复制方式受到了较多限制,且无法实现主数据库与从数据库之间的双向同步。

发明内容

基于此,有必要针对上述技术问题,提供一种能够实现数据库间双向同步的数据库的同步方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。

第一方面,本申请提供了一种数据库的同步方法。所述方法包括:

获取对目标数据库的操作;

当确定所述操作为目标操作时,将所述目标操作封装成对应的JSON消息;

确定所述操作对应的主题,根据所述主题将所述JSON消息存储在消息队列的对应分区中;

在待同步数据库执行各分区中所述JSON消息对应的操作,更新所述待同步数据库;当所述目标数据库为主数据库时,所述待同步数据库为子数据库,当所述目标数据库为子数据库时,所述待同步数据库为主数据库。

在其中一个实施例中,所述获取对目标数据库的操作,包括:当监听到对目标数据库的操作为事务操作时,采用线程变量记录所述事务操作;当所述事务操作结束时,将记录的所述事务操作确定为目标操作。

在其中一个实施例中,所述将记录的所述事务操作确定为目标操作之后,所述方法还包括:从所述线程变量中删除所述事务操作。

在其中一个实施例中,所述方法还包括:当所述事务操作回滚时,从所述线程变量中删除所述事务操作。

在其中一个实施例中,所述获取对目标数据库的操作,包括:当监听到对目标数据库的操作为非事务操作时,确定所述非事务操作为目标操作。

在其中一个实施例中,所述确定所述操作对应的主题,包括:所述操作中携带有待操作数据表的标识和/或待操作数据所属的账户标识,根据所述待操作数据表的标识和/或所述账户标识确定所述操作对应的主题。

在其中一个实施例中,所述在待同步数据库执行各分区中所述JSON消息对应的操作,包括:在所述待同步数据库,对所述各分区中所述JSON消息对应的操作按设定数量批量执行。

在其中一个实施例中,所述方法还包括:当批量执行失败时,对批量执行失败的所述分区中的所述JSON消息对应的操作进行逐条执行;记录每一条操作的执行结果,所述执行结果包括执行成功或执行失败的结果。

在其中一个实施例中,所述方法还包括:当所述执行结果为执行失败时,发送失败告警信息。

第二方面,本申请还提供了一种数据库的同步装置。所述装置包括:

操作获取模块,用于获取对目标数据库的操作;

消息封装模块,用于当确定所述操作为目标操作时,将所述目标操作封装成对应的JSON消息;

消息存储模块,用于确定所述操作对应的主题,根据所述主题将所述JSON消息存储在消息队列的对应分区中;

更新模块,用于在待同步数据库执行各分区中所述JSON消息对应的操作,更新所述待同步数据库;当所述目标数据库为主数据库时,所述待同步数据库为子数据库,当所述目标数据库为子数据库时,所述待同步数据库为主数据库。

第三方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如上第一方面所述方法的步骤。

第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上第一方面所述方法的步骤。

第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现如上第一方面所述方法的步骤。

上述数据库的同步方法、装置、计算机设备、存储介质和计算机程序产品,通过获取对目标数据库的操作,当确定操作为目标操作时,将目标操作封装成对应的JSON消息,并确定操作对应的主题,根据主题将JSON消息存储在消息队列的对应分区中,进而在待同步数据库执行各分区中JSON消息对应的操作,从而更新待同步数据库。由于本实施例通过监听数据库的操作,并将监听到的目标操作封装成JSON消息按区存储,进而按区消费并在待同步数据库执行JSON消息,从而可以实现数据库间的双向同步,且不依赖于数据库的支持,对主流数据库都具有普适性,能够从根本上解决数据库的双向同步问题。

附图说明

图1A为一个实施例中传统数据库同步的架构图;

图1B为另一个实施例中传统数据库同步的架构图;

图2为又一个实施例中传统数据库同步的架构图;

图3为一个实施例中数据库的同步方法的流程示意图;

图4为一个实施例中获取对目标数据库的操作步骤的流程示意图;

图5为一个实施例中数据库的同步方法的应用系统示意图;

图6为一个实施例中数据库的同步方法交互示意图;

图7为一个实施例中数据库的同步装置的结构框图;

图8为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

传统技术中,主流的数据库同步包括如下方式:

1、基于数据库层面的数据同步

例如,如图1A及图1B所示的MySQL主从复制,主库通过将事务操作实时同步到日志,从库通过I/O线程(即输入输出线程)读取主库日志内容到中继日志(relay log)文件中,重放中继日志文件中的指令实现子库数据的同步,即通过SQL(Structured QueryLanguage,结构化查询语言)线程执行中继日志中的指令,以对子库更新。其主要依托于数据库层面的支持,虽然可以做到实时同步,但仅支持将主库的数据实时同步到从库,无法将从库产生的更新数据实时同步到主库,且异常场景下上层应用业务无法快速回切。从而无法实现数据库双向、准确地同步。

2、多数据源读写

如图2所示,通过对每台服务器(主服务器和子服务器)分别配置多个数据源(即主数据库和子数据库)连接,针对数据更新的业务操作,通过代码的方式分别调用对应数据源进行主库和子库的更新操作。此种方式需要将单数据源读写的操作更改为多数据源读写操作,因此,需要更改之前的存量代码,改造难度大,范围广,导致投入成本高,实施风险大。

3、采用定时任务进行数据同步

通过使用定时任务每隔一段时间,将当前库产生的更新数据同步到目标库,使主库和子库的数据保持最终一致性。此种方式虽然可以实现双库数据相互同步,但无法满足实时性要求;且同步具有一定的滞后性,从而导致业务功能也无法快速切换;还会涉及表结构调整及应用改造等,导致实施较为复杂。

基于此,本申请提供了一种数据库的同步方法,该方法应用于运行数据库的服务器,如图3所示,具体可以包括以下步骤:

步骤302,获取对目标数据库的操作。

其中,目标数据库可以是数据库同步过程中的参照数据库,即基于目标数据库的更新对待同步数据库进行同步。操作是指对数据库中的数据进行的一系列操作,包括但不限于读取数据、写数据、更新或修改数据、删除数据等操作。

在本实施例中,服务器通过监听并拦截对目标数据库的操作,从而获取相应的操作,并基于后续步骤对待同步数据库进行同步。

步骤304,当确定操作为目标操作时,将目标操作封装成对应的JSON消息。

其中,目标操作可以是指有效操作,其包括有效的事务性操作和非事务性操作。具体地,服务器通过识别上述获取的操作,当确定操作为目标操作时,则将目标操作封装成对应的JSON(Java Script Object Notation,JS对象简谱,其是一种轻量级的数据交换格式)消息,从而便于后续的处理以及交互。

步骤306,确定操作对应的主题,根据主题将JSON消息存储在消息队列的对应分区中。

其中,主题可以基于操作所对应的数据表或数据确定。例如,可以基于操作所对应的数据表确定主题,也可以基于操作所对应的数据确定主题,或者还可以基于操作所对应的数据表与数据的结合而确定主题。

在本实施例中,服务器通过识别操作对应的主题,并根据主题将JSON消息存储在消息队列的对应分区中,即将不同主题的JSON消息存储在不同的分区中。

步骤308,在待同步数据库执行各分区中JSON消息对应的操作,更新待同步数据库。

其中,待同步数据库是指需要同步的数据库,即基于目标数据库的更新对待同步数据库进行同步,从而保持待同步数据库与目标数据库中数据的一致性。具体地,在本实施例中,当上述目标数据库为主数据库时,则待同步数据库可以为子数据库;而当上述目标数据库为子数据库时,则待同步数据库可以为主数据库,从而实现主数据库与子数据库之间的双向同步。

在本实施例中,服务器可以基于上述存储的JSON消息,在待同步数据库执行JSON消息对应的操作,从而更新待同步数据库。又由于JSON消息是基于不同的主题存储在不同的分区中,而各个分区之间不存在依赖关系,因此,在执行JSON消息时,可以基于各个分区并行执行,从而提高执行效率。

上述数据库的同步方法中,通过获取对目标数据库的操作,当确定操作为目标操作时,将目标操作封装成对应的JSON消息,并确定操作对应的主题,根据主题将JSON消息存储在消息队列的对应分区中,进而在待同步数据库执行各分区中JSON消息对应的操作,从而更新待同步数据库。由于本实施例通过监听数据库的操作,并将监听到的目标操作封装成JSON消息按区存储,进而按区消费并在待同步数据库执行JSON消息,从而可以实现数据库间的双向同步,且不依赖于数据库的支持,对主流数据库都具有普适性,能够从根本上解决数据库的双向同步问题。

在一个实施例中,如图4所示,在步骤302中,获取对目标数据库的操作,具体可以包括:

步骤402,当监听到对目标数据库的操作为事务操作时,采用线程变量记录事务操作。

其中,事务操作是为完成一个完整的任务而执行的一系列操作,其是由一组必须要同时完成或者同时取消的操作组成,即由事务开始(begin transaction)和事务结束(end transaction)之间执行的全部操作组成。

在本实施例中,服务器通过监听对目标数据库的操作,当监听到事务操作时,则采用线程变量(Thread Local)记录该事务操作,即事务开始时通过线程变量开始记录对应的操作。

步骤404,当事务操作结束时,将记录的事务操作确定为目标操作。

由于事务开始时就通过线程变量开始记录对应的操作,因此,到事务结束时,线程变量记录了相应事务的所有操作,即完整的事务操作。

在本实施例中,当服务器监听到事务操作结束时,则可以将线程变量记录的事务操作确定为目标操作,从而可以确保事务操作的完整性。

在一个实施例中,在步骤404中,将记录的事务操作确定为目标操作之后,上述方法还可以包括:从线程变量中删除事务操作。具体地,当服务器监听到事务操作结束并将线程变量记录的事务操作确定为目标操作之后,则可以基于上述图3所示的方法对目标操作进行后续处理。同时,服务器从线程变量中删除该事务操作,即清空线程变量,以便于线程变量对后续监听到的事务操作进行记录,从而确保事务操作记录的准确性。

在一个实施例中,在步骤402中,采用线程变量记录事务操作之后,上述方法还可以包括:当事务操作回滚时,从线程变量中删除事务操作。其中,事务操作回滚也即事务回滚,是指将该事务已经完成对数据库的更新操作撤销。由于事务是一组必须要同时完成或者同时取消的操作,而在事务中,每个正确的操作都会被顺序执行,因此,当遇到错误的操作时就会回滚,即撤销该事务中已经执行的操作。

在本实施例中,当服务器监听到事务操作时,则采用线程变量记录该事务操作,即事务开始时通过线程变量开始记录对应的操作,而当服务器监听到事务操作回滚时,则直接从线程变量中删除该事务操作,即清空线程变量,从而可以确保事务回滚时数据库同步的正确性。

在一个实施例中,在步骤302中,获取对目标数据库的操作,还可以包括:当监听到对目标数据库的操作为非事务操作时,确定非事务操作为目标操作。其中,非事务操作是为完成一个任务而执行的单个操作。在本实施例中,服务器通过监听对目标数据库的操作,当监听到非事务操作时,则直接将该非事务操作作为目标操作,并基于上述图3所示的方法对目标操作进行后续处理,以更新待同步数据库,从而实现数据库间的同步更新。

在一个实施例中,操作中携带有待操作数据表的标识和/或待操作数据所属的账户标识,则在步骤306中,确定操作对应的主题,具体可以包括:根据待操作数据表的标识和/或账户标识确定操作对应的主题。其中,待操作数据表是服务器当前获取的操作所针对的目标数据库中的具体的数据表,通常,数据库中的每个数据表都具有对应的标识,因此,可以通过标识区分不同的数据表。账户标识则是用于区分不同的用户账户的标志或记号,数据库中可以存储有多个用户账户的数据,因此,可以通过账户标识来区分不同用户的数据。

在本实施例中,可以根据待操作数据表的标识来确定操作对应的主题,例如,可以根据数据表的不同标识而分别确定不同的主题。还可以根据待操作数据所属的账户标识而确定操作对应的主题,例如,对于不同的账户标识分别确定不同的主题。还可以结合待操作数据表的标识和待操作数据所属的账户标识来确定操作对应的主题,例如,可以基于数据表对账户标识进行取模,进而基于不同的取模结果而确定不同的主题。本实施例通过确定操作对应的主题,进而可以根据主题将操作封装的JSON消息分区存储,从而有利于提高后续的同步效率。

在一个实施例中,在步骤308中,在待同步数据库执行各分区中JSON消息对应的操作,具体可以包括:在待同步数据库,对各分区中JSON消息对应的操作按设定数量批量执行。由于JSON消息是基于主题进行分区,而主题又是基于操作中携带的待操作数据表的标识和/或待操作数据所属的账户标识确定,因此,不同主题的操作之间不存在依赖关系,从而可以并行执行各个主题的操作,即并行执行各分区中的JSON消息,从而提高同步效率。

而对于同一分区中的JSON消息,则可以基于设定数量批量执行,以进一步提高同步效率。其中,设定数量可以是预先设定的批量执行JSON消息的数量。又由于消息队列具有先进先出的特点,因此,在执行JSON消息时,可以基于该特点批量消费,从而能够确保同步的准确性及效率。

在一个实施例中,上述方法还可以包括:当批量执行失败时,对批量执行失败的分区中的JSON消息对应的操作进行逐条执行;并记录每一条操作的执行结果。其中,执行结果包括执行成功的结果或执行失败的结果。具体地,服务器在待同步数据库,对各分区中JSON消息对应的操作按设定数量批量执行时,若批量执行失败,则可以对批量执行失败的分区中的JSON消息对应的操作进行逐条执行,即一条一条地执行,同时记录每一条操作的执行结果,从而避免因批量执行失败而导致的同步错误,以进一步提高同步的准确性。

在一个实施例中,上述方法还可以包括:当逐条执行的执行结果为执行失败时,发送失败告警信息。其中,失败告警信息用于提醒操作执行失败。具体地,服务器在对批量执行失败的分区中的JSON消息对应的操作进行逐条执行,并记录每一条操作的执行结果,当执行结果为执行失败时,服务器还可以发送失败告警信息,以提醒相关人员操作执行失败,从而可以对执行失败的操作介入处理,以进一步提高同步的准确性。

在一个实施例中,本申请数据库的同步方法可以应用于如图5所示的系统中,该系统可以包括主数据库、子数据库、主服务器、子服务器、kafka(一种高吞吐量的分布式发布订阅消息系统)集群以及kafka消费端。其中,主数据库运行于主服务器,子数据库运行于子服务器。具体地,主数据库和子数据库可以是MySQL,也可以是DB2(database2,其是IBM开发的一种大型关系型数据库平台)。主服务器和子服务器则可以分别用独立的服务器或者是多个服务器组成的服务器集群来实现。

在本实施例中,以根据对主数据库的操作同步子数据库为例进行说明。具体地,用户通过客户端发送对主数据库的操作请求到主服务器,主服务器根据该请求执行对应的操作,同时,主服务器的总控层对操作进行拦截,并将拦截的目标操作封装成对应的JSON消息发送给kafka集群,kafka集群根据操作对应的主题将消息分区存储到消息队列。kafka消费端从kafka集群拉取消息,解析后按消息主题进行消费,并调用子数据库执行各主题对应消息的操作,从而实现基于对主数据库的操作同步子数据库。同理,还可以实现根据对子数据库的操作同步主数据库,从而可以实现数据库的双向同步。

在一种场景下,上述消息队列不限于通过kafka集群实现,其还可以通过RabbitMQ(其是一个由erlang开发的AMQP(Advanced Message Queue高级消息队列协议)实现,或者也可以通过RocketMQ(其是阿里巴巴集团自主研发的专业消息中间件)实现,本实施例并不对此进行限定。

在一个实施例中,如图6所示,以下进一步说明本申请数据库的同步方法,本实施例还是以基于对主数据库的操作同步子数据库为例进行说明,其具体可以包括:

步骤602,客户端访问主服务器。

其中,客户端是指主数据库的应用端,通过客户端访问主服务器,可以实现对主服务器中运行的主数据库进行相应的操作。

步骤604,主服务器监听客户端对主数据库的操作。

步骤606,判断操作是否为事务操作。

其具体可以通过预先的配置对操作进行识别,从而判断操作是否为事务操作。例如,可以预先配置事务操作的特征,从而对监听到的操作进行识别,当监听到的操作的特征与预先配置的事务操作的特征匹配时,则表示监听到的操作为事务操作。当确定操作为事务操作时,执行步骤608,当确定操作为非事务操作时,执行步骤616。

步骤608,当确定操作为事务操作时,采用线程变量记录相关操作。

步骤610,当监听到事务操作结束时,将记录的操作确定为目标操作。

步骤612,从线程变量删除记录的操作。

步骤614,当监听到事务操作回滚时,从线程变量删除记录的操作。

步骤616,当确定操作为非事务操作时,将该非事务操作确定为目标操作。

步骤618,将目标操作封装成对应的JSON消息。

步骤620,将封装的JSON消息发送给kafka集群。

步骤622,kafka集群根据操作对应的主题将JSON消息存储在消息队列的对应分区中。

步骤624,kafka消费端拉取消息并解析,获取对应的操作。

其中,kafka集群的消息队列遵循先进先出的处理原则,kafka消费端则基于该原则拉取消息。

在一种场景下,kafka消费端可以采用一主一从两台机器进行集群部署,正常情况下,只有主机器节点会拉取消息消费,而当主机器节点崩溃时,可以通过从机器节点拉取消息消费,从而保证了消息消费的高可用性。

步骤626,kafka消费端调用子数据库执行对应的操作,以同步子数据库。

具体地,调用子数据库执行对应的操作时,可以基于不同主题并行执行,同时,对于同一主题下的操作可以批量执行,从而可以提高同步效率。

应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。

基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的数据库的同步方法的数据库的同步装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个数据库的同步装置实施例中的具体限定可以参见上文中对于数据库的同步方法的限定,在此不再赘述。

在一个实施例中,如图7所示,提供了一种数据库的同步装置,包括:操作获取模块702、消息封装模块704、消息存储模块706和更新模块708,其中:

操作获取模块702,用于获取对目标数据库的操作;

消息封装模块704,用于当确定所述操作为目标操作时,将所述目标操作封装成对应的JSON消息;

消息存储模块706,用于确定所述操作对应的主题,根据所述主题将所述JSON消息存储在消息队列的对应分区中;

更新模块708,用于在待同步数据库执行各分区中所述JSON消息对应的操作,更新所述待同步数据库;当所述目标数据库为主数据库时,所述待同步数据库为子数据库,当所述目标数据库为子数据库时,所述待同步数据库为主数据库。

在一个实施例中,操作获取模块具体用于:当监听到对目标数据库的操作为事务操作时,采用线程变量记录所述事务操作;当所述事务操作结束时,将记录的所述事务操作确定为目标操作。

在一个实施例中,所述装置还包括删除模块,用于将记录的所述事务操作确定为目标操作之后,从所述线程变量中删除所述事务操作。

在一个实施例中,所述删除模块还用于:当所述事务操作回滚时,从所述线程变量中删除所述事务操作。

在一个实施例中,操作获取模块具体还用于:当监听到对目标数据库的操作为非事务操作时,确定所述非事务操作为目标操作。

在一个实施例中,消息存储模块还用于:所述操作中携带有待操作数据表的标识和/或待操作数据所属的账户标识,根据所述待操作数据表的标识和/或所述账户标识确定所述操作对应的主题。

在一个实施例中,所述更新模块还用于:在所述待同步数据库,对所述各分区中所述JSON消息对应的操作按设定数量批量执行。

在一个实施例中,所述更新模块还用于:当批量执行失败时,对批量执行失败的所述分区中的所述JSON消息对应的操作进行逐条执行;记录每一条操作的执行结果,所述执行结果包括执行成功或执行失败的结果。

在一个实施例中,所述装置还包括告警模块,用于当所述执行结果为执行失败时,发送失败告警信息。

上述数据库的同步装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图8所示。该计算机设备包括处理器、存储器、输入/输出接口(Input/Output,简称I/O)和通信接口。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储相应的数据。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据库的同步方法。

本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:

获取对目标数据库的操作;

当确定所述操作为目标操作时,将所述目标操作封装成对应的JSON消息;

确定所述操作对应的主题,根据所述主题将所述JSON消息存储在消息队列的对应分区中;

在待同步数据库执行各分区中所述JSON消息对应的操作,更新所述待同步数据库;当所述目标数据库为主数据库时,所述待同步数据库为子数据库,当所述目标数据库为子数据库时,所述待同步数据库为主数据库。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:当监听到对目标数据库的操作为事务操作时,采用线程变量记录所述事务操作;当所述事务操作结束时,将记录的所述事务操作确定为目标操作。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:从所述线程变量中删除所述事务操作。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:当所述事务操作回滚时,从所述线程变量中删除所述事务操作。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:当监听到对目标数据库的操作为非事务操作时,确定所述非事务操作为目标操作。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:所述操作中携带有待操作数据表的标识和/或待操作数据所属的账户标识,根据所述待操作数据表的标识和/或所述账户标识确定所述操作对应的主题。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:在所述待同步数据库,对所述各分区中所述JSON消息对应的操作按设定数量批量执行。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:当批量执行失败时,对批量执行失败的所述分区中的所述JSON消息对应的操作进行逐条执行;记录每一条操作的执行结果,所述执行结果包括执行成功或执行失败的结果。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:当所述执行结果为执行失败时,发送失败告警信息。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:

获取对目标数据库的操作;

当确定所述操作为目标操作时,将所述目标操作封装成对应的JSON消息;

确定所述操作对应的主题,根据所述主题将所述JSON消息存储在消息队列的对应分区中;

在待同步数据库执行各分区中所述JSON消息对应的操作,更新所述待同步数据库;当所述目标数据库为主数据库时,所述待同步数据库为子数据库,当所述目标数据库为子数据库时,所述待同步数据库为主数据库。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当监听到对目标数据库的操作为事务操作时,采用线程变量记录所述事务操作;当所述事务操作结束时,将记录的所述事务操作确定为目标操作。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:从所述线程变量中删除所述事务操作。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当所述事务操作回滚时,从所述线程变量中删除所述事务操作。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当监听到对目标数据库的操作为非事务操作时,确定所述非事务操作为目标操作。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:所述操作中携带有待操作数据表的标识和/或待操作数据所属的账户标识,根据所述待操作数据表的标识和/或所述账户标识确定所述操作对应的主题。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:在所述待同步数据库,对所述各分区中所述JSON消息对应的操作按设定数量批量执行。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当批量执行失败时,对批量执行失败的所述分区中的所述JSON消息对应的操作进行逐条执行;记录每一条操作的执行结果,所述执行结果包括执行成功或执行失败的结果。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当所述执行结果为执行失败时,发送失败告警信息。

在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:

获取对目标数据库的操作;

当确定所述操作为目标操作时,将所述目标操作封装成对应的JSON消息;

确定所述操作对应的主题,根据所述主题将所述JSON消息存储在消息队列的对应分区中;

在待同步数据库执行各分区中所述JSON消息对应的操作,更新所述待同步数据库;当所述目标数据库为主数据库时,所述待同步数据库为子数据库,当所述目标数据库为子数据库时,所述待同步数据库为主数据库。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当监听到对目标数据库的操作为事务操作时,采用线程变量记录所述事务操作;当所述事务操作结束时,将记录的所述事务操作确定为目标操作。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:从所述线程变量中删除所述事务操作。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当所述事务操作回滚时,从所述线程变量中删除所述事务操作。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当监听到对目标数据库的操作为非事务操作时,确定所述非事务操作为目标操作。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:所述操作中携带有待操作数据表的标识和/或待操作数据所属的账户标识,根据所述待操作数据表的标识和/或所述账户标识确定所述操作对应的主题。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:在所述待同步数据库,对所述各分区中所述JSON消息对应的操作按设定数量批量执行。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当批量执行失败时,对批量执行失败的所述分区中的所述JSON消息对应的操作进行逐条执行;记录每一条操作的执行结果,所述执行结果包括执行成功或执行失败的结果。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当所述执行结果为执行失败时,发送失败告警信息。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

技术分类

06120115631630