数据同步方法、装置及系统与流程

文档序号:17641974发布日期:2019-05-11 00:44阅读:217来源:国知局
数据同步方法、装置及系统与流程

本申请涉及数据处理技术领域,具体涉及数据同步方法、装置及一种数据同步系统。



背景技术:

对于数据规模庞大和业务需求多样化的行业,采用微服务化体系构建数据处理系统能够适应迅速增长的业务需求和用户量。现有的一种采用微服务化体系构建的数据处理系统,包含一个主系统和多个子系统,其中主系统基于用于存储基础数据的主系统数据库处理所述基础数据,将所述主系统数据库作为源数据库;每个子系统基于各自的独立数据库对外提供业务服务,将所述子系统数据库作为目标数据库;源数据库的基础数据在发生变更后,需要及时地同步到各目标数据库,以保持数据一致性。如何将源数据库的变更数据更快速准确地清分至目标数据库,确保各子系统的数据能够及时达到一致性,是需要解决的问题。



技术实现要素:

本申请提供一种数据同步方法,以解决如何将源数据库的变更数据快速准确地清分至目标数据库的问题。

本申请提供一种数据同步方法,包括:

获取源数据库中的待同步数据,生成针对所述待同步数据的第一数据变更消息;

根据所述待同步数据在所述源数据库中所属的数据库表,确定所述第一数据变更消息的消息主题;

根据所述消息主题,将所述第一数据变更消息推入与所述消息主题对应的第一消息队列;其中,所述第一消息队列为只包括一个分区的单分区消息队列;

在满足触发条件时,根据预设分区策略,将所述第一消息队列中的第一数据变更消息分发到第二消息队列的第一分区中;所述第二消息队列为包括多个分区的多分区消息队列,所述多个分区中的每个分区都用于存储数据变更消息;所述第一分区为所述多个分区中存储有第一数据变更消息的分区;所述第二消息队列用于数据同步单元获取数据变更消息,根据数据变更消息将待同步数据同步到目标数据库。

可选的,所述获取源数据库中的待同步数据,生成针对所述待同步数据的第一数据变更消息,包括:

获取源数据库的日志;

根据所述日志获取记录变更信息;

根据所述记录变更信息获取所述待同步数据;

使用所述待同步数据,生成第一数据变更消息。

可选的,所述使用所述待同步数据,生成第一数据变更消息,包括:

按照预设数据格式对所述待同步数据进行格式化处理,使用格式化处理后的数据,生成所述第一数据变更消息。

可选的,所述获取源数据库中的待同步数据,生成针对所述待同步数据的第一数据变更消息,包括:

确定用于生成所述第一数据变更消息的消息主键;

根据所述消息主键和所述待同步数据,生成所述第一数据变更消息。

可选的,所述在满足触发条件时,根据预设分区策略,将所述第一消息队列中的第一数据变更消息分发到第二消息队列的第一分区中,包括:

在满足触发条件时,获取所述第一数据变更消息的消息主键;

根据所述消息主键和所述预设分区策略,确定对应所述第一数据变更消息的分区标识;

将所述第一数据变更消息发送给第二消息队列中所述分区标识指示的分区;所述分区标识指示的分区为所述第一分区。

可选的,所述根据所述消息主键和所述预设分区策略,确定对应所述第一数据变更消息的分区标识,包括:

获取所述消息主键的哈希值;

获取第二消息队列的分区数量;

利用所述消息主键的哈希值对所述分区数量取模,获得取模结果,将所述取模结果作为所述预设分区策略;

根据所述预设分区策略获得所述分区标识。

可选的,所述在满足触发条件时,根据预设分区策略,将所述第一消息队列中的第一数据变更消息分发到第二消息队列的第一分区中,包括:

在满足触发条件时,获取所述第一数据变更消息对应的待同步数据所属的业务类型信息或者所属的业务区域信息;

将所述业务类型信息或所述业务区域信息,与第二消息队列的至少一个分区的对应关系,作为所述预设分区策略;

根据所述预设分区策略指定对应所述第一数据变更消息的分区标识;

根据所述分区标识,将所述第一数据变更消息发送给第二消息队列中所述分区标识指示的分区。

可选的,所述方法还包括:

针对所述第二消息队列,启动用于提供数据变更消息的服务端;所述服务端用于向数据同步单元提供所述数据变更消息。

本申请还提供一种数据同步方法,包括:

数据同步单元获取用于指示在第二消息队列的第一分区中获取第一数据变更消息的指示信息;其中,所述数据同步单元用于将源数据库中的待同步数据同步到目标数据库,所述第二消息队列包括多个分区,所述多个分区中的每个分区都用于存储数据变更消息,所述第一分区为存储有所述第一数据变更消息并且与所述数据同步单元对应的分区,所述第一数据变更消息为针对待同步数据的数据变更消息;

所述数据同步单元从所述第一分区中获取所述第一数据变更消息;

所述数据同步单元根据所述第一数据变更消息,获取所述待同步数据;

所述数据同步单元将所述待同步数据同步到所述目标数据库。

可选的,所述方法还包括:

所述数据同步单元使用至少一个线程从第二消息队列获取所述数据变更消息;

所述数据同步单元从所述第一分区中获取所述第一数据变更消息,包括:

所述数据同步单元使用所述至少一个线程中的第一线程,从所述第一分区中获取所述第一数据变更消息。

可选的,所述数据同步单元使用至少一个线程从第二消息队列获取所述数据变更消息,包括:

所述数据同步单元,针对第二消息队列的多个分区中的每个分区,启动对应的线程;

使用启动的线程从对应的分区中获取所述数据变更消息。

可选的,所述方法还包括:

将所述线程作为客户端;

配置所述客户端参数和对应第二消息队列的服务端信息;

使用所述客户端参数和所述服务端信息,从所述服务端获取与所述线程对应的分区中的数据变更消息。

可选的,所述数据同步单元使用至少一个线程从第二消息队列获取所述数据变更消息,包括:

确定所述至少一个线程处理的消息主题;

根据所述消息主题,监听所述第二消息队列的多个分区中的至少一个分区;

使用所述至少一个线程获取监听到的数据变更消息。

可选的,所述数据同步单元将所述待同步数据同步到所述目标数据库,包括:

所述数据同步单元根据所述第一数据变更消息,生成用于向目标数据库中的第一数据库表同步数据的数据库同步指令;

使用所述数据库同步指令,将所述待同步数据同步到所述第一数据库表;其中,所述第一数据库表的结构,不同于所述同步数据在源数据库中所属的数据库表的结构。

本申请还提供一种数据库同步系统,包括:源数据库、消息队列流模块、数据同步单元、目标数据库;

所述源数据库,用于提供需要被同步到所述目标数据库的待同步数据,所述待同步数据包括用于保险业务的基础数据;

所述消息队列流模块,用于获取源数据库中的待同步数据,生成针对所述待同步数据的第一数据变更消息;根据所述待同步数据在所述源数据库中所属的数据库表,确定所述第一数据变更消息的消息主题;根据所述消息主题,将所述第一数据变更消息推入与所述消息主题对应的第一消息队列,其中,所述第一消息队列为只包括一个分区的单分区消息队列;在满足触发条件时,根据预设分区策略,将所述第一消息队列中的第一数据变更消息分发到第二消息队列的第一分区中,所述第二消息队列为包括多个分区的多分区消息队列,所述多个分区中的每个分区都用于存储数据变更消息,,所述第一分区为存储有所述第一数据变更消息并且与所述数据同步单元对应的分区,所述第二消息队列用于数据同步单元获取数据变更消息,根据数据变更消息将待同步数据同步到所述目标数据库;

所述数据同步单元,用于针对第二消息队列的多个分区中的每个分区,启动与每个分区分别对应的线程,使用启动的线程从对应的分区中获取所述数据变更消息,将源数据库中的待同步数据同步到目标数据库,其中,所述第二消息队列包括多个分区,所述多个分区中的每个分区都用于存储数据变更消息;获取用于指示在第二消息队列的第一分区中获取第一数据变更消息的指示信息,使用启动的线程中的第一线程,从所述第一分区中获取第一数据变更消息,其中,所述第一数据变更消息为针对待同步数据的数据变更消息;根据所述第一数据变更消息,获取所述待同步数据,将所述待同步数据同步到所述目标数据库;

所述目标数据库,用于接收所述数据同步单元同步的所述待同步数据。

可选的,所述消息队列流模块,包括变化数据捕获子模块,所述变化数据捕获子模块用于:

获取源数据库的日志;

根据所述日志获取记录变更信息;

根据所述记录变更信息获取所述待同步数据;

使用所述待同步数据,生成第一数据变更消息。

可选的,所述变化数据捕获子模块还用于:

根据所述源数据库中的第一数据库表,获取所述待同步数据,使用所述待同步数据生成第一数据变更消息;

所述数据同步单元,还用于:

根据所述第一数据变更消息,生成针对所述目标数据库中的第二数据库表的数据库同步指令;

根据所述数据库同步指令将所述待同步数据同步到所述第二数据库表;

其中,所述第二数据库表结构不同于所述第一数据库表。

可选的,所述消息队列流模块,具体用于:

确定用于生成所述第一数据变更消息的消息主键;

根据所述消息主键和所述待同步数据,生成所述第一数据变更消息。

可选的,所述消息队列流模块,具体用于:

在满足触发条件时,获取所述第一数据变更消息的消息主键;

根据所述消息主键和所述预设分区策略,确定对应所述第一数据变更消息的分区标识;

将所述第一数据变更消息发送给第二消息队列中所述分区标识指示的分区;所述分区标识指示的分区为所述第一分区。

可选的,所述消息队列流模块,具体用于:

获取所述消息主键的哈希值;

获取第二消息队列的分区数量;

利用所述消息主键的哈希值对所述分区数量取模,获得取模结果,将所述取模结果作为所述预设分区策略;

根据所述预设分区策略获得所述分区标识。

可选的,所述消息队列流模块,包括预设分区策略确定单元,所述预设分区策略确定单元用于:在满足触发条件时,获取所述第一数据变更消息对应的待同步数据所属的业务类型信息或者所属的业务区域信息;

将所述业务类型信息或所述业务区域信息,与第二消息队列的至少一个分区的对应关系,作为所述预设分区策略;

所述消息队列流模块,具体用于:根据所述预设分区策略指定对应所述第一数据变更消息的分区标识;

根据所述分区标识,将所述第一数据变更消息发送给第二消息队列中所述分区标识指示的分区。

可选的,所述消息队列流模块,还包括服务端子模块,所述服务端子模块用于:针对所述第二消息队列,启动用于提供数据变更消息的服务端;所述服务端用于向数据同步单元提供所述数据变更消息;

所述数据同步单元,还用于:

将所述线程作为客户端;

配置所述客户端参数和对应第二消息队列的服务端信息;

使用所述客户端参数和所述服务端信息,从所述服务端获取与所述线程对应的分区中的数据变更消息。

可选的,所述数据同步单元,还用于:

确定所述启动的线程处理的消息主题;

根据所述消息主题,监听所述第二消息队列的多个分区中的至少一个分区;

使用所述启动的线程获取监听到的数据变更消息。

可选的,所述系统还包括:营销平台、话务服务子系统;

所述营销平台,用于处理所述源数据库的基础数据,对所述基础数据进行变更处理;调用所述话务服务子系统的应用程序编程接口,对所述目标数据库的话务数据进行处理;

所述话务服务子系统,用于提供应用程序编程接口,并响应所述营销平台针对所述应用程序编程接口的调用,对所述目标数据库的话务数据进行处理;

所述源数据库,还存储有包含所述待同步数据的基础数据,接收所述营销平台对所述基础数据进行变更处理的请求,针对所述变更处理的请求提供所述待同步数据;

