CN104809200B - 一种数据库同步的方法和装置 - Google Patents
一种数据库同步的方法和装置 Download PDFInfo
- Publication number
- CN104809200B CN104809200B CN201510201772.6A CN201510201772A CN104809200B CN 104809200 B CN104809200 B CN 104809200B CN 201510201772 A CN201510201772 A CN 201510201772A CN 104809200 B CN104809200 B CN 104809200B
- Authority
- CN
- China
- Prior art keywords
- source
- data
- server
- target
- database
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例涉及数据库技术领域,尤其涉及一种数据库同步的方法和装置,用于提高经过较长时间中断的目标数据库自动恢复正常工作状态的效率,由于源端历史服务器储存的数据变更事件的最远日期远于所述源端中继服务器储存的数据变更事件的最远日期,因此当第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,从源端历史服务器获取所述第一全局标识号之后的数据变更事件,否则,从源端中继服务器获取所述第一全局标识号之后的数据变更事件,如此,提高经过较长时间中断的目标数据库自动恢复正常工作状态的效率。
Description
技术领域
本发明实施例涉及数据库技术领域,尤其涉及一种数据库同步的方法和装置。
背景技术
电子商务日益深入人心,实时交易***的数据量也与日俱增,然而单一数据库的处理能力有限,因此需要基于源数据库,按照业务或功能建立多个目标数据库,从而降低对源数据库的访问压力。当源数据库中的某个数据表发生变化时,需要保证关注该数据表的目标数据库中的该数据表与源数据库中的该数据表发生一致的变化,因此需要一个同步装置来实现目标数据库与源数据库之间数据的同步。
现有技术中实现目标数据库与源数据库之间数据同步的方法为:设立一独立服务器,同时连接源数据库和目标数据库;通过该独立服务器实时获取源数据库产生的数据变更事件;并将其传输至目标数据库。
上述技术方案中,独立服务器为了保证较快的读写速度,通常为内存型服务器,此类服务器将数据变更事件缓存至内存中,当内存的存储空间占满时,新增的数据变更事件会将历史数据丢弃。本领域技术人员可知,由于***故障等原因,经常会出现目标数据库的数据同步过程中断的情况,此时,目标数据库恢复工作之后,需要继续从中断点处开始获取后续的数据变更事件,以便于进行数据同步过程。但是若目标数据库中断时间较长,由于独立服务器的内存有限,因此,独立服务器中所储存的中断点附近的数据变更事件可能已经被丢弃,若目标数据库所获取的数据变更事件有缺失,则目标数据库无法做到与源数据库完全一致。
为了解决这一问题,若将数据变更事件缓存至独立服务器的持久化磁盘中进行保存时,一方面,持久化磁盘的储存空间也有限,另一方面,当该独立服务器连接的目标数据库中大部分均发生中断现象时,由于发生中断的目标数据库均需从该独立服务器的磁盘中获取中断点以后的所有数据变更事件,从而发生中断的目标数据库需要与该独立服务器之间进行大量的磁盘读写操作,而处于正常工作状态的目标数据库也实时从该独立服务器中获取数据变更事件,如此,由于该独立服务器上的负荷量过大,从而降低了发生中断的目标数据库恢复到正常工作状态的效率,以及其它未发生中断的目标数据库与该独立服务器之间数据传输的效率,即降低了目标数据库与源数据库之间的数据同步效率。
综上所述,亟需一种数据库同步的方法和装置,用于保证未发生中断的目标数据库与源数据库之间的数据同步效率不变的同时,提高发生中断的目标数据库自动恢复正常工作状态的效率。
发明内容
本发明实施例提供一种数据库同步的方法和装置,用于保证未发生中断的目标数据库与源数据库之间的数据同步效率不变的同时,提高发生中断的目标数据库自动恢复正常工作状态的效率。
本发明实施例提供一种数据库同步的方法,包括以下步骤:
目标端服务器根据预设对应关系确定目标端服务器所连接的目标数据库中目标数据标识号在源数据库中所对应的源数据标识号,并确定出目标数据表标识号对应的已同步的日期最新数据变更事件的第一全局标识号;其中,源数据标识号与目标数据标识号一一对应;其中,数据变更事件是源端服务器实时捕获源数据库产生的数据变更事件得到的;数据变更事件包括该数据变更事件的生成时间;
若第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,则目标端服务器从源端历史服务器获取第一全局标识号之后的数据变更事件,并根据从源端历史服务器获取的数据变更事件对目标数据库执行同步操作;其中,每条数据变更事件包括该数据变更事件对应的全局标识号;源端历史服务器储存的数据变更事件的最远日期远于源端中继服务器储存的数据变更事件的最远日期;
若第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差小于第一中断时长,则目标端服务器从源端中继服务器获取第一全局标识号之后的数据变更事件,并根据从源端中继服务器获取的数据变更事件对目标数据库执行同步操作;目标端服务器配置有目标数据库的配置参数。
本发明实施例提供一种数据库同步的装置,包括与源数据库连接的源端历史服务器,与源端历史服务器连接的目标端服务器,以及与源数据库连接的源端中继服务器,与源端中继服务器连接的目标端服务器,与目标端服务器连接的目标数据库:
目标端服务器,包括:
确定单元,用于根据预设对应关系确定目标端服务器所连接的目标数据库中目标数据标识号在源数据库中所对应的源数据标识号,并确定出目标数据表标识号对应的已同步的日期最新数据变更事件的第一全局标识号;其中,源数据标识号与目标数据标识号一一对应;其中,数据变更事件是源端服务器实时捕获源数据库产生的数据变更事件得到的;数据变更事件包括该数据变更事件的生成时间;
第一获取单元,用于若第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,则从源端历史服务器获取第一全局标识号之后的数据变更事件,并根据从源端历史服务器获取的数据变更事件对目标数据库执行同步操作;其中,每条数据变更事件包括该数据变更事件对应的全局标识号;源端历史服务器储存的数据变更事件的最远日期远于源端中继服务器储存的数据变更事件的最远日期;
第二获取单元,用于若第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差小于第一中断时长,则从源端中继服务器获取第一全局标识号之后的数据变更事件,并根据从源端中继服务器获取的数据变更事件对目标数据库执行同步操作;目标端服务器配置有目标数据库的配置参数。
本发明实施例中,目标端服务器确定出所述目标数据表标识号对应的已同步的日期最新数据变更事件的第一全局标识号;若所述第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,则所述目标端服务器从源端历史服务器获取所述第一全局标识号之后的数据变更事件,并根据从所述源端历史服务器获取的数据变更事件对所述目标数据库执行同步操作;否则所述目标端服务器从源端中继服务器获取所述第一全局标识号之后的数据变更事件,并根据从所述源端中继服务器获取的数据变更事件对所述目标数据库执行同步操作。所述目标端服务器配置有所述目标数据库的配置参数。所述源端历史服务器储存的数据变更事件的最远日期远于所述源端中继服务器储存的数据变更事件的最远日期。
由于源端历史服务器储存的数据变更事件的最远日期远于所述源端中继服务器储存的数据变更事件的最远日期,因此当第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,从源端历史服务器获取所述第一全局标识号之后的数据变更事件,否则,从源端中继服务器获取所述第一全局标识号之后的数据变更事件。可见,源端历史服务器存储空间较大,可存储时间较长的数据变更事件,而源端中继服务器中仅存储较新的数据变更事件,因此,目标端服务器若发生较长时间的中断,源端中继服务器中可能已经没有中断点处的数据变更事件,则目标端服务器可从源端历史服务器中获取中断点处的数据变更事件,进一步,由于源端历史服务器和源端中继服务器的功能分离,发生中断的目标端服务器可从源端历史服务器中获取历史数据变更事件,处于正常工作状态的目标端服务器可继续从源端中继服务器获取数据变更事件,如此,源端中继服务器中的负荷量不会因发生中断的目标端服务器恢复正常工作而加重,因此保证了未发生中断的目标端服务器执行数据同步效率不变的同时,提高发生中断的目标端服务器自动恢复正常工作状态的效率。
进一步由于目标端服务器连接目标数据库,且目标端服务器配置有目标数据库的配置参数,因此,当某个目标数据库发生变动,如新增一个目标数据库时,仅需要修改该新增的目标数据库对应连接的目标端服务器中的配置参数,并重启该目标端服务器即可,因此,其它未进行参数配置修改的目标端服务器不需重启,进而与该未进行参数配置修改的目标端服务器连接的目标数据库的数据同步过程也不会中断,从而实现多个目标数据库与源数据库之间的数据同步,且当某个目标数据库发生变化时,其它目标数据库的数据同步过程不受影响。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1a为本发明实施例提供的方法或装置适用的***架构示意图;
图1b为本发明实施例提供的方法或装置适用的***架构示意图;
图1c为本发明实施例所提供的方法或装置适用的***架构示意图;
图2为本发明实施例提供的一种数据库同步的方法流程示意图;
图3为本发明实施例还提供一种数据库同步的装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明的实施例所应用的场景有多种,为更好的理解本方案,此处仅示例性列举以下几种:
场景一:源数据库为一个,目标数据库为多个,该源数据库为“写库”,支持相关写操作的事务处理,目标数据库为“读库”,支持业务查询、数据分析等查询操作。实际应用中,需保证该为“写库”的源数据库内容与多个为“读库”的目标数据库的数据内容一致,并需保证目标数据库的内容和源数据库内容同步的及时性和正确性,此时,即可通过本发明实施例所提供的方法或装置实现。
场景二:源数据库为多个,目标数据库为一个,该多个源数据库为“写库”,且多个源数据库中储存的数据表均为“订单表”,此时,可将一部分用户的交易写到某个源数据库的“订单表”中,而将另一部分用户的交易写入到另一个源数据库的“订单表”中,此时,即多个源数据库中存储同一个数据表“订单表”,而不同源数据库中储存的数据内容不同。目标数据库为“读库”。实际应用中需实现将多个源数据库中的“订单表”的不同数据内容整合至一个目标数据库中,以便于通过该目标数据库可读取所有“订单表”的数据内容,此时,即可通过本发明实施例所提供的方法或装置实现。
较佳的,场景二中,也可设置多个目标数据库,分别将多个源数据库中的“订单表”同步至多个目标数据库中,以减少单个目标数据库的查询负荷量。
场景三:源数据库为多个,目标数据库为多个,该多个源数据库为“写库”,且多个源数据库中储存的数据表均为同一个数据表,例如“订单表”,多个源数据库中存储同一个数据表“订单表”,而不同源数据库中储存的数据内容不同。具体可为,源数据库按商户维度来区分,商户一的订单表信息通过一个源数据库储存,而商户二的订单表信息通过另一个源数据库储存。多个目标数据库均为“读库”。实际应用中可将以商户为维度区分的多个源数据库中的“订单表”的不同数据内容整合至以时间为维度的多个目标数据库中,即,可将一月份的所有商户的订单表整合至一个目标数据库中,将二月份的所有商户的订单表整合至另一个目标数据库中,以便于通过该目标数据库可读取所有“订单表”的数据内容,此时,即可通过本发明实施例所提供的方法或装置实现。
场景四:本发明实施例中的至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表。该单个目标数据库中也可储存有多个源数据库中每个源数据库中储存的部分数据表。举个例子,源数据库一中储存有数据表“一月份统计表、二月份统计表”,源数据库二中储存有数据表“三月份统计表、四月份统计表”,目标数据库中可仅存储源数据库一中的数据表“一月份统计表”,也可仅存储有源数据库一中的“一月份统计表”和源数据库二中的“三月份统计表”。
场景五:新增一目标数据库,或某个目标数据库在数据同步过程中中断了,而中断时间点相距当前时间点较远,此时需要对该目标数据库进行数据同步的初始化过程的设置,即需要使该目标数据库的数据表内容与源数据库的某一时刻的数据表内容保持一致。
场景六:目标数据库在数据同步过程中中断了,而中断时间点相距当前时间点较远,此时需要使该目标数据库从中断状态恢复至正常数据同步的工作状态。
图1a示例性示出了一种本发明实施例提供的方法或装置适用的***架构示意图;图1b示例性示出了一种本发明实施例提供的方法或装置适用的***架构示意图;图1c示例性示出了一种本发明实施例所提供的方法或装置适用的***架构示意图。
如图1a、图1b、图1c所示,本发明实施例所提供的方法或装置适用的***架构中可包括多个源数据库101、与源数据库101连接的源端服务器107,较佳的,源端服务器107包括源端中继服务器102和源端历史服务器105。源端中继服务器102与源数据库101连接、源端中继服务器102与目标端服务器103连接、目标端服务器103连接的多个目标数据库104。较佳的,本发明实施例中目标端服务器103也可连接非数据库类型的***108,如联机***、或文档类需获取源数据库中的数据内容的文件均可。
较佳的,本发明实施例所提供的方法或装置适用的***架构还包括与源端中继服务器102连接的源端历史服务器105、源端历史服务器105与目标端服务器103连接、与源数据库101连接的源端快照服务器106、源端快照服务器106与目标端服务器103连接,较佳的,源端服务器107包括源端中继服务器102和源端历史服务器105。
本发明实施例用于实现目标数据库在数据同步之前的初始化过程,以及源数据库101与目标数据库104之间的数据同步。较佳的,本发明实施例中为了保证目标数据库与源数据库的常规数据同步操作的效率较高,将源端中继服务器设置为非持久化保存数据变更事件的服务器,将源端历史服务器设置为可持久化保存数据变更事件的服务器。源端中继服务器将捕获的数据变更事件缓存至内存中,常规数据同步操作中,目标数据库通过目标端服务器从源端中继服务器中获取数据变更事件,由于源端中继服务器将数据变更事件缓存至内存中,因此通过源端中继服务器写入或读出数据变更事件的效率也较高。但是由于内存的空间有限,仅能存储最新的少量的数据变更事件,时间较远的数据变更事件在源端中继服务器中可能会被丢弃,因此,较佳的,提供一源端历史服务器,通过该源端历史服务器定期从源端中继服务器中获取数据变更事件,再持久化保持至源端历史服务器中,即保持至源端历史服务器的硬盘或磁盘中,此时一旦目标数据库需同步的数据变更事件不在源端中继服务器中时,目标数据库可从源端历史服务器中获取时间较远的数据变更事件。
本发明实施例中当新增一个目标数据库时,该目标数据库通过本发明实施例中的源端快照服务器和目标端服务器自动实现初始化过程,同时,目标端服务器获得目标数据库执行初始化过程中的全量数据快照文件的生成时间,该目标端服务器依据该生成时间从源端服务器中接着获取后续数据变更事件,从而实现与源数据库之间的同步。
具体来说,与该目标数据库连接的目标端服务器经判断,确定当前全量数据快照文件的生成时间对应的数据变更事件不在源端中继服务器时,则从源端历史服务器中获取初始化时间点至当前时间点内的数据变更事件,所述初始化时间点早于或等于所述源数据表标识号对应的全量数据快照文件的生成时间,并在获取到数据变更事件之后对目标数据库执行数据同步操作;之后,目标端服务器接着去源端历史服务器中获取上次同步操作执行完成后,最新的已同步的日期最新的数据变更事件之后的数据变更事件,并再次执行数据同步操作,直至目标端服务器判断出目标数据库中已同步的日期最新的数据变更事件的生成时间与当前时间的时间差小于第一中断时长时,目标数据端服务器则从源端中继服务器中获取目标数据库中已同步的日期最新的数据变更事件之后的数据变更事件。
较佳的,在目标数据库与源端数据库进行数据同步的常规过程中,若目标数据库因某种原因,如目标数据库故障,或与该目标数据库连接的目标端服务器发生故障,因而目标数据库中断了一断时间,若目标端服务器经判断,目标数据库中已同步的日期最新的数据变更事件的生成时间与当前时间不小于第一中断时长时,则目标端服务器先从源端历史服务器中获取已同步的日期最新的数据变更事件之后的数据变更事件;直至目标端服务器判断出目标数据库中已同步的日期最新的数据变更事件的生成时间与当前时间的时间差小于第一中断时长时,目标数据端服务器则从源端中继服务器中获取目标数据库中已同步的日期最新的数据变更事件之后的数据变更事件。
较佳的,在目标数据库与源端数据库进行数据同步的常规过程中,若目标数据库因某种原因,中断了一断时间,若目标端数据库经判断,目标数据库中已同步的日期最新的数据变更事件的生成时间与当前时间不小于第二时长时,则目标端服务器先从源端快照服务器中获取全量数据快照文件,接着从源端历史服务器或源端中继服务器中获取全量数据快照文件的生成时间或生成时间之前的某一时间之后的数据变更事件。
从上述过程中可看出,本发明实施例中,若新增一目标数据库,则目标端服务器自动从源端快照服务器中获取全量快照文件,并将其导入目标数据库中,从而自动实现初始化过程;接着,经判断,可自动从源端历史服务器或源端中继服务器获取后续数据变更事件,以便实现数据同步的自动化;且进一步在数据同步操作过程中若出现中断,则目标端服务器也可自动从源端历史服务器或源端中继服务器获取中断后的数据变更事件,整个过程不需人工操作,提高了数据同步效率。
较佳的,本发明实施例中源端服务器可连接一个源数据库,也可连接多个源数据库,多个源数据库中可存储同一个数据表中的不同数据内容。较佳的,源端服务器可连接一个目标端服务器,也可连接多个目标端服务器,每个目标端服务器可连接多个目标数据库,也可每个目标端服务器仅连接一个目标数据库。
较佳的,本发明实施例中的源端服务器包括源端中继服务器和源端历史服务器,因此,具体来说,本发明实施例中源端中继服务器可连接一个源数据库,也可连接多个源数据库。较佳的,源端中继服务器可连接一个目标端服务器,也可连接多个目标端服务器。较佳的,本发明实施例中的源端历史服务器,可连接一个源端中继服务器,也可连接多个源端中继服务器。
较佳的,本发明实施例中源端快照服务器可连接一个源数据库,也可连接多个源数据库。较佳的,源端快照服务器可连接一个目标端服务器,也可连接多个目标端服务器。
较佳的,本发明实施例中的针对相同的源数据库连接的源端中继服务器也可布置多个,一方面提高***的可用性,避免单个源端中继服务器出现故障时,整个***不可用的现象;另一方面,提高***的扩展性,多个源端中继服务器可支持连接更多的目标端服务器,从而可实现更多目标数据库的数据同步,实现了***的横向扩展;第三,多个源端中继服务器可用于减轻单个源端中继服务器所承受的负荷。
较佳的,本发明实施例中的针对相同的源端中继服务器也可布置多个源端历史服务器,一方面提高***的可用性,避免单个源端历史服务器出现故障时,导致不能同步历史数据的现象;另一方面,提高***的扩展性,多个源端历史服务器可支持连接更多的目标端服务器,从而可实现更多目标数据库的数据同步,实现了***的横向扩展;第三,多个源端历史服务器可用于减轻单个源端历史服务器所承受的负荷。
较佳的,本发明实施例中的针对相同的源数据库连接的源端快照服务器可布置多个,一方面提高***的可用性,避免单个源端快照服务器出现故障时,整个***初始化过程延迟的现象;另一方面,提高***的扩展性,多个源端快照服务器可支持连接更多的目标端服务器,从而可实现更多目标数据库的数据同步,实现了***的横向扩展;第三,多个源端快照服务器可用于减轻单个源端快照服务器所承受的负荷。
较佳的,本发明实施例中所提供的装置的各个组成部分均可布置多套,以便避免单点故障问题,提高***可用性和可靠性,另一方面,实现***的横向扩展,可支持更多的需同步的目标数据库的数量。
基于上述论述,如图2所示,本发明实施例提供一种数据库同步的方法,包括以下步骤:
步骤201,目标端服务器根据预设对应关系确定目标端服务器所连接的目标数据库中目标数据标识号在源数据库中所对应的源数据标识号,并确定出目标数据表标识号对应的已同步的日期最新数据变更事件的第一全局标识号;其中,源数据标识号与目标数据标识号一一对应;其中,数据变更事件是源端服务器实时捕获源数据库产生的数据变更事件得到的;数据变更事件包括该数据变更事件的生成时间;
步骤202,若第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,则目标端服务器从源端历史服务器获取第一全局标识号之后的数据变更事件,并根据从源端历史服务器获取的数据变更事件对目标数据库执行同步操作;其中,每条数据变更事件包括该数据变更事件对应的全局标识号;源端历史服务器储存的数据变更事件的最远日期远于源端中继服务器储存的数据变更事件的最远日期;
步骤203,若第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差小于第一中断时长,则目标端服务器从源端中继服务器获取第一全局标识号之后的数据变更事件,并根据从源端中继服务器获取的数据变更事件对目标数据库执行同步操作;目标端服务器配置有目标数据库的配置参数。
由于源端历史服务器储存的数据变更事件的最远日期远于所述源端中继服务器储存的数据变更事件的最远日期,因此当第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,从源端历史服务器获取所述第一全局标识号之后的数据变更事件,否则,从源端中继服务器获取所述第一全局标识号之后的数据变更事件。可见,源端历史服务器存储空间较大,可存储时间较长的数据变更事件,而源端中继服务器中仅存储较新的数据变更事件,因此,目标端服务器若发生较长时间的中断,源端中继服务器中可能已经没有中断点处的数据变更事件,则目标端服务器可从源端历史服务器中获取中断点处的数据变更事件,进一步,由于源端历史服务器和源端中继服务器的功能分离,发生中断的目标端服务器可从源端历史服务器中获取历史数据变更事件,处于正常工作状态的目标端服务器可继续从源端中继服务器获取数据变更事件,如此,源端中继服务器中的负荷量不会因发生中断的目标端服务器恢复正常工作而加重,因此保证了未发生中断的目标端服务器执行数据同步效率不变的同时,提高发生中断的目标端服务器自动恢复正常工作状态的效率。
进一步由于目标端服务器连接目标数据库,且目标端服务器配置有目标数据库的配置参数,因此,当某个目标数据库发生变动,如新增一个目标数据库时,仅需要修改该新增的目标数据库对应连接的目标端服务器中的配置参数,并重启该目标端服务器即可,因此,其它未进行参数配置修改的目标端服务器不需重启,进而与该未进行参数配置修改的目标端服务器连接的目标数据库的数据同步过程也不会中断,从而实现多个目标数据库与源数据库之间的数据同步,且当某个目标数据库发生变化时,其它目标数据库的数据同步过程不受影响。
下面具体介绍本发明实施例所提供的具体方案,首先介绍源端快照服务器。
若目标数据库需执行数据同步初始化过程时,则与目标数据库连接的目标端服务器向源端快照服务器发送全量数据请求消息;其中,全量数据请求消息携带至少一个需同步的源数据库标识号,以及源数据库标识号对应的源数据表标识号;
源端快照服务器接收到全量数据请求消息,确定源数据库标识号对应的源数据表标识号所对应的全量数据信息,并将确定出的全量数据信息携带于全量数据响应消息中发送给目标端服务器,全量数据响应消息还包括全量数据信息对应的全量数据快照文件的生成时间;
目标端服务器根据全量数据信息获取源数据库标识号对应的源数据表标识号对应的全量数据快照文件,并将获取的全量数据快照文件导入目标数据库;目标端服务器配置有目标数据库的配置参数;
目标端服务器从源端服务器获取源数据表标识号对应的数据表初始化时间点之后的数据变更事件,并根据数据变更事件对目标数据库执行同步操作;其中,初始化时间点早于或等于源数据表标识号对应的全量数据快照文件的生成时间;数据变更事件是源端服务器实时捕获源数据库产生的数据变更事件得到的。
可见本发明实施例实现了目标数据库进行数据同步过程中的初始化过程的自动化控制,从而避免了由于人工操作所造成的效率较低的问题,提高了目标数据库进行数据同步过程中的初始化过程的效率,进而提高了目标数据库与源数据库进行数据同步的效率。
较佳的,若目标数据库需执行数据同步初始化过程时,则与目标数据库连接的目标端服务器向源端快照服务器发送全量数据请求消息,具体包括:
若与目标端服务器连接的目标数据库为新增的目标数据库,或目标数据库的数据同步过程中断时长大于第二时长时,则目标数据库执行数据同步初始化过程,目标端服务器向源端快照服务器发送全量数据请求消息。
具体来说,当新增一个目标数据库,或者某个目标数据库的数据同步过程的中断时间距离当前时间的时长,即中断时长大于第二时长时,则该目标数据库需进行数据同步的初始化过程,即该目标数据库中的数据内容需与源数据库中的某个时间点的数据内容保持一致,以便于该目标数据库从该时间点处开始进行后续的数据同步过程。
进一步,本发明实施例中若目标数据库需执行数据同步初始化过程时,则与目标数据库连接的目标端服务器向源端快照服务器发送全量数据请求消息;其中,全量数据请求消息携带至少一个需同步的源数据库标识号,以及源数据库标识号对应的源数据表标识号。
具体来说,本发明实施例中数据表在源数据库中的数据表标识号为源数据表标识号,数据表在目标数据库中的数据表标识号为目标数据表标识号;同一个数据表在源数据库中的源数据表标识号和在目标数据库中的目标数据表标识号可能不同,也可能相同;在目标端服务器中配置有源数据表标识号与目标数据表标识号的对应关系。当目标端服务器根据与该目标端服务器连接的目标数据库需同步的目标数据表标识号,则目标端服务器根据内部存储的源数据库的源数据表标识号与目标数据库的目标数据表标识号的对应关系确定出该目标数据库中的目标数据表标识号对应的源数据库的源数据表标识号,之后目标端服务器根据该源数据库中的源数据表标识号,从源端快照服务器、源端历史服务器以及源端中继服务器中任一个中获取该源数据库中的源数据表标识号对应的数据。
较佳的,源端快照服务器接收到全量数据请求消息,确定源数据库标识号对应的源数据表标识号所对应的全量数据信息,具体包括:
源端快照服务器以第一时长为周期,定期从源数据库中导出源数据库所有数据表的全量数据快照文件;源端快照服务器接收到全量数据请求消息,并根据源数据库标识号对应的源数据表标识号所对应的日期最新的全量数据快照文件确定全量数据快照文件对应的全量数据信息;或者
源端快照服务器接收到全量数据请求消息,确定源数据库标识号对应的源数据表标识号所对应的全量数据信息,具体包括:
源端快照服务器接收到全量数据请求消息,从源数据库标识号对应的源数据库中导出源数据库标识号对应的源数据表标识号对应的数据表的全量数据快照文件,并根据全量数据快照文件确定源数据库标识号对应的源数据表标识号所对应的全量数据信息。
具体来说,源端快照服务器从源数据库获取全量数据快照文件,并确定出全量数据快照文件对应的全量数据信息有两种方式:
方式一:所述源端快照服务器以第一时长为周期,定期从源数据库中导出所述源数据库所有数据表的全量数据快照文件;所述源端快照服务器接收到所述全量数据请求消息,并根据所述源数据库标识号对应的源数据表标识号所对应的日期最新的全量数据快照文件确定所述全量数据快照文件对应的全量数据信息;具体来说,由于源端快照服务器会周期性的从源数据库导出源数据库的全量数据快照文件,因此,源端快照服务器中可能储存有某个数据表的多份不同时刻的全量数据快照文件,当源端快照文件接收到所述全量数据请求消息之后,根据全量数据请求消息,确定出源数据库标识号对应的源数据表标识号对应的日期最新的全量数据快照文件。
具体来说,本发明实施例中以第一时长为周期,源端快照服务器每隔第一时长则从源数据库中导出源数据库所有数据表的全量数据快照文件。如此,源端快照服务器则可持续保存源数据库中不同时间段的数据表的全量数据快照文件,以便于后续不同时间段里目标数据库需执行初始化过程时,可获得日期最新的全量数据快照文件。
方式二,源端快照服务器接收到全量数据请求消息时,才从源数据库标识号对应的源数据库中导出源数据库标识号对应的源数据表标识号对应的数据表的全量数据快照文件,导出成功后,再通过一些方式将全量数据快照文件对应的全量数据信息发送给目标端服务器。此种方式中,源端快照服务器在有需求的状态下才去获取全量数据快照文件,因此源端快照服务器的工作负荷较小。
进一步,较佳的,源端快照服务器从源数据库中获取的源数据库中的每个数据表的全量数据快照文件均对应一个源数据表标识号。一种较优的实现方案为,源端快照服务器将所有源数据库的数据表的全量数据快照文件按源数据表标识号进行归类储存,即所有源数据库中的同一个源数据表标识号对应的全量数据快照文件在一个事件队列中,每个事件队列对应一个事件队列标识号。
较佳的,至少一个目标数据库储存所有源数据库标识号对应的同一个数据表标识号所对应的数据表,全量数据请求消息还携带与目标端服务器连接的目标数据库中需同步的目标数据表标识号对应的源数据表标识号、该源数据表标识号对应的事件队列标识号。此时,源端快照服务器根据全量数据请求消息,从该事件队列标识号对应的事件队列中确定出源数据表标识号对应的该数据表的所有全量数据快照文件,并发送给目标端服务器。
源端快照服务器通过上述两种方式确定出全量数据信息之后,进一步,源端快照服务器接收到全量数据请求消息,确定源数据库标识号对应的源数据表标识号所对应的全量数据信息,并将确定出的全量数据信息携带于全量数据响应消息中发送给目标端服务器,全量数据响应消息还包括全量数据信息对应的全量数据快照文件的生成时间;目标端服务器根据全量数据信息获取源数据库标识号对应的源数据表标识号对应的全量数据快照文件,并将获取的全量数据快照文件导入目标数据库。
具体来说,目标端服务器根据全量数据信息获取源数据库标识号对应的源数据表标识号对应的全量数据快照文件,有两种方式:
方式一:较佳的,全量数据信息为全量数据快照文件。当源端快照服务器接收到全量数据请求信息时,确定出源数据库标识号对应的源数据表标识号所对应的全量数据快照文件,并将获取的全量数据快照文件导入目标数据库。
具体实施中,较佳的,源端快照服务器确定出全量数据信息为全量数据快照文件时,也同时确定出该全量数据快照文件的生成时间,并全量数据信息对应的全量数据快照文件的生成时间发送给目标端服务器,以使目标端服务器根据该生成时间从源端服务器中获取后续数据变更事件。
方式二:较佳的,全量数据信息为全量数据快照文件的一致/统一资源***(Uniform/Universal Resource Locator,简称URL)地址;目标端服务器根据全量数据信息,从URL地址处获取全量数据快照文件。
具体实施中,由于源端快照服务器将全量数据快照文件从源数据库中导出需要较长时间,且所导出的全量数据快照文件占用空间较大,因此,较佳的,源端快照服务器可将导出的全量数据快照文件放置在其它地方,并将放置该全量数据快照文件的URL地址发送给目标端服务器,以使目标端服务器从URL处下载该全量数据快照文件。由此,一方面由于源端快照服务器仅需发送URL地址,而非全量数据快照文件,因此减轻了源端快照服务器的数据传输压力;另一方面,目标端服务器通过URL地址下载该全量数据快照文件,若发生中断,也可从断点处续传,从而提高了目标端服务器获取全量数据快照文件的效率。
较佳的,全量数据信息为全量数据快照文件的URL地址时,源端快照服务器也同时确定出该全量数据快照文件的生成时间,并全量数据信息对应的全量数据快照文件的生成时间发送给目标端服务器,以使目标端服务器根据该生成时间从源端服务器中获取后续数据变更事件。
进一步,目标端服务器从源端服务器获取源数据表标识号对应的数据表初始化时间点之后的数据变更事件,并根据数据变更事件对目标数据库执行同步操作;其中,初始化时间点早于或等于源数据表标识号对应的全量数据快照文件的生成时间;数据变更事件是源端服务器实时捕获源数据库产生的数据变更事件得到的,目标端服务器配置有目标数据库的配置参数。
具体实施中,目标端服务器获取了该全量数据快照文件的生成时间,因此,目标端服务器可根据该生成时间从源端服务器获取该全量数据快照文件的生成时间之后的数据变更事件,较佳的,为了避免遗漏某些数据变更记录,从源端服务器获取初始化时间点之后的数据变更事件也可,所述初始化时间点早于或等于所述源数据表标识号对应的全量数据快照文件的生成时间。举个例子,有为了避免遗漏某些数据变更事件,因此当确定出某个源数据表标识号对应的全量数据快照文件的生成时间为8点,则该源数据表标识号对应的初始化时间点应确定为7点55分,从而可确保目标端服务器可完整获取8点之后的数据变更事件,则目标端服务器可从源端服务器获取该源数据表标识号对应的8点之后的数据变更事件。
具体来说,目标端服务器将获得的初始化时间点对应的全量数据快照文件,导入目标数据库之后,则目标数据库中便储存有该初始化时间点处对应的数据表内容,之后,目标端服务器可从源端服务器获取初始化时间点之后的数据变更事件,并对已储存有数据表内容的目标数据库执行该数据变更事件,即实现了目标数据库与源数据库之间的数据同步。
由于目标端服务器向源端快照服务器发送全量数据请求消息,源端快照服务器将确定出的全量数据信息发送给目标端服务器,以使目标端服务器根据全量数据信息获取全量数据快照文件,并将全量数据快照文件导入目标数据库,至此,目标数据库的初始化过程执行完毕,可见本发明实施例实现了目标数据库进行数据同步过程中的初始化过程的自动化控制,从而避免了由于人工操作所造成的效率较低的问题,提高了目标数据库进行数据同步过程中的初始化过程的效率,进而提高了目标数据库与源数据库进行数据同步的效率。进一步由于目标数据库执行完初始化过程之后,目标端服务器接着从源端服务器中获取早于或等于全量数据快照文件的生成时间的初始化时间点之后的数据变更事件,可见,目标数据库在自动化执行完初始化过程之后,自动开始数据同步过程,即本发明实施例中目标数据库从执行初始化过程至后期的同步过程,实现了全过程的自动化控制,从而,提高了目标数据库与源数据库进行数据同步的效率。
较佳的,目标端服务器向源端快照服务器发送全量数据请求消息,具体包括:
目标端服务器通过M个数据传输通道向源端快照服务器发送N条全量数据请求消息;其中,M为大于等于1的正整数,M小于等于N;每条数据传输通道至少承载一条全量数据请求消息;
源端快照服务器将全量数据响应消息发送给目标端服务器,具体包括:
源端快照服务器将全量数据响应消息通过M个数据传输通道并行发送给目标端服务器。
在具体实施中,大部分情况下M等于N。目标端服务器连接多个目标数据库时,则目标端服务器需要同步所有与该目标端服务器连接的目标数据库,目标端服务器也需分别为每个目标数据库构造一条全量数据请求消息,用于获取该目标数据库需同步的数据变更事件。假设该目标端服务器连接的N个目标数据库,目标端服务器构造了N条全量数据请求消息。每个目标数据库的每条全量数据请求消息至少包括一个源数据表标识号。即每个全量数据请求消息中可携带多个源数据表标识号。
进一步,较佳的,本发明实施例中,目标端服务器向源端快照服务器发送该N条全量数据请求消息时,可建立TCP连接的数据传输通道。较佳的,多条请求消息可共用一个数据传输通道,较优的方案为,一条请求消息占用一个数据传输通道,即M等于N,此时,目标端服务器可通过N条数据传输通道向源端快照服务器发送N条全量数据请求消息,从而提高了目标端服务器连接多个目标数据库时的数据传输效率,同时降低同步延时。较佳的,源端快照服务器可通过该M个数据传输通道向该目标端服务器返回N条全量数据响应消息。
本发明实施例中,目标端服务器从源端快照服务器中获取全量数据快照文件之后,即执行完初始化过程,接着目标端服务器需要从源端服务器中获取后续数据变更事件。
较佳的,源端服务器包括源端中继服务器和源端历史服务器;
目标端服务器从源端服务器获取源数据表标识号对应的数据表初始化时间点之后的数据变更事件,并根据数据变更事件对目标数据库执行同步操作,具体包括:
若初始化时间点与当前时间的时间差不小于第一中断时长,则目标端服务器从源端历史服务器获取源端历史服务器储存的初始化时间点之后的所有数据变更事件,并根据从源端历史服务器获取的数据变更事件对目标数据库执行同步操作;其中,每条数据变更事件包括该数据变更事件对应的全局标识号;
若初始化时间点与当前时间的时间差小于第一中断时长,则目标端服务器确定出已同步的日期最新的数据变更事件的第一全局标识号,从源端中继服务器获取第一全局标识号之后的数据变更事件,并根据从源端中继服务器获取的数据变更事件对目标数据库执行同步操作。
进一步,较佳的,若初始化时间点与当前时间的时间差不小于第一中断时长,即初始化时间点距离当前时间较远,则由于源端中继服务器中存储的数据变更事件较少,因此该初始化时间点所对应的数据变更事件可能已经不在源端中继服务器中了,所以目标端服务器需从源端历史服务器获取初始化时间点之后的数据变更事件,并根据获取的数据变更事件对目标数据库执行同步操作;每执行一次同步操作,目标端服务器则确认一次已同步的数据表更事件中的最新的数据变更事件的全局标识号,为表述方便,本发明实施例中将目标数据库每执行一次同步操作之后所确认的新的已同步的数据表更事件中的最新的数据变更事件的全局标识号定义为第一全局标识号,目标端服务器持续从源端历史服务器中获取第一全局标识号之后的数据变更事件,直至第一全局标识号对应的时间点与当前时间点之间的时长小于第一中断时长,则目标端服务器接着从源端中继服务器获取已同步的日期最新的数据变更事件的第一全局标识号之后的数据变更事件,并继续对目标数据库执行同步操作。
另一种较优的实现方式为,若初始化时间点与当前时间的时间差小于第一中断时长,目标端服务器可直接从源端中继服务器中获取该初始化时间点之后的数据表的数据变更事件。
可见,本发明实施例中所提供的方法保证了目标数据库执行数据同步的全部过程的自动化控制,且保证了目标数据库在数据同步中断时依然能够获取到中断点处的数据变更事件,并重新使数据同步过程恢复正常,提高了数据同步的稳定性和安全性,且进一步由于数据同步全过程的自动化控制,因而进一步提高了数据同步的效率。
进一步由于目标端服务器连接目标数据库,且目标端服务器配置有目标数据库的配置参数,因此,当某个目标数据库发生变动,如新增一个目标数据库时,仅需要修改该新增的目标数据库对应连接的目标端服务器中的配置参数,并重启该目标端服务器即可,因此,其它未进行参数配置修改的目标端服务器不需重启,进而与该未进行参数配置修改的目标端服务器连接的目标数据库的数据同步过程也不会中断,从而实现多个目标数据库与源数据库之间的数据同步,且当某个目标数据库发生变化时,其它目标数据库的数据同步过程不受影响。
较佳的,每条数据变更事件还包括该数据变更事件在源数据库中对应的源数据表标识号;
目标端服务器从源端中继服务器获取第一全局标识号之后的数据变更事件,具体包括:
源端中继服务器实时捕获源数据库产生的数据变更事件;并根据数据变更事件的源数据表标识号,将数据变更事件保存至源数据表标识号对应的事件队列中;其中,每个源数据库的每个源数据表标识号对应一个事件队列,每个事件队列至少对应一个源数据表标识号,每个事件队列对应一个事件队列标识号;
目标端服务器向源端中继服务器发送第一请求消息;其中,第一请求消息中携带目标端服务器对应连接的目标数据库对应的至少一个源数据表标识号对应的事件队列标识号、源数据表标识号对应的数据表已同步的日期最新的数据变更事件的第一全局标识号;其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;
源端中继服务器根据第一请求消息,从事件队列标识号对应的事件队列中将源数据表标识号对应的第一全局标识号之后的数据变更事件携带于第一响应消息中,并将第一响应消息发送给目标端服务器,以使目标端服务器从源端中继服务器获取源数据表标识号对应的第一全局标识号之后的数据变更事件。
上述内容的具体介绍见后续关于源端中继服务器的详细介绍,在此不做过多阐述。
从上述内容可看出:由于目标端服务器向源端快照服务器发送全量数据请求消息,源端快照服务器将确定出的全量数据信息发送给目标端服务器,以使目标端服务器根据全量数据信息获取全量数据快照文件,并将全量数据快照文件导入目标数据库,至此,目标数据库的初始化过程执行完毕,可见本发明实施例实现了目标数据库进行数据同步过程中的初始化过程的自动化控制,从而避免了由于人工操作所造成的效率较低的问题,提高了目标数据库进行数据同步过程中的初始化过程的效率,进而提高了目标数据库与源数据库进行数据同步的效率。进一步由于目标数据库执行完初始化过程之后,目标端服务器接着从源端服务器中获取早于或等于全量数据快照文件的生成时间的初始化时间点之后的数据变更事件,可见,目标数据库在自动化执行完初始化过程之后,自动开始数据同步过程,即本发明实施例中目标数据库从执行初始化过程至后期的同步过程,实现了全过程的自动化控制,从而,提高了目标数据库与源数据库进行数据同步的效率。
上述部分重点介绍了源端快照服务器的作用,下面具体介绍源端历史服务器。
较佳的,目标端服务器从源端历史服务器获取第一全局标识号之后的数据变更事件之前,还包括:
源端历史服务器向源端中继服务器发送第二请求消息;其中,第二请求消息中携带源端历史服务器需同步的源数据表标识号对应的已同步的日期最新的数据变更事件的全局标识号;
源端中继服务器根据第二请求消息,将源数据表标识号对应的已同步的日期最新的数据变更事件的全局标识号之后的数据变更事件携带于第二响应消息中,并将第二响应消息发送给源端历史服务器;
源端历史服务器根据第二响应消息中的数据变更事件对应的源数据表标识号,将数据变更事件保存至源数据表标识号对应的事件队列中;其中,每个源数据表标识号对应一个事件队列,每个事件队列对应一个事件队列标识号。
具体来说,本发明实施例中的源端历史服务器,定期或实时从源端中继服务器中获取数据变更事件以进行储存。例如,源端历史服务器可实时获取并储存自源数据库建立以来的所有历史数据变更事件;或源端历史服务器可以按预设的时间间隔定期获取并储存自源数据库建立以来的所有历史数据变更事件。较佳的,源端历史服务器将数据变更事件按照该数据变更事件的源数据库标识号、源数据表标识号进行分类。较佳的,同一个源数据表标识号可对应多个源数据库,对应多个源数据库的同一个源数据表标识号对应一个事件队列,也可每个源数据库的源数据表对应一个事件队列,也可多个源数据表标识号对应一个事件队列,其中,对应一个事件队列的多个数据表标识号对应的数据表可相关,也可不相关。
较佳的,源端历史服务器向源端中继服务器发送第二请求消息,具体包括:
源端历史服务器通过M个数据传输通道向源端中继服务器发送N条第二请求消息;其中,M为大于等于1的正整数,M小于等于N;每条数据传输通道至少承载一条第二请求消息;
源端中继服务器将第二响应消息发送给源端历史服务器,具体包括:
源端中继服务器将N条第二响应消息通过M个数据传输通道发送给源端历史服务器。
在具体实施中,大部分情况下M等于N。一种较优的方案为,源端中继服务器通过M个数据传输通道接收源端历史服务器发送的N条第二请求消息;其中,其中,M为大于等于1的正整数,M小于等于N。每个第二请求消息至少包括一个源数据表标识号。即每个第二请求消息中可携带多个源数据表标识号。较佳的,源端中继服务器和源端历史服务器可建立1至30个并发传输通道。每个传输通道可承载一个或多个事件队列中的数据,各个事件队列对应的数据按事件队列的顺序,一个事件队列一个事件队列的按顺序发送,每个事件队列中的各个数据按全局标识号或者数据变更事件发生的顺序,按顺序传送。
较佳的,源端中继服务器也将数据变更事件存入多个事件队列中,此时,第二请求消息中还包括数据表标识号在源端中继服务器中对应的事件队列标识号;源端中继服务器根据N条第二请求消息,分别从每条第二请求消息中携带的事件队列标识号对应的事件队列中将第一全局标识号之后的数据变更事件携带于N条第二响应消息中,并将N条第二响应消息通过M个数据传输通道发送给源端历史服务器,以使源端历史服务器进行储存。
进一步,较佳的,本发明实施例中,源端历史服务器向源端中继服务器发送该N条第二请求消息时,可建立TCP连接的数据传输通道。较佳的,多条请求消息可共用一个数据传输通道,较优的方案为,一条请求消息占用一个数据传输通道,即M等于N,此时,源端历史服务器可通过N条数据传输通道向源端中继服务器发送N条第二请求消息,从而提高了源端历史服务器的数据传输效率,同时降低同步延时。较佳的,源端中继服务器可通过该M个数据传输通道向该源端历史服务器返回N条第二响应消息。
本发明实施例中目标端服务器根据预设对应关系确定目标端服务器所连接的目标数据库中目标数据标识号在源数据库中所对应的源数据标识号,并确定出目标数据表标识号对应的已同步的日期最新的数据变更事件的第一全局标识号;其中,源数据标识号与目标数据标识号一一对应;其中,数据变更事件是源端服务器实时捕获源数据库产生的数据变更事件得到的;数据变更事件包括该数据变更事件的生成时间。
具体来说,在目标端服务器中配置有源数据表标识号与目标数据表标识号的对应关系。
若第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,则目标端服务器从源端历史服务器获取第一全局标识号之后的数据变更事件,并根据从源端历史服务器获取的数据变更事件对目标数据库执行同步操作;其中,每条数据变更事件包括该数据变更事件对应的全局标识号;源端历史服务器储存的数据变更事件的最远日期远于源端中继服务器储存的数据变更事件的最远日期;
若第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差小于第一中断时长,则目标端服务器从源端中继服务器获取第一全局标识号之后的数据变更事件,并根据从源端中继服务器获取的数据变更事件对目标数据库执行同步操作;目标端服务器配置有目标数据库的配置参数。
由于源端历史服务器储存的数据变更事件的最远日期远于所述源端中继服务器储存的数据变更事件的最远日期,因此当第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,从源端历史服务器获取所述第一全局标识号之后的数据变更事件,否则,从源端中继服务器获取所述第一全局标识号之后的数据变更事件。可见,源端历史服务器存储空间较大,可存储时间较长的数据变更事件,而源端中继服务器中仅存储较新的数据变更事件,因此,目标端服务器若发生较长时间的中断,源端中继服务器中可能已经没有中断点处的数据变更事件,则目标端服务器可从源端历史服务器中获取中断点处的数据变更事件,进一步,由于源端历史服务器和源端中继服务器的功能分离,发生中断的目标端服务器可从源端历史服务器中获取历史数据变更事件,处于正常工作状态的目标端服务器可继续从源端中继服务器获取数据变更事件,如此,源端中继服务器中的负荷量不会因发生中断的目标端服务器恢复正常工作而加重,因此保证了未发生中断的目标端服务器执行数据同步效率不变的同时,提高发生中断的目标端服务器自动恢复正常工作状态的效率。
进一步由于源端中继服务器连接目标端服务器,目标端服务器连接目标数据库,且目标端服务器配置有目标数据库的配置参数,因此,当某个目标数据库发生变动,如新增一个目标数据库时,仅需要修改该新增的目标数据库对应连接的目标端服务器中的配置参数,并重启该目标端服务器即可,而不需要重启源端中继服务器,因此,其它未进行参数配置修改的目标端服务器不需重启,进而与该未进行参数配置修改的目标端服务器连接的目标数据库的数据同步过程也不会中断,从而实现多个目标数据库与源数据库之间的数据同步,且当某个目标数据库发生变化时,其它目标数据库的数据同步过程不受影响。
具体来说,本发明实施例中源端中继服务器中储存与当前时刻相近的时间段内的数据变更事件,此时减少了源端中继服务器的数据负荷量,提高了源端中继服务器的处理性能,且进一步当源端中继服务器中储存的数据负荷量小到某一设定范围,则可见所有数据完全保存在源端中继服务器的内存中,而无需将其持久化保存到磁盘,如此,当目标端服务器从源端中继服务器中获取数据变更事件时,仅从内存中即可获取,而无需从磁盘中读取,进一步提高了源端中继服务器的数据同步处理性能,且源端中继服务器可支持大量目标数据库实现实时同步。本发明实施例中的源端历史服务器储存有距离当前时刻较远的历史数据变更事件。当目标数据库在同步过程中中断时,中断时间点距离当前时间较长,假设为一个月前,由于源端中继服务器可能未储存中断时间点附近的数据变更事件,因此目标端服务器可先从源端历史服务器中获取历史数据变更事件,或中断时间点处的数据变更事件,接着再实时从源端中继服务器获取最新的数据变更事件以实现目标数据库和源数据库之间的数据同步。较佳的,源端历史服务器将获取的历史数据变更事件均进行持久化存储,即新增加的数据不会覆盖历史数据。
对于目标端服务器而言,当目标端服务器中断一段较长时间之后再次恢复运行时,所需同步的数据变更事件的全局标识号所对应的时间较早时,可先从源端历史服务器中事件队列标识号对应的事件队列中读取需同步的数据变更事件的全局标识号至源端历史服务器中存储的该事件队列的最新的全局标识号之间的数据变更事件,直至目标数据库中已同步的日期最新的数据变更事件的生成时间与当前时间的时间差小于所述第一中断时长,则目标数据库接着从源端中继服务器中事件队列标识号对应的事件队列中读取剩余的最新的数据变更事件。然而当目标端服务器处于正常持续工作状态时,由于目标端服务器每隔一较小时间则进行一次同步,因此目标端服务器所需同步的数据变更事件均位于源端中继服务器,进而目标端服务器直接从源端中继服务器读取数据变更事件数据流即可。
举个例子,假设源端历史服务器中事件队列一中存储的数据变更事件的全局标识号为从0001、0005、0010、0018、0200,而由于源端中继服务器的存储速度较快,因此源端中继服务器中事件队列一中所存储的数据变更事件的全局标识号可为从0200、0210、0220、0250。进一步,目标端服务器进行同步初始化,或在第一时长内未向源端中继服务器发送第一请求消息时,或中断一段时间后需要恢复同步过程时,目标端服务器向源端历史服务器发送第三请求消息,假设第三请求消息中携带的事件队列标识号为事件队列一、第一全局标识号0005。则目标端服务器先从源端历史服务器中的事件队列一中获取出第一全局标识号0005至源端历史服务器中最新的数据0200的数据变更事件,即0010、0018、0200。目标端服务器对目标数据库执行同步操作。若此时目标数据库中已同步的日期最新的数据变更事件的生成时间与当前时间的时间差小于所述第一中断时长,接着目标端服务器器从源端中继服务器中的事件队列一中获取0200至最新的数据0250的数据变更事件,即0200、0210、0220、0250。接着目标端服务器继续对目标数据库执行同步操作。
具体来说,目标端服务器获取到一次数据变更事件后,即对目标数据库执行一次同步操作。
可看出,源端中继服务器和源端历史服务器分别储存有数据变更事件,一方面当目标端服务器为新增或因故中止一段时间之后,均可从源端历史服务器中获取所有历史数据变更事件,从而实现了目标数据库与源数据库之间数据同步的完整性,即避免了因源端中继服务器存储空间有限而造成的部分历史数据变更事件丢失的问题。另一方面,处于持续正常工作状态的目标端服务器从源端中继服务器获取数据变更事件,由于源端中继服务器的存储和读取速度均较快,因此,提高了目标数据库与源数据库之间数据同步的效率。
进一步,本发明实施例中的源端中继服务器仅对源数据库中产生的原始数据变更事件进行了一次读取和解析操作,之后多个目标端服务器均通过访问源端中继服务器从而获得解析后的数据变更事件,提高了数据同步操作的效率,另一方面避免了多个目标数据库进行数据同步时多次对源数据库进行访问,从而减轻了源数据库的负荷,避免了源数据库性能急剧下降,提高了数据同步的效率。另一方面,本发明中,源端中继服务器对数据变更事件进行读取和解析,目标端服务器对目标数据库执行数据同步操作,由于功能分离,从而降低了单台服务器的负荷,提高了数据同步的效率。
进一步,目标端服务器从源端历史服务器获取第一全局标识号之后的数据变更事件,具体有以下两种方式:
方式一:较佳的,目标端服务器向源端历史服务器发送第三请求消息;其中,第三请求消息携带目标端服务器对应连接的目标数据库需同步的至少一个源数据表标识号对应的事件队列标识号,以及源数据表标识号对应的数据表已同步的日期最新的数据变更事件的第一全局标识号;其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;
源端历史服务器根据第三请求消息,从对应的事件队列中将第三请求消息中的第一全局标识号之后的数据变更事件携带于第三响应消息中,并将第三响应消息发送给目标端服务器,以使目标端服务器对目标数据库执行同步操作。
方式二:较佳的,目标端服务器向源端历史服务器发送第三请求消息;其中,第三请求消息携带目标端服务器对应连接的目标数据库需同步的至少一个源数据表标识号对应的事件队列标识号,以及源数据表标识号对应的数据表已同步的日期最新的数据变更事件的生成时间;其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;
源端历史服务器根据第三请求消息,从对应的事件队列中将第三请求消息中的已同步的日期最新的数据变更事件的生成时间之后的数据变更事件携带于第三响应消息中,并将第三响应消息发送给目标端服务器,以使目标端服务器对目标数据库执行同步操作。
具体来说,目标端服务器从源端历史服务器获取第一全局标识号之后的数据变更事件,具体可通过目标数据库中的数据对应的时间点,从源端历史服务器中获取某一个时间点处的数据变更事件,也根据全局标识号可从源端历史服务器中获取第一全局标识号之后的数据变更事件。
较佳的,目标端服务器向源端历史服务器发送第三请求消息,具体包括:
目标端服务器通过M个数据传输通道向源端历史服务器发送N条第三请求消息;其中,M为大于等于1的正整数,M小于等于N;每条数据传输通道至少承载一条第三请求消息;
源端历史服务器将第三响应消息发送给目标端服务器,具体包括:
源端历史服务器将N条第三响应消息通过M个数据传输通道发送给目标端服务器。
在具体实施中,大部分情况下M等于N。较佳的,源端历史服务器通过M个数据传输通道接收目标端服务器发送的N条第三请求消息;其中,M为大于等于1的正整数,M小于等于N。每条数据传输通道可承载一条或多条第三请求消息。每个第三请求消息至少包括一个源数据表标识号。即每个第三请求消息中可携带多个源数据表标识号。较佳的,源端历史服务器与目标端服务器可建立多个并发传输通道。每个传输通道可承载一个或多个事件队列中的数据,各个事件队列对应的数据按事件队列的顺序,一个事件队列一个事件队列的按顺序发送,每个事件队列中的各个数据按全局标识号或者数据变更事件发生的顺序,按顺序传送。
具体来说,目标端服务器连接多个目标数据库时,则目标端服务器需要同步所有与该目标端服务器连接的目标数据库,目标端服务器也需分别为每个目标数据库构造一条第三请求消息,用于获取该目标数据库需同步的数据变更事件。假设该目标端服务器连接的N个目标数据库,目标端服务器构造了N条第三请求消息。
较佳的,目标端服务器从源端中继服务器获取第一全局标识号之后的数据变更事件之前,还包括:
源端中继服务器实时捕获源数据库产生的数据变更事件;其中,每条数据变更事件至少包括该数据变更事件对应的全局标识号,该数据变更事件对应的源数据库中的源数据表标识号;
源端中继服务器根据数据变更事件的源数据表标识号,将数据变更事件保存至源数据表标识号对应的事件队列中;其中,每个源数据库的每个源数据表标识号对应一个事件队列,每个事件队列至少对应一个源数据表标识号,每个事件队列对应一个事件队列标识号;
目标端服务器从源端中继服务器获取第一全局标识号之后的数据变更事件,具体包括:
源端中继服务器接收目标端服务器发送的第一请求消息;其中,第一请求消息中携带目标端服务器对应连接的目标数据库需同步的至少一个源数据表标识号对应的事件队列标识号、源数据表标识号对应的数据表已同步的日期最新的数据变更事件的第一全局标识号;其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;目标端服务器配置有与目标端服务器连接的目标数据库的配置参数;
源端中继服务器根据第一请求消息,从事件队列标识号对应的事件队列中将第一全局标识号之后的数据变更事件携带于第一响应消息中,并将第一响应消息发送给目标端服务器,以使目标端服务器对目标数据库执行同步操作。
较佳的,源端中继服务器实时捕获源数据库产生的数据变更事件,具体包括:
源端中继服务器实时捕获源数据库产生的数据变更事件,对数据变更事件进行预处理;其中,预处理为以下内容中的任一项或两项:
根据数据变更事件的发生时间和全局标识号删除重复的数据变更事件、根据数据变更事件中的操作指令和操作内容对数据变更事件进行合并。
从上述内容可看出,由于源端历史服务器储存的数据变更事件的最远日期远于所述源端中继服务器储存的数据变更事件的最远日期,因此当第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,从源端历史服务器获取所述第一全局标识号之后的数据变更事件,否则,从源端中继服务器获取所述第一全局标识号之后的数据变更事件。可见,源端历史服务器存储空间较大,可存储时间较长的数据变更事件,而源端中继服务器中仅存储较新的数据变更事件,因此,目标端服务器若发生较长时间的中断,源端中继服务器中可能已经没有中断点处的数据变更事件,则目标端服务器可从源端历史服务器中获取中断点处的数据变更事件,进一步,由于源端历史服务器和源端中继服务器的功能分离,发生中断的目标端服务器可从源端历史服务器中获取历史数据变更事件,处于正常工作状态的目标端服务器可继续从源端中继服务器获取数据变更事件,如此,源端中继服务器中的负荷量不会因发生中断的目标端服务器恢复正常工作而加重,因此保证了未发生中断的目标端服务器执行数据同步效率不变的同时,提高发生中断的目标端服务器自动恢复正常工作状态的效率。
基于前述内容,下面详细介绍本发明实施例中目标服务器从源端中继服务器中获取数据变更事件的过程。
源端中继服务器实时捕获源数据库产生的数据变更事件;其中,每条数据变更事件至少包括该数据变更事件对应的全局标识号、该数据变更事件对应的源数据库中的源数据表标识号。
具体来说,源端中继服务器实时捕获源数据库产生的数据变更事件具体有以下两种方式:
方式一:源端中继服务器无需连接源数据库,实时获取的源数据库保存的归档日志文件,解析该归档日志文件,从而间接获取源数据库产生的数据变更事件。如老版本的DB2和Oracle数据库。
方式二:源端中继服务器直接连接源数据库,实时获取源数据库产生的数据变更事件。如新数据库MySql、11.2以上版本的Oracle数据库。
源端中继服务器根据数据变更事件的源数据表标识号,将数据变更事件保存至源数据表标识号对应的事件队列中;其中,每个源数据库的每个源数据表标识号对应一个事件队列,每个事件队列至少对应一个源数据表标识号,每个事件队列对应一个事件队列标识号;
源端中继服务器接收目标端服务器发送的第一请求消息;其中,第一请求消息中携带目标端服务器对应连接的目标数据库需同步的至少一个源数据表标识号对应的事件队列标识号、源数据表标识号对应的数据表已同步的日期最新的数据变更事件的第一全局标识号。
其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;目标端服务器配置有与目标端服务器连接的目标数据库的配置参数。较佳的,至少一个目标数据库中储存有多个源数据库中每个源数据库中储存的全部数据表中的部分数据表。
源端中继服务器根据第一请求消息,从事件队列标识号对应的事件队列中将第一全局标识号之后的数据变更事件携带于第一响应消息中,并将第一响应消息发送给目标端服务器,以使目标端服务器对目标数据库执行同步操作。
由于源端中继服务器根据该数据变更事件的源数据表标识号,将数据变更事件保存至源数据表标识号对应的事件队列中,如此,当目标数据库储存的数据表仅为部分源数据库储存的数据表时,即目标数据库仅需同步部分源数据库中的数据表时,源端中继服务器则可快速从数据表对应的事件队列中确定出第一全局标识号之后的数据变更事件,并发送给目标端服务器,以使目标端服务器对目标数据库执行同步操作,可见,由于源端中继服务器对数据变更事件进行了归类,因此提高了源端中继服务器筛选数据变更事件的效率,从而提高了目标数据库储存的数据表仅为单个源数据库储存的所有数据表中的部分数据表时的数据同步效率。
进一步由于源端中继服务器连接目标端服务器,目标端服务器连接目标数据库,且目标端服务器配置有目标数据库的配置参数,因此,当某个目标数据库发生变动,如新增一个目标数据库时,仅需要修改该新增的目标数据库对应连接的目标端服务器中的配置参数,并重启该目标端服务器即可,而不需要重启源端中继服务器,因此,其它未进行参数配置修改的目标端服务器不需重启,进而与该未进行参数配置修改的目标端服务器连接的目标数据库的数据同步过程也不会中断,从而实现多个目标数据库与源数据库之间的数据同步,且当某个目标数据库发生变化时,其它目标数据库的数据同步过程不受影响。
进一步,每个数据库中保存的数据表均有源数据表标识号,源数据库中产生的某个数据表的数据变更记录,即数据变更事件,均包括有该数据变更事件对应的数据表的源数据表标识号。源端中继服务器中多个源数据库中的同一个源数据表标识号可对应一个事件队列标识号,源端中继服务器中每个源数据库中的每个源数据表标识号可对应一个事件队列标识号,多个源数据库中的多个不同的源数据表标识号也可对应同一个事件队列标识号,同一个事件队列标识号对应的多个数据表标识号可相关,也可不相关。
较佳的,事件队列标识号对应X个数据表,其中,X个数据表相互关联;X为大于1的正整数。
较佳的,事件队列标识号对应X个数据表,其中,X个数据表相互关联;X为大于1的正整数。本发明实施例所提供的方法中,每个源数据表标识号对应一个事件队列标识号,较佳的,每个事件队列标识号可对应多个源数据表标识号,但该多个源数据表标识号对应的数据表相互关联。列举以下两个例子进行介绍:
示例一,数据表“第三季度表”为基于数据表“八月份统计表”的变化得到的数据表,因此数据表“第三季度表”与数据表“八月份统计表”关联,在实际应用中,若某个目标数据库储存有数据表“八月份统计表”时,通常也会储存于数据表“八月份统计表”相关的数据表“第三季度表”,因此,目标数据库需同步有关联关系的数据表“八月份统计表”和数据表“第三季度表”,而本发明实施例将数据表“八月份统计表”和数据表“第三季度表”对应的数据变更事件均放置于同一个事件队列中,即可迅速将该目标数据库需同步的数据表“八月份统计表”和数据表“第三季度表”的数据全部发送给与该目标数据库连接的目标端服务器,以便于提高同步效率。
示例二:定义对数据表“操作表”中进行***修改时,对数据表“操作表”中***的字段必须为数据表“后台服务表”中的相同内容的字段。某些情况下,需对数据表“操作表”中***一当前数据表“后台服务表”中不存在的字段时,则需先对数据表“后台服务表”***该字段,之后再对数据表“操作表”***该字段。此时,数据表“后台服务表”和数据表“操作表”相关,实际应用中,也应将数据表“后台服务表”和数据表“操作表”放入一个事件队列中,以便于目标数据库同步记录时保持先对数据表“后台服务表”进行操作再对数据表“操作表”进行操作的顺序。若将数据表“后台服务表”和数据表“操作表”的数据变更事件分别放在两个事件队列中,则目标数据库可能需要先从一个事件队列中获取数据表“操作表”的数据变更事件进行数据同步,后续从另一个事件队列中获取数据表“后台服务表”的数据变更事件进行数据同步,可见此时目标数据库中的数据会发生紊乱。因此,在这种情况下,应务必将具有关联关系的数据表的数据变更事件放置在一个事件队列中。
较佳的,源端中继服务器至少连接两个源数据库,一个源数据表标识号所对应的数据表分别储存在至少两个源数据库中;不同源数据库对应的相同源数据表标识号的数据变更事件对应一个事件队列。
举个例子,假设一个源数据库中储存“订单表”中商户一的信息,另一个源数据库中储存“订单表”中商户二的信息,此时,由于该两个源数据库中储存的均为“订单表”,因此,可在源端中继服务器中,将来源于两个源数据库中的,但源数据表标识号均为“订单表”的数据变更事件保存在一个事件队列中。设置某个目标端服务器需要同步该“订单表”的所有数据内容,即可通过本发明实施例所提供的方法,将所有源数据库中储存的所有商户的“订单表”信息,从一个事件队列中确定出,并发送给对应的目标端服务器。可见,当将多个源数据库中的数据表整合至一个目标数据库时,本发明实施例所提供的方法效率较高。
源端中继服务器根据数据变更事件的源数据表标识号,将数据变更事件按源数据表标识号进行归类。较佳的,源端中继服务器可预先为每个源数据表标识号对应设置一个事件队列,设置完成后,源端中继服务器可将该设置发送给目标端服务器,或源端中继服务器将该设置发送至可与目标端服务器共享的一个服务器中,以便使目标端服务器获取源数据表标识号与事件队列标识号之间的对应关系。
具体来说,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表,具体是指至少存在一个目标数据库,该目标数据库中仅存储源数据库所储存的数据表中的一部分数据表,而非源数据库中所储存的全部数据表。
本发明实施例中的第一全局标识号即指目标端服务器对应连接的目标数据库已同步的日期最新的数据变更事件的全局标识号,举个例子,假设当前目标数据库的某个数据表已同步的全局标识号为0000至0015,则可见0015为已同步的日期最新的数据变更事件的全局标识号,因此,0015即为该为该数据表对应的第一全局标识号。本本发明实施例中为了后续引用方便,在此引入第一全局标识号概念,该概念不对本发明实施例具有限定作用。
本发明实施例中目标端服务器已预先获取源数据表标识号与事件队列标识号之间的对应关系,因此,构造第一请求消息时,可先确定出该目标端服务器连接的每个目标数据库需同步的所有源数据表标识号,此处目标数据库需同步的源数据表标识号可为该目标数据库所储存的所有数据表的源数据表标识号,也可为该目标数据库所储存的部分数据表的源数据表标识号。接着,目标端服务器需确定出每个目标数据库需同步的源数据表标识号对应的数据表已同步的日期最新的数据变更事件的第一全局标识号。
本发明实施例中至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表,此时,由于本发明实施例中的源端中继服务器对数据变更事件根据源数据表标识号进行归类,当目标数据库仅需同步源数据库中某一个或某几个数据表时,源端中继服务器可快速的从各个源数据表标识号对应的事件队列标识号中将各个数据表的数据变更事件发送给目标端服务器。
具体实施中,源数据库连接源端中继服务器,源端中继服务器连接目标端服务器,目标端服务器连接目标数据库。当多个源数据库连接至一个源端中继服务器时,该源端中继服务器接收所有源数据库产生的数据变更事件。数据变更事件是指由源数据库***自动记录的对该源数据库进行的所有操作的原始REDO日志。每个数据变更事件均会唯一对应一个全局标识号。
具体来说,数据变更事件记录源数据库的数据变更操作记录。每条数据变更事件包括对源数据操作的操作类型、操作参数等。操作类型包括增加、删除、修改等;操作参数包括操作时间、该条由数据变更事件解析而来的数据变更事件对应的全局标识号、源数据库的库名、源数据库中进行操作的数据表的表名、进行操作的数据表的各字段的名称,以及该字段的值等。
较佳的,数据变更事件为二进制形式,源端中继服务器将多条数据变更事件形成的二进制数据流进行储存,较佳的,源端中继服务器将数据变更事件缓存至内存中,当数据存满时,新的数据会覆盖历史数据。
若源端中继服务器连接多个源数据库时,将所有源数据库的所有数据表的数据变更事件均放置在一个事件队列中,此时队列较大,不方便检索,特别是当目标数据库仅需同步某一个数据表时,源端中继服务器则需要执行相对复杂的筛选过程,从而挑选出需同步的数据表对应的数据变更事件,可见此时同步效率较低。而通过本发明实施例中所提供的方法,源端中继服务器对数据变更事件进行了归类,因此提高了源端中继服务器筛选数据变更事件的效率,从而提高了目标数据库储存的数据表为源数据库储存的数据表的真子集时的数据同步效率。
较佳的,源端中继服务器实时捕获源数据库产生的数据变更事件,具体包括:
源端中继服务器实时捕获源数据库产生的数据变更事件,对数据变更事件进行预处理;其中,预处理为以下内容中的任一项或两项:
根据数据变更事件的发生时间和全局标识号删除重复的数据变更事件、根据数据变更事件中的操作指令和操作内容对数据变更事件进行合并。
具体来说,源端中继服务器中针对某一个全局标识号下的数据变更事件的集合进行解析存储时,假设一个全局标识号对应的数据变更事件包括三个子事件,分别为第一子事件、第二子事件、第三子事件;则若发生解析错误,例如,解析至第二子事件时出错,则源端中继服务器则需要返回中断点处,有时可能返回至中断点之前一点的地方重新解析,假设重新返回至第一子事件进行解析,此时该全局标识号对应的数据变更事件的集合中便对应两个第一子事件,一个第二子事件,一个第三子事件。本发明实施例中的源端中继服务器即可通过对数据变更事件进行预处理时,根据数据变更事件的发生时间和全局标识号删除同一个全局标识号下的数据变更事件的发生时间相同的重复的数据变更事件,具体可为子数据变更事件。
另一种情况,假设,对某个数据对象执行了一次更改,对该同一个位置的对象执行了第二次更改,此时,源端中继服务器经判断,则可将该两条记录变化的数据变更事件进行合并,即对某个数据对象仅执行了第二次更改。此时,目标数据库仅需同步该第二次更改对应的数据变更事件,则可完成同步过程。
通过上述两个例子可看出,源端中继服务器对数据变更事件进行预处理之后,缩减了需传输的数据变更事件的数量,减少了数据传输过程中的负荷,进一步提高了数据同步的效率。
较佳的,源端中继服务器接收目标端服务器发送的第一请求消息,具体包括:
源端中继服务器通过M个数据传输通道接收目标端服务器发送的N条第一请求消息;其中,M为大于等于1的正整数,M小于等于N;每条数据传输通道至少承载一条第一请求消息;
源端中继服务器将第一响应消息发送给目标端服务器,具体包括:
源端中继服务器将N条第一响应消息通过M个数据传输通道发送给目标端服务器。
基于前述相同构思,目标端服务器连接多个目标数据库时,则目标端服务器需要同步所有与该目标端服务器连接的目标数据库,目标端服务器也需分别为每个目标数据库构造一条第一请求消息,用于获取该目标数据库需同步的数据变更事件。假设该目标端服务器连接的N个目标数据库,目标端服务器构造了N条第一请求消息。
进一步,较佳的,本发明实施例中,目标端服务器向源端中继服务器发送该N条第一请求消息时,可建立TCP连接的数据传输通道。较佳的,多条请求消息可共用一个数据传输通道,较优的方案为,一条请求消息占用一个数据传输通道,即M等于N,此时,目标端服务器可通过N条数据传输通道向源端中继服务器发送N条第一请求消息,从而提高了目标端服务器连接多个目标数据库时的数据传输效率,同时降低同步延时。较佳的,源端中继服务器可通过该M个数据传输通道向该目标端服务器返回N条第一响应消息。
较佳的,配置参数至少包括目标数据库标识号、目标数据库的类型、目标数据库存储的数据表的目标数据表标识号、目标数据表标识号与源数据库中的源数据表标识号的对应关系;
源端中继服务器接收目标服务器发送的注册请求,其中,注册请求是该目标服务器启动时,加载完与该目标服务器连接的目标数据库的配置参数之后发送的;
源端中继服务器向该目标服务器发送注册响应,以使该目标服务器与源端中继服务器建立连接。
具体来说,与源端中继服务器连接的目标端服务器配置有目标数据库的配置参数,配置参数包括与该目标端服务器连接的所有目标数据库标识号、目标数据库的类型、目标数据库存储的数据表的目标数据表标识号、目标数据表标识号与源数据库中的源数据表标识号的对应关系等。而且源端中继服务器至少连接两个目标端服务器。
较佳的,目标端服务器中预先配置有与该目标端服务器对应连接的目标数据库的配置参数,接着目标端服务器加载完成该配置参数之后,目标端服务器向源端中继服务器发送注册请求,以便进行登录。本发明实施例也支持在目标端服务器的正常运行过程对预先配置的目标数据库的配置参数进行修改,修改之后需对应的该目标端服务器进行设置或重启。
较佳的,当目标数据库发生变动时,如增加、修改或升级某个目标数据库,则仅需对应增加、修改或重启与该新增目标数据库连接的目标端服务器,并对应增加或更改该目标端服务器中的该目标数据库对应的配置参数,之后将该发生变动的目标数据库的配置参数对应加载在与该发生变动的目标数据库连接的目标端服务器中。当该发生变动的目标端服务器参数加载完并进行重启之后,该发生变动的目标端服务器会向源端中继服务器进行注册。较佳的,目标端服务器每次重启后,均执行注册过程。具体注册过程为:
源端中继服务器接收目标端服务器发送的注册请求,其中,注册请求是该目标端服务器启动时,加载完与该目标端服务器连接的目标数据库的配置参数之后发送的;源端中继服务器向该目标端服务器发送注册响应,以使该目标端服务器与源端中继服务器建立连接。
当发生变动的目标端服务器在源端中继服务器中注册成功之后,源端中继服务器与该目标端服务器即建立连接,该发生变动的目标数据库即可与源数据库之间进行数据同步。该过程中源端中继服务器以及与该源端中继服务器连接的其它目标端服务器均未进行重启。进而与该未进行重启的目标端服务器连接的目标数据库的数据同步过程也不会中断,从而实现多个目标数据库与源数据库之间的数据同步,且当某个目标数据库发生变化时,其它目标数据库的数据同步过程不受影响。
可见,由于源端中继服务器连接目标端服务器,目标端服务器连接目标数据库,且目标端服务器配置有目标数据库的配置参数,因此,当某个目标数据库发生变动,如新增一个目标数据库时,仅需要修改该新增的目标数据库对应连接的目标端服务器中的配置参数,并重启该目标端服务器即可,而不需要重启源端中继服务器,因此,其它未进行参数配置修改的目标端服务器不需重启,进而与该未进行参数配置修改的目标端服务器连接的目标数据库的数据同步过程也不会中断,从而实现多个目标数据库与源数据库之间的数据同步,且当某个目标数据库发生变化时,其它目标数据库的数据同步过程不受影响。
较佳的,目标端服务器对目标数据库执行同步操作,具体包括:
目标端服务器根据对应连接的目标数据库的类型,将第一响应消息或第三响应消息中的第一全局标识号之后的数据变更事件转换为目标数据库的操作语言所对应的数据变更事件,并对目标数据库执行同步操作。
较佳的,目标端服务器对目标数据库执行同步操作,具体包括:
数据变更事件为二进制格式;
当该目标端服务器对应连接的目标数据库为关系型数据库时,目标端服务器根据对应连接的目标数据库的类型,将第一响应消息中的第一全局标识号之后的数据变更事件转换为结构化查询语句(Structured Query Language,简称SQL)语句,并对目标数据库执行同步操作;
当该目标端服务器对应连接的目标数据库为非关系型数据库时,目标端服务器根据对应连接的目标数据库的类型,将第一响应消息中的第一全局标识号之后的数据变更事件转换为软件开发工具包(Software Development Kit,简称SDK)语句,并对目标数据库执行同步操作。
具体来说,目标端服务器从源端中继服务器或源端历史服务器获取数据变更事件之后,较佳的,目标端服务器根据对应连接的目标数据库的类型,将第一全局标识号之后的数据变更事件转换为目标数据库的操作语言所对应的数据变更事件,并对目标数据库执行同步操作。
由于源端中继服务器将实时捕获的数据变更事件解析为数据变更事件,该数据变更事件为一中立的二进制格式,进而通过目标端服务器转换为其它多种格式,如SQL语句、SDK语句等。目标端服务器具有格式转换功能,当目标端服务器接收到该二进制格式的数据变更事件之后,可根据目标数据库的类型,将第一全局标识号之后的数据变更事件转换为目标数据库的操作语言所对应的数据变更事件,并对目标数据库执行同步操作。因此,目标数据库与源数据库结构或类型不一致时,如源数据库为关系型数据库,目标数据库为非关系型数据库时,目标端服务器可根据目标数据库的类型对数据变更事件进行转换,从而实现了源数据库与目标数据库的同步,进而实现了源数据库与目标数据库结构类型不同时的数据同步。
较佳的,本发明实施例的源数据库和目标数据库之间的关系可为以下几种:
(1)源数据库和目标数据库之间可为同类型且同版本数据库,如源数据库为DB2-v9,目标数据库为DB2-v9;
(2)源数据库和目标数据库可为同类型但不同版本数据库,如源数据库为DB2-v9,目标数据库为DB2-v10;
(3)源数据库和目标数据库可为不同类型,如源数据库为DB2,目标数据库为MySql;
(4)源数据库和目标数据库可为结构不一致的异构数据库,如源数据库为关系型数据库DB2,而目标数据库为非关系型数据库,非关系型数据库如MongoDB、Redis等;
(5)较佳的,目标数据库还可为一些非数据库形式的联机***,如目标数据库的形式可为消息队列、索引文件更新模块等。
较佳的,本发明实施例中的源数据库为关系型数据库,通过本发明实施例所提供的方法可实现异构数据库之间的数据同步。
较佳的,数据变更事件为二进制格式;当该目标端服务器对应连接的目标数据库为关系型数据库时,目标端服务器根据对应连接的目标数据库的类型,将第一全局标识号之后的数据变更事件转换为SQL语句,并对目标数据库执行同步操作;
当该目标端服务器对应连接的目标数据库为非关系型数据库时,目标端服务器根据对应连接的目标数据库的类型,将第一全局标识号之后的数据变更事件转换为SDK语句,并对目标数据库执行同步操作。
具体实施中,本发明实施例中目标端服务器至少连接两个目标数据库,源端中继服务器也可连接多个源数据库,本发明实施例可实现将多个源数据库中的数据同步至多个目标数据库中。
较佳的,配置参数包括目标数据库标识号、目标数据库的类型;目标端服务器至少连接两个目标数据库,请求消息中还携带该目标数据库标识号;响应消息中还携带该目标数据库标识号,以使目标端服务器根据该目标数据库标识号确定出该目标数据库,并根据该目标数据库的类型,将第一全局标识号之后的数据变更事件转换为该目标数据库的操作语言所对应的数据变更事件,并对该目标数据库执行同步操作。
具体来说,当目标端服务器至少连接两个目标数据库时,目标端服务器中可配置与该目标端服务器连接的所有目标数据库的配置参数,目标端服务器可对应构造一条包含所有目标数据库需同步的全局标识号的请求消息,也可分别构造多条请求消息,其中每条请求消息中均携带一个目标数据库的标识号,以及该目标数据库对应的第一全局标识号。
进一步,当同一个目标端服务器所连接的两个目标数据库的类型或结构不同时,目标端服务器可分别将获取的每个目标数据库所对应的待同步的数据变更事件分别转换为该目标数据库的操作语言所对应的数据变更事件,并对每个与该目标端服务器连接的目标数据库执行同步操作。
从上述内容可以看出:由于源端中继服务器根据该数据变更事件的源数据表标识号,将数据变更事件保存至源数据表标识号对应的事件队列中,如此,当目标数据库储存的数据表仅为部分源数据库储存的数据表时,即目标数据库仅需同步部分源数据库中的数据表时,源端中继服务器则可快速从数据表对应的事件队列中确定出第一全局标识号之后的数据变更事件,并发送给目标端服务器,以使目标端服务器对目标数据库执行同步操作,可见,由于源端中继服务器对数据变更事件进行了归类,因此提高了源端中继服务器筛选数据变更事件的效率,从而提高了目标数据库储存的数据表为源数据库储存的全部数据表的部分数据表时的数据同步效率。
综上所述,由于源端历史服务器储存的数据变更事件的最远日期远于所述源端中继服务器储存的数据变更事件的最远日期,因此当第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,从源端历史服务器获取所述第一全局标识号之后的数据变更事件,否则,从源端中继服务器获取所述第一全局标识号之后的数据变更事件。可见,源端历史服务器存储空间较大,可存储时间较长的数据变更事件,而源端中继服务器中仅存储较新的数据变更事件,因此,目标端服务器若发生较长时间的中断,源端中继服务器中可能已经没有中断点处的数据变更事件,则目标端服务器可从源端历史服务器中获取中断点处的数据变更事件,进一步,由于源端历史服务器和源端中继服务器的功能分离,发生中断的目标端服务器可从源端历史服务器中获取历史数据变更事件,处于正常工作状态的目标端服务器可继续从源端中继服务器获取数据变更事件,如此,源端中继服务器中的负荷量不会因发生中断的目标端服务器恢复正常工作而加重,因此保证了未发生中断的目标端服务器执行数据同步效率不变的同时,提高发生中断的目标端服务器自动恢复正常工作状态的效率。
进一步由于目标端服务器连接目标数据库,且目标端服务器配置有目标数据库的配置参数,因此,当某个目标数据库发生变动,如新增一个目标数据库时,仅需要修改该新增的目标数据库对应连接的目标端服务器中的配置参数,并重启该目标端服务器即可,因此,其它未进行参数配置修改的目标端服务器不需重启,进而与该未进行参数配置修改的目标端服务器连接的目标数据库的数据同步过程也不会中断,从而实现多个目标数据库与源数据库之间的数据同步,且当某个目标数据库发生变化时,其它目标数据库的数据同步过程不受影响。
图3示例性示出本发明实施例提供一种数据库同步的装置的结构示意图。
基于相同构思,本发明实施例提供一种数据库同步的装置,如图3所示,包括与源数据库101连接的源端服务器107,与源端服务器107连接的目标端端服务器103,与目标端服务器103连接的目标数据库104。源端服务器107包括源端中继服务器102和源端历史服务器105,源端中继服务器102与源数据库101、目标端服务器103以及源端历史服务器105连接,源端历史服务器105与源端中继服务器102、目标端服务器103连接。较佳的,目标端服务器103也可连接非数据库类型的***108。
目标端服务器,包括确定单元301、第一获取单元302、第二获取单元303:
确定单元,用于根据预设对应关系确定目标端服务器所连接的目标数据库中目标数据标识号在源数据库中所对应的源数据标识号,并确定出目标数据表标识号对应的已同步的日期最新数据变更事件的第一全局标识号;其中,源数据标识号与目标数据标识号一一对应;其中,数据变更事件是源端服务器实时捕获源数据库产生的数据变更事件得到的;数据变更事件包括该数据变更事件的生成时间;
第一获取单元,用于若第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,则从源端历史服务器获取第一全局标识号之后的数据变更事件,并根据从源端历史服务器获取的数据变更事件对目标数据库执行同步操作;其中,每条数据变更事件包括该数据变更事件对应的全局标识号;源端历史服务器储存的数据变更事件的最远日期远于源端中继服务器储存的数据变更事件的最远日期;
第二获取单元,用于若第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差小于第一中断时长,则从源端中继服务器获取第一全局标识号之后的数据变更事件,并根据从源端中继服务器获取的数据变更事件对目标数据库执行同步操作;目标端服务器配置有目标数据库的配置参数。
较佳的,源端历史服务器,用于:
向源端中继服务器发送第二请求消息;其中,第二请求消息中携带源端历史服务器需同步的源数据表标识号对应的已同步的日期最新数据变更事件的全局标识号;源端历史服务器根据第二响应消息中的数据变更事件对应的源数据表标识号,将数据变更事件保存至源数据表标识号对应的事件队列中;其中,每个源数据表标识号对应一个事件队列,每个事件队列对应一个事件队列标识号;
源端中继服务器,用于:
根据第二请求消息,将源数据表标识号对应的已同步的日期最新数据变更事件的全局标识号之后的数据变更事件携带于第二响应消息中,并将第二响应消息发送给源端历史服务器。
较佳的,第一获取单元,具体用于:
向源端历史服务器发送第三请求消息;其中,第三请求消息携带目标端服务器对应连接的目标数据库需同步的至少一个源数据表标识号对应的事件队列标识号,以及源数据表标识号对应的数据表已同步的日期最新数据变更事件的第一全局标识号;其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;
源端历史服务器,具体用于:
根据第三请求消息,从对应的事件队列中将第三请求消息中的第一全局标识号之后的数据变更事件携带于第三响应消息中,并将第三响应消息发送给目标端服务器,以使目标端服务器对目标数据库执行同步操作。
较佳的,第一获取单元,具体用于:
向源端历史服务器发送第三请求消息;其中,第三请求消息携带目标端服务器对应连接的目标数据库需同步的至少一个源数据表标识号对应的事件队列标识号,以及源数据表标识号对应的数据表已同步的日期最新的数据变更事件的生成时间;其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;
源端历史服务器,具体用于:
根据第三请求消息,从对应的事件队列中将第三请求消息中的已同步的日期最新的数据变更事件的生成时间之后的数据变更事件携带于第三响应消息中,并将第三响应消息发送给目标端服务器,以使目标端服务器对目标数据库执行同步操作。
较佳的,第一获取单元,具体用于:
通过M个数据传输通道向源端历史服务器发送N条第三请求消息;其中,M为大于等于1的正整数,M小于等于N;每条数据传输通道至少承载一条第三请求消息;
源端历史服务器,具体用于:
将N条第三响应消息通过M个数据传输通道发送给目标端服务器。
较佳的,源端历史服务器,具体用于:
通过M个数据传输通道向源端中继服务器发送N条第二请求消息;其中,M为大于等于1的正整数,M小于等于N;每条数据传输通道至少承载一条第二请求消息;
源端中继服务器,具体用于:
将N条第二响应消息通过M个数据传输通道发送给源端历史服务器。
较佳的,源端中继服务器,具体用于:
源端中继服务器实时捕获源数据库产生的数据变更事件;其中,每条数据变更事件至少包括该数据变更事件对应的全局标识号、该数据变更事件对应的源数据库中的源数据表标识号;
源端中继服务器根据数据变更事件的源数据表标识号,将数据变更事件保存至源数据表标识号对应的事件队列中;其中,每个源数据库的每个源数据表标识号对应一个事件队列,每个事件队列至少对应一个源数据表标识号,每个事件队列对应一个事件队列标识号;
源端中继服务器接收目标端服务器发送的第一请求消息;其中,第一请求消息中携带目标端服务器对应连接的目标数据库需同步的至少一个源数据表标识号对应的事件队列标识号、源数据表标识号对应的数据表已同步的日期最新数据变更事件的第一全局标识号;其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;目标端服务器配置有与目标端服务器连接的目标数据库的配置参数;
源端中继服务器根据第一请求消息,从事件队列标识号对应的事件队列中将第一全局标识号之后的数据变更事件携带于第一响应消息中,并将第一响应消息发送给目标端服务器,以使目标端服务器对目标数据库执行同步操作。
较佳的,源端中继服务器,具体用于:
实时捕获源数据库产生的数据变更事件,对数据变更事件进行预处理;其中,预处理为以下内容中的任一项或两项:
根据数据变更事件的发生时间和全局标识号删除重复的数据变更事件、根据数据变更事件中的操作指令和操作内容对数据变更事件进行合并。
综上所述,由于源端历史服务器储存的数据变更事件的最远日期远于所述源端中继服务器储存的数据变更事件的最远日期,因此当第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,从源端历史服务器获取所述第一全局标识号之后的数据变更事件,否则,从源端中继服务器获取所述第一全局标识号之后的数据变更事件。可见,源端历史服务器存储空间较大,可存储时间较长的数据变更事件,而源端中继服务器中仅存储较新的数据变更事件,因此,目标端服务器若发生较长时间的中断,源端中继服务器中可能已经没有中断点处的数据变更事件,则目标端服务器可从源端历史服务器中获取中断点处的数据变更事件,进一步,由于源端历史服务器和源端中继服务器的功能分离,发生中断的目标端服务器可从源端历史服务器中获取历史数据变更事件,处于正常工作状态的目标端服务器可继续从源端中继服务器获取数据变更事件,如此,源端中继服务器中的负荷量不会因发生中断的目标端服务器恢复正常工作而加重,因此保证了未发生中断的目标端服务器执行数据同步效率不变的同时,提高发生中断的目标端服务器自动恢复正常工作状态的效率。
进一步由于目标端服务器连接目标数据库,且目标端服务器配置有目标数据库的配置参数,因此,当某个目标数据库发生变动,如新增一个目标数据库时,仅需要修改该新增的目标数据库对应连接的目标端服务器中的配置参数,并重启该目标端服务器即可,因此,其它未进行参数配置修改的目标端服务器不需重启,进而与该未进行参数配置修改的目标端服务器连接的目标数据库的数据同步过程也不会中断,从而实现多个目标数据库与源数据库之间的数据同步,且当某个目标数据库发生变化时,其它目标数据库的数据同步过程不受影响。
本领域内的技术人员应明白,本发明的实施例可提供为方法、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (16)
1.一种数据库同步的方法,其特征在于,包括以下步骤:
目标端服务器根据预设对应关系确定所述目标端服务器所连接的目标数据库中目标数据标识号在源数据库中所对应的源数据标识号,并确定出所述目标数据表标识号对应的已同步的日期最新数据变更事件的第一全局标识号;其中,所述源数据标识号与目标数据标识号一一对应;其中,所述数据变更事件是源端服务器实时捕获源数据库产生的数据变更事件得到的;所述数据变更事件包括该数据变更事件的生成时间;所述数据变更事件为二进制形式;
若所述第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,则所述目标端服务器从源端历史服务器获取所述第一全局标识号之后的数据变更事件,并根据从所述源端历史服务器获取的数据变更事件对所述目标数据库执行同步操作;其中,每条数据变更事件包括该数据变更事件对应的全局标识号;所述源端历史服务器储存的数据变更事件的最远日期远于源端中继服务器储存的数据变更事件的最远日期;
若所述第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差小于所述第一中断时长,则所述目标端服务器从源端中继服务器获取所述第一全局标识号之后的数据变更事件,并根据从所述源端中继服务器获取的数据变更事件对所述目标数据库执行同步操作;所述目标端服务器配置有所述目标数据库的配置参数;
其中,所述目标端服务器具有格式转换功能,所述目标端服务器对所述目标数据库执行同步操作,包括:
所述目标端服务器根据对应连接的目标数据库的类型,将所述第一全局标识号之后的数据变更事件转换为所述目标数据库的操作语言所对应的数据变更事件,并对所述目标数据库执行同步操作。
2.如权利要求1所述的方法,其特征在于,所述目标端服务器从源端历史服务器获取所述第一全局标识号之后的数据变更事件之前,还包括:
所述源端历史服务器向所述源端中继服务器发送第二请求消息;其中,所述第二请求消息中携带所述源端历史服务器需同步的源数据表标识号对应的已同步的日期最新数据变更事件的全局标识号;
所述源端中继服务器根据所述第二请求消息,将源数据表标识号对应的已同步的日期最新数据变更事件的全局标识号之后的数据变更事件携带于第二响应消息中,并将所述第二响应消息发送给所述源端历史服务器;
所述源端历史服务器根据所述第二响应消息中的数据变更事件对应的源数据表标识号,将所述数据变更事件保存至所述源数据表标识号对应的事件队列中;其中,每个源数据表标识号对应一个事件队列,每个事件队列对应一个事件队列标识号。
3.如权利要求2所述的方法,其特征在于,所述目标端服务器从源端历史服务器获取所述第一全局标识号之后的数据变更事件,具体包括:
所述目标端服务器向所述源端历史服务器发送第三请求消息;其中,所述第三请求消息携带所述目标端服务器对应连接的目标数据库需同步的至少一个源数据表标识号对应的事件队列标识号,以及所述源数据表标识号对应的数据表已同步的日期最新数据变更事件的第一全局标识号;其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;
所述源端历史服务器根据所述第三请求消息,从所述对应的事件队列中将所述第三请求消息中的所述第一全局标识号之后的数据变更事件携带于第三响应消息中,并将所述第三响应消息发送给所述目标端服务器,以使所述目标端服务器对所述目标数据库执行同步操作。
4.如权利要求2所述的方法,其特征在于,所述目标端服务器从源端历史服务器获取所述第一全局标识号之后的数据变更事件,具体包括:
所述目标端服务器向所述源端历史服务器发送第三请求消息;其中,所述第三请求消息携带所述目标端服务器对应连接的目标数据库需同步的至少一个源数据表标识号对应的事件队列标识号,以及所述源数据表标识号对应的数据表已同步的日期最新的数据变更事件的生成时间;其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;
所述源端历史服务器根据所述第三请求消息,从所述对应的事件队列中将所述第三请求消息中的所述已同步的日期最新的数据变更事件的生成时间之后的数据变更事件携带于第三响应消息中,并将所述第三响应消息发送给所述目标端服务器,以使所述目标端服务器对所述目标数据库执行同步操作。
5.如权利要求3或4所述的方法,其特征在于,所述目标端服务器向所述源端历史服务器发送第三请求消息,具体包括:
所述目标端服务器通过M个数据传输通道向所述源端历史服务器发送N条第三请求消息;其中,M为大于等于1的正整数,M小于等于N;每条数据传输通道至少承载一条第三请求消息;
所述源端历史服务器将所述第三响应消息发送给所述目标端服务器,具体包括:
所述源端历史服务器将N条第三响应消息通过所述M个数据传输通道发送给所述目标端服务器。
6.如权利要求2所述的方法,其特征在于,所述源端历史服务器向所述源端中继服务器发送第二请求消息,具体包括:
所述源端历史服务器通过M个数据传输通道向所述源端中继服务器发送N条第二请求消息;其中,M为大于等于1的正整数,M小于等于N;每条数据传输通道至少承载一条第二请求消息;
所述源端中继服务器将所述第二响应消息发送给所述源端历史服务器,具体包括:
所述源端中继服务器将N条所述第二响应消息通过所述M个数据传输通道发送给所述源端历史服务器。
7.如权利要求1所述的方法,其特征在于,所述目标端服务器从源端中继服务器获取所述第一全局标识号之后的数据变更事件之前,还包括:
源端中继服务器实时捕获源数据库产生的数据变更事件;其中,每条数据变更事件至少包括该数据变更事件对应的全局标识号、该数据变更事件对应的源数据库中的源数据表标识号;
所述源端中继服务器根据所述数据变更事件的源数据表标识号,将所述数据变更事件保存至所述源数据表标识号对应的事件队列中;其中,每个源数据库的每个源数据表标识号对应一个事件队列,每个事件队列至少对应一个源数据表标识号,每个事件队列对应一个事件队列标识号;
所述目标端服务器从源端中继服务器获取所述第一全局标识号之后的数据变更事件,具体包括:
所述源端中继服务器接收目标端服务器发送的第一请求消息;其中,所述第一请求消息中携带所述目标端服务器对应连接的目标数据库需同步的至少一个源数据表标识号对应的事件队列标识号、所述源数据表标识号对应的数据表已同步的日期最新数据变更事件的第一全局标识号;其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;所述目标端服务器配置有与所述目标端服务器连接的目标数据库的配置参数;
所述源端中继服务器根据所述第一请求消息,从所述事件队列标识号对应的事件队列中将所述第一全局标识号之后的数据变更事件携带于第一响应消息中,并将所述第一响应消息发送给所述目标端服务器,以使所述目标端服务器对所述目标数据库执行同步操作。
8.如权利要求7所述的方法,其特征在于,所述源端中继服务器实时捕获源数据库产生的数据变更事件,具体包括:
所述源端中继服务器实时捕获源数据库产生的数据变更事件,对所述数据变更事件进行预处理;其中,所述预处理为以下内容中的任一项或两项:
根据数据变更事件的发生时间和全局标识号删除重复的数据变更事件、根据数据变更事件中的操作指令和操作内容对数据变更事件进行合并。
9.一种数据库同步的装置,其特征在于,包括与源端中继服务器连接的源端历史服务器,与所述源端历史服务器连接的目标端服务器,以及与源数据库连接的所述源端中继服务器,与所述源端中继服务器连接的目标端服务器,与所述目标端服务器连接的目标数据库:
所述目标端服务器,包括:
确定单元,用于根据预设对应关系确定所述目标端服务器所连接的目标数据库中目标数据标识号在源数据库中所对应的源数据标识号,并确定出所述目标数据表标识号对应的已同步的日期最新数据变更事件的第一全局标识号;其中,所述源数据标识号与目标数据标识号一一对应;其中,所述数据变更事件是源端服务器实时捕获源数据库产生的数据变更事件得到的;所述数据变更事件包括该数据变更事件的生成时间;所述数据变更事件为二进制形式;
第一获取单元,用于若所述第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,则从源端历史服务器获取所述第一全局标识号之后的数据变更事件,并根据从所述源端历史服务器获取的数据变更事件对所述目标数据库执行同步操作;其中,每条数据变更事件包括该数据变更事件对应的全局标识号;所述源端历史服务器储存的数据变更事件的最远日期远于所述源端中继服务器储存的数据变更事件的最远日期;
第二获取单元,用于若所述第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差小于所述第一中断时长,则从源端中继服务器获取所述第一全局标识号之后的数据变更事件,并根据从所述源端中继服务器获取的数据变更事件对所述目标数据库执行同步操作;所述目标端服务器配置有所述目标数据库的配置参数;
其中,所述目标端服务器具有格式转换功能,所述目标端服务器,具体用于:
根据对应连接的目标数据库的类型,将所述第一全局标识号之后的数据变更事件转换为所述目标数据库的操作语言所对应的数据变更事件,并对所述目标数据库执行同步操作。
10.如权利要求9所述的装置,其特征在于,所述源端历史服务器,用于:
向所述源端中继服务器发送第二请求消息;其中,所述第二请求消息中携带所述源端历史服务器需同步的源数据表标识号对应的已同步的日期最新数据变更事件的全局标识号;所述源端历史服务器根据第二响应消息中的数据变更事件对应的源数据表标识号,将所述数据变更事件保存至所述源数据表标识号对应的事件队列中;其中,每个源数据表标识号对应一个事件队列,每个事件队列对应一个事件队列标识号;
所述源端中继服务器,用于:
根据所述第二请求消息,将源数据表标识号对应的已同步的日期最新数据变更事件的全局标识号之后的数据变更事件携带于第二响应消息中,并将所述第二响应消息发送给所述源端历史服务器。
11.如权利要求10所述的装置,其特征在于,所述第一获取单元,具体用于:
向所述源端历史服务器发送第三请求消息;其中,所述第三请求消息携带所述目标端服务器对应连接的目标数据库需同步的至少一个源数据表标识号对应的事件队列标识号,以及所述源数据表标识号对应的数据表已同步的日期最新数据变更事件的第一全局标识号;其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;
所述源端历史服务器,具体用于:
根据所述第三请求消息,从所述对应的事件队列中将所述第三请求消息中的所述第一全局标识号之后的数据变更事件携带于第三响应消息中,并将所述第三响应消息发送给所述目标端服务器,以使所述目标端服务器对所述目标数据库执行同步操作。
12.如权利要求10所述的装置,其特征在于,所述第一获取单元,具体用于:
向所述源端历史服务器发送第三请求消息;其中,所述第三请求消息携带所述目标端服务器对应连接的目标数据库需同步的至少一个源数据表标识号对应的事件队列标识号,以及所述源数据表标识号对应的数据表已同步的日期最新的数据变更事件的生成时间;其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;
所述源端历史服务器,具体用于:
根据所述第三请求消息,从所述对应的事件队列中将所述第三请求消息中的所述已同步的日期最新的数据变更事件的生成时间之后的数据变更事件携带于第三响应消息中,并将所述第三响应消息发送给所述目标端服务器,以使所述目标端服务器对所述目标数据库执行同步操作。
13.如权利要求11或12所述的装置,其特征在于,所述第一获取单元,具体用于:
通过M个数据传输通道向所述源端历史服务器发送N条第三请求消息;其中,M为大于等于1的正整数,M小于等于N;每条数据传输通道至少承载一条第三请求消息;
所述源端历史服务器,具体用于:
将N条第三响应消息通过所述M个数据传输通道发送给所述目标端服务器。
14.如权利要求10所述的装置,其特征在于,所述源端历史服务器,具体用于:
通过M个数据传输通道向所述源端中继服务器发送N条第二请求消息;其中,M为大于等于1的正整数,M小于等于N;每条数据传输通道至少承载一条第二请求消息;
所述源端中继服务器,具体用于:
将N条所述第二响应消息通过所述M个数据传输通道发送给所述源端历史服务器。
15.如权利要求9所述的装置,其特征在于,所述源端中继服务器,具体用于:
源端中继服务器实时捕获源数据库产生的数据变更事件;其中,每条数据变更事件至少包括该数据变更事件对应的全局标识号、该数据变更事件对应的源数据库中的源数据表标识号;
所述源端中继服务器根据所述数据变更事件的源数据表标识号,将所述数据变更事件保存至所述源数据表标识号对应的事件队列中;其中,每个源数据库的每个源数据表标识号对应一个事件队列,每个事件队列至少对应一个源数据表标识号,每个事件队列对应一个事件队列标识号;
所述源端中继服务器接收目标端服务器发送的第一请求消息;其中,所述第一请求消息中携带所述目标端服务器对应连接的目标数据库需同步的至少一个源数据表标识号对应的事件队列标识号、所述源数据表标识号对应的数据表已同步的日期最新数据变更事件的第一全局标识号;其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;所述目标端服务器配置有与所述目标端服务器连接的目标数据库的配置参数;
所述源端中继服务器根据所述第一请求消息,从所述事件队列标识号对应的事件队列中将所述第一全局标识号之后的数据变更事件携带于第一响应消息中,并将所述第一响应消息发送给所述目标端服务器,以使所述目标端服务器对所述目标数据库执行同步操作。
16.如权利要求15所述的装置,其特征在于,所述源端中继服务器,具体用于:
实时捕获源数据库产生的数据变更事件,对所述数据变更事件进行预处理;其中,所述预处理为以下内容中的任一项或两项:
根据数据变更事件的发生时间和全局标识号删除重复的数据变更事件、根据数据变更事件中的操作指令和操作内容对数据变更事件进行合并。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510201772.6A CN104809200B (zh) | 2015-04-24 | 2015-04-24 | 一种数据库同步的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510201772.6A CN104809200B (zh) | 2015-04-24 | 2015-04-24 | 一种数据库同步的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104809200A CN104809200A (zh) | 2015-07-29 |
CN104809200B true CN104809200B (zh) | 2018-11-16 |
Family
ID=53694022
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510201772.6A Active CN104809200B (zh) | 2015-04-24 | 2015-04-24 | 一种数据库同步的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104809200B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105262831B (zh) * | 2015-10-30 | 2019-02-22 | 北京奇艺世纪科技有限公司 | 一种存储***间同步数据的方法、装置及同步*** |
CN106815275B (zh) * | 2015-12-02 | 2020-11-27 | 阿里巴巴集团控股有限公司 | 一种通过备用数据库实现主备数据库同步的方法与设备 |
CN107026880A (zh) * | 2016-02-01 | 2017-08-08 | 北京京东尚科信息技术有限公司 | 数据同步方法和装置 |
CN105843966A (zh) * | 2016-04-22 | 2016-08-10 | ***股份有限公司 | 数据处理***以及方法 |
CN107423303B (zh) * | 2016-05-24 | 2021-02-26 | 北京京东尚科信息技术有限公司 | 数据同步的方法和*** |
CN106909598B (zh) * | 2016-07-01 | 2020-10-13 | 阿里巴巴集团控股有限公司 | 一种保障计算数据一致性的处理方法、装置及*** |
CN106709066B (zh) * | 2017-01-19 | 2020-05-19 | 杭州数梦工场科技有限公司 | 数据同步方法及装置 |
CN107169845B (zh) * | 2017-06-07 | 2020-12-01 | 北京星选科技有限公司 | 一种商户属性查询方法、装置及服务器 |
CN109766347B (zh) * | 2017-07-21 | 2023-03-28 | 腾讯科技(深圳)有限公司 | 一种数据更新方法、装置、***、计算机设备及存储介质 |
CN107995282A (zh) * | 2017-11-29 | 2018-05-04 | 北京悦畅科技有限公司 | 数据同步方法、装置、***及服务器 |
CN108829727B (zh) * | 2018-05-09 | 2021-06-25 | 未鲲(上海)科技服务有限公司 | 数据存储方法、装置、计算机设备和存储介质 |
CN109785129B (zh) * | 2018-12-14 | 2024-05-28 | 平安证券股份有限公司 | 数据获取方法、装置、设备及计算机可读存储介质 |
CN110674214B (zh) * | 2019-09-06 | 2023-11-21 | 中国平安财产保险股份有限公司 | 大数据同步方法、装置、计算机设备及存储介质 |
CN113760920A (zh) * | 2020-08-20 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 一种数据同步方法、装置、电子设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751307A (zh) * | 2008-12-12 | 2010-06-23 | 比兹肯解决方法有限公司 | 数据存储***、方法以及数据存储和备份*** |
CN102262662A (zh) * | 2011-07-22 | 2011-11-30 | 浪潮(北京)电子信息产业有限公司 | 实现异构平台下数据库数据迁移的***、装置及方法 |
CN103593420A (zh) * | 2013-11-01 | 2014-02-19 | 浪潮电子信息产业股份有限公司 | 一种利用共享在线日志实现异构同平台的数据库集群搭建方法 |
-
2015
- 2015-04-24 CN CN201510201772.6A patent/CN104809200B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751307A (zh) * | 2008-12-12 | 2010-06-23 | 比兹肯解决方法有限公司 | 数据存储***、方法以及数据存储和备份*** |
CN102262662A (zh) * | 2011-07-22 | 2011-11-30 | 浪潮(北京)电子信息产业有限公司 | 实现异构平台下数据库数据迁移的***、装置及方法 |
CN103593420A (zh) * | 2013-11-01 | 2014-02-19 | 浪潮电子信息产业股份有限公司 | 一种利用共享在线日志实现异构同平台的数据库集群搭建方法 |
Non-Patent Citations (1)
Title |
---|
基于 Oracle Streams的数据库实时备份与恢复技术研究;成雅;《中国优秀硕士学位论文全文数据库信息科技辑》;20130415(第4期);第I138-802页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104809200A (zh) | 2015-07-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104809202B (zh) | 一种数据库同步的方法和装置 | |
CN104809201B (zh) | 一种数据库同步的方法和装置 | |
CN104809200B (zh) | 一种数据库同步的方法和装置 | |
JP7090744B2 (ja) | 分散データベースクラスタシステム、及びデータ同期方法 | |
CN109918349B (zh) | 日志处理方法、装置、存储介质和电子装置 | |
CN105306585B (zh) | 一种多数据中心的数据同步方法 | |
CN108388615B (zh) | 一种数据交换方法、***以及电子设备 | |
US8560502B2 (en) | Method and a system for replaying database workload with transactional consistency | |
US8626765B2 (en) | Processing database operation requests | |
CN109739929A (zh) | 数据同步方法、装置及*** | |
CN104809199B (zh) | 一种数据库同步的方法和装置 | |
CN107515874B (zh) | 一种分布式非关系型数据库中同步增量数据的方法与设备 | |
CN110019469B (zh) | 分布式数据库数据处理方法、装置、存储介质及电子装置 | |
CN109933632B (zh) | 一种数据库的数据迁移方法、装置及设备 | |
CN110321383A (zh) | 大数据平台数据同步方法、装置、计算机设备及存储介质 | |
CN111222089B (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
Didona et al. | Causal consistency and latency optimality: Friend or foe? | |
CN108984333B (zh) | 用于大数据实时计算的方法及装置 | |
CN110895488B (zh) | 任务调度方法及装置 | |
CN109298978B (zh) | 一种指定位置的数据库集群的恢复方法及*** | |
CN111339118A (zh) | 基于Kubernetes的资源变更历史记录方法及装置 | |
CN111753015B (zh) | 支付清算***的数据查询方法及装置 | |
JP2024026143A (ja) | 最終的に一貫性のあるデータベース複製への切り替え | |
CN110309206B (zh) | 订单信息采集方法及*** | |
US20120005175A1 (en) | Method and a system for real time replaying of database workload at a fixed initial time delay |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |