一种动态数据同步的方法和系统转让专利

申请号 : CN200810239578.7

文献号 : CN101446972B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 丁毅王小飞刘洋

申请人 : 中兴通讯股份有限公司

摘要 :

本发明公开了一种动态数据同步的方法,当主机的动态数据发生变化时,该方法包括:主机依据变化的动态数据对应的记录构造该记录的同步请求数据,向记录级同步进程发送同步请求数据;依据同步请求数据或者同步请求数据和全局数据缓冲区中的记录操作信息,通过同步规则构造同步消息发送给备机;备机根据主机发送的同步消息通过同步方式对需要同步的记录执行同步操作;备机完成对记录的同步操作后,将已经同步的记录存盘并发送同步完成的应答消息给主机;主机在收到应答消息后,变化的动态数据的同步完成,结束同步操作;本发明还公开了一种动态数据同步的系统,基于本发明的方法和系统可以实时地对主备内存数据库间的动态数据进行同步。

权利要求 :

1.一种动态数据同步的方法,当主机的动态数据发生变化时,其特征在于,该方法包括:

主机依据所述变化的动态数据对应的记录构造该记录的同步请求数据,向记录级同步进程发送所述同步请求数据;依据所述同步请求数据或者所述同步请求数据和全局数据缓冲区中的记录操作信息,通过同步规则构造同步消息发送给备机;所述全局数据缓冲区中的记录操作信息的数据结构包括:表句柄、记录号、记录操作类型、是否存在删除操作和动态变化标记;

备机根据主机发送的同步消息通过同步方式对需要同步的记录执行同步操作;备机完成对记录的同步操作后,将已经同步的记录存盘并发送同步完成的应答消息给主机;主机在收到所述应答消息后,所述变化的动态数据的同步完成,结束同步操作;

所述向记录级动态同步进程发送所述同步请求数据之后,在所述构造同步消息之前,该方法还包括:判断当前是否存在其他同步操作,如果存在,则将所述记录的同步请求数据存入所述全局数据缓冲区,依据所述同步请求数据对该记录的操作信息重组,形成所述全局缓冲区中的记录操作信息,并设置短定时器,定时检测其他同步操作是否完成,如果没有完成,则继续定时检测其他同步操作是否完成;如果完成,则依据所述全局数据缓冲区中的记录操作信息,通过同步规则构造同步消息;

如果不存在,则判断所述全局数据缓冲区是否为空,如果为空,则依据所述同步请求数据,通过同步规则构造所述同步消息;

如果不为空,则将所述记录的同步请求数据存入所述全局数据缓冲区,依据所述同步请求数据对该记录的操作信息重组,形成所述全局缓冲区中的记录操作信息,然后依据所述全局数据缓冲区中的记录操作信息,通过同步规则构造同步消息。

2.根据权利要求1所述动态数据同步的方法,其特征在于,所述同步请求数据的数据结构包括表句柄、记录号、记录内容和记录操作类型。

3.根据权利要求1或2所述动态数据同步的方法,其特征在于,所述记录操作类型包括:删除、增加和修改。

4.根据权利要求3所述动态数据同步的方法,其特征在于,在所述依据变化的动态数据对应的记录构造该记录的同步请求数据之前,该方法还包括:判断变化的动态数据对应的记录中是否含有动态字段,如果所述记录中不含有动态字段,或者含有动态字段且动态字段没有发生变化,则对所述记录置失步标志,等待系统中其他数据同步进程或者系统定时器触发同步操作,同时将该记录存盘;如果所述记录中含有动态字段,且动态字段发生了变化,则依据所述变化的动态数据对应的记录构造该记录的同步请求数据。

5.根据权利要求4所述动态数据同步的方法,其特征在于,所述同步方式包括:删除的同步方式、增加的同步方式和修改的同步方式。

6.根据权利要求4所述动态数据同步的方法,其特征在于,所述构造同步消息发送给备机的同时,该方法还包括:设置应答定时器,检测主机是否在所述应答定时器规定的时间内收到所述备机的应答消息,如果没有收到,则对所述记录置失步标志,等待系统中其他数据同步进程或者系统定时器触发同步操作。

7.根据权利要求6所述动态数据同步的方法,其特征在于,所述同步完成之后,该方法还包括:主机清除变化的动态数据对应的记录在全局数据缓冲区中的信息。

8.一种动态数据同步的系统,其特征在于,该系统包括:主机和备机,其中,主机,用于依据变化的动态数据对应的记录构造该记录的同步请求数据,向记录级同步进程发送所述同步请求数据;依据所述同步请求数据或者所述同步请求数据和全局数据缓冲区中的记录操作信息,通过同步规则构造同步消息发送给所述备机;还用于在收到所述备机的应答消息后,所述变化的动态数据的同步完成,结束同步操作;所述全局数据缓冲区中的记录操作信息的数据结构包括:表句柄、记录号、记录操作类型、是否存在删除操作和动态变化标记;

备机,用于根据所述主机发送的同步消息通过同步方式对需要同步的记录执行同步操作;备机完成对记录的同步操作后,将所述已经同步的记录存盘并发送同步完成的应答消息给所述主机;

所述主机,在所述向记录级动态同步进程发送所述同步请求数据之后,在所述构造同步消息之前,还用于:判断当前是否存在其他同步操作,如果存在,则将所述记录的同步请求数据存入所述全局数据缓冲区,依据所述同步请求数据对该记录的操作信息重组,形成所述全局缓冲区中的记录操作信息,并设置短定时器,定时检测其他同步操作是否完成,如果没有完成,则继续定时检测其他同步操作是否完成;如果完成,则依据所述全局数据缓冲区中的记录操作信息,通过同步规则构造同步消息;

如果不存在,则判断所述全局数据缓冲区是否为空,如果为空,则依据所述同步请求数据,通过同步规则构造所述同步消息;

如果不为空,则将所述记录的同步请求数据存入所述全局数据缓冲区,依据所述同步请求数据对该记录的操作信息重组,形成所述全局缓冲区中的记录操作信息,然后依据所述全局数据缓冲区中的记录操作信息,通过同步规则构造同步消息。

