一种数据库同步的方法和装置的制造方法_3

文档序号:8487867阅读:来源:国知局
步的日期最新的数据变更事件的第一全局标识号之后的数据变更事件,并继续对目标数据库执行同步操作。
[0095]另一种较优的实现方式为,若初始化时间点与当前时间的时间差小于第一中断时长,目标端服务器可直接从源端中继服务器中获取该初始化时间点之后的数据表的数据变更事件。
[0096]可见,本发明实施例中所提供的方法保证了目标数据库执行数据同步的全部过程的自动化控制,且保证了目标数据库在数据同步中断时依然能够获取到中断点处的数据变更事件,并重新使数据同步过程恢复正常,提高了数据同步的稳定性和安全性,且进一步由于数据同步全过程的自动化控制,因而进一步提高了数据同步的效率。
[0097]进一步由于目标端服务器连接目标数据库,且目标端服务器配置有目标数据库的配置参数,因此,当某个目标数据库发生变动,如新增一个目标数据库时,仅需要修改该新增的目标数据库对应连接的目标端服务器中的配置参数,并重启该目标端服务器即可,因此,其它未进行参数配置修改的目标端服务器不需重启,进而与该未进行参数配置修改的目标端服务器连接的目标数据库的数据同步过程也不会中断,从而实现多个目标数据库与源数据库之间的数据同步,且当某个目标数据库发生变化时,其它目标数据库的数据同步过程不受影响。
[0098]较佳的,每条数据变更事件还包括该数据变更事件在源数据库中对应的源数据表标识号;
[0099]目标端服务器从源端中继服务器获取第一全局标识号之后的数据变更事件,具体包括:
[0100]源端中继服务器实时捕获源数据库产生的数据变更事件;并根据数据变更事件的源数据表标识号,将数据变更事件保存至源数据表标识号对应的事件队列中;其中,每个源数据库的每个源数据表标识号对应一个事件队列,每个事件队列至少对应一个源数据表标识号,每个事件队列对应一个事件队列标识号;
[0101]目标端服务器向源端中继服务器发送第一请求消息;其中,第一请求消息中携带目标端服务器对应连接的目标数据库对应的至少一个源数据表标识号对应的事件队列标识号、源数据表标识号对应的数据表已同步的日期最新的数据变更事件的第一全局标识号;其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;
[0102]源端中继服务器根据第一请求消息,从事件队列标识号对应的事件队列中将源数据表标识号对应的第一全局标识号之后的数据变更事件携带于第一响应消息中,并将第一响应消息发送给目标端服务器,以使目标端服务器从源端中继服务器获取源数据表标识号对应的第一全局标识号之后的数据变更事件。
[0103]上述内容的具体介绍见后续关于源端中继服务器的详细介绍,在此不做过多阐述。
[0104]从上述内容可看出:由于目标端服务器向源端快照服务器发送全量数据请求消息,源端快照服务器将确定出的全量数据信息发送给目标端服务器,以使目标端服务器根据全量数据信息获取全量数据快照文件,并将全量数据快照文件导入目标数据库,至此,目标数据库的初始化过程执行完毕,可见本发明实施例实现了目标数据库进行数据同步过程中的初始化过程的自动化控制,从而避免了由于人工操作所造成的效率较低的问题,提高了目标数据库进行数据同步过程中的初始化过程的效率,进而提高了目标数据库与源数据库进行数据同步的效率。进一步由于目标数据库执行完初始化过程之后,目标端服务器接着从源端服务器中获取早于或等于全量数据快照文件的生成时间的初始化时间点之后的数据变更事件,可见,目标数据库在自动化执行完初始化过程之后,自动开始数据同步过程,即本发明实施例中目标数据库从执行初始化过程至后期的同步过程,实现了全过程的自动化控制,从而,提高了目标数据库与源数据库进行数据同步的效率。
[0105]上述部分重点介绍了源端快照服务器的作用,下面具体介绍源端历史服务器。
[0106]较佳的,目标端服务器从源端历史服务器获取第一全局标识号之后的数据变更事件之前,还包括:
[0107]源端历史服务器向源端中继服务器发送第二请求消息;其中,第二请求消息中携带源端历史服务器需同步的源数据表标识号对应的已同步的日期最新的数据变更事件的全局标识号;
[0108]源端中继服务器根据第二请求消息,将源数据表标识号对应的已同步的日期最新的数据变更事件的全局标识号之后的数据变更事件携带于第二响应消息中,并将第二响应消息发送给源端历史服务器;
[0109]源端历史服务器根据第二响应消息中的数据变更事件对应的源数据表标识号,将数据变更事件保存至源数据表标识号对应的事件队列中;其中,每个源数据表标识号对应一个事件队列,每个事件队列对应一个事件队列标识号。
[0110]具体来说,本发明实施例中的源端历史服务器,定期或实时从源端中继服务器中获取数据变更事件以进行储存。例如,源端历史服务器可实时获取并储存自源数据库建立以来的所有历史数据变更事件;或源端历史服务器可以按预设的时间间隔定期获取并储存自源数据库建立以来的所有历史数据变更事件。较佳的,源端历史服务器将数据变更事件按照该数据变更事件的源数据库标识号、源数据表标识号进行分类。较佳的,同一个源数据表标识号可对应多个源数据库,对应多个源数据库的同一个源数据表标识号对应一个事件队列,也可每个源数据库的源数据表对应一个事件队列,也可多个源数据表标识号对应一个事件队列,其中,对应一个事件队列的多个数据表标识号对应的数据表可相关,也可不相关。
[0111]较佳的,源端历史服务器向源端中继服务器发送第二请求消息,具体包括:
[0112]源端历史服务器通过M个数据传输通道向源端中继服务器发送N条第二请求消息;其中,M为大于等于I的正整数,M小于等于N;每条数据传输通道至少承载一条第二请求消息;
[0113]源端中继服务器将第二响应消息发送给源端历史服务器,具体包括:
[0114]源端中继服务器将N条第二响应消息通过M个数据传输通道发送给源端历史服务器。
[0115]在具体实施中,大部分情况下M等于N。一种较优的方案为,源端中继服务器通过M个数据传输通道接收源端历史服务器发送的N条第二请求消息;其中,其中,M为大于等于I的正整数,M小于等于N。每个第二请求消息至少包括一个源数据表标识号。即每个第二请求消息中可携带多个源数据表标识号。较佳的,源端中继服务器和源端历史服务器可建立I至30个并发传输通道。每个传输通道可承载一个或多个事件队列中的数据,各个事件队列对应的数据按事件队列的顺序,一个事件队列一个事件队列的按顺序发送,每个事件队列中的各个数据按全局标识号或者数据变更事件发生的顺序,按顺序传送。
[0116]较佳的,源端中继服务器也将数据变更事件存入多个事件队列中,此时,第二请求消息中还包括数据表标识号在源端中继服务器中对应的事件队列标识号;源端中继服务器根据N条第二请求消息,分别从每条第二请求消息中携带的事件队列标识号对应的事件队列中将第一全局标识号之后的数据变更事件携带于N条第二响应消息中,并将N条第二响应消息通过M个数据传输通道发送给源端历史服务器,以使源端历史服务器进行储存。
[0117]进一步,较佳的,本发明实施例中,源端历史服务器向源端中继服务器发送该N条第二请求消息时,可建立TCP连接的数据传输通道。较佳的,多条请求消息可共用一个数据传输通道,较优的方案为,一条请求消息占用一个数据传输通道,即M等于N,此时,源端历史服务器可通过N条数据传输通道向源端中继服务器发送N条第二请求消息,从而提高了源端历史服务器的数据传输效率,同时降低同步延时。较佳的,源端中继服务器可通过该M个数据传输通道向该源端历史服务器返回N条第二响应消息。
[0118]本发明实施例中目标端服务器根据预设对应关系确定目标端服务器所连接的目标数据库中目标数据标识号在源数据库中所对应的源数据标识号,并确定出目标数据表标识号对应的已同步的日期最新的数据变更事件的第一全局标识号;其中,源数据标识号与目标数据标识号一一对应;其中,数据变更事件是源端服务器实时捕获源数据库产生的数据变更事件得到的;数据变更事件包括该数据变更事件的生成时间。
[0119]具体来说,在目标端服务器中配置有源数据表标识号与目标数据表标识号的对应关系O
[0120]若第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,则目标端服务器从源端历史服务器获取第一全局标识号之后的数据变更事件,并根据从源端历史服务器获取的数据变更事件对目标数据库执行同步操作;其中,每条数据变更事件包括该数据变更事件对应的全局标识号;源端历史服务器储存的数据变更事件的最远日期远于源端中继服务器储存的数据变更事件的最远日期;
[0121]若第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差小于第一中断时长,则目标端服务器从源端中继服务器获取第一全局标识号之后的数据变更事件,并根据从源端中继服务器获取的数据变更事件对目标数据库执行同步操作;目标端服务器配置有目标数据库的配置参数。
[0122]由于源端历史服务器储存的数据变更事件的最远日期远于所述源端中继服务器储存的数据变更事件的最远日期,因此当第一全局标识号对应的数据变更事件的生成时间与当前时间的时间差不小于第一中断时长,从源端历史服务器获取所述第一全局标识号之后的数据变更事件,否则,从源端中继服务器获取所述第一全局标识号之后的数据变更事件。可见,源端历史服务器存储空间较大,可存储时间较长的数据变更事件,而源端中继服务器中仅存储较新的数据变更事件,因此,目标端服务器若发生较长时间的中断,源端中继服务器中可能已经没有中断点处的数据变更事件,则目标端服务器可从源端历史服务器中获取中断点处的数据变更事件,进一步,由于源端历史服务器和源端中继服务器的功能分离,发生中断的目标端服务器可从源端历史服务器中获取历史数据变更事件,处于正常工作状态的目标端服务器可继续从源端中继服务器获取数据变更事件,如此,源端中继服务器中的负荷量不会因发生中断的目标端服务器恢复正常工作而加重,因此保证了未发生中断的目标端服务器执行数据同步效率不变的同时,提高发生中断的目标端服务器自动恢复正常工作状态的效率。
[0123]进一步由于源端中继服务器连接目标端服务器,目标端服务器连接目标数据库,且目标端服务器配置有目标数据库的配置参数,因此,当某个目标数据库发生变动,如新增一个目标数据库时,仅需要修改该新增的目标数据库对应连接的目标端服务器中的配置参数,并重启该目标端服务器即可,而不需要重启源端中继服务器,因此,其它未进行参数配置修改的目标端服务器不需重启,进而与该未进行参数配置修改的目标端服务器连接的目标数据库的数据同步过程也不会中断,从而实现多个目标数据库与源数据库之间的数据同步,且当某个目标数据库发生变化时,其它目标数据库的数据同步过程不受影响。
[0124]具体来说,本发明实施例中源端中继服务器中储存与当前时刻相近的时间段内的数据变更事件,此时减少了源端中继服务器的数据负荷量,提高了源端中继服务器的处理性能,且进一步当源端中继服务器中储存的数据负荷量小到某一设定范围,则可见所有数据完全保存在源端中继服务器的内存中,而无需将其持久化保存到磁盘,如此,当目标端服务器从源端中继服务器中获取数据变更事件时,仅从内存中即可获取,而无需从磁盘中读取,进一步提高了源端中继服务器的数据同步处理性能,且源端中继服务器可支持大量目标数据库实现实时同步。本发明实施例中的源端历史服务器储存有距离当前时刻较远的历史数据变更事件。当目标数据库在同步过程中中断时,中断时间点距离当前时间较长,假设为一个月前,由于源端中继服务器可能未储存中断时间点附近的数据变更事件,因此目标端服务器可先从源端历史服务器中获取历史数据变更事件,或中断时间点处的数据变更事件,接着再实时从源端中继服务器获取最新的数据变更事件以实现目标数据库和源数据库之间的数据同步。较佳的,源端历史服务器将获取的历史数据变更事件均进行持久化存储,即新增加的数据不会覆盖历史数据。
[0125]对于目标端服务器而言,当目标端服务器中断一段较长时间之后再次恢复运行时,所需同步的数据变更事件的全局标识号所对应的时间较早时,可先从源端历史服务器中事件队列标识号对应的事件队列中读取需同步的数据变更事件的全局标识号至源端历史服务器中存储的该事件队列的最新的全局标识号之间的数据变更事件,直至目标数据库中已同步的日期最新的数据变更事件的生成时间与当前时间的时间差小于所述第一中断时长,则目标数据库接着从源端中继服务器中事件队列标识号对应的事件队列中读取剩余的最新的数据变更事件。然而当目标端服务器处于正常持续工作状态时,由于目标端服务器每隔一较小时间则进行一次同步,因此目标端服务器所需同步的数据变更事件均位于源端中继服务器,进而目标端服务器直接从源端中继服务器读取数据变更事件数据流即可。
[0126]举个例子,假设源端历史服务器中事件队列一中存储的数据变更事件的全局标识号为从0001、0005、0010、0018、0200,而由于源端中继服务器的存储速度较快,因此源端中继服务器中事件队列一中所存储的数据变更事件的全局标识号可为从0200、0210、0220、0250。进一步,目标端服务器进行同步初始化,或在第一时长内未向源端中继服务器发送第一请求消息时,或中断一段时间后需要恢复同步过程时,目标端服务器向源端历史服务器发送第三请求消息,假设第三请求消息中携带的事件队列标识号为事件队列一、第一全局标识号0005。则目标端服务器先从源端历史服务器中的事件队列一中获取出第一全局标识号0005至源端历史服务器中最新的数据0200的数据变更事件,即0010、0018、0200。目标端服务器对目标数据库执行同步操作。若此时目标数据库中已同步的日期最新的数据变更事件的生成时间与当前时间的时间差小于所述第一中断时长,接着目标端服务器器从源端中继服务器中的事件队列一中获取0200至最新的数据0250的数据变更事件,即0200、0210、0220、0250。接着目标端服务器继续对目标数据库执行同步操作。
[0127]具体来说,目标端服务器获取到一次数据变更事件后,即对目标数据库执行一次同步操作。
[0128]可看出,源端中继服务器和源端历史服务器分别储存有数据变更事件,一方面当目标端服务器为新增或因故中止一段时间之后,均可从源端历史服务器中获取所有历史数据变更事件,从而实现了目标数据库与源数据库之间数据同步的完整性,即避免了因源端中继服务器存储空间有限而造成的部分历史数据变更事件丢失的问题。另一方面,处于持续正常工作状态的目标端服务器从源端中继服务器获取数据变更事件,由于源端中继服务器的存储和读取速度均较快,因此,提高了目标数据库与源数据库之间数据同步的效率。
[0129]进一步,本发明实施例中的源端中继服务器仅对源数据库中产生的原始数据变更事件进行了一次读取和解析操作,之后多个目标端服务器均通过访问源端中继服务器从而获得解析后的数据变更事件,提高了数据同步操作的效率,另一方面避免了多个目标数据库进行数据同步时多次对源数据库进行访问,从而减轻了源数据库的负荷,避免了源数据库性能急剧下降,提高了数据同步的效率。另一方面,本发明中,源端中继服务器对数据变更事件进行读取和解析,目标端服务器对目标数据库执行数据同步操作,由于功能分离,从而降低了单台服务器的负荷,提高了数据同步的效率。
[0130]进一步,目标端服务器从源端历史服务器获取第一全局标识号之后的数据变更事件,具体有以下两种方式:
[0131]方式一:较佳的,目标端服务器向源端历史服务器发送第三请求消息;其中,第三请求消息携带目标端服务器对应连接的目标数据库需同步的至少一个源数据表标识号对应的事件队列标识号,以及源数据表标识号对应的数据表已同步的日期最新的数据变更事件的第一全局标识号;其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;
[0132]源端历史服务器根据第三请求消息,从对应的事件队列中将第三请求消息中的第一全局标识号之后的数据变更事件携带于第三响应消息中,并将第三响应消息发送给目标端服务器,以使目标端服务器对目标数据库执行同步操作。
[0133]方式二:较佳的,目标端服务器向源端历史服务器发送第三请求消息;其中,第三请求消息携带目标端服务器对应连接的目标数据库需同步的至少一个源数据表标识号对应的事件队列标识号,以及源数据表标识号对应的数据表已同步的日期最新的数据变更事件的生成时间;其中,至少一个目标数据库储存单个源数据库储存的全部数据表中的部分数据表;
[0134]源端历史服务器根据第三请求消息,从对应的事件队列中将第三请求消息中的已同步的日期最新的数据变更事件的生成时间之后的数据变更事件携带于第三响应消息中,并将第三响应消息发送给目标端服务器,以使目标端服务器对目标数据库执行同步操作。
[0135]具体来说,目标端服务器从源端历史服务器获取第一全局标识号之后的数据变更事件,具体可通过目标数据库中的数据对应的时间点,从源端历史服务器中获取某一个时间点处的数据变更事件,也根据全局标识号可从源端历史服务器中获取第一全局标识号之后的数据变更事件。
[0136]较佳的,目标端服务器向源端历史服务器发送第
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1