所述目标数据库,还存储有话务数据,并将接收的所述待同步数据作为增量话务数据进行存储。

可选的,所述源数据库包括:主数据库和备份库;

所述主数据库,用于接收所述营销平台对所述基础数据进行变更处理的请求,将针对所述变更处理的请求生成的变更数据同步到所述备份库;

所述备份库,用于接收由所述主数据库同步的变更数据,针对所述变更数据,向所述消息队列流模块提供所述待同步数据。

本申请还提供一种数据同步装置,包括:

数据变更消息生成单元,用于获取源数据库中的待同步数据,生成针对所述待同步数据的第一数据变更消息;

消息主题确定单元,用于根据所述待同步数据在所述源数据库中所属的数据库表,确定所述第一数据变更消息的消息主题;

第一消息队列单元,用于根据所述消息主题,将所述第一数据变更消息推入与所述消息主题对应的第一消息队列;其中,所述第一消息队列为只包括一个分区的单分区消息队列;

分区单元,用于在满足触发条件时,根据预设分区策略,将所述第一消息队列中的第一数据变更消息分发到第二消息队列的第一分区中;所述第二消息队列为包括多个分区的多分区消息队列,所述多个分区中的每个分区都用于存储数据变更消息;所述第一分区为所述多个分区中存储有第一数据变更消息的分区;所述第二消息队列用于数据同步单元获取数据变更消息,根据数据变更消息将待同步数据同步到目标数据库。

本申请还提供一种数据同步装置,应用于数据同步单元,所述数据同步单元包括:

指示信息获取子单元,用于获取用于指示在第二消息队列的第一分区中获取第一数据变更消息的指示信息;其中,所述数据同步单元用于将源数据库中的待同步数据同步到目标数据库,所述第二消息队列包括多个分区,所述多个分区中的每个分区都用于存储数据变更消息,所述第一分区为存储有所述第一数据变更消息并且与所述数据同步单元对应的分区,所述第一数据变更消息为针对待同步数据的数据变更消息;

第一数据变更消息获取子单元,用于从所述第一分区中获取所述第一数据变更消息;

待同步数据获取子单元,用于根据所述第一数据变更消息,获取所述待同步数据;

向目标数据库同步子单元,用于将所述待同步数据同步到所述目标数据库。

与现有技术相比,本申请具有以下优点:

本申请提供方法,通过针对源数据库的待同步数据生成第一数据变更消息,根据待同步数据在源数据库中所属的数据库表,确定第一数据变更消息的消息主题;按照消息主题使用只包括一个分区的第一消息队列,将第一数据变更消息分发到包括多个分区的第二消息队列的第一分区中;所述第二消息队列用于数据同步单元获取数据变更消息,根据数据变更消息将待同步数据同步到目标数据库,通过消息队列机制可以实时进行数据同步,并且按照数据库表确定消息主题,能保证每个数据库表的待同步数据对应的数据变更消息划分到同一个消息主题,从而保证待同步数据的有序性;通过第二消息队列的多个分区,可以使得携带待同步数据的数据变更消息能进行并行处理,提升处理效率,使得数据能及时同步及更新,从而解决了将源数据库的变更数据快速准确地清分至目标数据库的问题。

附图说明

图1是本申请第一实施例提供的一种数据同步方法的处理流程图;

图2是本申请第一实施例中包括的由单分区消息队列向多分区消息队列多发布数据变更线消息的分区示意图;

图3是本申请第二实施例提供的一种数据同步方法的处理流程图;

图4是本申请第三实施例提供的一种数据同步系统的示意图;

图5是本申请第三实施例中的源数据库向分公司的目标数据库进行数据同步的系统示意图;

图6是本申请第四实施例提供的一种数据同步装置示意图;

图7是本申请第五实施例提供的一种数据同步装置示意图。

具体实施方式

在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。

本申请提供数据同步方法、装置以及一种数据同步系统。在下面的实施例中逐一进行详细说明。

本申请第一实施例提供一种数据同步方法。

为便于理解,首先对所述数据同步方法的实际应用场景进行简要说明。实际应用中,源数据库和目标数据库之间的计算设备上可以部署消息队列流模块和数据同步单元,数据同步单元也称为清分模块。所述计算设备可以是集群的服务器节点。消息队列流模块用于将待同步数据以数据变更消息的方式,推入只有一个分区的单分区消息队列,再将单分区消息队列中的数据变更消息按照预设分区策略放入多个分区中,多分区中的每个分区存储数据变更消息。具体可以基于消息队列机制实现所述消息队列流模块。本申请实施例中,所谓消息队列(messagequeue)机制,是在计算设备之间以消息为数据单位传送数据的一种分布式消息驱动系统,例如,kafka消息队列。然后,再由数据同步单元从消息队列的多个分区获取数据变更消息,进一步获取待同步数据,并同步到目标数据库。第一实施例提供的数据同步方法,可以部署于消息队列流模块,用于将源数据库的变更数据快速准确地清分至目标数据库。

以下结合图1和图2对本申请第一实施例提供的一种数据同步方法进行说明。

图1所示的数据同步方法,包括:步骤s101至步骤s104。

步骤s101,获取源数据库中的待同步数据,生成针对所述待同步数据的第一数据变更消息。

所述待同步数据,为源数据库的数据发生变更后,需要同步到目标数据库的变更数据内容。例如,源数据库为存储有用于保险业务的基础数据的oracle数据库a,用户通过营销平台可以对所述基础数据进行操作,使得基础数据发生变化,变化的数据内容为所述待同步数据。

数据变更消息,是指能基于消息队列机制进行处理的携带有数据内容的消息,可以是能用于存储任何对象的字节数组。例如,存储有待同步数据的内容和产生所述同步数据对应的变更类型。所述第一数据变更消息,为包含所述待同步数据的数据变更消息。

