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

文档序号:19418540发布日期:2019-12-14 01:11阅读:153来源:国知局
一种数据同步方法及系统与流程

本发明涉及数据同步领域,特别涉及一种数据同步方法及系统。



背景技术:

随着社会的发展和科技的进步,用户越来越依赖网络系统来处理各种事务。网络系统的正常运行依赖于数据中心系统的稳定运行,一旦数据由于某种原因丢失,将会使得某些功能陷入瘫痪,对用户造成不可估量的损失。为了保证源数据库中数据安全,通常采用备份数据的方式保证数据的连续性,将服务器上的源数据库的数据远程同步至目标数据库,以便于在服务器出现故障时,能使用目标数据库中的数据。现有技术中,数据库之间的远程同步主要采用数据库数据同步技术。

传统的主流数据同步软件,如oraclegoldengate,采用文件形式来保存检查点和缓存中间数据。goldengate抽取源数据库数据时需要将抽取的日志写入源数据库的trail文件队列,随后通过网络将trail文件队列中的内容发送到目标数据库,目标数据库同样将接收到的内容写入目标数据库的trail文件队列,复制进程再将trail文件中的内容解析为sql并同步到目标数据库系统中。这种基于文件的方式可以应对源数据库与目标数据库之间的网络中断等类型的故障。同时,goldengate通过将检查点写到文件的方式来解决其自身崩溃重启后从什么位置继续处理数据(包括读取日志和同步写数据)的问题。

以上基于检查点文件/trail文件的技术实现简单,但其问题也很明显:首先,文件只是存储在单机上的,当该机出现硬件故障而非进程崩溃之类软件问题时文件就无法访问了,从而形成了单点故障;其次,将中间数据保存在文件中待随后的同步进程来读取的方式意味着多了一次磁盘写入和读取,显然会增加开销和降低同步速度。



技术实现要素:

本发明的目的在于:提供了一种数据同步方法及系统,解决了现有基于检查点文件/trail文件的数据同步中单点故障及同步效率较低的问题。

本发明采用的技术方案如下:

一种数据同步方法,基于源数据库、目标数据库和分布式缓存系统,源数据库每成功发送一次变更数据后,更新分布式缓存系统中的源数据库检查点信息;目标数据库每成功同步一次变更数据后,目标数据库就更新分布式缓存系统中的目标数据库检查点信息。

本方案区别于现有的数据同步方法,将检查点存储在分布式缓存系统中,即使出现单点硬件故障,也不会导致检查点丢失,保证了数据同步系统的高可用性。同时,源数据库在变更数据发送成功后才更新分布式缓存系统中的源数据库检查点信息,即确认目标数据库接受变更数据后才更新分布式缓存系统中的源数据库检查点信息,而非发送后即更新分布式缓存系统中的源数据库检查点信息,可以进一步的保证在出现问题进行断点续传时的效率。

进一步的,所述分布式缓存系统采用redis分布式缓存系统。分布式缓存:分布式缓存指的是与应用分离的缓存组件或服务。它通常基于内存,可持久化,在很多场合可以对关系数据库起到很好的补充作用,显著提高读取数据的性能。典型的分布式缓存,如redis,性能强劲,具有复制特性从而支持高可用。redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了java,c/c++,c#,php,javascript,perl,object-c,python,ruby,erlang等客户端,使用很方便。redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

进一步的,所述源数据库发送变更数据的方法包括以下步骤:

s1、通过事件流抽取进程读取源数据库日志的获取变更数据;

s2、事件流抽取进程将变更数据转换成内部事件流;

s3、内部事件流通过网络发送到目标数据库。

进一步的,所述事件流抽取进程将变更数据转换成内部事件流的方法包括以下步骤:

s201、事件流抽取进程读取变更数据;

s202、事件流抽取进程处理变更数据,生成内部相应的事件流数据。

所述目标数据库同步变更数据的方法包括以下步骤:

s4、消息队列通过网络接收内部事件流;

s5、事件流同步进程将消息队列接收到的内部事件流解析为sql语句;

s6、目标数据库根据解析得到的sql语句进行同步。所述内部事件流为统一格式,由于数据库种类繁多,在进行数据同步时,无法保证源数据库与目标数据库为同种数据库,即数据库日志格式可能是不同的。因此,将数据库日志记录的各项事务均转化为统一格式的内部事件流进行传输,在目标数据库通过消息队列和事件流同步进程接收和解析内部事件流后得到可用的sql语句。

进一步的,所述消息队列采用开源消息队列。所述开源消息队列包括kafka、activemq、rabbitmq、rocketmq等消息队列。消息队列支持高性能的异步通信,将消息发送端和接收端解耦,并且支持高可用,可以进一步提升本方案的可靠性。

进一步的,还包括使用该方法的任意组件出现故障时的解决方法,包括以下步骤:

当源数据库出现软件或硬件故障时,包括以下步骤:

s701、重启事件流抽取进程;

s801、事件流抽取进程从分布式缓存系统中获取源数据库检查点信息;

s901、事件流抽取进程根据获取的源数据库检查点信息从源数据库中检查点对应的位置重新开始读取日志信息;

当目标数据库出现软件或硬件故障时,包括以下步骤:

s702、重启事件流同步进程;

s802、事件流同步进程从分布式缓存系统中获取目标数据库检查点信息;

s902、事件流同步进程根据获取的目标数据库检查点信息从目标数据库中检查点对应的位置重新开始进行同步。

当源数据库一侧出现软件或硬件故障时,执行步骤s701-s901,当目标数据库一侧出现软件或硬件故障时,执行步骤s702-s902。上述步骤利用读取日志的幂等性,即由于数据库写日志文件只会在末端不断增加新的数据而不会更改原有日志信息,因此只要在日志文件相同的位置读取日志,无论多少次读出的内容都是相同的,省略了源数据库的磁盘写入和读取过程,当数据同步进程崩溃/所在节点出现硬件故障导致,在本节点/其它节点重启该进程时根据检查点信息即可知道需要从何位置继续读日志,从而减少了同步过程中工作量。

一种数据同步系统,包括用于存储检查点信息的分布式缓存系统,还包括数据同步平台,所示数据同步平台包括:

存储器,用于存储可执行指令;

处理器,用于执行所述存储器中存储的可执行指令,实现上述的更新分布式缓存系统中的源数据库检查点信息、更新分布式缓存系统中的目标数据库检查点信息、执行事件流抽取进程、消息队列、事件流同步进程。

综上所述,由于采用了上述技术方案,本发明的有益效果是:

1.本发明一种数据同步方法及系统,采用本方案,可以显著提高数据同步平台的可用性,排除了单点故障;

2.本发明一种数据同步方法及系统,通过事件流抽取进程在内存中直接处理和发送数据的方式,避免了不必要的磁盘i/o;

3.本发明一种数据同步方法及系统,通过接收端采用消息队列接收的方式,相较于传统文件方式也提高了效率,从而改善了数据同步的整体性能。

4.本发明一种数据同步方法及系统,解决了现有基于检查点文件/trail文件的数据同步中单点故障及同步效率较低的问题。

附图说明

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

图1是本发明的工作原理示意图;

图2是现有基于检查点文件/trail文件的数据同步原理示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合图1、图2对本发明作进一步地详细描述,所描述的实施例不应视为对本发明的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本发明实施例的目的,不是旨在限制本发明。

对本发明实施例进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释。

分布式缓存:分布式缓存指的是与应用分离的缓存组件或服务。它通常基于内存,可持久化,在很多场合可以对关系数据库起到很好的补充作用,显著提高读取数据的性能。典型的分布式缓存如redis性能强劲,具有复制特性从而支持高可用。

消息队列:消息队列是一种支持在分布式系统中发送和接收消息的软件基础设施,已经逐渐成为企业it系统内部通信的核心手段,具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能。它支持高性能的异步通信,将消息发送端和接收端解耦,并且支持高可用。

日志:关系型数据库都具有日志,用于记录所有事务以及每个事务对数据库所做的修改。日志是数据库的重要组件,如果系统出现故障,则可能需要使用日志将数据库恢复到一致状态。

数据同步:数据同步支持实时事务更改数据抽取、转换和同步。它通过非侵入式方式提供异构系统间基于数据库日志的数据同步,而不用在源数据库安装或添加任何表、索引、触发器,对网络带宽和源数据库的影响较小。

高可用:通常指一个系统经过专门的设计,可以屏蔽单个部件的故障,从而减少停工时间,保持其服务的高度可用性。高可用通常是通过“冗余”来实现的,即通过配置额外的软/硬件资源,以避免单点故障。

检查点:本文中的检查点是指将数据同步相关进程的当前读/写位置保存起来,以用于恢复目的。检查点不仅可以真实地标记数据抽取进程捕获的要进行同步的数据变更以及数据同步进程应用到目标端数据库的数据变化,防止进程进行冗余的数据处理,还可以提供容错机制,防止在系统、网络或数据同步进程需要重启时发生数据丢失。

实施例1

一种数据同步方法,基于源数据库、目标数据库和分布式缓存系统,源数据库每成功发送一次变更数据后,更新分布式缓存系统中的源数据库检查点信息;目标数据库每成功同步一次变更数据后,目标数据库就更新分布式缓存系统中的目标数据库检查点信息。

实施例2

本实施例在实施例1的基础上,所述分布式缓存系统采用redis分布式缓存系统。分布式缓存:分布式缓存指的是与应用分离的缓存组件或服务。它通常基于内存,可持久化,在很多场合可以对关系数据库起到很好的补充作用,显著提高读取数据的性能。典型的分布式缓存,如redis,性能强劲,具有复制特性从而支持高可用。redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了java,c/c++,c#,php,javascript,perl,object-c,python,ruby,erlang等客户端,使用很方便。redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

