一种数据实时同步方法及系统与流程

文档序号:17320827发布日期:2019-04-05 21:31阅读:192来源:国知局
一种数据实时同步方法及系统与流程

本发明涉及互联网技术领域,特别是涉及一种数据实时同步方法及系统。



背景技术:

近年来,随着学校校园信息化建设的蓬勃发展,各校都积极的建设自己的信息化平台,但由于信息化建设初期缺乏统一规划,很多学校信息系统出现了以下的问题:一、业务系统间没有遵循统一的数据要求,没有形成统一的数据交互规范;二、业务系统间的数据交互采用的方式是通过数据库直连方式,直接进行数据库表的操作,不但增加了数据库的耦合度,还导致了数据库访问量过大,负担过重的情况;三、业务系统如果需要访问其他多个业务系统,则必须配置多个数据源,开发难度和维护难度增大;四、数据库间关系错综复杂,大数据量的同步只能在夜间闲时执行,同步效率低,周期长。总的来说,目前校园化信息系统中,多个同构数据库和异构数据库之间的数据同步,存在访问量大、维护难度大、效率低、周期长等问题。

名词解释

rabbitmq:一个由erlang开发的开源消息队列中间件;

sql:structuredquerylanguage,结构化查询语言。



技术实现要素:

为了解决上述的技术问题,本发明的目的是提供一种高效、快速的数据实时同步方法及系统。

一方面,本发明实施例提供了一种数据实时同步方法,包括以下步骤:

当检测到源数据库发生数据变更时,获取源数据库的数据变更序列,并将数据变更序列保存到数据变更日志表中;

当检测到数据变更日志表发生数据变更时,获取数据变更日志表中的变更数据并封装成消息队列信息后,将消息队列信息发送到消息队列中;

通知需要同步数据的目标数据库,以使得目标数据库在接收到通知消息后,从消息队列中读取消息队列信息后根据消息队列信息进行数据更新操作;

判断消息队列中的消息队列信息均发送成功后,向目标数据库发送同步完成消息通知。

进一步,所述当检测到源数据库发生数据变更时,获取源数据库的数据变更序列,并将数据变更序列保存到数据变更日志表中这一步骤,其具体为:

监听源数据库的变更日志,并在检测到源数据库发生数据变更时,获取源数据库的数据变更序列,并将数据变更序列封装成预设的消息格式后,保存到数据变更日志表中。

进一步,所述判断消息队列中的消息队列信息均发送成功后,向目标数据库发送同步完成消息通知这一步骤中,所述目标数据库在接收到同步完成消息通知后,将已完成同步的数据的数据状态设置为已同步。

进一步,所述当检测到数据变更日志表发生数据变更这一步骤中,通过定时扫描数据变更日志表来检测数据变更日志表是否发生数据变更。

进一步,所述当检测到数据变更日志表发生数据变更时,获取数据变更日志表中的变更数据并封装成消息队列信息后,将消息队列信息发送到消息队列中这一步骤,其具体为:

当检测到数据变更日志表发生数据变更时,获取数据变更日志表中的变更数据并封装成消息队列信息,同时将所获取的数据变更日志表中的变更数据标记为已读;

将消息队列信息发送到消息队列中,并在消息队列信息发送成功后,对应地将数据变更日志表中标记为已读的变更数据删除,或者在消息队列信息发送失败后,对应地将数据变更日志表中标记为已读的变更数据的已读标记进行还原。

另一方面,本发明实施例提供了一种数据实时同步系统,用于实现源数据库和目标数据库的数据同步,包括设置在源数据库上的数据采集模块、消息服务模块以及设置在目标数据库上的数据同步模块;

所述数据采集模块,用于当检测到源数据库发生数据变更时,获取源数据库的数据变更序列,并将数据变更序列保存到数据变更日志表中;

所述消息服务模块,用于当检测到数据变更日志表发生数据变更时,获取数据变更日志表中的变更数据并封装成消息队列信息后,将消息队列信息发送到消息队列中;

通知需要同步数据的目标数据库的数据同步模块;

判断消息队列中的消息队列信息均发送成功后,向目标数据库发送同步完成消息通知;

所述数据同步模块,用于在接收到通知消息后,从消息队列中读取消息队列信息后根据消息队列信息进行数据更新操作。

进一步,所述数据采集模块基于触发器法、日志法或api法捕捉变更数据;

所述数据采集模块基于触发器法捕捉变更数据的过程如下:在源数据库中为同步对象创建相应的触发器,当同步对象进行变更时,所创建的触发器被唤醒并获取对象变更序列;

所述数据采集模块基于日志法捕捉变更数据的过程如下:启用源数据库的数据库日志,并记录所有成功提交的操作记录信息,通过分析数据库日志的信息捕捉同步对象的变更序列;

所述数据采集模块基于api法捕捉变更数据的过程如下:在应用程序与源数据库之间加入一层中间处理层,当应用程序对源数据库进行修改的同事,通过中间处理层记录同步对象的变更序列。

进一步,所述消息服务模块基于rabbitmq实现消息的发送和接收,且所述消息服务模块采用文本消息作为载体进行消息的发送和接收。

进一步,所述数据同步模块具体用于:

对消息队列进行监听,并在判断接收到通知消息后,从消息队列中读取消息队列信息,并根据目标数据库的类型选择相应的消息解析器进行消息解析后,将解析结果生成其所在目标数据库可识别的sql脚本,进而通过数据库引擎访问目标数据库并在目标数据库上执行生成的sql脚本,进行目标数据库的数据更新操作。

进一步,所述消息服务模块包括定时任务模块,所述定时任务模块用于:

当检测到数据变更日志表发生数据变更时,获取数据变更日志表中的变更数据并封装成消息队列信息,同时将所获取的数据变更日志表中的变更数据标记为已读;

将消息队列信息发送到消息队列中。

本发明实施例当检测到源数据库发生数据变更时,获取源数据库的数据变更序列,并将数据变更序列保存到数据变更日志表,然后在检测到数据变更日志表发生数据变更时,获取数据变更日志表中的变更数据并封装成消息队列信息后,将消息队列信息发送到消息队列中,并通知需要同步数据的目标数据库,从而目标数据库在接收到通知消息后,从消息队列中读取消息队列信息后根据消息队列信息进行数据更新操作,可以实现一个源数据库与多个目标数据库之间的数据同步,同步方式简单,程序开发难度低,而且同步效率高,可以及时进行数据同步,周期较短。

附图说明

下面结合附图和实施例对本发明作进一步说明。

图1是本发明具体实施例的一种数据实时同步方法的流程图;

图2是本发明具体实施例的一种数据实时同步系统中数据同步模块的工作原理示意图。

具体实施方式

对于本发明实施例中的步骤编号,其仅为了便于阐述说明而设置,对步骤之间的顺序不做任何限定,实施例中的各步骤的执行顺序均可根据本领域技术人员的理解来进行适应性调整。

方法实施例一

参照图1,本实施例提供了一种数据实时同步方法,用于实现源数据库和目标数据库的数据同步,本实施例中所述同步方法在源数据库中执行,所述方法具体包括以下步骤:

s1、当检测到源数据库发生数据变更时,获取源数据库的数据变更序列,并将数据变更序列保存到数据变更日志表中;本发明中,数据变更包括数据新增、修改和删除;

s2、当检测到数据变更日志表发生数据变更时,获取数据变更日志表中的变更数据并封装成消息队列信息后,将消息队列信息发送到消息队列中;

s3、通知需要同步数据的目标数据库,以使得目标数据库在接收到通知消息后,从消息队列中读取消息队列信息后根据消息队列信息进行数据更新操作;这里,通知需要同步数据的目标数据库中,目标数据库的数量可以是一个也可以是多个,根据实际需要进行通知;

s4、判断消息队列中的消息队列信息均发送成功后,向目标数据库发送同步完成消息通知。