本申请实施例中,基于消息队列机制实现数据变更消息的发布,由数据同步单元从消息队列的多个分区获取数据变更消息进行处理,将待同步数据同步到目标数据库。具体的,消息队列机制采用kafka消息队列。kafka消息队列可以作为数据变更消息的消息缓冲池,当源数据库侧和目标数据库侧的消息处理效率差异较大的情况下,实现数据变更消息的缓冲功能。并且,还可以利用kafka消息队列的分区特性,将数据变更消息发布到不同分区,使得所述数据同步单元可以实现多个消费者对消息并行处理,提高数据处理效率。

本申请实施例中,具体通过下述处理根据所述待同步数据生成针对所述待同步数据的第一数据变更消息:

获取源数据库的日志;

根据所述日志获取记录变更信息;

根据所述记录变更信息获取所述待同步数据;

使用所述待同步数据,生成第一数据变更消息。

沿用oracle数据库a的例子。可以使用cdc(changeddatacapture)连接oracle数据库a,以获取待同步数据。所谓cdc,为可以连接oracle数据库的增量日志分析工具,能用于实时捕获变化数据。

优选的,在使用所述待同步数据生成第一数据变更消息时,还包括:按照预设数据格式对所述待同步数据进行格式化处理,使用格式化处理后的数据,生成所述第一数据变更消息。所谓预设数据格式可以是string、json等格式。例如,将所述待同步数据以json格式生成数据变更消息,生成的数据变更消息中,包含待同步数据的内容以及变更类型。

优选的,所述获取源数据库中的待同步数据,生成针对所述待同步数据的第一数据变更消息,包括:确定用于生成所述第一数据变更消息的消息主键;根据所述消息主键和所述待同步数据,生成所述第一数据变更消息。给每条数据变更消息绑定消息主键,可以在后续处理步骤中将数据变更消息发送到指定位置,便于进行分区处理。

步骤s102,根据所述待同步数据在所述源数据库中所属的数据库表,确定所述第一数据变更消息的消息主题。

所述消息主题(topic),为被发布到消息队列的每条消息所属的类别。通过消息主题,可以方便的确定要消费的消息。

以基于kafka消息队列的数据变更消息为例,kafka消息队列包括消息生产者和消息消费者,消息生产者为将数据变更消息发布到kafka消息队列集群的一方,例如生成第一数据变更消息并将其推入第一消息队列的模块;消息消费者为从kafka消息队列集群中获取数据变更消息进行处理的一方,例如部署所述数据同步单元的终端或服务。属于同一个消息主题的数据变更消息实际上可能保存在一个或多个集群服务器上,当消息消费者订阅了一个消息主题时,只需指定数据变更消息的消息主题,而不需要数据的实际保持位置,就可以跨节点地接收所有与该消息主题相关的数据变更消息。

本申请实施例中,优选的,一个数据库表对应一个消息主题。相应的,如果一个消息主题的消息需要被多个消费组处理,则该消息主题的消息会根据消费组的数量复制为多份,提供给每个消费组,从而使得每个消费组能获取到全部的并且相同的数据,实现消息广播的功能。另外,也可以采用多个数据库表对应一个消息主题的形式,也能够保持分区中消息的有序性。

步骤s103,根据所述消息主题,将所述第一数据变更消息推入与所述消息主题对应的第一消息队列;其中,所述第一消息队列为只包括一个分区的单分区消息队列。

所述分区,是指消息队列机制中对消息数据进行维护的最小单位,同一个分区中的数据变更消息具有有序性。例如,同处于一个分区中的数据变更消息,通过设置的唯一的偏移量,保持消息的有序性。不同分区可以是物理上的不同集群服务器。每个消息主题可以包含一个或多个分区。所述单分区消息队列,为只包括一个分区的消息队列,消息队列包括存放消息的容器。

本步骤是,按照数据变更消息的消息主题,将数据变更消息推入对应的单分区消息队列中。实际应用中,由于源端数据库的业务系统对源端数据库的多次操作,使得源端数据库中的同一条记录数据先后发生多次变更,每次变更产生一条包含变更类型、变更内容等待同步数据的相关信息的数据变更消息。由于对源端数据库的操作存在先后依赖性,所以,由一个线程生产同一消息主题的数据变更消息、并将属于同一消息主题的消息推入到单分区消息队列,也具有严格的、与所述操作相同的有序性。当数据同步单元按照产生数据变更消息的有序性处理数据变更消息,能正确的将待同步数据同步到目标数据库。

步骤s104,在满足触发条件时,根据预设分区策略,将所述第一消息队列中的第一数据变更消息分发到第二消息队列的第一分区中;所述第二消息队列为包括多个分区的多分区消息队列,所述多个分区中的每个分区都用于存储数据变更消息;所述第一分区为所述多个分区中存储有第一数据变更消息的分区;所述第二消息队列用于数据同步单元获取数据变更消息,根据数据变更消息将待同步数据同步到目标数据库。

所述多分区消息队列,为包括多个分区的消息队列。

本步骤是,将第一消息队列的单分区中的数据变更消息,发布到第二消息队列的多个分区。在由单分区到多分区的消息发布过程中,根据预设分区策略,指定每条数据变更消息发布到第二消息队列的多分区中的一个分区。具体到本申请实施例,包括下述处理:将源数据库端的待同步数据先推送到推送到只有一个分区的第一个消息队列;对第一消息队列进行持续监听,只要监听到第一消息队列中有数据变更消息,则拉取数据变更消息并根据预设分区策略将拉取的数据变更消息推送至第二消息队列的对应分区中去。

请参考图2,图2示出了由第一消息队列的单分区到第二消息队列的多分区的消息发布示意图,图中,201为第一消息队列的单分区,第一消息队列保持了依赖操作顺序生成数据变更消息的有序性;202为将单分区的数据变更消息发布到多分区;203为第二消息队列的多分区,分区数为n。第二消息队列中每个分区保持了数据变更消息在第一消息队列中的有序性。

本申请实施例的一个实施方式中,按照消息主键确定预设分区策略。具体的,所述在满足触发条件时,根据预设分区策略,将所述第一消息队列中的第一数据变更消息分发到第二消息队列的第一分区中,包括:

在满足触发条件时,获取所述第一数据变更消息的消息主键;

根据所述消息主键和所述预设分区策略,确定对应所述第一数据变更消息的分区标识;

将所述第一数据变更消息发送给第二消息队列中所述分区标识指示的分区;所述分区标识指示的分区为所述第一分区。

所述第一分区存储有所述第一数据变更消息,并且用于所述数据同步单元获取第一数据变更消息,根据第一数据变更消息将对应的待同步数据同步到目标数据库。

优选的,采用下述处理确定对应所述第一数据变更消息的分区标识:

获取所述消息主键的哈希值;

获取第二消息队列的分区数量;

利用所述消息主键的哈希值对所述分区数量取模,获得取模结果,将所述取模结果作为所述预设分区策略;

根据所述预设分区策略获得所述分区标识。

例如,预设分区策略按如下公式确定:

分区值=hash(key)%partitionnum;

其中,key为消息主键;

partitionnum为第二消息队列的多分区的分区数量。

分区值可以作为指定分区的分区标识。采用该预设分区策略,可以保证消息主键相同的数据变更消息被推送到第二消息队列的多个分区中的同一个分区中,保证了数据变更消息由单分区发布到多分区时能保持数据变更消息在单分区中有序性。

本申请实施例的另一个实施方式中,针对每条数据变更消息指定预设分区策略。优选的,按照数据变更消息所属的业务类型信息或业务区域信息,指定所述数据变更消息发布到的第二消息队列的多分区中的一个分区。具体的,所述在满足触发条件时,根据预设分区策略,将所述第一消息队列中的第一数据变更消息分发到第二消息队列的第一分区中,包括:

在满足触发条件时,获取所述第一数据变更消息对应的待同步数据所属的业务类型信息或者所属的业务区域信息;

将所述业务类型信息或所述业务区域信息,与第二消息队列的至少一个分区的对应关系,作为所述预设分区策略;

根据所述预设分区策略指定对应所述第一数据变更消息的分区标识;

根据所述分区标识,将所述第一数据变更消息发送给第二消息队列中所述分区标识指示的分区。

将数据变更消息由第一消息队列的单分区,按照预设分区策略发布到第二消息队列的多个分区时,将每个消息主题中的数据变更消息合理发布到多个分区,以确保与一条记录相关的所有数据变更消息全部进入第二消息队列的同一个分区,由于多分区的每个分区中的消息有序性,从而保持了单分区中的数据变更消息的有序性,因此能正确的将待同步数据同步到目标数据库,确保数据的一致性。并且,可以对多分区进行并行处理,对应每个分区采用一个线程获取并处理数据变更消息,根据该数据变更消息将对应的待同步数据同步到目标数据库,提高了数据同步效率。

本申请实施例中,实际实施时,还包括:

针对所述第二消息队列,启动用于提供数据变更消息的服务端;所述服务端用于向数据同步单元提供所述数据变更消息。

以上述实施例为基础,本申请第二实施例提供一种数据同步方法。第二实施例提供的数据同步方法,可以部署于数据同步单元。由数据同步单元作为数据变更消息的处理者,从消息队列的多个分区获取数据变更消息,进一步获得待同步数据,并同步到目标数据库。

以下结合图3对本申请第二实施例提供的一种数据同步方法进行说明。

图3所示的数据同步方法,包括:步骤s301至步骤s304。

步骤s301,数据同步单元获取用于指示在第二消息队列的第一分区中获取第一数据变更消息的指示信息;其中,所述数据同步单元用于将源数据库中的待同步数据同步到目标数据库,所述第二消息队列包括多个分区,所述多个分区中的每个分区都用于存储数据变更消息,所述第一分区为存储有所述第一数据变更消息并且与所述数据同步单元对应的分区,所述第一数据变更消息为针对待同步数据的数据变更消息。

本步骤是,获取用于指示在第二消息队列的第一分区中获取第一数据变更消息的指示信息。例如,根据业务处理触发获取所述指示信息。

本申请实施例中,所述数据同步单元使用至少一个线程从第二消息队列获取所述数据变更消息。获取所述指示信息后,通过下述处理从所述第一分区中获取所述第一数据变更消息:所述数据同步单元使用所述至少一个线程中的第一线程,从所述第一分区中获取所述第一数据变更消息。实际实施中,所述数据同步单元的线程数不小于第二消息队列的分区数,从而实现多线程并行处理数据,提高效率。

优选的,所述数据同步单元使用至少一个线程从第二消息队列获取所述数据变更消息,包括:所述数据同步单元,针对第二消息队列的多个分区中的每个分区,启动对应的线程;使用启动的线程从对应的分区中获取所述数据变更消息。

例如,如果提供第二消息队列的消息队列流模块为基于kafka消息队列机制实现的计算模块,则所述数据同步单元启动的每个线程可以是集成kafka消息队列的消费者模块的消费者线程,消费第二消息队列的多分区中的每个分区的数据变更消息。所谓消费者模块,是向kafka集群的broker(代理者)读取数据变更消息的客户端。实际实现时,数据同步单元可以包括多个消费组,每个消费组可以包括多个消费者线程。同一个消费组中的每个消费者线程对应处理一个分区的数据变更消息,每条数据变更消息只能被同一个消费组中的一个消费者线程处理。由于第二消息队列的每个分区中的数据变更消息的有序性,保持了源数据库端针对同一条记录产生待同步数据的操作顺序,并且,同一条记录相关的数据变更消息被发布到第二消息队列的同一个分区,因此,数据同步单元的一个消费者线程逐个处理对应该消费者线程的一个分区中的数据变更消息,不打乱数据变更消息的原有顺序,能正确将待同步数据同步到目标数据库,保持数据一致性。多个消费者线程分别对应处理多个分区的数据变更消息,实现了数据变更消息的并行处理,提高了数据同步效率。需要说明的是,在提供第二消息队列的消息队列流模块中,同一个消息主题中的数据变更消息将根据数据同步单元的消费组的数量复制多份,每个消费组获取到全部的且相同的数据变更消息,实现数据变更消息广播的功能,便于水平扩展。

优选的,消费者数量比第二消息队列的分区数量多,确保每个分区的数据变更消息都会被处理,提供高可用性。

步骤s302,所述数据同步单元从所述第一分区中获取所述第一数据变更消息。

所述数据同步单元从消息队列流模块的第二消息队列的多分区中的第一分区获取并处理第一数据变更消息。

本申请实施例的一个实施方式中,数据同步单元作为客户端从第二消息队列拉取(pull模式)数据变更消息,包括下述处理:

将所述线程作为客户端;

配置所述客户端参数和对应第二消息队列的服务端信息;

使用所述客户端参数和所述服务端信息,从所述服务端获取与所述线程对应的分区中的数据变更消息。

例如,数据同步单元对应处理第一分区的第一线程作为客户端,从第一分区逐个拉取并处理数据变更消息。

本申请实施例的另一个实施方式中,数据同步单元实时监听第二消息队列获取数据变更消息,包括下述处理:

确定所述至少一个线程处理的消息主题;

根据所述消息主题,监听所述第二消息队列的多个分区中的至少一个分区;

使用所述至少一个线程获取监听到的数据变更消息。

步骤s303,所述数据同步单元根据所述第一数据变更消息,获取所述待同步数据。

本步骤是获得第一数据变更消息包含的待同步数据。

本申请实施例中,具体的,包括下述处理:按照预设数据格式从第一数据变更消息中获取所述待同步数据。例如,生成第一数据变更消息时采用的格式为json格式,则按照json格式解析出待同步数据的内容以及变更类型。

步骤s304,所述数据同步单元将所述待同步数据同步到所述目标数据库。

本申请实施例中,所述源数据库和所述目标数据库可以为具有不同数据库管理系统的异构数据库。具体的,所述源数据库和所述目标数据库为下述任一形式的异构:运行于不同的计算机体系结构、具有不同基础操作系统、具有不同的dbms(databasemanagementsystem)。所述数据同步方法也均适用于下述两种场景:所述待同步数据被同步到目标数据库中所属的目标数据库表,其表结构可以不同于所述待同步数据在所述源数据库中所属的源数据库表的表结构;或者,所述目标数据库表与所述源数据库表也可以具有相同的表结构。

所述数据同步单元将所述待同步数据同步到所述目标数据库,包括:

所述数据同步单元根据所述第一数据变更消息,生成用于向目标数据库中的第一数据库表同步数据的数据库同步指令;

使用所述数据库同步指令,将所述待同步数据同步到所述第一数据库表;其中,所述第一数据库表的结构,不同于所述同步数据在源数据库中所属的数据库表的结构。这样,实现了异构数据库间的同步。

以上述实施例为基础,本申请第三实施例提供了一种数据同步系统。

请参考图4,其示出了所述数据同步系统的示意图。由于第三实施例以上述实施例为基础,所以描述得比较简单,相关部分请参见上述实施例的对应说明。

图4所示的数据同步系统,包括:源数据库、消息队列流模块、数据同步单元、目标数据库;

所述源数据库401,用于提供需要被同步到所述目标数据库的待同步数据,所述待同步数据包括用于保险业务的基础数据。

源数据库可以是存储有基础数据的数据库,例如oracle数据库。

本申请实施例中的一个实施例方式中,所述数据同步系统,还包括:营销平台、话务服务子系统;其中,

所述营销平台,用于处理所述源数据库的基础数据,对所述基础数据进行变更处理;调用所述话务服务子系统的应用程序编程接口,对所述目标数据库的话务数据进行处理;

所述话务服务子系统,用于提供应用程序编程接口,并响应所述营销平台针对所述应用程序编程接口的调用,对所述目标数据库的话务数据进行处理;

相应的,所述源数据库,还存储有包含所述待同步数据的基础数据,接收所述营销平台对所述基础数据进行变更处理的请求,针对所述变更处理的请求提供所述待同步数据;所述目标数据库,还存储有话务数据,并将接收的所述待同步数据作为增量话务数据进行存储。

例如,当营销平台对源数据库进行操作,源数据库中的基础数据发生变更,变更的数据内容和变更类型可以作为待同步数据。

优选的,所述源数据库包括:主数据库和备份库;其中,所述主数据库,用于配合所述营销平台对所述基础数据进行处理,接收所述营销平台对所述基础数据进行变更,将变更数据同步到所述备份库;所述备份库,用于接收由所述主数据库同步的变更数据,针对所述基础数据的变更数据,向所述消息队列流模块提供所述待同步数据。所述备份库,包括备用数据库。采用备份库向消息队列流模块提供待同步数据,能够减小数据同步对主数据库的性能影响。

所述目标数据库402,用于接收所述数据同步单元同步的所述待同步数据。

目标数据库可以为与源数据库异构的数据库。例如,源数据库为oracle数据库,目标数据库可以是gauss数据库(高斯数据库)。所述数据同步系统能够实现在两种异构数据库之间的数据同步。

所述消息队列流模块403,用于获取源数据库中的待同步数据,生成针对所述待同步数据的第一数据变更消息;根据所述待同步数据在所述源数据库中所属的数据库表,确定所述第一数据变更消息的消息主题;根据所述消息主题,将所述第一数据变更消息推入与所述消息主题对应的第一消息队列,其中,所述第一消息队列为只包括一个分区的单分区消息队列;在满足触发条件时,根据预设分区策略,将所述第一消息队列中的第一数据变更消息分发到第二消息队列的第一分区中,所述第二消息队列为包括多个分区的多分区消息队列,所述多个分区中的每个分区都用于存储数据变更消息,所述第一分区为存储有所述第一数据变更消息并且与所述数据同步单元对应的分区,所述第二消息队列用于数据同步单元获取数据变更消息,根据数据变更消息将待同步数据同步到所述目标数据库。

