发明内容
有鉴于此,本发明的目的在于提供一种多服务器间数据同步的方法及系统,以解决现有技术无法及时同步及传送效率低的问题。
为实现上述目的,本发明提供了如下方案:
一种多服务器间数据同步的方法,包括:
源服务器分别为每类需要同步的数据建立版本跟踪表;
当有数据发生变化时,在相应的版本跟踪表中增加关于所述变化的记录;
根据版本跟踪表中的记录,将发生变化的数据发送到目标服务器,目标服务器利用接收到的所述发生变化的数据进行数据同步。
优选的,还包括:
如果目标服务器同步成功,则向源服务器返回同步成功消息;
源服务器判断是否所有目标服务器均同步成功,如果是,删除版本跟踪表中的记录。
优选的,在版本跟踪表中增加关于所述变化的记录时,还包括:
为源服务器设置第一版本号,为各目标服务器设置第二版本号;
则,判断是否所有目标服务器均同步成功的具体实现包括:
接收到目标服务器的同步成功消息后,将该目标服务器的第二版本号修改为第一版本号;
判断各目标服务器的版本号是否全部为第一版本号,如果是,则所有目标服务器均同步成功。
优选的,所述变化包括更新数据、插入数据或删除数据,则通过为源服务器设置不同的第一版本号来描述数据的变化。
优选的,根据预置时间向各目标服务器发送所述发生变化的数据。
一种多服务器间数据同步的系统,涉及源服务器及至少一个目标服务器,所述源服务器包括:
版本跟踪表建立单元,用于分别为每类需要同步的数据建立版本跟踪表;
版本跟踪表管理单元,用于当有数据发生变化时,在相应的版本跟踪表中增加关于所述变化的记录;
发送单元,用于根据版本跟踪表中的记录,将发生变化的数据发送到目标服务器;
所述目标服务器包括:
同步执行单元,用于利用接收到的所述发生变化的数据进行数据同步。
优选的,所述目标服务器还包括:
同步成功消息发送单元,用于当目标服务器同步成功时,则向源服务器返回同步成功消息;
所述版本跟踪表管理单元还用于判断是否所有目标服务器均同步成功,如果是,删除所述版本跟踪表中的记录。
优选的,所述版本跟踪表管理单元利用以下子单元判断是否所有目标服务器均同步成功:
版本号设置子单元,用于为源服务器设置第一版本号,为各目标服务器设置第二版本号;
版本号修改子单元,用于接收到目标服务器的同步成功消息后,将该目标服务器的第二版本号修改为第一版本号;
判断子单元,用于判断各目标服务器的版本号是否全部为第一版本号,如果是,则所有目标服务器均同步成功。
优选的,所述变化包括更新数据、插入数据或删除数据,所述版本号设置单元则通过为源服务器设置不同的第一版本号来记录数据的变化;所述版本跟踪表管理单元将所述不同的第一版本号作为关于所述变化的记录。
优选的,所述发送单元根据预置时间向各目标服务器发送所述需要同步的数据。
根据本发明提供的具体实施例,本发明公开了以下技术效果:
首先,本发明通过同步表记录发生变化的数据,并及时发送到目标服务器,目标服务器根据接收到的记录完成数据的同步。可见,数据库中的某条数据一旦发生变化,该条数据所在数据表的同步表就会记录该变化,并及时与其他服务器上的数据库进行同步。而且进行同步的时候,只传送并修改发生变化的数据,没有变化的数据是不被传送或修改的,即本发明只对数据库中发生变化的数据在多服务器之间进行同步,因此实现了数据在多服务器之间进行同步时的及时性及高效性。
其次,通过版本号机制,有助于判断目标服务器是否已经全部同步成功,并在全部同步成功后将相应的记录在同步表中删除,避免了因同步表过大而占用大量的存储空间,保证了系统的性能。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
参见图1,本发明提供的多服务器间数据同步的方法包括以下步骤:
S101:源服务器分别为每类需要同步的数据建立版本跟踪表;
例如,有一类数据A,则为该类数据建立版本跟踪表为A_SYNC,该版本跟踪表用于记录该类数据A中各条数据的变化。
S102:当某类数据(如A类数据)中有某条数据发生变化时,在该类数据的版本跟踪表中增加关于所述变化的记录;
当A类数据中的某条数据发生变化时,程序会自动向版本跟踪表中新增加一条描述该条数据发生了何种变化的信息。
S103:根据版本跟踪表中的记录,将发生变化的数据发送到目标服务器,目标服务器利用接收到的所述发生变化的数据进行数据同步。
发送程序可以通过读取版本跟踪表来判断是否有数据需要同步,如果有,则可以根据版本跟踪表中的记录,将需要同步的数据发送到目标服务器的接收端口。目标服务器在接收到所述需要同步的数据之后,就可以进行数据的同步了。
图2所示为本发明中的服务器结构,其中,分区服务器是指分布在各地区的服务器,例如北京的服务器负责北京用户的信息,上海的服务器负责上海用户的信息,各分区服务器上的内容不一定相同,但是各地区的用户信息需要同步到中心服务器进行汇总;另外,内容生产服务器也需要将发生变化的数据汇总到中心服务器;同时,中心服务器中有数据发生变化时,也需要按照不同的地区将数据进行分发并同步到各分区服务器,例如,将北京用户的数据分发同步到北京的服务器,将上海用户的数据分发同步到上海的服务器,等等。
也就是说,数据同步可能发生在从分区服务器到中心服务器、从内容生产服务器到中心服务器或从中心服务器到分区服务器的过程中,内容生产服务器、分区服务器及中心服务器都有可能是源服务器,中心服务器及分区服务器都有可能是目标服务器。但对于不同流向(源服务器与目标服务器不同)的数据同步都可以采用上述方法,只是不同的源服务器对应不同的目标服务器时,可能采用不同的同步策略,所述同步策略也就是可以选择不同的同步频率及同步时间等,即发送程序可以采用预置的算法策略,例如每分钟或每五分钟等发送一次需要同步的数据。
其中,为每一类需要同步的数据建立版本跟踪表,是为了判断哪些数据发生了何种变化。该版本跟踪表中可以记录该类数据中每条数据的标识及版本号,根据标识及版本号可以判断某条数据是否发生了变化。例如,如果某条数据发生变化,则在版本跟踪表中增加关于该条数据的记录,并将该条数据的版本号记录为1。发送程序可以按照所述算法策略,每隔一段时间读取版本跟踪表一次,按照版本跟踪表中的信息将需要同步的数据发送到目标服务器。
可见,源服务器中的某条数据一旦发生变化,该条数据所属类别的版本跟踪表就会记录该变化,并及时与其他服务器上的数据库进行同步。而且进行同步的时候,只传送并修改发生变化的数据,没有变化的数据是不被传送或修改的,即本发明只对源服务器中发生变化的数据在多服务器之间进行同步,因此实现了数据在多服务器之间进行同步时的及时性及高效性。
在实际应用中,在目标服务器端,如果同步成功,则可以向源服务器返回同步成功消息;同样,如果没有同步成功,则可以向源服务器返回同步不成功消息,然后继续将没有同步成功的服务器完成同步;如果所有的目标服务器都返回了同步成功的消息,此时源服务器端关于该条数据的记录将不再有用,因此可以从版本跟踪表A_SYNC中删除。这样,可以避免版本跟踪表中的内容过多,以致占用过多的存储空间、影响系统性能。
为了便于判断各目标服务器是否都已经同步成功,可以采用如下方法:在版本跟踪表中增加关于某条数据变化的记录时,为源服务器设置第一版本号,例如为1,为各目标服务器设置第二版本号,例如为0;在某目标服务器返回同步成功的消息时,将该目标服务器的版本号修改为1;其他目标服务器也做同样处理,这样,当版本跟踪表中所有目标服务器的版本号都变为1时,则可以判断出所有目标服务器都已经同步成功,此时便可以将该条记录删除了。
为了更好地理解本发明提供的方法,下面通过具体应用中的实例进行详细地介绍。
参见图3,本发明提供的方法包括以下步骤:
S301:源服务器中的某类数据A,其中有一条数据发生变化,那么对应的A_SYNC表中就会插进一条相应的记录。
S302:更新A_SYNC,或插进相应记录来描述该条数据的变化,并且来决定目标服务器中对应的操作。
需要说明的是,版本跟踪表中可能已经存在关于该条数据变化的记录,如果存在,则可以直接在原记录的基础上进行更新。因此,每次向同步表插入新的记录之前,可以先执行更新操作,如果更新过程中发现不存在关于该条数据的记录,则执行插入记录的步骤。
S303:发送程序每分钟读取A_SYNC一次,根据A_SYNC表中所述变化的记录,将需要同步的数据发送到目标服务器的接收端口。
S304:目标服务器实时监听,一旦接收到新的数据就进行数据同步操作,将数据写入数据库。
S305:如果数据写入数据库成功,则返回同步成功,否则返回同步不成功。
S306:更新A_SYNC表。如果收到同步成功的信号,更新A_SYNC表,进行监测,如果本条数据没有更新了,将从A_SYNC表删除本条记录的内容。
S307:如果收到同步不成功的信号,继续进行监测,本条数据需要继续同步,再次进行以上步骤继续同步本条数据,直到成功为止。
同时,由于数据变化通常可以包括数据更新、数据插入或数据删除等,因此,也可以用源服务器的版本号来区别不同类型的数据变化,例如,可以用1表示数据更新或数据插入,用-1表示数据删除。其中,在数据更新的过程中,如果一次更新在某些服务器上尚未同步成功时,又产生了关于该条数据的新的更新,则在同步表中可以将源服务器的版本号在原来的基础上增加2,例如原来为1,则现在变为3,前一次更新尚未成功的服务器可以根据两次版本号的变化,直接按照版本号为3的记录进行数据同步,而不再进行版本号为1的数据同步,这样可以进一步提高更新的效率。例如,生成的A类数据的版本跟踪表可以如表1所示。
表1
N_CODE数据的标识 | N_VER源服务器版本号 | N_V_A目标服务器版本号 | N_V_B目标服务器版本号 |
1 | 1 | 0 | 0 |
2 | 3 | 1 | 1 |
3 | -1 | 0 | 0 |
下面,分别针对源服务器发生数据更新、数据插入和数据删除三种数据变化时、数据同步的具体过程进行完整地描述。
实施例一、参见图4,更新数据时,本发明提供的方法包括以下步骤:
S401:在源服务器的A类数据中更新标识为1的一条数据;
S402:程序更新A_SYNC,或在A_SYNC中插入如表1第一行的记录;
S403:发送程序每隔1分钟就读一次A_SYNC表,发现源服务器版本号和目标服务器版本号不一致,说明本条数据还没有进行同步。
S404:发送程序将这条标识为1的数据发送到目标服务器的接收端口。
S405:接收端接收所述数据,程序去执行更新程序,将标识为1的数据写入数据库。
S406:经程序判断被影响的数据条数是1,程序返回数值1,说明更新成功,如果程序返回的是不等于1的数,说明更新失败,该目标数据库中不包括该条数据,则数据库会自动执行插入数据操作,将标识为1的数据插入到该目标服务器数据库中并将操作的执行结果(成功或失败信息)返回给所述源服务器。
S407:从目标服务器返回的数值写入A_SYNC表中对应的目标服务器N_V_A的位置。其他的目标服务器也一样。
S408:发送程序再次读A_SYNC表时,如果N_V_A、N_V_B......的值都为1,那么认为各个目标服务器都已经同步成功,则从A_SYNC表中删除此条数据;如果N_V_A、N_V_B......中有不为1继续将不为1的目标服务器进行同步。一直到目标服务器的版本号全部为1时,说明此次更新同步成功,从A_SYNC表删除此条记录。
S409:如果一条数据第一次更新同步还没有完成,源服务器又有更新,例如:标识为2的数据,参照表1的第二行。
S410:和以上标识为1的数据的更新同步步骤一样,但是上一步的更新还没有同步完成,则源服务器版本号在上一步版本号的基础上加2,目标服务器同步完旧的版本的数据后将A_SYNC表中的目标服务器版本号(以N_V_A为例)更新为同步时的版本,由于此时源服务器版本号已在旧的版本号基础上加2,所以该条数据会继续执行同步操作直到目标服务器版本与源服务器版本相同为止。
实施例二、参见图5,插入数据时,本发明提供的方法包括以下步骤:
S501:在源服务器的A类数据中插入标识为1的一条数据。
S502:程序更新A_SYNC,或在A_SYNC中插入如表1第一行的记录。
S503:目标服务器端,程序首先执行数据更新操作。
S504:如果更新操作失败,程序的返回值是0(因为该目标服务器中没有此条数据,所以执行更新操作该目标服务器中受影响的数据条数为0)。
S505:程序以返回值为0判断出需要执行插入操作,将标识为1的数据添加到该目标服务器的数据库。
S506:经程序判断目标服务器中被影响的数据条数是1,程序返回数值1,说明插入成功,向源服务器返回同步成功的消息;如果程序返回的是不等于1的数,说明插入失败,向源服务器返回同步不成功的消息。
S507:从目标服务器返回的消息,修改A_SYNC表中对应的目标服务器N_V_A的版本号。其他的目标服务器也一样。
S508:发送程序再次读A_SYNC表时,如果N_V_A、N_V_B......的值都为1,那么从A_SYNC表中删除此条数据;如果N_V_A、N_V_B......中有不为1继续将不为1的目标服务器进行同步。一直到目标服务器的版本号也都为1时,说明此次插入同步成功,从A_SYNC表删除此条数据。
实施例三、参见图6,删除数据时,本发明提供的方法包括以下步骤:
S601:在源服务器的数据表A中删除标识为3的一条数据。
S602:程序更新A_SYNC,或在A_SYNC表中插入如表1第三行的记录。
S603:发送程序每隔1分钟就读一次A_SYNC表,发现源服务器版本号和目标服务器版本号不一致,说明本条数据还没有进行同步。
S604:发送程序将这条标识为3的数据发送到目标服务器的接收端口。
S605:程序读取标识为3的数据,发现源服务器版本号为-1,则执行相应的删除程序,将标识为3的数据从目标服务器的数据库中删除。
S606:如果目标服务器执行删除操作成功则返回成功信息,否则返回失败信息。
S607:从目标服务器返回的数值写入A_SYNC表中对应的目标服务器N_V_A的位置。其他的目标服务器也一样。
S608:发送程序再次读A_SYNC表时,如果N_V_A、N_V_B......的值都与N_VER相同,那么从A_SYNC表中删除此条记录;如果N_V_A、N_V_B......中有不为-1的继续将不为-1的目标服务器进行同步。一直到目标服务器的版本号全部为-1时,说明此次删除同步成功,从A_SYNC表删除此条记录。
与本发明提供的方法相对应,本发明还提供了一种多服务器间数据同步的系统,涉及源服务器及至少一个目标服务器,参见图7,该系统中,源服务器包括以下单元:
版本跟踪表建立单元U701,用于分别为每类需要同步的数据建立版本跟踪表;
版本跟踪表管理单元U702,用于当有数据发生变化时,在该数据的版本跟踪表中增加关于所述变化的记录;
发送单元U703,用于根据版本跟踪表中的记录,将发生变化的数据发送到目标服务器;
所述目标服务器包括:
同步执行单元U704,用于利用接收到的所述发生变化的数据进行数据同步。
需要说明的是,由于所谓源服务器与目标服务器只是相对的概念,因此,在所述目标服务器中,也可能包括同步执行单元U704;同样在所述目标服务器中,也可能包括同步表建立单元U701、同步表管理单元U702及发送单元U703。也就是说,当一个服务器上发生数据变化时,该服务器将执行所述源服务器的操作,对应的服务器执行目标服务器的操作。
版本跟踪表建立单元U701分别为每类需要同步的数据建立版本跟踪表;在源服务器数据库中,当某类数据中的某条数据发生变化时,版本跟踪表管理单元U702在该类数据的版本跟踪表中增加关于所述变化的记录,发送单元U703根据版本跟踪表中的记录,将发生变化的数据发送到目标服务器。在目标服务器端,同步执行单元U704利用接收到所述发生变化的数据进行数据同步。
参见图8,在目标服务器端,还可以包括:
同步成功消息发送单元U805,用于当目标服务器同步成功时,则向原服务器返回同步成功消息;
版本跟踪表管理单元U802还用于判断是否所有目标服务器均同步成功,如果是,删除所述版本跟踪表中的记录。
优选的,版本跟踪表管理单元U802可以利用以下子单元判断是否所有目标服务器均同步成功:
版本号设置子单元U8021,用于为源服务器设置第一版本号,为各目标服务器设置第二版本号;
版本号修改子单元U8022,用于接收到目标服务器的同步成功消息后,将该目标服务器的第二版本号修改为第一版本号;
判断子单元U8023,用于判断各目标服务器的版本号是否全部为第一版本号,如果是,则所有目标服务器均同步成功。
在实际应用中,所述变化可以包括更新数据、插入数据或删除数据,因此,版本号设置子单元U8021可以通过为源服务器设置不同的第一版本号来记录数据的变化;版本跟踪表管理单元U802将所述不同的第一版本号作为关于所述变化的记录。
优选的,发送单元U803可以根据预置时间向各目标服务器发送所述需要同步的数据。
以上对本发明所提供的一种多服务器间数据同步的方法及系统,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。