9.根据权利要求8所述动态数据同步的系统,其特征在于,所述主机还用于在所述同步完成之后,清除变化的动态数据对应的记录在全局数据缓冲区中的信息。

10.根据权利要求9所述动态数据同步的系统,其特征在于,

所述主机包括:第一数据存储模块、第一数据构造模块、全局数据缓冲区、和第一数据传输模块,其中,所述第一数据存储模块,用于存储所述变化的动态数据对应的记录;

所述全局数据缓冲区,用于存储所述记录操作信息;

所述第一数据构造模块,用于依据所述第一数据存储模块的变化的动态数据对应的记录构造该记录的同步请求数据;还用于依据所述同步请求数据或者同步请求数据和全局数据缓冲区中的记录操作信息,通过同步规则构造同步消息;

所述第一数据传输模块,用于将所述第一数据构造模块的同步请求数据发送给记录级动态同步进程;将所述第一数据构造模块的同步消息发送给所述备机;还用于接收所述备机发送的所述应答消息;

所述备机包括:第二数据存储模块、同步操作执行模块、第二数据构造模块和第二数据传输模块,其中,所述第二数据存储模块,用于接收所述第一数据传输模块发送的所述同步消息;还用于存储所述需要同步的记录;

所述同步操作执行模块,用于依据所述第二数据存储模块的同步消息通过同步方式对所述第二数据存储模块的需要同步的记录执行同步操作;还用于在执行完同步操作后,将所述第二数据存储模块中已经同步的记录存盘;

所述第二数据构造模块,用于在所述同步操作执行模块执行完所述同步操作后,产生所述同步完成的应答消息;

所述第二数据传输模块,用于将所述第二数据构造模块产生的所述应答消息发送给所述主机的第一数据传输模块。

11.根据权利要求10所述动态数据同步的系统,其特征在于,所述主机还包括:

第一判断模块,用于判断所述第一数据存储模块中变化的动态数据对应的记录中是否含有动态字段;还用于判断所述动态字段是否发生了变化;当所述记录中含有动态字段且动态字段发生变化时,所述第一数据构造模块构造所述同步请求数据;

第一执行模块,用于根据所述第一判断模块的判断结果,当所述记录中不含有动态字段,或者含有动态字段且动态字段没有发生变化时,对所述第一数据存储模块中的该记录置失步标志,等待系统中其他数据同步进程或者系统定时器触发同步操作,同时将该记录存盘。

12.根据权利要求10所述动态数据同步的系统,其特征在于,所述主机还包括:

第二判断模块,用于在所述第一数据传输模块将所述同步请求数据发送给记录级动态同步进程后,判断当前是否存在其他同步操作;

第二执行模块,用于依据所述第二判断模块的判断结果,在当前存在其他同步操作时,将所述第一数据传输模块发送给记录级动态同步进程的所述同步请求数据存入所述全局数据缓冲区;并依据所述同步请求数据对该记录的操作信息重组,形成所述重组后的全局数据缓冲区中的记录操作信息;

第一定时器,用于在所述第二执行模块对所述记录的操作信息重组后,设置短定时器,定时检测当前其他同步操作是否完成;如果其他同步操作没有完成,则所述第一定时器继续定时检测;如果其他同步操作已经完成,则所述第一数据构造模块依据所述全局数据缓冲区中所述重组后的记录操作信息,通过同步规则构造同步消息;

第三判断模块,用于依据所述第二判断模块的判断结果,当前不存在其他同步操作时,判断所述全局数据缓冲区是否为空;当所述全局数据缓冲区为空时,所述第一数据构造模块依据所述第一数据传输模块发送给记录级动态同步进程的同步请求数据,通过同步规则构造同步消息;

第三执行模块,用于依据所述第三判断模块的判断结果,当所述全局数据缓冲区不为空时,将所述第一数据传输模块发送给记录级动态同步进程的所述同步请求数据存入所述全局数据缓冲区,并依据所述同步请求数据对该记录的操作信息重组,形成所述重组后的全局缓冲区中的记录操作信息;然后,所述第一数据构造模块依据所述全局数据缓冲区中重组后的记录操作信息,通过同步规则构造同步消息。

13.根据权利要求11或12所述动态数据同步的系统,其特征在于,所述主机还包括:

第二定时器,用于在所述第一数据传输模块向备机发送所述同步消息的同时,设置应答定时器,定时检测所述第一数据传输模块是否在规定的时间内接收到所述备机发送的所述应答消息。

14.根据权利要求13所述动态数据同步的系统,其特征在于,

所述第一执行模块还用于,在所述第二定时器检测到所述第一数据传输模块没有在所述规定的时间内接收到所述备机发送的所述应答消息后,对所述记录置失步标志,等待系统中其他数据同步进程或者系统定时器触发同步操作,同时将该记录存盘;

所述全局数据缓冲区还用于存储所述第一数据传输模块发送给记录级动态同步进程的同步请求数据;在所述第二定时器检测到所述第一数据传输模块在所述规定的时间内接收到所述备机发送的所述应答消息,所述同步完成后,清除所述变化的动态数据对应的记录在所述全局数据缓冲区中的信息。

说明书 :

一种动态数据同步的方法和系统

技术领域

[0001] 本发明涉及内存数据库备份技术,特别是指一种主备内存数据库之间动态数据同步的方法和系统。

背景技术