本实施例中,当检测到源数据库发生数据变更时,获取源数据库的数据变更序列,并将数据变更序列保存到数据变更日志表,然后在检测到数据变更日志表发生数据变更时,获取数据变更日志表中的变更数据并封装成消息队列信息后,将消息队列信息发送到消息队列中,并通知需要同步数据的目标数据库,从而目标数据库在接收到通知消息后,从消息队列中读取消息队列信息后根据消息队列信息进行数据更新操作,可以实现一个源数据库与多个目标数据库之间的数据同步,同步方式简单,程序开发难度低,而且同步效率高,可以及时进行数据同步,周期较短。

进一步作为优选的实施方式,所述步骤s1,其具体为:

监听源数据库的变更日志,并在检测到源数据库发生数据变更时,获取源数据库的数据变更序列,并将数据变更序列封装成预设的消息格式后,保存到数据变更日志表中。

这里预设的消息格式是指事先根据实际应用情况所设定的数据的统一的消息格式,通过对消息格式进行设定,保证了保存到数据变更日志表中的数据的格式的一致性,便于进行读取处理。

进一步作为优选的实施方式,所述步骤s4中,所述目标数据库在接收到同步完成消息通知后,将已完成同步的数据的数据状态设置为已同步。具体的,目标数据库本地也设置有用于记录数据的变更信息的数据变更日志表,目标数据库在接收到同步完成消息通知后,在目标数据库的数据变更日志表中将已完成同步的数据的数据状态设置为已同步,实现数据标记,避免后续重复进行同步。

进一步作为优选的实施方式,所述步骤s2中所述当检测到数据变更日志表发生数据变更这一步骤中,通过定时扫描数据变更日志表来检测数据变更日志表是否发生数据变更。这里,定时扫描的定时间隔可以根据实际应用需求来设定,例如设定为10秒、15秒或者20秒等,本发明不做详细限定。

进一步作为优选的实施方式,所述步骤s2,其具体为:

当检测到数据变更日志表发生数据变更时,获取数据变更日志表中的变更数据并封装成消息队列信息,同时将所获取的数据变更日志表中的变更数据标记为已读;

将消息队列信息发送到消息队列中,并在消息队列信息发送成功后,对应地将数据变更日志表中标记为已读的变更数据删除,或者在消息队列信息发送失败后,对应地将数据变更日志表中标记为已读的变更数据的已读标记进行还原。

这里,已读标记是指前述的标记为已读的变更数据的标记信息。将已读标记进行还原,实际上就是删除之前标记为已读的操作,例如将其还原为未读或者未读取等,从而在下一个对数据变更日志表的检测周期中,可以重新获取这部分变更数据进行同步处理,作为对同步失败的补救措施,而无需进行复杂的数据排查来对同步失败的数据进行再次同步,提高了同步的效率。而对于发送成功的数据,将其从数据变更日志表中删除,则避免了对这部分数据进行重复同步。

方法实施例二

本实施例提供了一种数据实时同步方法,用于实现源数据库和目标数据库的数据同步,本实施例中描述源数据库和目标数据库中具体如何进行数据处理,实现所述数据同步方法,具体的,所述方法包括以下步骤:

当源数据库检测到发生数据变更时,获取源数据库的数据变更序列,并将数据变更序列保存到数据变更日志表中;

当源数据库检测到数据变更日志表发生数据变更时,获取数据变更日志表中的变更数据并封装成消息队列信息后,将消息队列信息发送到消息队列中;

源数据库通知需要同步数据的目标数据库的数据同步模块;

目标数据库在接收到通知消息后,从消息队列中读取消息队列信息后根据消息队列信息进行数据更新操作;

源数据库判断消息队列中的消息队列信息均发送成功后,向目标数据库发送同步完成消息通知。

本发明可以实现一个源数据库与多个目标数据库之间的数据同步,同步方式简单,程序开发难度低,而且同步效率高,可以及时进行数据同步,周期较短。

本实施例的一种数据实时同步方法,分别从源数据库和目标数据库的角度来描述数据同步的过程,本方法可执行本发明方法实施例一的一种数据实时同步方法,可执行方法实施例一的任意组合实施步骤,具备方法实施例一相应的功能和有益效果。

系统实施例

本实施例提供了一种数据实时同步系统,用于实现源数据库和目标数据库的数据同步,包括设置在源数据库上的数据采集模块、消息服务模块以及设置在目标数据库上的数据同步模块;