本申请实施例的一个实施方式中,所述消息队列流模块,包括变化数据捕获子模块,所述变化数据捕获子模块用于源数据库端的待同步数据,生成第一数据变更消息,具体包括下述处理:

获取源数据库的日志;

根据所述日志获取记录变更信息;

根据所述记录变更信息获取所述待同步数据;

使用所述待同步数据,生成第一数据变更消息。

实际应用中,所述源数据库和所述目标数据库可以为具有不同数据库管理系统的异构数据库。具体的,所述源数据库和所述目标数据库为下述任一形式的异构:运行于不同的计算机体系结构、具有不同基础操作系统、具有不同的dbms(databasemanagementsystem)。例如,源数据库为oracle数据库,目的数据库为高斯数据库(gaussdb)。优选的,所述变化数据捕获子模块还用于:根据所述源数据库中的第一数据库表,获取所述待同步数据,使用所述待同步数据生成第一数据变更消息;相应的,所述数据同步单元,还用于:

根据所述第一数据变更消息,生成针对所述目标数据库中的第二数据库表的数据库同步指令;

根据所述数据库同步指令将所述待同步数据同步到所述第二数据库表;

其中,所述第二数据库表结构不同于所述第一数据库表。

本申请实施例提供的一个实施方式中,所述消息队列流模块根据数据变更消息的消息主键,确定预设分区策略,根据预设分区策略选择数据变更消息要发布到的消息队列的具体分区。因此,所述消息队列流模块,还具体用于:确定用于生成所述第一数据变更消息的消息主键;根据所述消息主键和所述待同步数据,生成所述第一数据变更消息。进一步的,所述消息队列流模块在满足触发条件时,获取所述第一数据变更消息的消息主键;根据所述消息主键和所述预设分区策略,确定对应所述第一数据变更消息的分区标识;将所述第一数据变更消息发送给第二消息队列中所述分区标识指示的分区;所述分区标识指示的分区为所述第一分区。

其中,具体通过下述处理确定所述分区标识:

获取所述消息主键的哈希值;

获取第二消息队列的分区数量;

利用所述消息主键的哈希值对所述分区数量取模,获得取模结果,将所述取模结果作为所述预设分区策略;

根据所述预设分区策略获得所述分区标识。

本申请实施例的另一个具体实施方式中,按照数据变更消息所属的业务类型或业务区域确定发布到第二消息队列的具体分区。具体的,所述消息队列流模块,包括预设分区策略确定单元,所述预设分区策略确定单元用于:在满足触发条件时,获取所述第一数据变更消息对应的待同步数据所属的业务类型信息或者所属的业务区域信息;

将所述业务类型信息或所述业务区域信息,与第二消息队列的至少一个分区的对应关系,作为所述预设分区策略;

所述消息队列流模块,具体用于:根据所述预设分区策略指定对应所述第一数据变更消息的分区标识;

根据所述分区标识,将所述第一数据变更消息发送给第二消息队列中所述分区标识指示的分区。

本申请实施例的另一个实施方式中,,所述消息队列流模块,还包括服务端子模块,所述服务端子模块用于:针对所述第二消息队列,启动用于提供数据变更消息的服务端;所述服务端用于向数据同步单元提供所述数据变更消息。

所述数据同步单元404,用于针对第二消息队列的多个分区中的每个分区,启动与每个分区分别对应的线程,使用启动的线程从对应的分区中获取所述数据变更消息,将源数据库中的待同步数据同步到目标数据库,其中,所述第二消息队列包括多个分区,所述多个分区中的每个分区都用于存储数据变更消息;获取用于指示在第二消息队列的第一分区中获取第一数据变更消息的指示信息,使用启动的线程中的第一线程,从所述第一分区中获取第一数据变更消息,其中,所述第一数据变更消息为针对待同步数据的数据变更消息;根据所述第一数据变更消息,获取所述待同步数据,将所述待同步数据同步到所述目标数据库。

本申请实施例中,所述数据同步单元也称为清分模块,通过多线程处理消息队列模块的第二消息队列的多个分区中的数据变更消息。一种具体实施方式中,所述数据同步单元,包括多线程消费子模块,所述多线程消费子模块用于:

针对第二消息队列的多个分区中的每个分区,启动对应的线程;

使用启动的线程从对应的分区中获取所述数据变更消息;其中,使用启动的线程中的第一线程,从所述第一分区中获取所述第一数据变更消息。实际实施中,所述数据同步单元的线程数不小于第二消息队列的分区数,从而实现多线程并行处理数据,提高效率。

本申请实施例的一个实施方式中,所述消息队列流模块,如上所述还包括服务端子模块,相应的,所述数据同步单元,还用于:

将所述线程作为客户端;

配置所述客户端参数和对应第二消息队列的服务端信息;

使用所述客户端参数和所述服务端信息,从所述服务端获取与所述线程对应的分区中的数据变更消息。

本申请实施例的另一个实施方式中,所述数据同步单元,对第二消息队列进行监听,获取并处理监听到的数据变更消息,具体包括:

确定所述启动的线程处理的消息主题;

根据所述消息主题,监听所述第二消息队列的多个分区中的至少一个分区;

使用所述启动的线程获取监听到的数据变更消息。

优选的,数据同步单元根据数据变更消息获取待同步数据的内容以及变更类型,生成sql语句,通过jdbc连接到目标数据库,执行所述sql语句,将所述待同步数据同步到目标数据库。

举例如下。图5示出了某集团公司的源数据库向分公司的目标数据库进行数据同步的系统。图中,营销平台501连接存有基础数据的源数据库502,并对基础数据进行处理;源数据库502为oracle数据库,包括主数据库和备份库;

话务服务子系统503连接存有话务数据的目标数据库504,话务服务子系统503提供话务服务需要依赖基础数据,因此当营销平台501对源数据库进行操作后使得基础数据产生变更,基础数据的变更需要同步到目标数据库503作为增量话务数据进行存储;目标数据库504采用gauss数据库;

