CN103605809A - 一种数据同步的方法 - Google Patents
一种数据同步的方法 Download PDFInfo
- Publication number
- CN103605809A CN103605809A CN201310663003.9A CN201310663003A CN103605809A CN 103605809 A CN103605809 A CN 103605809A CN 201310663003 A CN201310663003 A CN 201310663003A CN 103605809 A CN103605809 A CN 103605809A
- Authority
- CN
- China
- Prior art keywords
- storehouse
- master library
- record
- data
- act
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种数据同步的方法,从库i中存储数据表T-i,主库中存储数据表T,数据表T存储记录的格式与数据表T-i存储记录的格式相同;在从库i中建立修改历史表T_i-act;同时,在主库中建立修改历史表T_-act;当达到本次同步时间时,从库i读取获得有效操作增量,然后将有效操作增量、记录内容以及上次同步时保存的初始主库版本号打包,并将上传包上传给主库;主库入库后,统计得到有效操作增量,然后将有效操作增量、记录内容以及当前主库版本号打包,并将返回包返回给从库i;从库i进行入库操作,完成一个数据同步过程。该数据同步的方法,能够简单、快速、可靠、高效的实现一个主库与若干个从库之间数据表的同步。
Description
技术领域
本发明属于通信及计算机技术领域,具体涉及一种数据同步的方法。
背景技术
随着网络技术、信息技术、电子商务和电信业务的迅速发展,系统体系和业务之间的复杂程度也随之加大,为了解决复杂的业务管理和运营问题,许多企业往往通过配置多套系统解决上述问题,并且,各套系统之间往往需要实现数据共享,而数据共享一般都是通过数据同步实现。典型的应用如用户登录信息,通过数据同步,可以实现一处登录处处登录,或者一个密码走天下的效果。因此,在IT行业中,如何低成本、高效率并且高可靠性的进行数据同步,一直是互联网中用于向用户提供各种服务的众多公司致力解决的问题。
现有的数据同步一般通过以下两种方式进行:
(1)手工同步:例如:当需要同步数据库A中的表A1和数据库B中的表B1时,则人工比对表A1和表B1内容是否相同,如果不相同,则人工将表A1中的数据复制粘贴到表B1,从而保证表A1和表B1内容相同。该种方法主要存在以下问题:效率低,且容易出错。
(2)数据库自带自动同步:如SQL Server数据库一般采用复制订阅功能进行数据同步。例如:当需要同步数据库A中的表A1和数据库B中的表B1时,每当表B1进行了修改或表A1进行了修改时,均自动将发生修改的表的所有内容复制到另一表中,从而保证两个表数据的一致性。该种方法存在的主要问题为:由于同步时将发生变化的表的所有内容均需复制到另一张表中,尤其当表本身较大时,会占用过多的带宽进行数据同步,从而影响同步速度,增加了同步的配置复杂度。
发明内容
针对现有技术存在的缺陷,本发明提供一种数据同步的方法,能够简单、快速、可靠、高效的实现若干个数据库之间数据表的同步。
本发明采用的技术方案如下:
本发明提供一种数据同步的方法,包括以下步骤:
S1,主库连接有n个从库,n个从库分别命名为:从库1、从库2…从库n;
S2,分别为每一个从库设置定时同步时间,当任意的从库i到达自身配置的定时同步时间时,从库i与主库进行同步操作,使主库与从库i保持一致;其中,i∈(1、2…n);
主库通过与各个从库依次进行同步操作,最终使主库、从库1、从库2…从库n这n+1个数据库均同步。
优选的,S2中,从库i与主库进行同步操作具体为:从库i的数据表与主库的数据表进行同步操作,并且,需同步的数据表在主库和从库i中具有相同的字段。
优选的,所述从库i的数据表与主库的数据表进行同步操作具体包括以下步骤:
S21,设从库i中存储数据表T-i,该数据表T-i由若干条记录组成,每一条记录包括:记录ID、记录具体内容以及该条记录的操作时间;其中,记录ID用于唯一标识该条记录,当该条记录发生修改或删除操作时,记录ID仍然保持不变;所述操作时间为:对该条记录进行创建或修改时操作发生的时间点;
设所述主库中存储数据表T,所述数据表T存储记录的格式与数据表T-i存储记录的格式相同;
S22,当需要同步所述数据表T和所述数据表T-i时,在从库i中建立修改历史表T_i-act,所述修改历史表T_i-act用于记录对所述数据表T-i进行的操作信息;同时,在主库中建立修改历史表T_-act,所述修改历史表T_-act用于记录对所述数据表T进行的操作信息;
S23,设置针对从库i的定时同步时间间隔,则当达到本次同步时间时,所述从库i读取所述修改历史表T_i-act,获得上次同步结束时间点到当前时刻时间段内所述修改历史表T_i-act所记录的操作增量,通过对该操作增量进行分析,统计得到从库i的有效操作增量,针对该有效操作增量读取所述数据表T-i,获取与该有效操作增量对应的记录内容;然后将有效操作增量、记录内容以及上次同步时保存的初始主库版本号打包,得到上传包,并将所述上传包上传给所述主库;
S24,所述主库接收所述上传包,首先分析所述初始主库版本号是否为有效主库版本号,如果否,则执行S25;如果是,则执行S26;
S25,所述主库将当前主库版本号以及数据表T打包,得到返回包,然后将所述返回包返回给所述从库i;然后执行S27;
S26,所述主库对所述有效操作增量进行进一步分析过滤后,对所述主库进行入库操作,并更新所述修改历史表T_-act,然后,所述主库获得上次与从库i同步结束时间点到当前时刻时间段内所述修改历史表T_i-act所记录的操作增量,通过对该操作增量进行分析,统计得到主库的有效操作增量,针对该有效操作增量读取所述数据表T,获取与该有效操作增量对应的记录内容;然后将有效操作增量、记录内容以及当前主库版本号打包,得到返回包,并将所述返回包返回给所述从库i;然后执行S27;
S27,所述从库i接收所述返回包,对所述从库i进行入库操作,并更新所述修改历史表T_i-act,至此,完成一个数据同步过程,当下次定时同步时间到达时,循环S23-S27。
优选的,S22中,所述修改历史表T_i-act由若干条操作记录组成,每一条操作记录用于记录对数据表T-i中某条记录进行的操作信息,即:每当数据表T-i中某条记录被操作时,则在所述修改历史表T_i-act中增加一条对应的操作记录,所述修改历史表T_i-act具体包括以下字段:操作序号autoid-i、记录ID、操作方式-i、修改角色-i和操作时间-i;
其中,所述操作序号autoid-i在该修改历史表T_i-act中具有唯一性和单一性,表示操作序号;每当从库i与主库同步时,均需读取修改历史表T_i-act中操作序号的最大值作为从库i版本号并存储;
所述记录ID即为所述数据表T-i中存储的记录ID,表示被操作记录的记录ID;
所述操作方式-i指对所述数据表T-i中记录进行的新增、修改或删除操作;
所述修改角色-i指本次修改的发起者,包括本地库修改和主库发起的修改;
所述操作时间-i区分以下两种情形:如果为本地库修改,则操作时间-i指对所述数据表T-i中记录进行操作的时间;如果为主库发起的修改,则操作时间-i指主库下发的操作增量中所携带的对该记录的操作时间;
对于修改历史表T_-act,包括以下字段:操作序号autoid、记录ID、操作方式、修改角色和操作时间;
其中,操作序号autoid在该修改历史表T_-act中具有唯一性和单一性,表示操作序号;每当主库与从库i同步时,均需读取修改历史表T_-act中操作序号的最大值作为主库版本号并存储;
所述记录ID即为所述数据表T中存储的记录ID,表示被操作记录的记录ID;
所述操作方式指对所述数据表T中记录进行的新增、修改或删除操作;
所述修改角色指本次修改的发起者,包括本地库修改和从库发起的修改;
所述操作时间区分以下两种情形:如果为本地库修改,则操作时间指对所述数据表T中记录进行操作的时间;如果为从库发起的修改,则操作时间指从库上传的操作增量中所携带的对该记录的操作时间。
优选的,S23具体为:
S231,当达到本次同步时间时,所述从库i读取已存储的上次同步时获得的初始从库i版本号M1和初始主库版本号Z1;
所述从库i读取当前修改历史表T_i-act中操作序号的最大值M,则:操作序号大于M1且小于等于M的各条T_i-act表中的操作记录集合构成从库的操作增量;
S232,如果从库的操作增量中,存储针对同一记录ID的若干条操作记录,则过滤掉操作时间较早的操作记录,仅保留操作时间最晚的操作记录,由此得到的操作记录集合即为从库的有效操作增量;
S233,以记录ID为关联,读取所述数据表T-i,获取与该有效操作增量对应的记录内容,然后将有效操作增量、记录内容以及初始主库版本号Z1打包,得到上传包,并将所述上传包上传给所述主库;
S24具体为:
所述主库接收所述上传包,判断初始主库版本号Z1是否存在当前的修改历史表T_-act中,如果不存在,则得出初始主库版本号Z1为无效主库版本号,然后执行S25;相反,则得出初始主库版本号Z1为有效主库版本号,然后执行S26;
S26具体为:
S261,对于从库i上传的有效操作增量,其由若干条操作记录组成,对于任意一条关于指定记录ID的指定操作记录,首先判断修改历史表T_-act中是否存在关于同一指定记录ID的操作记录,如果不存在,则对该指定操作记录进行入库操作;反之,则执行S262;
S262,进一步判断修改历史表T_-act中关于同一指定记录ID的操作时间是否晚于从库i上传的操作时间,如果晚,则过滤从库i上传的该条指定操作记录,即忽略该条指定操作记录;反之,如果早,则对该指定操作记录进行入库操作,并更新修改历史表T_-act,即:向该修改历史表T_-act中增加一条操作记录;
S263,所述主库计算得出修改历史表T_-act当前时刻的操作序号的最大值作为新主库版本号Z2,然后统计操作序号大于初始主库版本号Z1且小于等于新主库版本号Z2的若干条操作记录,该若干条操作记录构成主库操作增量;
S264,对所述主库操作增量进行分析,删除来自从库i的修改所增加的操作记录,同时,还删除针对同一记录ID的非最近发生的操作记录,得到主库的有效操作增量;
S265,针对该有效操作增量读取所述数据表T,获取与该有效操作增量对应的记录内容;然后将有效操作增量、记录内容以及新主库版本号Z2打包,得到返回包,并将所述返回包返回给所述从库i;然后执行S27;
S27具体为:
S271,所述从库i接收所述返回包,对所述从库i进行入库操作,并更新所述修改历史表T_i-act,获得更新后修改历史表T_i-act操作序号最大值作为新从库i版本号M2,同时,所述从库i存储主库下发的新主库版本号Z2;至此,完成一个数据同步过程;
S272,当下次定时同步时间到达时,用新主库版本号Z2替换初始主库版本号Z1,同时,用新从库i版本号M2替换初始从库i版本号M1,循环S23-S27。
本发明的有益效果如下:本发明提供的数据同步的方法,能够简单、快速、可靠、高效的实现一个主库与若干个从库之间数据表的同步。
附图说明
图1为本发明提供的数据同步的方法流程示意图。
具体实施方式
以下结合附图对本发明进行详细说明:
本发明提供一种数据同步的方法,包括以下步骤:
S1,主库连接有n个从库,n个从库分别命名为:从库1、从库2…从库n;
S2,分别为每一个从库设置定时同步时间,当任意的从库i到达自身配置的定时同步时间时,从库i与主库进行同步操作,使主库与从库i保持一致;其中,i∈(1、2…n);
主库通过与各个从库依次进行同步操作,最终使主库、从库1、从库2…从库n这n+1个数据库均同步。本发明中,数据库之间的同步实质为数据库之间针对某一个或某几个数据表之间的同步。
以n个从库中任意一个从库i为例,介绍从库i的一张数据表与主库的一张数据表进行同步的具体操作,其中,需要同步的位于不同数据库的数据表需要字段数目相同、格式相同。当然,根据实际需要,也可以使从库i的若干张数据表与主库的对应数据表进行同步,针对某一数据表,同步原理相同,因此,仅以一张数据表为例介绍,如图1所示,具体包括以下步骤:
S21,设从库i中存储数据表T-i,该数据表T-i由若干条记录组成,每一条记录包括:记录ID、记录具体内容以及该条记录的操作时间;其中,记录ID用于唯一标识该条记录,当该条记录发生修改或删除操作时,记录ID仍然保持不变,可以采用UUID生成;所述操作时间为:对该条记录进行创建或修改时操作发生的时间点;
设所述主库中存储数据表T,所述数据表T存储记录的格式与数据表T-i存储记录的格式相同。
例如,如表1所示,为数据表T-i为公司员工表的具体示例,其当前只存储一条记录,即:记录ID为999,记录具体内容为:name是李四,操作时间为9月4号,表明在9月4日,将记录ID为999的记录的name字段更新为李四。当然,本发明并不对数据表中各字段的具体表达方式进行限定,只要达到相同的目的即可,如:在表1中,用modtime字段表明操作时间。
表1
S22,当需要同步所述数据表T和所述数据表T-i时,在从库i中建立修改历史表T_i-act,所述修改历史表T_i-act用于记录对所述数据表T-i进行的操作信息;同时,在主库中建立修改历史表T_-act,所述修改历史表T_-act用于记录对所述数据表T进行的操作信息。无论对于主库还是从库i,每当数据表进行新增、修改或删除操作时,与其对应的修改历史表均会增加一条记录,可以使用数据库的“事物”方法保证这个一致性。
本步骤中,介绍一种具体的修改历史表的示例:
(一)修改历史表T_i-act
修改历史表T_i-act由若干条操作记录组成,每一条操作记录用于记录对数据表T-i中某条记录进行的操作信息,即:每当数据表T-i中某条记录被操作时,则在所述修改历史表T_i-act中增加一条对应的操作记录,所述修改历史表T_i-act具体包括以下字段:操作序号autoid-i、记录ID、操作方式-i、修改角色-i和操作时间-i;
其中,所述操作序号autoid-i在该修改历史表T_i-act中具有唯一性和单一性,表示操作序号;每当从库i与主库同步时,均需读取修改历史表T_i-act中操作序号的最大值作为从库i版本号并存储;
所述记录ID即为所述数据表T-i中存储的记录ID,表示被操作记录的记录ID;
所述操作方式-i指对所述数据表T-i中记录进行的新增、修改或删除操作;
所述修改角色-i指本次修改的发起者,包括本地库修改和主库发起的修改;
所述操作时间-i区分以下两种情形:如果为本地库修改,则操作时间-i指对所述数据表T-i中记录进行操作的时间;如果为主库发起的修改,则操作时间-i指主库下发的操作增量中所携带的对该记录的操作时间;
如果数据表T-i当前存储状态为表1,则当对数据表T-i依次进行下列四项操作时,数据表T-i变为表2所示状态,需要注意的是,进行这四项操作后,由于均是针对ID=999的记录进行的操作,因此,最终数据表T-i中只存在一条记录。
[1]新增记录:ID=999name=张三modtime=9月1日
[2]修改此记录:ID=999name=张小三modtime=9月2日
[3]修改此记录:ID=999name=张三丰modtime=9月3日
[4]修改此记录:ID=999name=李四modtime=9月4日
表2
而当发生上述四项操作时,修改历史表T_i-act新增4条操作记录,如果最初修改历史表T_i-act为空,则修改历史表T_i-act变为表3状态。
表3
在表3中,修改历史表T_i-act具体包括以下字段:操作序号autoid-i、记录ID、操作方式-i、修改角色-i和操作时间-i;其中,操作序号autoid-i用“autoid”字段表示;操作方式-i用“act”字段表示,并用“0”表示新增或修改操作,用“1”表示删除操作;操作时间-i用“acttime”字段表示,修改角色-i用“actrole”字段表示,并用“0”表示本地库修改,用其他数字代表主库发起的修改,如,用“1”代表主库发起的修改。需要强调的是,修改历史表T_i-act中并不存储数据表T-i中存储的记录具体内容,如:李四之类的信息,修改历史表T_i-act与数据表T-i通过记录ID进行关联,需要时,通过记录ID到数据表T-i中查找记录具体内容。
(二)修改历史表T_-act
对于修改历史表T_-act,其与修改历史表T_i-act原理基本相同,在具体实现上稍有区别。
修改历史表T_-act包括以下字段:操作序号autoid、记录ID、操作方式、修改角色和操作时间;
其中,操作序号autoid在该修改历史表T_-act中具有唯一性和单一性,表示操作序号;每当主库与从库i同步时,均需读取修改历史表T_-act中操作序号的最大值作为主库版本号并存储;
所述记录ID即为所述数据表T中存储的记录ID,表示被操作记录的记录ID;
所述操作方式指对所述数据表T中记录进行的新增、修改或删除操作;
所述修改角色指本次修改的发起者,包括本地库修改和从库发起的修改;
所述操作时间区分以下两种情形:如果为本地库修改,则操作时间指对所述数据表T中记录进行操作的时间;如果为从库发起的修改,则操作时间指从库上传的操作增量中所携带的对该记录的操作时间。
S23,设置针对从库i的定时同步时间间隔,则当达到本次同步时间时,所述从库i读取所述修改历史表T_i-act,获得上次同步结束时间点到当前时刻时间段内所述修改历史表T_i-act所记录的操作增量,通过对该操作增量进行分析,统计得到从库i的有效操作增量,针对该有效操作增量读取所述数据表T-i,获取与该有效操作增量对应的记录内容;然后将有效操作增量、记录内容以及上次同步时保存的初始主库版本号打包,得到上传包,并将所述上传包上传给所述主库;
本步骤具体为:
S231,当达到本次同步时间时,所述从库i读取已存储的上次同步时获得的初始从库i版本号M1和初始主库版本号Z1;
所述从库i读取当前修改历史表T_i-act中操作序号的最大值M,则:操作序号大于M1且小于等于M的各条T_i-act表中的操作记录集合构成从库的操作增量;
例如,如果初始从库i版本号M1为50,当前修改历史表T_i-act中操作序号的最大值M为54,则从库i的操作增量可以如表4所示:
表4
S232,如果从库的操作增量中,存储针对同一记录ID的若干条操作记录,则过滤掉操作时间较早的操作记录,仅保留操作时间最晚的操作记录,由此得到的操作记录集合即为从库的有效操作增量;
例如,以表4为例,由于针对记录ID=888的记录,共先后对其进行了3次操作,操作发生时间分别为:9月2日、9月3日和9月4日;为简化数据库同步的复杂度,提高数据库同步的效率,本发明中,需要过滤掉9月2日和9月3日的操作记录,得到如表5所示的从库i的有效操作增量。
表5
S233,以记录ID为关联,读取所述数据表T-i,获取与该有效操作增量对应的记录内容,然后将有效操作增量、记录内容以及初始主库版本号Z1打包,得到上传包,并将所述上传包上传给所述主库;
例如,如果数据表T-i当前为表6状态:
表6
则上传包中内容为:“记录ID=875,9月1日进行新增或修改操作,name=小华”;“记录ID=888,9月4日进行新增或修改操作,name=小红”。
S24,所述主库接收所述上传包,首先分析所述初始主库版本号是否为有效主库版本号,如果否,则执行S25;如果是,则执行S26;
本步骤具体为:
所述主库接收所述上传包,判断初始主库版本号Z1是否存在当前的修改历史表T_-act中,如果不存在,则得出初始主库版本号Z1为无效主库版本号,然后执行S25;相反,则得出初始主库版本号Z1为有效主库版本号,然后执行S26;
也就是说,如果当前的修改历史表T_-act中不存在初始主库版本号Z1,则认为出现系统错误,例如:数据传乱了,或者相关日志已经被过期删除,所以需要主库将当前主库版本号以及数据表T全表打包,全部下发到从库i,使从库i同步到与主库相同的状态。
S25,所述主库将当前主库版本号以及数据表T打包,得到返回包,然后将所述返回包返回给所述从库i;然后执行S27;
S26,所述主库对所述有效操作增量进行进一步分析过滤后,对所述主库进行入库操作,并更新所述修改历史表T_-act,然后,所述主库获得上次与从库i同步结束时间点到当前时刻时间段内所述修改历史表T_i-act所记录的操作增量,通过对该操作增量进行分析,统计得到主库的有效操作增量,针对该有效操作增量读取所述数据表T,获取与该有效操作增量对应的记录内容;然后将有效操作增量、记录内容以及当前主库版本号打包,得到返回包,并将所述返回包返回给所述从库i;然后执行S27;
本步骤具体为:
S261,对于从库i上传的有效操作增量,其由若干条操作记录组成,对于任意一条关于指定记录ID的指定操作记录,首先判断修改历史表T_-act中是否存在关于同一指定记录ID的操作记录,如果不存在,表明该条记录ID为新增加的记录ID,因此,主库对该指定操作记录进行入库操作;反之,则执行S262;
S262,进一步判断修改历史表T_-act中关于同一指定记录ID的操作时间是否晚于从库i上传的操作时间,如果晚,则过滤从库i上传的该条指定操作记录,即忽略该条指定操作记录;反之,如果早,则对该指定操作记录进行入库操作,并更新修改历史表T_-act,即:向该修改历史表T_-act中增加一条操作记录。
例如,如果入库前,主库数据表T为表7状态,如果表5作为从库i上传的有效操作增量,则:主库入库后,主库数据表T由表7状态变为表8状态,需要强调的是,既使主库本次对数据表T进行同步的时间如果为9月5日,但是数据表T中所记录的modtime为从库i上传的上传包携带的操作时间,这样才能保证主库与从库i的同步。
表7
表8
如果入库前,修改历史表T_-act为表9状态,则入库后,T_act表新增1条记录,变为表10状态。
表9
表10
在表10中,对于主库而言,如果是来自某个从库的修改,则需要在修改角色中注明从库的ID。例如,在表10中,用81或82表示不同从库的ID。
S263,所述主库计算得出修改历史表T_-act当前时刻的操作序号的最大值作为新主库版本号Z2,然后统计操作序号大于初始主库版本号Z1且小于等于新主库版本号Z2的若干条操作记录,该若干条操作记录构成主库操作增量;
针对表10,新主库版本号Z2为10005。
主库操作增量统计方法与从库i操作增量统计方法的原理基本相同,在此不再赘述。
S264,对所述主库操作增量进行分析,删除来自从库i的修改所增加的操作记录,同时,还删除针对同一记录ID的非最近发生的操作记录,得到主库的有效操作增量;
主库获得有效操作增量方法与从库i获得有效操作增量方法的原理基本相同,在此不再赘述。
S265,针对该有效操作增量读取所述数据表T,获取与该有效操作增量对应的记录内容;然后将有效操作增量、记录内容以及新主库版本号Z2打包,得到返回包,并将所述返回包返回给所述从库i;然后执行S27;
主库打包获得返回包的方法与从库i打包获得上传包的原理基本相同,在此不再赘述。
S27,所述从库i接收所述返回包,对所述从库i进行入库操作,并更新所述修改历史表T_i-act,至此,完成一个数据同步过程,当下次定时同步时间到达时,循环S23-S27。
从库i入库操作与主库入库操作基本原理相同,具体包括以下步骤:
S271,所述从库i接收所述返回包,对所述从库i进行入库操作,并更新所述修改历史表T_i-act,获得更新后修改历史表T_i-act操作序号最大值作为新从库i版本号M2,同时,所述从库i存储主库下发的新主库版本号Z2;至此,完成一个数据同步过程;
S272,当下次定时同步时间到达时,用新主库版本号Z2替换初始主库版本号Z1,同时,用新从库i版本号M2替换初始从库i版本号M1,循环S23-S27。
需要强调的是,对于主库的修改历史表T_-act,由于主库是面向多个从库的,修改历史表T_-act会被多个从库使用,因此,当主库与从库i进行数据同步时,当进行一次数据同步后,并不删除主库的修改历史表T_-act。而对于从库i,每当进行一次数据同步后,修改历史表T_i-act可以清空也可以不清空。当然,对于主库的修改历史表T_-act,可以采用定时删除旧数据的机制,1月前存储的操作记录可删除。此外,对于主库,还采用了意外处理机制,即:当发生意外事件时,主库采用全表下发策略,从而提高了数据同步的安全性。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
Claims (5)
1.一种数据同步的方法,其特征在于,包括以下步骤:
S1,主库连接有n个从库,n个从库分别命名为:从库1、从库2…从库n;
S2,分别为每一个从库设置定时同步时间,当任意的从库i到达自身配置的定时同步时间时,从库i与主库进行同步操作,使主库与从库i保持一致;其中,i∈(1、2…n);
主库通过与各个从库依次进行同步操作,最终使主库、从库1、从库2…从库n这n+1个数据库均同步。
2.根据权利要求1所述的数据同步的方法,其特征在于,S2中,从库i与主库进行同步操作具体为:从库i的数据表与主库的数据表进行同步操作,并且,需同步的数据表在主库和从库i中具有相同的字段。
3.根据权利要求2所述的数据同步的方法,其特征在于,所述从库i的数据表与主库的数据表进行同步操作具体包括以下步骤:
S21,设从库i中存储数据表T-i,该数据表T-i由若干条记录组成,每一条记录包括:记录ID、记录具体内容以及该条记录的操作时间;其中,记录ID用于唯一标识该条记录,当该条记录发生修改或删除操作时,记录ID仍然保持不变;所述操作时间为:对该条记录进行创建或修改时操作发生的时间点;
设所述主库中存储数据表T,所述数据表T存储记录的格式与数据表T-i存储记录的格式相同;
S22,当需要同步所述数据表T和所述数据表T-i时,在从库i中建立修改历史表T_i-act,所述修改历史表T_i-act用于记录对所述数据表T-i进行的操作信息;同时,在主库中建立修改历史表T_-act,所述修改历史表T_-act用于记录对所述数据表T进行的操作信息;
S23,设置针对从库i的定时同步时间间隔,则当达到本次同步时间时,所述从库i读取所述修改历史表T_i-act,获得上次同步结束时间点到当前时刻时间段内所述修改历史表T_i-act所记录的操作增量,通过对该操作增量进行分析,统计得到从库i的有效操作增量,针对该有效操作增量读取所述数据表T-i,获取与该有效操作增量对应的记录内容;然后将有效操作增量、记录内容以及上次同步时保存的初始主库版本号打包,得到上传包,并将所述上传包上传给所述主库;
S24,所述主库接收所述上传包,首先分析所述初始主库版本号是否为有效主库版本号,如果否,则执行S25;如果是,则执行S26;
S25,所述主库将当前主库版本号以及数据表T打包,得到返回包,然后将所述返回包返回给所述从库i;然后执行S27;
S26,所述主库对所述有效操作增量进行进一步分析过滤后,对所述主库进行入库操作,并更新所述修改历史表T_-act,然后,所述主库获得上次与从库i同步结束时间点到当前时刻时间段内所述修改历史表T_i-act所记录的操作增量,通过对该操作增量进行分析,统计得到主库的有效操作增量,针对该有效操作增量读取所述数据表T,获取与该有效操作增量对应的记录内容;然后将有效操作增量、记录内容以及当前主库版本号打包,得到返回包,并将所述返回包返回给所述从库i;然后执行S27;
S27,所述从库i接收所述返回包,对所述从库i进行入库操作,并更新所述修改历史表T_i-act,至此,完成一个数据同步过程,当下次定时同步时间到达时,循环S23-S27。
4.根据权利要求3所述的数据同步的方法,其特征在于,S22中,所述修改历史表T_i-act由若干条操作记录组成,每一条操作记录用于记录对数据表T-i中某条记录进行的操作信息,即:每当数据表T-i中某条记录被操作时,则在所述修改历史表T_i-act中增加一条对应的操作记录,所述修改历史表T_i-act具体包括以下字段:操作序号autoid-i、记录ID、操作方式-i、修改角色-i和操作时间-i;
其中,所述操作序号autoid-i在该修改历史表T_i-act中具有唯一性和单一性,表示操作序号;每当从库i与主库同步时,均需读取修改历史表T_i-act中操作序号的最大值作为从库i版本号并存储;
所述记录ID即为所述数据表T-i中存储的记录ID,表示被操作记录的记录ID;
所述操作方式-i指对所述数据表T-i中记录进行的新增、修改或删除操作;
所述修改角色-i指本次修改的发起者,包括本地库修改和主库发起的修改;
所述操作时间-i区分以下两种情形:如果为本地库修改,则操作时间-i指对所述数据表T-i中记录进行操作的时间;如果为主库发起的修改,则操作时间-i指主库下发的操作增量中所携带的对该记录的操作时间;
对于修改历史表T_-act,包括以下字段:操作序号autoid、记录ID、操作方式、修改角色和操作时间;
其中,操作序号autoid在该修改历史表T_-act中具有唯一性和单一性,表示操作序号;每当主库与从库i同步时,均需读取修改历史表T_-act中操作序号的最大值作为主库版本号并存储;
所述记录ID即为所述数据表T中存储的记录ID,表示被操作记录的记录ID;
所述操作方式指对所述数据表T中记录进行的新增、修改或删除操作;
所述修改角色指本次修改的发起者,包括本地库修改和从库发起的修改;
所述操作时间区分以下两种情形:如果为本地库修改,则操作时间指对所述数据表T中记录进行操作的时间;如果为从库发起的修改,则操作时间指从库上传的操作增量中所携带的对该记录的操作时间。
5.根据权利要求4所述的数据同步的方法,其特征在于,S23具体为:
S231,当达到本次同步时间时,所述从库i读取已存储的上次同步时获得的初始从库i版本号M1和初始主库版本号Z1;
所述从库i读取当前修改历史表T_i-act中操作序号的最大值M,则:操作序号大于M1且小于等于M的各条T_i-act表中的操作记录集合构成从库的操作增量;
S232,如果从库的操作增量中,存储针对同一记录ID的若干条操作记录,则过滤掉操作时间较早的操作记录,仅保留操作时间最晚的操作记录,由此得到的操作记录集合即为从库的有效操作增量;
S233,以记录ID为关联,读取所述数据表T-i,获取与该有效操作增量对应的记录内容,然后将有效操作增量、记录内容以及初始主库版本号Z1打包,得到上传包,并将所述上传包上传给所述主库;
S24具体为:
所述主库接收所述上传包,判断初始主库版本号Z1是否存在当前的修改历史表T_-act中,如果不存在,则得出初始主库版本号Z1为无效主库版本号,然后执行S25;相反,则得出初始主库版本号Z1为有效主库版本号,然后执行S26;
S26具体为:
S261,对于从库i上传的有效操作增量,其由若干条操作记录组成,对于任意一条关于指定记录ID的指定操作记录,首先判断修改历史表T_-act中是否存在关于同一指定记录ID的操作记录,如果不存在,则对该指定操作记录进行入库操作;反之,则执行S262;
S262,进一步判断修改历史表T_-act中关于同一指定记录ID的操作时间是否晚于从库i上传的操作时间,如果晚,则过滤从库i上传的该条指定操作记录,即忽略该条指定操作记录;反之,如果早,则对该指定操作记录进行入库操作,并更新修改历史表T_-act,即:向该修改历史表T_-act中增加一条操作记录;
S263,所述主库计算得出修改历史表T_-act当前时刻的操作序号的最大值作为新主库版本号Z2,然后统计操作序号大于初始主库版本号Z1且小于等于新主库版本号Z2的若干条操作记录,该若干条操作记录构成主库操作增量;
S264,对所述主库操作增量进行分析,删除来自从库i的修改所增加的操作记录,同时,还删除针对同一记录ID的非最近发生的操作记录,得到主库的有效操作增量;
S265,针对该有效操作增量读取所述数据表T,获取与该有效操作增量对应的记录内容;然后将有效操作增量、记录内容以及新主库版本号Z2打包,得到返回包,并将所述返回包返回给所述从库i;然后执行S27;
S27具体为:
S271,所述从库i接收所述返回包,对所述从库i进行入库操作,并更新所述修改历史表T_i-act,获得更新后修改历史表T_i-act操作序号最大值作为新从库i版本号M2,同时,所述从库i存储主库下发的新主库版本号Z2;至此,完成一个数据同步过程;
S272,当下次定时同步时间到达时,用新主库版本号Z2替换初始主库版本号Z1,同时,用新从库i版本号M2替换初始从库i版本号M1,循环S23-S27。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310663003.9A CN103605809B (zh) | 2013-12-10 | 2013-12-10 | 一种数据同步的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310663003.9A CN103605809B (zh) | 2013-12-10 | 2013-12-10 | 一种数据同步的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103605809A true CN103605809A (zh) | 2014-02-26 |
CN103605809B CN103605809B (zh) | 2016-09-14 |
Family
ID=50124031
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310663003.9A Expired - Fee Related CN103605809B (zh) | 2013-12-10 | 2013-12-10 | 一种数据同步的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103605809B (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103984715A (zh) * | 2014-05-08 | 2014-08-13 | 武汉库百网络技术有限公司 | 一种异构数据库的数据同步、校验方法、装置及系统 |
CN104537018A (zh) * | 2014-12-18 | 2015-04-22 | 深圳市科漫达智能管理科技有限公司 | 一种数据同步的方法、装置及系统 |
CN105592118A (zh) * | 2014-10-23 | 2016-05-18 | 阿里巴巴集团控股有限公司 | 同步用户应用数据的方法、系统及服务端 |
CN105760552A (zh) * | 2016-03-25 | 2016-07-13 | 北京奇虎科技有限公司 | 数据管理方法和装置 |
CN106202436A (zh) * | 2016-07-14 | 2016-12-07 | 上海超橙科技有限公司 | 一种信息更新方法和设备 |
CN106878365A (zh) * | 2016-06-08 | 2017-06-20 | 阿里巴巴集团控股有限公司 | 一种数据同步方法和设备 |
CN106897342A (zh) * | 2016-07-20 | 2017-06-27 | 阿里巴巴集团控股有限公司 | 一种数据校验方法和设备 |
CN107451172A (zh) * | 2016-03-31 | 2017-12-08 | 阿里巴巴集团控股有限公司 | 用于版本管理系统的数据同步方法及设备 |
CN107623707A (zh) * | 2016-07-14 | 2018-01-23 | 阿里巴巴集团控股有限公司 | 一种数据同步的方法和装置 |
CN108259562A (zh) * | 2017-12-11 | 2018-07-06 | 杭州品茗安控信息技术股份有限公司 | 一种基于多端点的数据同步方法及装置 |
CN108920523A (zh) * | 2018-06-04 | 2018-11-30 | 深圳乐信软件技术有限公司 | 区块链上数据查询方法、装置、设备、系统及介质 |
CN109086382A (zh) * | 2018-07-25 | 2018-12-25 | 上海达梦数据库有限公司 | 一种数据同步方法、装置、设备及存储介质 |
CN109614440A (zh) * | 2018-10-25 | 2019-04-12 | 深圳壹账通智能科技有限公司 | 基于大数据的数据同步方法及相关设备 |
CN109660753A (zh) * | 2018-11-05 | 2019-04-19 | 视联动力信息技术股份有限公司 | 资源同步方法和装置 |
CN109711943A (zh) * | 2018-12-28 | 2019-05-03 | 杭州数梦工场科技有限公司 | 订单统计方法、装置及系统 |
CN111339113A (zh) * | 2020-02-28 | 2020-06-26 | 湖南九鼎科技(集团)有限公司 | 基于etl技术的配方直达方法及系统 |
CN111831661A (zh) * | 2020-07-20 | 2020-10-27 | 江苏云柜网络技术有限公司 | 一种基于快递业务逻辑的数据库归档方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060161606A1 (en) * | 2005-01-19 | 2006-07-20 | Biswal Dilip K | Synchronization-replication concurrency using non-shared snapshot query on a history table at read-uncommitted isolation level |
CN101593185A (zh) * | 2008-05-29 | 2009-12-02 | 国际商业机器公司 | 利用同步进行数据恢复的方法和系统 |
CN102184192A (zh) * | 2011-04-19 | 2011-09-14 | 中兴通讯股份有限公司 | 数据定时同步方法及系统 |
-
2013
- 2013-12-10 CN CN201310663003.9A patent/CN103605809B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060161606A1 (en) * | 2005-01-19 | 2006-07-20 | Biswal Dilip K | Synchronization-replication concurrency using non-shared snapshot query on a history table at read-uncommitted isolation level |
CN101593185A (zh) * | 2008-05-29 | 2009-12-02 | 国际商业机器公司 | 利用同步进行数据恢复的方法和系统 |
CN102184192A (zh) * | 2011-04-19 | 2011-09-14 | 中兴通讯股份有限公司 | 数据定时同步方法及系统 |
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103984715B (zh) * | 2014-05-08 | 2017-04-12 | 武汉库百网络技术有限公司 | 一种异构数据库的数据同步、校验方法、装置及系统 |
CN103984715A (zh) * | 2014-05-08 | 2014-08-13 | 武汉库百网络技术有限公司 | 一种异构数据库的数据同步、校验方法、装置及系统 |
CN105592118A (zh) * | 2014-10-23 | 2016-05-18 | 阿里巴巴集团控股有限公司 | 同步用户应用数据的方法、系统及服务端 |
CN105592118B (zh) * | 2014-10-23 | 2018-11-13 | 阿里巴巴集团控股有限公司 | 同步用户应用数据的方法、系统及服务端 |
CN104537018A (zh) * | 2014-12-18 | 2015-04-22 | 深圳市科漫达智能管理科技有限公司 | 一种数据同步的方法、装置及系统 |
CN105760552A (zh) * | 2016-03-25 | 2016-07-13 | 北京奇虎科技有限公司 | 数据管理方法和装置 |
CN107451172A (zh) * | 2016-03-31 | 2017-12-08 | 阿里巴巴集团控股有限公司 | 用于版本管理系统的数据同步方法及设备 |
CN106878365A (zh) * | 2016-06-08 | 2017-06-20 | 阿里巴巴集团控股有限公司 | 一种数据同步方法和设备 |
CN106878365B (zh) * | 2016-06-08 | 2020-01-31 | 阿里巴巴集团控股有限公司 | 一种数据同步方法和设备 |
CN107623707A (zh) * | 2016-07-14 | 2018-01-23 | 阿里巴巴集团控股有限公司 | 一种数据同步的方法和装置 |
CN106202436A (zh) * | 2016-07-14 | 2016-12-07 | 上海超橙科技有限公司 | 一种信息更新方法和设备 |
CN106897342A (zh) * | 2016-07-20 | 2017-06-27 | 阿里巴巴集团控股有限公司 | 一种数据校验方法和设备 |
CN106897342B (zh) * | 2016-07-20 | 2020-10-09 | 阿里巴巴集团控股有限公司 | 一种数据校验方法和设备 |
CN108259562A (zh) * | 2017-12-11 | 2018-07-06 | 杭州品茗安控信息技术股份有限公司 | 一种基于多端点的数据同步方法及装置 |
CN108259562B (zh) * | 2017-12-11 | 2022-02-25 | 杭州品茗安控信息技术股份有限公司 | 一种基于多端点的数据同步方法及装置 |
CN108920523A (zh) * | 2018-06-04 | 2018-11-30 | 深圳乐信软件技术有限公司 | 区块链上数据查询方法、装置、设备、系统及介质 |
CN109086382A (zh) * | 2018-07-25 | 2018-12-25 | 上海达梦数据库有限公司 | 一种数据同步方法、装置、设备及存储介质 |
CN109086382B (zh) * | 2018-07-25 | 2021-10-15 | 上海达梦数据库有限公司 | 一种数据同步方法、装置、设备及存储介质 |
CN109614440A (zh) * | 2018-10-25 | 2019-04-12 | 深圳壹账通智能科技有限公司 | 基于大数据的数据同步方法及相关设备 |
CN109660753A (zh) * | 2018-11-05 | 2019-04-19 | 视联动力信息技术股份有限公司 | 资源同步方法和装置 |
CN109711943A (zh) * | 2018-12-28 | 2019-05-03 | 杭州数梦工场科技有限公司 | 订单统计方法、装置及系统 |
CN111339113A (zh) * | 2020-02-28 | 2020-06-26 | 湖南九鼎科技(集团)有限公司 | 基于etl技术的配方直达方法及系统 |
CN111831661A (zh) * | 2020-07-20 | 2020-10-27 | 江苏云柜网络技术有限公司 | 一种基于快递业务逻辑的数据库归档方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103605809B (zh) | 2016-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103605809A (zh) | 一种数据同步的方法 | |
US7827299B2 (en) | Transitioning between historical and real time data streams in the processing of data change messages | |
US20200201825A1 (en) | Synchronizing configuration of partner objects across distributed storage systems using transformations | |
CN101436207B (zh) | 一种基于日志快照的数据恢复和同步方法 | |
CN102968486B (zh) | 一种基于变化日志的高可靠文件同步方法 | |
CN104933133B (zh) | 分布式文件系统中的元数据快照存储和访问方法 | |
CN103793479A (zh) | 日志管理方法及系统 | |
US20140207741A1 (en) | Data retention component and framework | |
US10191915B2 (en) | Information processing system and data synchronization control scheme thereof | |
CN104133882A (zh) | 一种基于hdfs的小文件处理方法 | |
CN103605585A (zh) | 一种基于数据发现的智能备份方法 | |
CN109831486A (zh) | 多客户端的后台数据服务器系统及数据处理方法 | |
CN106953910A (zh) | 一种Hadoop计算存储分离方法 | |
CN103942259B (zh) | 一种数据库同步中实现数据缓存的方法 | |
EP1286277A2 (en) | Method and system for reconciling changed file trees | |
CN110413571A (zh) | 基于MongoDB大规模遥感影像数据分布式存储方法 | |
CN107357920A (zh) | 一种增量式的多副本数据同步方法及系统 | |
CN107016075A (zh) | 集群数据同步方法及装置 | |
CN113448946B (zh) | 数据迁移方法及装置、电子设备 | |
CN106487937A (zh) | 一种云存储系统文件去重方法及系统 | |
CN103327112A (zh) | 基于云存储的桌面同步方法以及实现桌面同步的装置 | |
CN102594874A (zh) | 一种同步处理方法和装置 | |
CN106294842A (zh) | 一种数据交互方法、平台及分布式文件系统 | |
CN101610225B (zh) | 一种同步处理方法、系统和装置 | |
CN109947592A (zh) | 一种数据同步方法、装置以及相关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: 361008 Fujian Xiamen Software Park 27, 201 Patentee after: Xiamen Cheng Chuang Network Inc Address before: 361008 Fujian Xiamen Software Park 27, 201 Patentee before: XIAMEN CHENGCHUANG NETWORK CO., LTD. |
|
CP01 | Change in the name or title of a patent holder | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160914 Termination date: 20191210 |
|
CF01 | Termination of patent right due to non-payment of annual fee |