所述数据采集模块,用于当检测到源数据库发生数据变更时,获取源数据库的数据变更序列,并将数据变更序列保存到数据变更日志表中;

所述消息服务模块,用于当检测到数据变更日志表发生数据变更时,获取数据变更日志表中的变更数据并封装成消息队列信息后,将消息队列信息发送到消息队列中;

通知需要同步数据的目标数据库的数据同步模块;

判断消息队列中的消息队列信息均发送成功后,向目标数据库发送同步完成消息通知;

所述数据同步模块,用于在接收到通知消息后,从消息队列中读取消息队列信息后根据消息队列信息进行数据更新操作。

本系统中,当数据采集模块检测到源数据库发生数据变更时,获取源数据库的数据变更序列,并将数据变更序列保存到数据变更日志表,然后消息服务模块在检测到数据变更日志表发生数据变更时,获取数据变更日志表中的变更数据并封装成消息队列信息后,将消息队列信息发送到消息队列中,并通知需要同步数据的目标数据库,从而目标数据库的数据同步模块在接收到通知消息后,从消息队列中读取消息队列信息后根据消息队列信息进行数据更新操作,可以实现一个源数据库与多个目标数据库之间的数据同步,同步方式简单,程序开发难度低,而且同步效率高,可以及时进行数据同步,周期较短。

进一步作为优选的实施方式,所述数据采集模块基于触发器法、日志法或api法捕捉变更数据;

所述数据采集模块基于触发器法捕捉变更数据的过程如下:在源数据库中为同步对象创建相应的触发器,当同步对象进行变更时,所创建的触发器被唤醒并获取对象变更序列;

所述数据采集模块基于日志法捕捉变更数据的过程如下:启用源数据库的数据库日志(例如mysql的binlog日志),并记录所有成功提交的操作记录信息,通过分析数据库日志的信息捕捉同步对象的变更序列;

所述数据采集模块基于api法捕捉变更数据的过程如下:在应用程序与源数据库之间加入一层中间处理层,当应用程序对源数据库进行修改的同事,通过中间处理层记录同步对象的变更序列。

进一步作为优选的实施方式,所述消息服务模块基于rabbitmq实现消息的发送和接收,且所述消息服务模块采用文本消息作为载体进行消息的发送和接收。

本发明的消息处理流程具体如下:

数据采集模块将变更的数据按照预设的消息格式进行组装后,调用rabbitmq客户端api消息发送至消息服务模块的rabbitmq消息队列,由rabbitmq将消息进行持久化保存;

由消息服务模块的rabbitmq的exchange负责把消息下发至消息队列中,提供给数据同步模块使用;

消息服务模块监听消息队列,发现有通知消息则将消息接收下来,并调用数据同步模块进行消息解析、执行;

数据同步模块完成数据同步操作后,发送确认消息通知,rabbitmq接收到确认通知后删除队列中消息。

进一步作为优选的实施方式,如图2所示,所述数据同步模块具体用于:

对消息队列进行监听,并在判断接收到通知消息后,从消息队列中读取消息队列信息,并根据目标数据库的类型选择相应的消息解析器进行消息解析后,将解析结果生成其所在目标数据库可识别的sql脚本,进而通过数据库引擎访问目标数据库并在目标数据库上执行生成的sql脚本,进行目标数据库的数据更新操作。

更具体的,在进行目标数据库的数据更新操作之后,当判断更新成功时,向消息服务模块发送更新确认消息,当判断更新不成功时,记录错误日志,并向消息服务模块发送更新失败消息。

进一步作为优选的实施方式,所述消息服务模块包括定时任务模块,所述定时任务模块用于:

当检测到数据变更日志表发生数据变更时,获取数据变更日志表中的变更数据并封装成消息队列信息,同时将所获取的数据变更日志表中的变更数据标记为已读;

将消息队列信息发送到消息队列中。

本实施例的一种数据实时同步系统,可执行本发明方法实施例一所提供的一种数据实时同步方法,可执行方法实施例一的任意组合实施步骤,具备该方法实施例一相应的功能和有益效果。

以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变型或替换均包含在本申请权利要求所限定的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1