源数据库502的备份库连接到消息队列流模块505,消息队列流模块505获取备份库的待同步数据,生成数据变更消息,首先推入只包括一个分区的第一消息队列505-1中,满足触发条件时将单分区中的数据变更消息发布到包括多个分区的第二消息队列505-2;

清分模块506包括多个消费者线程,每个消费者线程处理所述第二消息队列505-2的一个分区的数据变更消息,将对应的待同步数据同步到目标数据库504中。

与本申请第一实施例提供的一种数据同步方法相对应,本申请第四实施例还提供了一种数据同步装置。

参照图6,其示出了所述数据同步装置示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关的部分请参见方法实施例的对应说明。

第四实施例提供一种数据同步装置,包括:

数据变更消息生成单元601,用于获取源数据库中的待同步数据,生成针对所述待同步数据的第一数据变更消息;

消息主题确定单元602,用于根据所述待同步数据在所述源数据库中所属的数据库表,确定所述第一数据变更消息的消息主题;

第一消息队列单元603,用于根据所述消息主题,将所述第一数据变更消息推入与所述消息主题对应的第一消息队列;其中,所述第一消息队列为只包括一个分区的单分区消息队列;

分区单元604,用于在满足触发条件时,根据预设分区策略,将所述第一消息队列中的第一数据变更消息分发到第二消息队列的第一分区中;所述第二消息队列为包括多个分区的多分区消息队列,所述多个分区中的每个分区都用于存储数据变更消息;所述第一分区为所述多个分区中存储有第一数据变更消息的分区;所述第二消息队列用于数据同步单元获取数据变更消息,根据数据变更消息将待同步数据同步到目标数据库。

其中,所述数据变更消息生成单元601,具体用于:

获取源数据库的日志;

根据所述日志获取记录变更信息;

根据所述记录变更信息获取所述待同步数据;

使用所述待同步数据,生成第一数据变更消息。

其中,所述数据变更消息生成单元601,具体用于:按照预设数据格式对所述待同步数据进行格式化处理,使用格式化处理后的数据,生成所述第一数据变更消息。

其中,所述数据变更消息生成单元601,具体用于:确定用于生成所述第一数据变更消息的消息主键;根据所述消息主键和所述待同步数据,生成所述第一数据变更消息。

其中,所述分区单元604具体用于:

在满足触发条件时,获取所述第一数据变更消息的消息主键;

根据所述消息主键和所述预设分区策略,确定对应所述第一数据变更消息的分区标识;

将所述第一数据变更消息发送给第二消息队列中所述分区标识指示的分区;所述分区标识指示的分区为所述第一分区。

其中,所述分区单元604包括分区标识确定子单元,所述分区标识确定子单元用于:

获取所述消息主键的哈希值;

获取第二消息队列的分区数量;

利用所述消息主键的哈希值对所述分区数量取模,获得取模结果,将所述取模结果作为所述预设分区策略;

根据所述预设分区策略获得所述分区标识。

其中,所述分区单元604具体用于:

在满足触发条件时,获取所述第一数据变更消息对应的待同步数据所属的业务类型信息或者所属的业务区域信息;

将所述业务类型信息或所述业务区域信息,与第二消息队列的至少一个分区的对应关系,作为所述预设分区策略;

根据所述预设分区策略指定对应所述第一数据变更消息的分区标识;

根据所述分区标识,将所述第一数据变更消息发送给第二消息队列中所述分区标识指示的分区。

其中,所述装置还包括服务端子单元,所述服务端子单元用于:针对所述第二消息队列,启动用于提供数据变更消息的服务端;所述服务端用于向数据同步单元提供所述数据变更消息。

与本申请第二实施例提供的一种数据同步方法相对应,本申请第五实施例还提供了一种数据同步装置。

参照图7,其示出了所述数据同步装置示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关的部分请参见方法实施例的对应说明即可。

第五实施例提供一种数据同步装置,应用于数据同步单元,包括:

指示信息获取子单元701,用于获取用于指示在第二消息队列的第一分区中获取第一数据变更消息的指示信息;其中,所述数据同步单元用于将源数据库中的待同步数据同步到目标数据库,所述第二消息队列包括多个分区,所述多个分区中的每个分区都用于存储数据变更消息,所述第一分区为存储有所述第一数据变更消息并且与所述数据同步单元对应的分区,所述第一数据变更消息为针对待同步数据的数据变更消息;

第一数据变更消息获取子单元702,用于从所述第一分区中获取所述第一数据变更消息;

待同步数据获取子单元703,用于根据所述第一数据变更消息,获取所述待同步数据;

向目标数据库同步子单元704,用于将所述待同步数据同步到所述目标数据库。

其中,所述装置还包括多线程子单元,所述多线程子单元用于:使用至少一个线程从第二消息队列获取所述数据变更消息;

相应的,所述第一数据变更消息获取子单元702还用于:使用所述至少一个线程中的第一线程,从所述第一分区中获取所述第一数据变更消息。

其中,所述多线程子单元,具体用于:针对第二消息队列的多个分区中的每个分区,启动对应的线程;使用启动的线程从对应的分区中获取所述数据变更消息。

其中,所述装置还包括客户端子单元,所述客户端子单元用于:

将所述线程作为客户端;

配置所述客户端参数和对应第二消息队列的服务端信息;

使用所述客户端参数和所述服务端信息,从所述服务端获取与所述线程对应的分区中的数据变更消息。

其中,所述多线程子单元,具体用于:

确定所述至少一个线程处理的消息主题;

根据所述消息主题,监听所述第二消息队列的多个分区中的至少一个分区;

使用所述至少一个线程获取监听到的数据变更消息。

其中,所述向目标数据库同步子单元704具体用于:

根据所述第一数据变更消息,生成用于向目标数据库第一数据库表同步数据的数据库同步指令;

使用所述数据库同步指令,将所述待同步数据同步到所述第一数据库表;其中,所述第一数据库表的结构,不同于所述同步数据在源数据库中所属的数据库表的结构。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。

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