[0002] 电信设备中常使用内存数据库进行数据管理,为了保证数据的安全性必须使用主备数据库的方式。主数据库在主机上,备数据库在备机上,在应用中,所有的业务都在主机上进行操作,产生的数据也都存储在主机的内存数据库中;备数据库的作用是主动或者被动地与主数据库同步数据,当主数据库弃用时,备数据库转为主用,以保持业务的正常进行。
[0003] 由于业务不断的在主机上操作,内存数据库中的数据一直在发生变化,所以主数据库中的数据是动态变化的数据,而备数据库需要在短时间内与主数据库同步,使两者所存储的动态数据保持一致,这样,当主机发生异常,需要倒换备机时,无需其他操作,就可以使用备机上的数据,使设备正常运行,相关的一些应用仍然可以继续。
[0004] 主备机上的内存数据库结构是这样的:在主备机上各开辟一块大内存区域,该大内存区域被虚拟成一个数据库;在这个大区域上根据一定的数据结构划分出一个个小的区域,该小的区域被虚拟成表;在一个个小的区域上又根据一定的数据结构划分出更小的区域,该更小的区域被虚拟成记录。即若干条记录组成了一个表,若干个表组成了一个数据库。如图1所示为数据库中一个表的结构示意图,其中1、2、3、4、5、6、7、8...是表中各个记录的记录号,a、b、c、d、e、f...是表示一个记录中的各个字段,每个字段包含了具体的数据内容。
[0005] 现有技术中,对于主备内存数据库同步的处理,多数采用在主备机上开辟出一块数据区来存储需要同步数据的表、记录的相关信息,把系统对数据区中需要同步的数据的修改记录放入主机的全局数据缓冲区,等到全局数据缓冲区满或者系统定时器触发使主备内存数据库同步;或者采用数据变化,把变化数据对应记录所在的表置失步,等待定时器触发所有表同步。但是这两种方法对于主备内存数据库的同步处理都不是实时的,并且占用了较多的内存空间,造成了内存空间的浪费,增加了内存的开销;同时,由于主备机之间交换的数据同步消息都是一条条需要同步的记录,所以主备机之间交换的同步消息量非常大,影响了系统的性能。

发明内容

[0006] 有鉴于此,本发明的主要目的在于提供一种动态数据同步的方法和系统,使系统实时地对主备内存数据库间的动态数据进行同步,减小占用的内存空间,减小系统的内存的开销,还可以减少主备机之间交换的同步消息量。
[0007] 为达到上述目的,本发明的技术方案是这样实现的:
[0008] 本发明提供了一种动态数据同步的方法,当主机的动态数据发生变化时,该方法包括:
[0009] 主机依据所述变化的动态数据对应的记录构造该记录的同步请求数据,向记录级同步进程发送所述同步请求数据;依据所述同步请求数据或者所述同步请求数据和全局数据缓冲区中的记录操作信息,通过同步规则构造同步消息发送给备机;所述全局数据缓冲区中的记录操作信息的数据结构包括:表句柄、记录号、记录操作类型、是否存在删除操作和动态变化标记;
[0010] 备机根据主机发送的同步消息通过同步方式对需要同步的记录执行同步操作;备机完成对记录的同步操作后,将已经同步的记录存盘并发送同步完成的应答消息给主机;主机在收到所述应答消息后,所述变化的动态数据的同步完成,结束同步操作;
[0011] 所述向记录级动态同步进程发送所述同步请求数据之后,在所述构造同步消息之前,该方法还包括:
[0012] 判断当前是否存在其他同步操作,如果存在,则将所述记录的同步请求数据存入所述全局数据缓冲区,依据所述同步请求数据对该记录的操作信息重组,形成所述全局缓冲区中的记录操作信息,并设置短定时器,定时检测其他同步操作是否完成,如果没有完成,则继续定时检测其他同步操作是否完成;如果完成,则依据所述全局数据缓冲区中的记录操作信息,通过同步规则构造同步消息;
[0013] 如果不存在,则判断所述全局数据缓冲区是否为空,如果为空,则依据所述同步请求数据,通过同步规则构造所述同步消息;
[0014] 如果不为空,则将所述记录的同步请求数据存入所述全局数据缓冲区,依据所述同步请求数据对该记录的操作信息重组,形成所述全局缓冲区中的记录操作信息,然后依据所述全局数据缓冲区中的记录操作信息,通过同步规则构造同步消息。
[0015] 所述同步请求数据的数据结构包括表句柄、记录号、记录内容和记录操作类型。
[0016] 所述记录操作类型包括:删除、增加和修改。
[0017] 在所述依据变化的动态数据对应的记录构造该记录的同步请求数据之前,该方法还包括:
[0018] 判断变化的动态数据对应的记录中是否含有动态字段,如果所述记录中不含有动态字段,或者含有动态字段且动态字段没有发生变化,则对所述记录置失步标志,等待系统中其他数据同步进程或者系统定时器触发同步操作,同时将该记录存盘;如果所述记录中含有动态字段,且动态字段发生了变化,则依据所述变化的动态数据对应的记录构造该记录的同步请求数据。
[0019] 所述同步方式包括:删除的同步方式、增加的同步方式和修改的同步方式。
[0020] 所述构造同步消息发送给备机的同时,该方法还包括:设置应答定时器,检测主机是否在所述应答定时器规定的时间内收到所述备机的应答消息,如果没有收到,则对所述记录置失步标志,等待系统中其他数据同步进程或者系统定时器触发同步操作。
[0021] 所述同步完成之后,该方法还包括:主机清除变化的动态数据对应的记录在全局数据缓冲区中的信息。
[0022] 本发明还提供了一种动态数据同步的系统,该系统包括:主机和备机,其中,[0023] 主机,用于依据变化的动态数据对应的记录构造该记录的同步请求数据,向记录级同步进程发送所述同步请求数据;依据所述同步请求数据或者所述同步请求数据和全局数据缓冲区中的记录操作信息,通过同步规则构造同步消息发送给所述备机;还用于在收到所述备机的应答消息后,所述变化的动态数据的同步完成,结束同步操作;所述全局数据缓冲区中的记录操作信息的数据结构包括:表句柄、记录号、记录操作类型、是否存在删除操作和动态变化标记;
[0024] 备机,用于根据所述主机发送的同步消息通过同步方式对需要同步的记录执行同步操作;备机完成对记录的同步操作后,将所述已经同步的记录存盘并发送同步完成的应答消息给所述主机;
[0025] 所述主机,在所述向记录级动态同步进程发送所述同步请求数据之后,在所述构造同步消息之前,还用于:
[0026] 判断当前是否存在其他同步操作,如果存在,则将所述记录的同步请求数据存入所述全局数据缓冲区,依据所述同步请求数据对该记录的操作信息重组,形成所述全局缓冲区中的记录操作信息,并设置短定时器,定时检测其他同步操作是否完成,如果没有完成,则继续定时检测其他同步操作是否完成;如果完成,则依据所述全局数据缓冲区中的记录操作信息,通过同步规则构造同步消息;
[0027] 如果不存在,则判断所述全局数据缓冲区是否为空,如果为空,则依据所述同步请求数据,通过同步规则构造所述同步消息;
[0028] 如果不为空,则将所述记录的同步请求数据存入所述全局数据缓冲区,依据所述同步请求数据对该记录的操作信息重组,形成所述全局缓冲区中的记录操作信息,然后依据所述全局数据缓冲区中的记录操作信息,通过同步规则构造同步消息。
[0029] 所述主机还用于在所述同步完成之后,清除变化的动态数据对应的记录在全局数据缓冲区中的信息。
[0030] 所述主机包括:第一数据存储模块、第一数据构造模块、全局数据缓冲区、和第一数据传输模块,其中,
[0031] 所述第一数据存储模块,用于存储所述变化的动态数据对应的记录;
[0032] 所述全局数据缓冲区,用于存储所述记录操作信息;
[0033] 所述第一数据构造模块,用于依据所述第一数据存储模块的变化的动态数据对应的记录构造该记录的同步请求数据;还用于依据所述同步请求数据或者同步请求数据和全局数据缓冲区中的记录操作信息,通过同步规则构造同步消息;
[0034] 所述第一数据传输模块,用于将所述第一数据构造模块的同步请求数据发送给记录级动态同步进程;将所述第一数据构造模块的同步消息发送给所述备机;还用于接收所述备机发送的所述应答消息;
[0035] 所述备机包括:第二数据存储模块、同步操作执行模块、第二数据构造模块和第二数据传输模块,其中,
[0036] 所述第二数据存储模块,用于接收所述第一数据传输模块发送的所述同步消息;还用于存储所述需要同步的记录;
[0037] 所述同步操作执行模块,用于依据所述第二数据存储模块的同步消息通过同步方式对所述第二数据存储模块的需要同步的记录执行同步操作;还用于在执行完同步操作后,将所述第二数据存储模块中已经同步的记录存盘;
[0038] 所述第二数据构造模块,用于在所述同步操作执行模块执行完所述同步操作后,产生所述同步完成的应答消息;
[0039] 所述第二数据传输模块,用于将所述第二数据构造模块产生的所述应答消息发送给所述主机的第一数据传输模块。
[0040] 所述主机还包括:
[0041] 第一判断模块,用于判断所述第一数据存储模块中变化的动态数据对应的记录中是否含有动态字段;还用于判断所述动态字段是否发生了变化;当所述记录中含有动态字段且动态字段发生变化时,所述第一数据构造模块构造所述同步请求数据;
[0042] 第一执行模块,用于根据所述第一判断模块的判断结果,当所述记录中不含有动态字段,或者含有动态字段且动态字段没有发生变化时,对所述第一数据存储模块中的该记录置失步标志,等待系统中其他数据同步进程或者系统定时器触发同步操作,同时将该记录存盘。
[0043] 所述主机还包括:
[0044] 第二判断模块,用于在所述第一数据传输模块将所述同步请求数据发送给记录级动态同步进程后,判断当前是否存在其他同步操作;
[0045] 第二执行模块,用于依据所述第二判断模块的判断结果,在当前存在其他同步操作时,将所述第一数据传输模块发送给记录级动态同步进程的所述同步请求数据存入所述全局数据缓冲区;并依据所述同步请求数据对该记录的操作信息重组,形成所述重组后的全局数据缓冲区中的记录操作信息;
[0046] 第一定时器,用于在所述第二执行模块对所述记录的操作信息重组后,设置短定时器,定时检测当前其他同步操作是否完成;如果其他同步操作没有完成,则所述第一定时器继续定时检测;如果其他同步操作已经完成,则所述第一数据构造模块依据所述全局数据缓冲区中所述重组后的记录操作信息,通过同步规则构造同步消息;
[0047] 第三判断模块,用于依据所述第二判断模块的判断结果,当前不存在其他同步操作时,判断所述全局数据缓冲区是否为空;当所述全局数据缓冲区为空时,所述第一数据构造模块依据所述第一数据传输模块发送给记录级动态同步进程的同步请求数据,通过同步规则构造同步消息;
[0048] 第三执行模块,用于依据所述第三判断模块的判断结果,当所述全局数据缓冲区不为空时,将所述第一数据传输模块发送给记录级动态同步进程的所述同步请求数据存入所述全局数据缓冲区,并依据所述同步请求数据对该记录的操作信息重组,形成所述重组后的全局缓冲区中的记录操作信息;然后,所述第一数据构造模块依据所述全局数据缓冲区中重组后的记录操作信息,通过同步规则构造同步消息。
[0049] 所述主机还包括:
[0050] 第二定时器,用于在所述第一数据传输模块向备机发送所述同步消息的同时,设置应答定时器,定时检测所述第一数据传输模块是否在规定的时间内接收到所述备机发送的所述应答消息。
[0051] 所述第一执行模块还用于,在所述第二定时器检测到所述第一数据传输模块没有在所述规定的时间内接收到所述备机发送的所述应答消息后,对所述记录置失步标志,等待系统中其他数据同步进程或者系统定时器触发同步操作,同时将该记录存盘;
[0052] 所述全局数据缓冲区还用于存储所述第一数据传输模块发送给记录级动态同步进程的同步请求数据;在所述第二定时器检测到所述第一数据传输模块在所述规定的时间内接收到所述备机发送的所述应答消息,所述同步完成后,清除所述变化的动态数据对应的记录在所述全局数据缓冲区中的信息。
[0053] 本发明根据内存数据库中记录的操作类型的不同,采用不同的同步规则构造同步消息,依据同步消息采用不同的同步方式对动态数据进行同步,如此可以根据动态数据对应记录的操作类型选择不同的同步方案,保证以最优的同步方法实现动态数据的同步;同时在同步规则的设置中,采用了可配置的参数,即记录中变化字段的长度和记录字段总长度的比值,可以根据需要对此参数进行设置,选择最合适的同步规则;另外本发明在动态数据的同步过程中还兼容了其他的已有的同步方式,如静态数据同步方式等,由于系统在一段时间内只能执行一种同步方式,当其他已有的同步方式正在进行同步操作时,本发明对不断变化但是不能及时同步的动态数据的记录的信息进行重组,直到可以开始本发明的同步操作为止,如此保证了数据同步的可靠性;另外本发明在同步过程中设置了多个定时器,以保证可以在最短的时间内,即实时地同步变化的动态数据;并且本发明在动态数据同步以后,及时地删除已经同步的动态数据在系统中的相关信息,如此可以节约系统的内存空间,减小了系统的内存开销;本发明通过同步规则构造的同步消息只包含了对发生变化的记录进行同步所依据的必要数据,而不是一整条记录,因此可以大大减少主备机之间交换的同步消息量。

附图说明

[0054] 图1为数据库中一个表的结构示意图;
[0055] 图2为本发明动态数据同步的方法流程示意图;
[0056] 图3为本发明动态数据同步的系统结构示意图。

具体实施方式

[0057] 下面结合附图和具体实施例对本发明的技术方案进一步详细阐述。
[0058] 本发明依据变化的动态数据所对应的记录的操作类型,使用不同的方法来进行主备间动态数据的同步。主机和备机上各有一个内存数据库,当主机内存数据库中的动态数据发生变化时,需要在短时间内,即实时地将主机内存数据库中发生变化的动态数据同步到备机,使主备机的内存数据库中的数据保持一致。
[0059] 图2所述为本发明动态数据同步的方法流程示意图。
[0060] 步骤201,主机内存数据库中动态数据发生变化。
[0061] 本发明的方法只适用于动态数据的同步,不对静态的数据进行同步。所谓动态数据,是指在设备运行过程中,由于某些非人为的操作而产生的数据,这些数据是不断变化的,如网络电视(IPTV,Internet Protocol Television)业务中用户的加入,系统中关于这个用户使用IPTV业务的数据只是保持一段时间;而静态数据,是长期不变的数据,如设备的物理信息等只能通过用户配置来修改数据,静态数据的同步可以通过静态数据同步进程来执行。
[0062] 因为业务都是在主机上执行的,所以变化的动态数据也都存储在主机上。内存数据库中的动态数据对应着一条条记录,一条记录由记录号和多个字段组成,每一个字段对应具体的值和一个字段序号,这一条条记录组成了一个表,一个个表组成了一个动态数据区,该动态数据区属于内存数据库,在主备机上各有一个,其中一个表中所有记录的字段的序号是统一命名的,如图1所示,根据字段的位置,按先后顺序可以命名为a、b、c...,当然也可以有其他的命名方法。当动态数据发生变化时,将变化的动态数据对应记录的记录号、记录内容以系统中定义的结构体的形式存入主机的动态数据区,然后对其进行同步操作。
[0063] 步骤202,判断变化的动态数据对应的记录中是否含有动态字段。
[0064] 动态字段在动态数据对应的记录所在的表被创建时通过不同的标识来体现,假设在表r_stream中,有一个字段名为“count”,这个字段用来表示一条电路被占用了多少次,该字段的值在业务执行过程中是动态变化的,当在业务的执行过程中该条电路被占用时,就释放该条电路,如此该条电路被占用释放一次,就在“count”的值上加1,在创建该表时,给这个“count”字段打上标记“NOTSAVE”,意为不存盘,表示该字段是动态字段。则表r_stream中所有的记录中都含有这个动态字段,但是各个记录在这个动态字段的值不一定是相同的。
[0065] 对动态数据区中变化的动态数据对应的记录进行分析,确认该记录中是否含有动态字段。如果含有执行步骤203;如果不含有则执行步骤204。
[0066] 步骤203,判断动态字段是否发生变化。
[0067] 如果变化的动态数据的记录中含有动态字段,则需要确认该动态字段的值是否发生了变化。
[0068] 动态数据区中包含了发生变化的动态数据对应的记录,如果动态数据发生了变化,那么对应的记录中的某一个或者某几个字段的值会发生变化,但是这些字段并不一定是动态字段。当动态数据发生变化时,可以在记录中发生变化的字段打上字段变化标记。通过动态字段的标识可以快速定位到动态字段,通过字段变化标记可以得知该字段是否发生了变化,当然也可以有其他的方式。
[0069] 如果动态字段的值没有发生变化则执行步骤204;如果发生了变化则执行步骤205。
[0070] 步骤204,对记录置失步标志,等待其他同步进程或者系统定时器触发同步操作,同时将该记录存盘。
[0071] 如果变化的动态数据对应的记录中不含有动态字段,或者含有动态字段且动态字段的值没有发生变化,则对该条记录置失步标志,等待其他应用进程或者系统定时器触发同步操作。在每条记录的头上有一个标记位,用来标记此记录的状态,如果要对此记录置失步标志,那么可以将此标记位的值设置为0x01,当然也可以有其他设置方法。
[0072] 本发明的方法只针对含有动态字段且动态字段发生变化的记录,对于不含有动态字段或者动态字段没有发生变化,但是其他字段发生变化的记录,对该记录置失步标志,采用现有的数据同步方式,如,等待系统中其他同步进程或者定时器触发同步操作,其中,其他同步进程如静态数据同步进程等,静态数据同步进程用于定时地对所有的表及所有的记录进行同步;系统定时器规定的时间周期一般为70分钟,即在70分钟以后对该条置了失步标志的记录进行同步操作,此处的同步操作为现有技术,在此不再赘述。
[0073] 在对记录置失步标志的同时,将该条记录进行存盘,即存储在系统硬盘中,当主机重启时,可以从硬盘读取该条记录。这样,其他同步进程通过失步标志来识别发生了变化但是还没有同步的数据,以便对这些数据继续进行同步操作。
[0074] 步骤205,依据变化的动态数据对应的记录构造该记录的同步请求数据,向记录级动态同步进程发送同步请求数据。
[0075] 如果变化的动态数据对应的记录中含有发生了变化的动态字段,那么系统构造该条记录的同步请求数据,并发送给记录级的动态同步进程。动态同步进程用来发起对变化的动态数据的同步操作,记录级的动态同步进行的是对记录级的动态数据的同步操作,即同步的对象是一条条记录。向记录级动态同步进程发送某条记录的同步请求数据时,表明系统开始了对该记录的同步操作。
[0076] 同步请求数据的结构包括:表句柄、记录号、记录操作类型和记录内容,其中表句柄为该条记录所在表的全局的标识,用来区分不同的表;记录号为该条记录在表中的位置,用于定位到某一条记录;记录操作类型分为三种:删除、增加和修改,记录操作类型根据系统对动态数据的操作由系统进行设置;记录内容为该条记录发生变化的字段的值。
[0077] 将同步请求数据发送到记录级的动态同步进程,则该进程开始对该条记录进行同步操作。
[0078] 步骤206,判断当前是否存在其他同步操作。
[0079] 在开始同步操作之前,需要判断系统当前是否存在其他的同步操作,如静态数据同步进程的操作,这个同步操作是定时的对所有的表及所有的记录进行同步。如果当前存在其他的同步操作,那么执行步骤207;如果当前不存在其他的同步操作,则执行步骤210。
[0080] 步骤207,把记录的同步请求数据存入全局数据缓冲区,依据同步请求数据对该记录的操作信息重组,形成重组后的记录操作信息,并设置短定时器。
[0081] 当前存在其他的同步操作时,将变化的动态数据对应的记录的同步请求数据存入全局数据缓冲区中,依据同步请求数据对该记录的操作信息进行重组,形成重组后的记录操作信息,设置短定时器,然后执行步骤208,短定时器根据一定的时间周期定时检测其他的同步操作是否完成,如果完成则执行步骤209,继续执行本发明的同步操作;如果没有完成,则执行步骤208,继续定时检测。其中,短定时器可以通过代码来实现,该短定时器的周期一般可设置为10s,即每隔10s钟检测一次其他的同步操作是否完成。
[0082] 需要指出的是,在动态同步进程中,一条记录可能对应几个同步请求数据,因为动态数据是在不断地发生变化的,动态数据对应的记录在一段时间内可能会发生几次变化,每次变化的内容可能都不一样,如此,当一条记录发生一次变化时就构造该记录当前的同步请求数据,当该记录再次发生变化时,再构造该记录此时的同步请求数据,而这几个同步请求数据的表句柄和记录号是相同的,但是记录操作类型和记录内容根据实际情况会发生变化。
[0083] 将一条记录的同步请求数据存入全局数据缓冲区后,需要对全局数据缓冲区中存储的该记录的操作信息其进行重组。其中,操作信息指同步请求数据中的记录操作类型和记录内容。在当前存在的其他同步操作未完成之前,系统可能会产生对一条记录的多个同步请求数据,且这些同步请求数据都要存入全局数据缓冲区中,但是这种情况下,全局数据缓冲区并不完全存储该条记录的所有同步请求数据,而是根据该条记录的同步请求数据中的表句柄和记录号,对记录操作类型和记录内容进行分析,将该条记录的操作信息进行重组,形成重组后的记录操作信息,该操作信息以全局数据缓冲区中的数据结构形式存在。等到其他同步操作完成后,将重组后的该条记录的操作信息作为以后同步操作的依据。
[0084] 在全局数据缓冲区中,重组后的记录操作信息的数据结构包含:表句柄、记录号、记录操作类型、是否存在删除操作、动态字段变化标记,其中表句柄为该变化的动态数据所在表的全局的标识,用来区分不同的表;记录号为该变化的动态数据对应的记录在表中的位置,用于定位到某一条记录;记录操作类型分为三种:删除、增加和修改,操作类型由系统进行设置;是否存在删除操作:系统依据对该条记录的历史操作类型来设定,如果历史操作记录中存在删除操作,则为是;动态字段变化标记:系统根据该条记录在动态变化字段的值来确定其是否发生变化。
[0085] 具体的依据同步请求数据对该记录的操作信息进程重组的方法如下:
[0086] 如果全局数据缓冲区中存储的该记录的同步请求数据的记录操作类型中出现过删除操作,那么经过重组,最后全局数据缓冲区存储的该条记录的操作信息中包含的该记录的操作类型为:删除或增加,且将该条记录中是否存在过删除操作这一项设置为:存在,同时动态字段变化标记设置为:已经变化。其中,对于记录的操作信息中操作类型的重组是这样的:该记录的同步请求数据的记录操作类型中出现过删除操作,且同步之前该记录的最后一个同步请求数据中,记录操作类型为删除,那么将重组后的记录操作信息中的记录操作类型设置为:删除;如果同步之前该记录的最后一个同步请求数据中,记录操作类型为增加或修改,那么将重组后的记录操作信息中的记录操作类型设置为:增加。
[0087] 如果该记录的同步请求数据的记录操作类型只有多次增加和修改操作,没有出现过删除操作,那么将重组后的记录操作信息中的记录操作类型设置为:增加,是否存在过删除操作这一项设置为:不存在,同时动态字段变化标记设置为:已经变化。
[0088] 如果该记录的同步请求数据的记录操作类型只有多次修改操作,即没有出现过删除和增加操作,那么将重组后的记录操作信息中的记录操作类型设置为:修改,是否存在过删除操作这一项设置为:不存在,同时动态字段变化标记设置为:已经变化。
[0089] 如此,当对记录的操作信息进行重组后,当前其他同步操作还没有完成,那么系统会继续向全局数据缓冲区存入同步请求数据,这样依据重组后的记录操作信息和当前存入的同步请求数据再进行重组,直到其他同步操作完成为止。
[0090] 步骤209,依据全局数据缓冲区中重组的记录操作信息和同步规则构造同步消息。
[0091] 进行重组后的记录操作信息包括:表句柄、记录号、记录操作类型、是否存在删除操作、动态字段变化标记。依据重组后的记录操作信息包含的信息和同步规则构造同步消息,此处的同步规则具体如下:
[0092] 首先判断需要同步的该条记录是否存在删除操作,再根据记录的操作类型来构造同步消息。
[0093] 如果存在删除操作,若该记录的操作类型为:删除,则构造的同步消息包括:表句柄和记录号;若该记录的操作类型为:增加,则构造的同步消息包括:记录号、表句柄、记录内容。
[0094] 如果不存在删除操作,若该记录的操作类型为:增加,则构造的同步消息包括:记录号、表句柄、记录内容;若该记录的操作类型为:修改,则计算该记录中变化字段的长度与该记录的字段总长度的比例值K,如果K大于配置的门限值,则同步消息包括:记录号和表句柄;如果K小于等于配置的门限值,则同步消息包括:记录号、表句柄、记录中变化字段所对应值和字段序号,字段序号如图1中的a、b、c...。此处可以设置比例值K的门限值,如此可以根据需要调整K门限值的大小,以选择最优的构造同步消息的方法。
[0095] 构造完同步消息以后执行步骤213。
[0096] 步骤210,判断全局数据缓冲区是否为空。
[0097] 如果当前没有其他同步操作,则判断全局数据缓冲区是否为空,如果为空则执行步骤211;如果不为空则执行步骤212。
[0098] 对于当前不存在其他同步操作但是全局数据缓冲区不为空的情况是这样的:在当前其他的同步操作已经完成,但是短定时器还没有开始检测是否可以同步的这段时间内,系统会产生多条需要进行同步的记录的同步请求数据,但是此时全局缓冲区中不为空,其中存储的是其他同步操作正在进行时,系统不断发送的记录的同步请求数据和重组后的记录操作信息。这种情况下,执行步骤212,将在其他同步操作已经完成,但是短定时器还没有开始检测是否可以同步的这段时间内产生的同步请求数据存入全局数据缓冲区中,并重新组织这些记录的操作信息,具体同步骤207所述,此处不再赘述。将系统对这些记录的操作信息进行重组后,执行步骤209。
[0099] 步骤211,根据记录的同步请求数据和同步规则构造同步消息。
[0100] 对于当前不存在其他同步操作,且全局数据缓冲区为空的情况,将记录的同步请求数据作为依据,并根据同步规则构造同步消息。构造完同步消息以后,执行步骤213。
[0101] 同步请求数据包括:表句柄、记录号、记录操作类型和记录内容。此处的同步规则具体包括:
[0102] 根据记录的操作类型来构造不同的同步消息。如果操作类型为:删除,则构造的同步消息包括:记录号和表句柄;如果操作类型为:增加,则构造的同步消息包括:记录号、表句柄、记录内容;如果操作类型为:修改,则计算该记录中变化字段的长度与该记录的字段总长度的比例值K,如果K大于配置的门限值,则同步消息包括:记录号和表句柄;如果K小于等于配置的门限值,则同步消息包括:记录号、表句柄、记录中变化字段所对应的字段序号及其对应的值。
[0103] 以上所述的同步规则可以根据需要进行设置。
[0104] 步骤213,将同步消息发送给备机,并设置应答定时器。
[0105] 主机将同步消息发送给备机的同时,设置应答定时器。备机在接收到同步消息后,依据同步消息对相应的记录进行同步,并需要在应答定时器规定的时间内将结果反馈给主机。
[0106] 步骤214,备机根据同步消息通过同步方式对需要同步的记录执行操作。
[0107] 备机接收到同步消息后,对同步消息进行解析。通过步骤209和211的描述可知,依据同步消息的内容来分,同步消息可分为三种,第一种同步消息包括:记录号和表句柄;第二种同步消息包括:记录号、表句柄、记录内容;第三种同步消息包括:记录号、表句柄、记录中变化字段所对应值和字段序号,且第一种同步消息对应的记录的操作类型为删除,第二种同步消息对应的记录的操作类型为增加或修改,第三种同步消息对应的记录的操作类型为修改。
[0108] 根据需要可以将这三种同步消息对应的同步方式设置为:第一种同步消息对应删除的同步方式,第二种同步消息对应增加的同步方式,第三种同步消息对应修改的同步方式。
[0109] 备机依据同步消息通过同步方式对记录进行不同的同步操作,具体的,当备机接收到第一种同步消息时,采用删除的同步方式:依据记录号和表句柄定位到该记录,删除该记录,操作完成;当备机接收到第二种同步消息时,采用增加的同步方式:根据表句柄定位到相应的表,根据记录号定位到表中的记录,将该记录的记录内容删除,然后将同步消息中的记录内容插入,操作完成;当备机接收到第三种同步消息时,采用修改的同步方式:根据记录号和表句柄定位到当前记录,根据字段序号找到备机中该记录中对应的字段,依据第三种同步消息中该字段序号对应的值对备机中这条记录中的该字段赋值,操作完成。
[0110] 步骤215,向主机发送应答消息,并将已经同步的记录存盘。
[0111] 备机对需要同步的记录执行完同步操作操作后,向主机发送应答消息,如已经同步,然后将同步后的记录进行存盘。
[0112] 步骤216,主机是否在应答定时器规定的时间内收到备机的应答消息。
[0113] 可以根据需要对应答定时器进行设置,较佳地,可以设置一个超时重发次数,如超时重发次数为3,时间周期为3s,表示主机第一次将同步消息发送给备机3s后,如果没有收到备机的应答消息,那么主机再次发送同步消息给备机,这就是第一次超时重发,如此最多可循环发送同步消息三次。
[0114] 如果第三次超时重发后,主机在3s后还是没有收到备机的应答消息,那么执行步骤204;如果主机在规定的时间内收到了备机的应答消息,则执行步骤217。
[0115] 步骤217,变化的动态数据的同步完成,主机清除变化的动态数据对应的记录全局数据缓冲区中的信息,结束同步操作。
[0116] 当主机接收到备机的应答消息后,说明变化的动态数据的同步已经完成,主机将变化的动态数据对应的记录在全局缓冲区中的信息清除,可以根据表句柄和记录号来确定变化的动态数据在全局缓冲区中对应的信息,如同步请求数据、操作信息等。
[0117] 图3所示为本发明动态数据同步的系统结构示意图。
[0118] 该系统包括主机100和备机01,其中,
[0119] 主机100,用于依据所述变化的动态数据对应的记录构造该记录的同步请求数据,向记录级同步进程发送同步请求数据;依据同步请求数据或者所述同步请求数据和全局数据缓冲区中的记录操作信息,通过同步规则构造同步消息发送给备机01;还用于在收到备机01的应答消息后,变化的动态数据的同步完成,结束同步操作。
[0120] 在动态数据的同步完成之后,主机100还用于清除变化的动态数据对应的记录在全局数据缓冲区中的信息。
[0121] 备机01,用于根据主机100发送的同步消息通过同步方式对需要同步的记录执行同步操作;备机01完成对记录的同步操作后,将已经同步的记录的数据存盘并发送同步完成的应答消息给主机100。
[0122] 主机100包括:第一数据存储模块101、全局数据缓冲区102、第一数据构造模块103、和第一数据传输模块104,其中,
[0123] 第一数据存储模块101,用于存储变化的动态数据对应的记录。
[0124] 全局数据缓冲区102,用于存储变化的动态数据对应记录的操作信息。
[0125] 第一数据构造模块103,用于依据第一数据存储模块101的变化的动态数据对应的记录构造该记录的同步请求数据;还用于依据同步请求数据或者同步请求数据和全局数据缓冲区102中的记录操作信息,通过同步规则构造同步消息。
[0126] 第一数据传输模块104,用于将第一数据构造模块103的同步请求数据发送给记录级动态同步进程;将第一数据构造模块103的同步消息发送给备机01;还用于接收备机01发送的应答消息。
[0127] 其中,记录级动态同步进程在第一数据传输模块104中,该进程根据同步请求数据发起对需要同步的记录的同步操作。
[0128] 备机01包括:第二数据存储模块02、同步操作执行模块03,第二数据构造模块04和第二数据传输模块05,其中,
[0129] 第二数据存储模块02,用于接收第一数据传输模块104发送的同步消息;还用于存储需要同步的记录。
[0130] 同步操作执行模块03,用于依据第二数据存储模块02的同步消息通过同步方式对第二数据存储模块02的需要同步的记录执行同步操作;还用于在执行完同步操作后,将第二数据存储模块02中已经同步的记录存盘。
[0131] 第二数据构造模块04,用于在同步操作执行模块03执行完同步操作后,产生同步完成的应答消息。
[0132] 第二数据传输模块05,用于将第二数据构造模块04产生的应答消息发送给主机100的第一数据传输模块104;
[0133] 主机100还包括:第一判断模块105、第一执行模块106,第二判断模块107、第二执行模块108、第三判断模块109、第三执行模块110、第一定时器111和第二定时器112,其中,
[0134] 第一判断模块105,用于判断第一数据存储模块101中变化的动态数据对应的记录中是否含有动态字段;还用于判断动态字段是否发生了变化。
[0135] 当记录中含有动态字段且动态字段发生变化时,第一数据构造模块103依据第一数据存储模块101的变化的动态数据对应的记录构造同步请求数据。
[0136] 第一执行模块106,用于根据第一判断模块105的判断结果,当记录中不含有动态字段,或者含有动态字段且动态字段没有发生变化时,对第一数据存储模块101中的该记录置失步标志,等待系统中其他数据同步进程或者系统定时器触发同步操作,同时将该条记录的相关数据存盘。
[0137] 第二判断模块107,用于在第一数据传输模块104将同步请求数据发送给记录级动态同步进程后,判断当前是否存在其他同步操作。
[0138] 第二执行模块108,用于依据第二判断模块107的判断结果,在当前存在其他同步操作时,将第一数据传输模块104发送给记录级动态同步进程的同步请求数据存入全局数据缓冲区102;并依据全局数据缓冲区102中的同步请求数据对该记录的操作信息重组,形成重组后的全局数据缓冲区102中的记录操作信息。
[0139] 由此可见,全局数据缓冲区102还用于存储第一数据传输模块104发送给记录级动态同步进程的同步请求数据。
[0140] 第一定时器111,用于在第二执行模块108对记录的操作信息重组后,设置短定时器,定时检测当前其他同步操作是否完成;如果其他同步操作没有完成,则第一定时器111继续定时检测;如果其他同步操作已经完成,则第一数据构造模块103依据全局数据缓冲区102中重组后的记录操作信息,通过同步规则构造同步消息。
[0141] 第三判断模块109,用于依据第二判断模块107的判断结果,当前不存在其他同步操作时,判断全局数据缓冲区102是否为空;当全局数据缓冲区102为空时,第一数据构造模块103依据第一数据传输模块104发送给记录级动态同步进程的同步请求数据,通过同步规则构造同步消息。
[0142] 第三执行模块110,用于依据第三判断模块109的判断结果,当全局数据缓冲区102不为空时,将第一数据传输模块104发送给记录级动态同步进程的同步请求数据存入全局数据缓冲区102,并依据全局数据缓冲区102中的同步请求数据对该记录的操作信息重组,形成重组后的全局数据缓冲区102中的记录操作信息。
[0143] 第二定时器112,用于在第一数据传输模块104向备机01发送同步消息的同时,设置应答定时器,并定时检测第一数据传输模块104是否在规定的时间内接收到备机01发送的应答消息。
[0144] 其中,第一执行模块106在第二定时器112检测到第一数据传输模块104没有在规定的时间内接收到备机01发送的应答消息后,对第一数据存储模块101中的该条记录置失步标志,即当前需要同步的记录,等待系统中其他数据同步进程或者系统定时器触发同步操作,同时将该条记录的相关数据存盘;
[0145] 全局数据缓冲区102还用于在第二定时器112检测到第一数据传输模块104在规定的时间内接收到备机01发送的应答消息后,清除变化的动态数据对应的记录在所述全局数据缓冲区102中的信息。
[0146] 以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。