实施例3

本实施例在实施例2的基础上,所述源数据库发送变更数据的方法包括以下步骤:

s1、通过事件流抽取进程读取源数据库日志的获取变更数据;

s2、事件流抽取进程将变更数据转换成内部事件流;

s3、内部事件流通过网络发送到目标数据库。

进一步的,所述事件流抽取进程将变更数据转换成内部事件流的方法包括以下步骤:

s201、事件流抽取进程读取变更数据;

s202、事件流抽取进程处理变更数据,生成内部相应的事件流数据。

所述目标数据库同步变更数据的方法包括以下步骤:

s4、消息队列通过网络接收内部事件流;

s5、事件流同步进程将消息队列接收到的内部事件流解析为sql语句;

s6、目标数据库根据解析得到的sql语句进行同步。

进一步的,所述消息队列采用开源消息队列。所述开源消息队列包括kafka、activemq、rabbitmq、rocketmq等消息队列。消息队列支持高性能的异步通信,将消息发送端和接收端解耦,并且支持高可用,可以进一步提升本方案的可靠性。

实施例4

本实施例在实施例1的基础上,还包括使用该方法的任意组件出现故障时的解决方法,包括以下步骤:

当源数据库出现软件或硬件故障时,包括以下步骤:

s701、重启事件流抽取进程;

s801、事件流抽取进程从分布式缓存系统中获取源数据库检查点信息;

s901、事件流抽取进程根据获取的源数据库检查点信息从源数据库中检查点对应的位置重新开始读取日志信息;

当目标数据库出现软件或硬件故障时,包括以下步骤:

s702、重启事件流同步进程;

s802、事件流同步进程从分布式缓存系统中获取目标数据库检查点信息;

s902、事件流同步进程根据获取的目标数据库检查点信息从目标数据库中检查点对应的位置重新开始进行同步。

上述步骤利用读取日志的幂等性,即由于数据库写日志文件只会在末端不断增加新的数据而不会更改原有日志信息,因此只要在日志文件相同的位置读取日志,无论多少次读出的内容都是相同的,省略了源数据库的磁盘写入和读取过程,当数据同步进程崩溃/所在节点出现硬件故障导致,在本节点/其它节点重启该进程时根据检查点信息即可知道需要从何位置继续读日志,从而减少了同步过程中工作量。

实施例5

一种数据同步系统,包括用于存储检查点信息的分布式缓存系统,还包括数据同步平台,所示数据同步平台包括:

存储器,用于存储可执行指令;

处理器,用于执行所述存储器中存储的可执行指令,实现上述的更新分布式缓存系统中的源数据库检查点信息、更新分布式缓存系统中的目标数据库检查点信息、执行事件流抽取进程、消息队列、事件流同步进程。

实施例6

本实施例为本方案事件流的部分代码,包括:

packagecom.sefonsoft.dataflow;

importjava.util.set;

/**

*事件(消息)

*/

publicinterfacerecord{

/**

*事件(消息)头,存放元信息

*/

publicinterfaceheader{

/**

*原始事件(消息)

*/

publicbyte[]getraw();

/**

*原始事件(消息)类型

*/

publicstringgetrawmimetype();

/**

*获取属性名称

*/

publicset<string>getattributenames();

/**

*获取属性值

*/

publicstringgetattribute(stringname);

/**

*设置属性

*/

publicvoidsetattribute(stringname,stringvalue);

/**

*删除属性值

*/

publicvoiddeleteattribute(stringname);

}

/**

*获取事件(消息)头

*/

publicheadergetheader();

/**

*设置事件(消息)字段

*/

publicfieldset(fieldfield);

/**

*获取事件(消息)字段

*/

publicfieldget(stringfieldpath);

/**

*删除事件(消息)字段

*/

publicfielddelete(stringfieldpath);

/**

*检查是否有事件(消息)字段

*/

publicbooleanhas(stringfieldpath);

}

还包括:

packagecom.sefonsoft.dataflow;

importjava.util.map;

/**

*事件(消息)字段

*/

publicclassfieldimplementscloneable{

privatetypetype;

privateobjectvalue;

privatemap<string,string>attributes;

/**

*字段类型

*/

publicenumtype{

boolean(),char(),byte(),short(),integer(),long(),float(),double(),date(),datetime(),time(),decimal(),

string(),file_ref(),byte_array(),map(),list(),list_map(),zoned_datetime(),;

}

publicfield(typetype2,objectvalue2,map<string,string>attributes2){

this.type=type2;

this.value=value2;

this.attributes=attributes2;

}

/**

*<p>

*returnsacloneofthefield.

*</p>

*

*@returnacloneofthefield(deepcopy).

*/

@override

publicfieldclone(){

returnnewfield(type,value,attributes);

}

}。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

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