背景技术
对于复杂和大型的***,往往需要在不同的***之间进行数据同步,常见的同步方法是构造基于某种***的存储***集群,使用其底层同步机制进行数据同步,例如构造MySQL数据库集群,使用MySQL的同步机制进行数据同步;或者使用Linux文件存储数据,底层使用rsync等同步机制进行同步。
以MySQL为例,如果要实现数据同步,则需要按照如下方式操作:
1)搭建MySQL集群,包含一个主MySQL和若干个备MySQL
2)主MySQL和备MySQL都开启MySQL复制功能
3)用户在主MySQL上执行增删改操作
4)主MySQL生成同步日志binlog,将binlog发送给备MySQL
5)备MySQL解析和执行binlog,修改备MySQL上的数据
虽然上述同步方式使用方便,方案成熟,但也存在如下问题:
1)限制两个或者多个同步***必须采用完全相同的技术,无法做到在不同的存储***间进行数据同步,限制了数据同步的应用场景;例如:当线上业务数据存储在Oracle数据库,而统计***使用的是Infobright数据库时,则无法将Oracle的数据通过Oracle或者Infobright的底层同步机制同步到Infobright。
2)即使两个或者多个同步***采用了完全相同的技术,一旦发生数据丢失,数据恢复异常麻烦。要想恢复数据,首先需要对比两个***的数据,分析底层的数据同步日志,然后找出有问题的数据,最后重新在业务层修改数据,触发底层的同步机制进行同步。
3)即使两个或者多个同步***采用了完全相同的技术,很多时候都要求这些同步***都处于相同的机房网络里面,一旦跨越公网,由于网络不稳定,或者涉及安全问题,这些同步***的底层同步机制将无法正常运作,或者运维人员将不允许此类***直接通过公网同步。
因此,需要一种新的解决上述问题的技术方案。
发明内容
鉴于上述问题,本发明的目的是提供一种数据同步方法及装置,以解决异构***间不能方便的同步数据的问题,以及解决同构***间数据同步存在的限制的问题。
本发明提供的数据同步方法,用于同步数据接收端和数据提供端的数据;该方法包括数据预处理阶段和数据同步阶段,其中,
在数据预处理阶段:
根据数据操作类型分别对数据提供端和数据接收端的数据进行相应地标识;
在数据同步阶段:
数据接收端向同步端发出同步数据的请求,该请求指定数据类型和规定时间段;
数据提供端根据数据接收端发出同步数据的请求向数据接收端发送符合条件的数据;
其中,符合条件的数据为数据提供端标识过的数据,并且,符合条件的数据为上述请求指定的数据类型的并在规定时间段内的数据;
数据接收端根据接收到的符合条件的数据对本地数据进行同步,本地数据为数据接收端标识过的数据;其中,
数据接收端通过数据提供端的同步接口进行数据同步。
另一方面,本发明还提供一种数据同步装置,用于同步数据接收端和数据提供端的数据,该装置包括:
数据标识单元,用于根据数据操作类型分别对数据提供端和数据接收端的数据进行相应地标识;
数据接收端数据请求单元,用于向同步端发出同步数据的请求;其中,
数据接收端数据请求单元包括定义规则模块,用于指定数据类型和规定时间段;
数据提供端数据发送单元,用于向数据接收端发送数据标识单元对数据提供端标识过的,且定义规则模块指定的数据类型的并在规定时间段内的数据;
数据接收端数据接收单元,用于接收数据提供端数据发送单元发送的数据;
数据接收端数据同步单元,用于根据数据接收端数据接收单元接收到的数据对本地数据进行同步,本地数据为数据标识单元对数据接收端标识过的数据;
同步接口设置单元,用于在数据提供端设置同步接口,根据数据提供端设置的同步接口对所述数据接收端进行数据同步。
用上述根据本发明提供的数据同步方法及装置,能够取得以下有益效果:
1)两个或者多个同步***不采用完全相同的技术也能够同步数据。
2)两个或者多个同步***可以跨公网同步数据。
3)当数据接收端发现数据不同步后,重新发起同步请求,在同步请求中指定数据的起始和结束时间,重新对数据进行同步。
为了实现上述以及相关目的,本发明的一个或多个方面包括后面将详细说明并在权利要求中特别指出的特征。下面的说明以及附图详细说明了本发明的某些示例性方面。然而,这些方面指示的仅仅是可使用本发明的原理的各种方式中的一些方式。此外,本发明旨在包括所有这些方面以及它们的等同物。
具体实施方式
在下面的描述中,出于说明的目的,为了提供对一个或多个实施例的全面理解,阐述了许多具体细节。然而,很明显,也可以在没有这些具体细节的情况下实现这些实施例。在其它例子中,为了便于描述一个或多个实施例,公知的结构和设备以方框图的形式示出。
以下将结合附图对本发明的具体实施例进行详细描述。
图1示出了根据本发明的数据同步方法的流程。
如图1所示,一种数据同步方法,用于同步数据接收端和数据提供端的数据;
首先,根据数据操作类型分别对数据提供端和数据接收端的数据进行相应地标识(步骤S110);然后,数据接收端向同步端发出同步数据的请求,该请求指定数据类型和规定时间段(步骤S120);然后,数据提供端根据数据接收端发出同步数据的请求向数据接收端发送符合条件的数据,其中,符合条件的数据为数据提供端标识过的数据,并且,符合条件的数据为上述请求指定的数据类型的并在规定时间段内的数据(步骤S130);最后,数据接收端根据接收到的符合条件的数据对本地数据进行同步;其中,数据接收端通过数据提供端的同步接口进行数据同步(步骤S140)。
下面将从三个方面对上述的方法进行详细的说明。
一、数据设计方面
数据的设计是本发明的基础,本发明将从三个角度来设计数据,分别为数据类型、数据对象和数据信息。
1)数据类型:用于标识某一类数据,这些数据具有共同的“数据信息”。例如:“学生信息”是一类数据,“手机”也是一类数据。
需要说明的是,***根据需要,创建不同类型的数据,也就是说,数据被创建时已经分好类。例如说一个学校用的***,可以有“学生”、“老师”、“课程”、“院系”等类型的数据。
2)数据对象:某种“数据类型”下的某个具体数据。例如:“小明”是一个学生,“iphone5S”是一台手机。
3)数据信息:某种“数据类型”具备的三个关键信息和其它信息。
其它信息,例如“学生信息”包括“学号、姓名、性别、年龄、班级”。
三个关键信息包括id、时间戳(timestamp)和deleted,其中,
id:用于标识一个“数据对象”,在相同“数据类型”的所有数据对象中,id是唯一的,同一个***中不存在多个相同id的数据;但一条数据可能在不同的***中,因此,在不同的***中可能存在相同id的数据。
timestamp:用于标识数据的变更时间,任何时候更新(包括创建、修改、删除)数据,都必须更新timestamp信息。
需要说明的是,一条数据对应一个timestamp。
deleted:用于标识数据是否被删除,一旦数据被删除,则数据将失效,deleted为false表示“未删除”,为true表示“删除”,这种删除方式为逻辑删除。
通过这样的数据设计,可以解决同步过程中的几个关键问题:
1)两个同步***中的数据如何一一对应。
通过“数据类型+数据id”来标识一条具体的数据,即使是不同的***,也能够通过id来进行对应
2)同步哪些数据。
通过timestamp可以得知哪些数据发生了变化,只同步发生了变化的数据即可保证多个***间的数据一致性。
3)删除的数据如何同步。
普通的数据存储***采用物理删除的方式,当数据被删除后,底层同步机制发送同样一条删除指令给其它***,其它***执行删除操作。这种方式无法在不同的***间进行数据删除,且数据删除后,无法知道这条数据是被删除了还是根本就没有存在过。而通过逻辑删除的方式,可以随时将数据的删除状态同步给其它***。
上述设计的数据包括数据提供端和数据接收端的数据,而分别对数据提供端和数据接收端的数据进行相应的地标识就是分别对数据提供端和数据接收端的数据进行id、deleted和timestamp标识。
二、数据存储方面
数据存储包含3个操作:创建数据操作、修改数据操作、删除数据操作,具体操作如下:
创建数据操作:当创建一条数据的时候,***为这条数据分配一个相同“数据类型”下的唯一id,同时设置timestamp为创建时的时间,设置deleted为false;
修改数据操作:修改数据的时候id不能修改,修改timestamp为修改数据时的时间,deleted不变;对于deleted为true的数据,则不允许再修改;
删除数据操作:删除数据的时候采用逻辑删除,即不从物理上将数据删除,而是直接将数据的deleted修改为true,对于已经删除的数据,可以多次删除,同时将timestamp修改为删除时的时间。
上述的数据设计方面和数据存储方面是为数据的预处理阶段,为数据的同步工作做准备,也就是为接下来的将要说明的数据同步方面做准备。
三、数据同步方面
数据同步涉及多个***,为描述方便,以下将提供数据的***称为发布***,也就是数据的数据提供端,将需要同步数据的***称为订阅***,也就是数据的数据接收端。下面对多个同步***的数据同步阶段做详细的说明,数据的预处理阶段已在上述的数据设计方面和数据存储方面进行说明,故不再复述。
图2示出了根据本发明实施例的数据同步方法的流程。
如图2所示,本发明实施例的数据同步方法的流程包括:
步骤210:订阅***向发布***发起数据同步请求。
请求中需要指定:数据类型、数据信息、规定时间段(起始时间和结束时间)。
例如:数据类型为“学生”,数据信息为“学号、姓名、性别”起始时间为“2013-10-0100:00:00”,结束时间为“2013-10-0200:00:00”,即表明订阅***需要同步从start到end这个时间段里面所有发生变更的“学生”类数据,但只需要其中的“学号、姓名、性别”信息。
规定时间段为可以由“订阅***”设置,也可以通过程序设置(比如说代码中指定),手工设置也可以(比如说通过配置文件)。
步骤S220:发布***收到订阅***的同步请求后,根据数据类型、起始时间和结束时间查询本地数据中符合条件的数据。即:发布***本地数据中timestamp处于起始时间和结束时间之内的订阅***指定的数据类型的数据。
步骤S230:发布***返回符合条件的数据,返回的数据包含的数据信息有:id,timestamp,deleted,其它信息(学号、姓名、性别)。
步骤S240:订阅***收到发布***返回的符合条件的数据后,更新本地的数据。
订阅***更新本地数据的方法如下:
1)如果订阅***收到的数据deleted为false,则判断本地数据中是否存在与返回的数据中id相同的数据;如果存在,则更新订阅***中的相同id的数据;如果不存在,则将返回数据加入到订阅***的本地数据中。
2)如果订阅***收到的数据deleted为true,则判断本地数据中是否存在与返回的数据中id相同的数据;如果存在,则删除数据(逻辑删除和物理删除均可);如果不存在,则忽略返回的数据,继续进行同步数据的操作。
需要说明的是,发布***通过同步接口对订阅***提供数据同步服务,订阅***通过访问发布***的同步接口获取数据,进行数据同步。
具体地,发布***通过公网域名或公网ip对订阅***提供同步接口;订阅***通过公网域名或公网ip访问发布***提供的同步接口进行数据同步。
与上述方法相对性,本发明还提供一种数据同步装置。
图3示出了根据本发明的数据同步装置,如图3所示,本发明提供的数据同步装置300用于同步数据接收端和数据提供端的数据;该装置包括数据标识单元310、数据接收端数据请求单元320、数据提供端数据发送单元330、数据接收端数据接收单元340、数据接收端数据同步单元350、同步接口设置单元(图未示出)。
其中,数据标识单元310,用于根据数据操作类型分别对所述数据提供端和所述数据接收端的数据进行相应地标识;数据接收端数据请求单元320,用于向所述同步端发出同步数据的请求;其中,所述数据接收端数据请求单元包括定义规则模块(图未示出),用于指定数据类型和规定时间段;数据提供端数据发送单元330,用于向所述数据接收端发送所述数据标识单元对所述数据提供端标识过的,且所述定义规则模块指定的数据类型的并在规定时间段内的数据;数据接收端数据接收单元340,用于接收所述数据提供端数据发送单元发送的数据;数据接收端数据同步单元350,用于根据所述数据接收端数据接收单元接收到的数据对本地数据进行同步,所述本地数据为所述数据标识单元对所述数据接收端标识过的数据;同步接口设置单元360,用于在数据提供端设置同步接口,根据数据提供端设置的同步接口对所述数据接收端进行数据同步。
其中,数据标识单元包括操作定义模块(图未示出),用于定义创建数据操作、修改数据操作和删除数据操作;其中,操作定义模块包括数据构建模块(图未示出),用于根据指定的数据类型,采用操作定义模块定义的创建数据操作构建数据;id分配模块(图未示出),用于对数据创建模块创建出的数据分配id;时间标识模块(图未示出),用于根据操作定义模块定义的修改数据操作标识数据的修改时间;状态标识模块(图未示出),用于根据数据操作定义模块定义的删除数据操作将标识数据的状态标识为删除或未删除。
其中,数据提供端数据发送单元向数据接收端发送数据标识单元310对数据提供端标识过的,且定义规则模块指定数据类型的并在规定时间段内的数据带有分配的id、数据的状态和数据的修改时间。
其中,数据接收端数据同步单元包括数据更新模块(图未示出),用于在数据接收端数据接收单元接收到的数据的状态为未删除时,且数据接收端的本地数据中存在与接收到的数据提供端数据发送单元发送的数据中id相同的数据时,更新接收到的id相同的数据;数据新增模块(图未示出),用于在数据接收端数据接收单元接收到的数据的状态为未删除时,且数据接收端的本地数据中不存在与接收到的数据中id相同的数据时,将接收到的id不相同的数据加入本地数据中;数据删除模块(图未示出),用于在数据接收端数据接收单元接收到的数据的状态为删除时,且数据接收端的本地数据中存在与接收到的数据中id相同的数据时,删除id相同的数据;
其中,同步接口设置单元包括同步接口服务模块(图未示出),用于通过公网域名或公网ip对数据接收端提供同步接口;同步接口访问模块(图未示出),用于通过公网域名或公网ip访问数据提供端提供的同步接口进行数据同步。
如上参照附图以示例的方式描述了根据本发明的数据同步方法及装置。但是,本领域技术人员应当理解,对于上述本发明所提出的数据同步方法及装置,还可以在不脱离本发明内容的基础上对其中的实现细节做出各种改进。因此,本发明的保护范围应当由所附的权利要求书的内容确定。