一种数据同步方法、系统和设备转让专利

申请号 : CN200710182239.5

文献号 : CN101409614B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王睿李克鹏

申请人 : 华为技术有限公司

摘要 :

本发明实施例公开了一种数据同步方法,包括:通过比较需要进行数据同步双方的数据库中的数据指纹,确定需要同步的数据,然后对所述需要同步的数据进行数据同步。本发明实施例还公开了一种数据同步系统和两种数据同步设备。本发明实施例的技术方案利用数据指纹实现数据同步,避免了需要进行数据同步的双方之间通过传送大量的数据。

权利要求 :

1.一种数据同步方法,其特征在于,该方法包括:

通过比较需要进行数据同步双方的数据库中的数据指纹,确定需要同步的数据;

对所述确定的需要同步的数据进行数据同步;

上述所有步骤之前进一步包括:根据需要进行数据同步的双方所存储或设置的指纹特性信息确定指纹产生方式。

2.如权利要求1所述的方法,其特征在于,该方法在所述确定需要同步的数据之前进一步包括:比较需要进行数据同步的双方的数据库指纹,在所述双方的数据库指纹不一致时,执行所述确定需要同步的数据的步骤。

3.如权利要求2所述的方法,其特征在于,该方法在比较所述双方的数据库指纹之前进一步包括:计算所述双方的数据库指纹;

所述计算数据库指纹包括:对于该数据库中的每个叶子节点,通过对该叶子节点中的内容进行指纹运算而获得该叶子节点的指纹;对于该数据库中的每个中间节点,通过将该中间节点的所有子节点的指纹顺序排列后进行指纹运算而获得该中间节点的指纹;

通过将该数据库根节点的所有子节点的指纹顺序排列后进行指纹运算而获得该数据库的指纹。

4.如权利要求3所述的方法,其特征在于,所述将子节点的指纹顺序排列包括:根据所述各子节点的标识,将子节点顺序排列。

5.如权利要求1至4中任一项所述的方法,其特征在于,所述通过比较需要进行数据同步双方的数据库中的数据指纹,确定需要同步的数据包括:从数据库根节点的指纹开始逐级比较双方数据库中的各个节点的指纹,当一个节点的双方指纹一致且该节点为中间节点时,则不再比较该中间节点的下级节点的指纹。

6.如权利要求5所述的方法,其特征在于,所述从数据库根节点的指 纹开始逐级比较双方数据库中的各个节点的指纹,当一个节点的双方指纹一致且该节点为中间节点时,则不再比较该中间节点的下级节点的指纹具体包括:步骤A,判断所述双方的数据库中的根节点的指纹是否一致,在不一致时执行步骤B;

步骤B,进入未进行指纹比较的任一下一级节点,并比较该下一级节点的指纹是否一致,是则执行步骤E,否则执行步骤C;

步骤C,判断所述下一级节点是否为中间节点,是则执行步骤B;否则执行步骤D;

步骤D,确定所述下一级节点的数据为需要同步的数据,执行步骤E;

步骤E,返回上一级节点,判断该上一级节点是否还有其它未进行指纹比较过的下一级节点,是则执行步骤B,否则执行步骤F;

步骤F,判断所述上一级节点是否为根节点,是则结束,否则执行步骤E。

7.如权利要求1至4中任一项所述的方法,其特征在于,所述通过比较需要进行数据同步双方的数据库中的数据指纹,确定需要同步的数据包括:从数据库根节点的指纹开始逐层比较双方数据库中的每层节点的指纹,当一个节点的双方指纹一致且该节点为中间节点时,则不再比较该节点的下级节点的指纹。

8.如权利要求7所述的方法,其特征在于,所述从数据库根节点的指纹开始逐层比较双方数据库中的每层节点的指纹,当一个节点的双方指纹一致且该节点为中间节点时,则不再比较该节点的下级节点的指纹具体包括:步骤a,判断所述双方的数据库中的根节点的指纹是否一致,在不一致时执行步骤b;

步骤b,进入下一层节点;

步骤c,比较所述下一层节点中的任一未进行指纹比较的节点的双方指 纹,并判断该节点的双方指纹是否一致,是则执行步骤e,否则执行步骤d;

步骤d,记录该节点为需要同步的节点,执行步骤e;

步骤e,判断所述下一层节点中是否还有未进行指纹比较的节点,是则执行步骤c,否则执行步骤f;

步骤f,确定所述记录节点中的叶子节点的数据为需要同步的数据,并判断所记录的节点中是否有中间节点,是则进入所述的任一中间节点的下一层节点,执行步骤c,否则结束。

9.如权利要求1所述的方法,其特征在于,所述的指纹特性信息包括:是否支持指纹的信息,和/或所支持的指纹算法的信息,和/或指纹算法的唯一性信息。

10.如权利要求1或9所述的方法,其特征在于,

所述指纹特性信息的存储方式包括:存储在设备信息中,或存储在管理对象中;

所述指纹特性信息的设置方式包括:修改设备信息中的指纹特性信息,或设置管理对象中的指纹特性信息,或通过发送通知消息或同步会话消息来设置指纹特性信息。

11.如权利要求1至4中任一项所述的方法,其特征在于,

服务器获取客户端所支持的指纹算法集,并判断自身是否支持所述算法集中的至少一种算法,是则确定指纹产生方式为单向或双向,否则确定指纹产生方式为单向;服务器将所确定的指纹产生方式告知客户端。

12.如权利要求11所述的方法,其特征在于,所述服务器获取客户端所支持的指纹算法集,以及所述服务器将所确定的指纹产生方式告知客户端包括:服务器读取客户端的管理对象中保存的客户端所支持的指纹算法集,并将所确定的指纹产生方式写入客户端的管理对象中;或者服务器向客户端发送指示上报设备信息的通知消息,从客户端上报的设备信息中获取客户端所支持的指纹算法集,并将所确定的指纹产生方式通过 通知消息告知客户端。

13.如权利要求1至4中任一项所述的方法,其特征在于,所述确定指纹产生方式包括:当计算数据指纹所使用的算法对于需要进行数据同步的双方所保存的同一数据所分别计算出的指纹一致时,确定指纹产生方式为单向或双向;

当计算数据指纹所使用的算法对于需要进行数据同步的双方所保存的同一数据所分别计算出的指纹不一致时,确定指纹产生方式为单向。

14.如权利要求13所述的方法,其特征在于,所述确定指纹产生方式为单向或双向,是将数据库中所有叶子节点的指纹产生方式确定为单向,将除叶子节点以外的节点的指纹产生方式确定为单向或双向。

15.如权利要求1至4中任一项所述的方法,其特征在于,

所述通过比较需要进行数据同步双方的数据库中的数据指纹,确定需要同步的数据包括:需要进行数据同步的双方中第一方将自身数据库中所有数据的指纹和相应的数据标识发送给第二方;第二方根据所述数据标识比较自身数据库中的数据指纹和所接收的数据指纹,将指纹不一致的数据确定为需要同步的数据;

所述对需要同步的数据进行数据同步包括:第二方将所有需要同步的数据的标识发送给第一方;第一方根据自身数据库的修改日志,将需要同步的数据区分为由第一方的修改导致需要同步的数据和由第二方的修改导致需要同步的数据,并将由第一方的修改导致需要同步的数据和相应的数据标识发送给第二方;第二方根据所接收的数据标识将所接收的由第一方的修改导致需要同步的数据同步到自身数据库中。

16.如权利要求15所述的方法,其特征在于,所述第二方将所有需要同步的数据的标识发送给第一方的同时,进一步将自身数据库中的需要同步的数据发送给第一方;所述第一方在将需要同步的数据区分为由第一方的修改导致需要同步的数据和由第二方的修改导致需要同步的数据后,进一步将由第二方的修改导致需要同步的数据同步到自身数据库中。

17.如权利要求1至4中任一项所述的方法,其特征在于,

所述通过比较需要进行数据同步双方的数据库中的数据指纹,确定需要同步的数据包括:需要进行数据同步的双方中的第一方向第二方发送指示消息,该指示消息指示第二方发送其数据库中的所有数据的指纹或发送其数据库中修改过的数据的指纹;第二方依据指示消息向第一方发送自身数据库中的所有数据的指纹或者修改过的数据的指纹;

第一方将所接收的指纹与自身数据库中的指纹进行比较,并根据冲突检测策略确定自身需要同步的数据;

所述对需要同步的数据进行数据同步包括:第一方将所确定的自身需要进行同步的数据的标识或指纹发送给第二方;第二方根据所接收的数据标识或指纹将自身数据库中的相应数据发送给第一方;第一方将所接收到数据同步到自身数据库中。

18.如权利要求17所述的方法,其特征在于,在所述第一方向第二方发送指示消息之前进一步包括:第一方接收第二方发送的同步协商参数,并根据所述同步协商参数确定第二方是否需要发送指纹,是则进一步并确定指示第二方发送其数据库中的所有数据的指纹或修改过的数据的指纹。

19.如权利要求18所述的方法,其特征在于,

所述同步协商参数包括:指示第二方的数据标识是否有效的参数、指示第二方的修改日志是否有效的参数,以及指示第二方的指纹算法是否唯一的参数;

所述根据同步协商参数确定第二方是否需要发送指纹包括:

如果第二方的数据标识无效,并且指纹算法不唯一,则第二方不需要发送指纹;

所述确定指示第二方发送其数据库中的所有数据的指纹或修改过的数据的指纹包括:在第二方的修改日志有效时,指示第二方发送修改过数据或者是其指纹;如果第二方的修改日志无效,指示第二方发送所有的数据或者是其指纹;

或者,在第二方的数据标识有效时,指示第二方发送数据和相应的数据 标识或者是数据指纹和相应的数据标识;在第二方的数据标识无效时,指示第二方只发送数据或者是其指纹;

或者,在第二方的数据标识无效时,指示第二方发送其所有的数据或是其指纹。

20.一种数据同步系统,其特征在于,该系统包括需要相互进行数据同步的第一设备和第二设备,其中,第一设备,用于将自身数据库中的所有数据指纹和相应的数据标识发送给第二设备;用于在接收到第二设备发送的需要同步的数据的标识后,根据自身数据库的修改日志,将需要同步的数据区分为由第一设备的修改导致需要同步的数据和由第二设备的修改导致需要同步的数据,并将由自身的修改导致需要同步的数据和相应的数据标识发送给第二设备;

第二设备,用于根据所接收的数据标识比较自身数据库中的数据指纹和所接收的数据指纹,将指纹不一致的数据确定为需要同步的数据,并将所有需要同步的数据的标识发送给第一设备;用于根据所接收的数据标识将同时所接收的由第一设备的修改导致需要同步的数据同步到自身数据库中;

所述第一设备和第二设备进一步用于协商指纹产生方式。

21.如权利要求20所述的系统,其特征在于,

所述第二设备,将所有需要同步的数据的标识发送给第一设备的同时,进一步用于将自身数据库中的需要同步的数据发送给第一设备;

所述第一设备,在将需要同步的数据区分为由第一设备的修改导致需要同步的数据和由第二设备的修改导致需要同步的数据后,进一步用于将由第二设备的修改导致需要同步的数据同步到自身数据库中。

22.如权利要求20所述的系统,其特征在于,

所述第二设备,进一步用于将自身的数据库指纹发送给第一设备;

所述第一设备,进一步用于判断自身的数据库指纹是否与第二设备的数据库指纹一致,并在不一致时将自身数据库中的所有数据指纹和相应的数据标识发送给第二设备。

23.一种数据同步设备,其特征在于,该设备包括:确定模块和同步模块,其中,确定模块,用于接收对端设备发送的数据指纹和相应的数据标识,根据所接收的数据标识比较自身数据库中的数据指纹和所接收的数据指纹,将指纹不一致的数据确定为需要同步的数据,将所有需要同步的数据的标识发送给对端设备;

同步模块,用于接收对端设备发送的由对端设备的修改导致的需要同步的数据,并将所接收的数据同步到自身数据库中;

该设备进一步包括协商模块,用于同对端设备进行协商,并确定指纹产生方式。

24.如权利要求23所述的数据同步设备,其特征在于,

所述确定模块,将所有需要同步的数据的标识发送给对端设备的同时,进一步用于将自身数据库中的需要同步的数据发送给对端设备。

25.如权利要求23所述的数据同步设备,其特征在于,该设备进一步包括数据库指纹模块,用于将自身所在数据同步设备的数据库指纹发送给对端设备,以供对端设备判断是否进行数据同步。

说明书 :

一种数据同步方法、系统和设备

技术领域

[0001] 本发明涉及数据通信技术领域,尤指一种数据同步方法、系统和设备。

背景技术

[0002] 现代社会是信息社会,随着信息通信技术的发展,用户可以随时随地进行信息的接收和发送,可以随时随地用一台终端设备执行设备中的应用程序。 而这种数据交互
和执行应用程序的结果需要存储到终端设备中,也需要与其他终端设备中的同一类型的
数据保持一致。 比如,在手机和个人数字助理(PDA,Personal Digital Assistant)中都存
有通讯录,在办公室和家里的PC机或者笔记本也都存有相同的通讯录,人们希望这些终
端设备中的通讯录信息能保持一致,当其中一个设备中保存的数据发生变化时,可以操
作其他设备中的数据做相应的改变,这就是数据同步。
[0003] 通用数据同步协议的目标是普遍适用,即同步两端可以是任一种网络上的任一种类型的网络设备,如掌上电脑、PDA、移动电话、自动计算机和桌面计算机等,同步
操作的数据可以是任一种网络数据。 同步标记语言(SyncML,Synchronization Makeup
Language)协议就是为了实现这个目标而应运而生的一个通用标准。
[0004] SyncML同步协议是一套协议集,主要包括4个部分:SyncML数据同步协议的框架结构、SyncML同步协议、SyncML表示协议和SyncML的传输方式。其中,SyncML
同步协议主要定义数据同步操作会话过程中的数据流程,同步双方的握手过程,数据同
步操作的类型等;SyncML表示协议主要涉及同步过程所支持的数据类型、命令格式以
及能够在各种网络传输的SyncML消息格式;SyncML消息可以在任何一种有线和无线
的网络连接上 传输,在SyncML协议的传输绑定中定义了可以在基于超文本传输协议
(HTTP,Hyper-Text Transfer Protocol)、无线会话协议(WSP,WirelessSession Protocol)
和对象交换协议(OBEX,Object Exchange Protocol)三种协议的网络连接上传输SyncML
包和消息,这三种传输协议基本上含盖了所有的远程和短程连接;图1是现有技术中
SyncML数据同步协议的框架结构图,如图1所示,虚线框内部表示的是SyncML标准讨
论的SyncML框架结构,虚线框外部是数据同步协议,SyncML框架由SyncML数据格
式、SyncML适配器和SyncML功能接口三部分组成。
[0005] 在图1中,应用″A″代表一个网络服务,可以与其他网络设备上一些应用进行数据同步交互,如图1中的应用″B″。 应用″A″和应用″B″之间的数据同步操
作服务可以利用HTTP协议、WSP协议和OBEX协议等公用网络连接。 ″同步引擎″
负责管理整个同步数据的操作。 应用″A″的数据同步操作基于数据同步协议,由″
同步引擎″负责管理整个操作过程。 ″同步服务代理”管理″同步引擎″对网络的访
问,管理客户端和服务器端的应用进行数据同步的相互通信过程。 ″同步服务代理″
通过调用″SyncML接口″或在此接口上的函数完成这些功能。 ″SyncML接口″是面
向″SyncML适配器″的应用程序接口。 ″SyncML适配器″负责消息的收发过程,在
这个过程中收发双方相互通信,收发SyncML格式文档。 ″SyncML适配器″同时负责
创建和维护应用″A″和应用″B″之间的网络连接。 通过调用″SyncML接口″的函
数,应用″B″用一个″同步客户代理″访问网络和它的″SyncML适配器″。
[0006] 由上述描述可见,在SyncML同步协议中,需要进行数据同步的各个SyncML客户端都与同一个SyncML服务器进行数据同步,从而实现各个SyncML客户端之间的数据
同步。
[0007] 图2是现有的SyncML同步协议中服务器和客户端进行数据同步的流程图。 如图2所示,一次SyncML同步过程通常需要六个数据包来完成,该同步过程具体包括以下
步骤:
[0008] 步骤201,客户端向服务器发送同步初始化数据包PKG1。
[0009] 无论同步过程由哪方发起,客户端都会首先向服务器发送同步初始化数据包PKG1,在PKG1中主要包含客户端鉴权信息、设备能力等信息。
[0010] 步骤202,服务器收到PKG1后,验证客户端的鉴权信息,并通过同步初始化响应数据包PKG2将验证结果返回给客户端。
[0011] 步骤203,客户端通过分析PKG2中指定的同步类型,将本地数据库中自上次同步完成之后发生过变更的所有数据,即需要同步的数据封装到PKG3中发送给服务器。
[0012] 发生过变更的数据包括:增加、删除以及更改的数据。 在本地数据库的操作日志中通常通过日志ID来标识出上次同步完成后日志所处的位置,通常采用“Anchor”术
语来表示该位置,这样下次进行同步时需要同步给服务器的数据就是Anchor之后的日志
中所记载的信息,参考日志信息格式如表1所示:
[0013]Anchor LUID 执行的操作
1110 555 增加(Add)
1111 168 更新(Replace)
1112 123 删除(Delete)
1113 556 增加(Add)
[0014] 表1
[0015] 表1中,LUID是本地唯一标识,是终端数据库中某条数据对应的唯一标识。LUID由终端分配。
[0016] 步骤204,服务器收到PKG3后,执行其中的各种操作指令,将数据更新到对应数据库中,并通过PKG4将指令执行状态返回给客户端的同时,服务器也会把本身数据
库中自上次同步完成之后发生过变更的所有数据封装到PKG4中返回给客户端。
[0017] 步骤205,客户端收到PKG4后,执行其中的各种操作指令,将数据更新到本地数据库中,并通过PKG5将指令执行状态返回给服务器。
[0018] 如果客户端收到的PKG4中包含向本地数据库中增加数据条目的add指令,则客户端在成功向本地添加新的数据后,还需要生成相应的ID映射信息通过PKG5通知服务
器。
[0019] 由于服务器的数据库容量很大,因而其中某条数据对应的唯一标识ID和客户端数据库中的同一条数据对应的唯一标识ID是不一样的。为了能够将双方要操作的同一数
据条目对应起来,服务器端还需要维护一个映射表(Server Mapping Table),用于关联客
户端维护的数据库(Client Database)和服务器维护的数据库(Server Database),如表2所
示:
[0020]
[0021] 表2
[0022] 表2中,GUID是全局唯一标识,是服务器数据库中某条数据对应的唯一标识ID,GUID由服务器分配。
[0023] 步骤206,服务器在将PKG5中包含的ID映射信息维护到映射表之后,会返回PKG6告知客户端维护指令的执行状态,客户端收到PKG6后,如果其中状态码全部正
常,则此次同步成功,结束流程。
[0024] 在图2所示的流程中,客户端和服务器通常依靠Anchor和执行的操作 来判定数据是否经过了改变。但Anchor和执行操作的记录根据同步命令或对数据的更改指示完成
后进行更新,如果在操作过程中发生通信中断,如未收到同步响应消息等,则Anchor和
执行操作的记录可能不匹配,从而不同正确确定哪些数据发生了变化。 因此出现了一种
指纹技术,通过数据指纹可以实现对数据条目进行标识,比如,通过对某个数据条目作
摘要,得到数据条目的指纹。指纹可以只由客户端产生,也可以由双方产生。 指纹的用
途是服务器用于来判别从终端收到的数据与自身存储的数据是否相同,进而判断数据是
否发生了变化,因为无论服务器和客户端哪一边修改了数据,指纹都会不一致。
[0025] 指纹运算有单向和双向的区别。 单向指纹运算是指客户端计算并保存指纹的同时发送给服务器,而服务器不进行指纹运算,只保存客户端发送的指纹;双向指纹运算
是指服务器和客户端双方都计算指纹,并保存自身计算的指纹。
[0026] 但现有技术中只提到可以利用数据指纹来判断数据是否发生变化,而没有给出数据同步过程中具体如何利用数据指纹实现数据同步的方案。

发明内容

[0027] 本发明实施例提供了一种数据同步方法,该方法能够利用数据指纹实现数据同步。
[0028] 本发明实施例提供了一种数据同步系统,该系统能够利用数据指纹实现数据同步。
[0029] 本发明实施例提供了两种数据同步设备,这些设备能够利用数据指纹实现数据同步。
[0030] 为达到上述目的,本发明的技术方案具体是这样实现的:
[0031] 本发明实施例公开了一种数据同步方法,该方法包括:
[0032] 通过比较需要进行数据同步双方的数据库中的数据指纹,确定需要同步的数据;
[0033] 对所述确定的需要同步的数据进行数据同步;
[0034] 上述所有步骤之前进一步包括:根据需要进行数据同步的双方所存储或设置的指纹特性信息确定指纹产生方式。
[0035] 本发明实施例公开了一种数据同步系统,该系统包括需要相互进行数据同步的第一设备和第二设备,其中,
[0036] 第一设备,用于将自身数据库中的所有数据指纹和相应的数据标识发送的第二设备;用于在接收到第二设备发送的需要同步的数据的标识后,根据自身数据库的修改
日志,将需要同步的数据区分为由第一设备的修改导致需要同步的数据和由第二设备的
修改导致需要同步的数据,并将由自身的修改导致需要同步的数据和相应的数据标识发
送给第二设备;
[0037] 第二设备,用于根据所接收的数据标识比较自身数据库中的数据指纹和所接收的数据指纹,将指纹不一致的数据确定为需要同步的数据,并将所有需要同步的数据的
标识发送给第一设备;用于根据所接收的数据标识将同时所接收的由第一设备的修改导
致需要同步的数据同步到自身数据库中;
[0038] 所述第一设备和第二设备进一步用于协商指纹产生方式。
[0039] 本发明实施例公开了一种数据同步设备,该设备包括:确定模块和同步模块,其中,
[0040] 确定模块,用于接收对端设备发送的数据指纹和相应的数据标识,根据所接收的数据标识比较自身数据库中的数据指纹和所接收的数据指纹,将指纹不一致的数据确
定为需要同步的数据,将所有需要同步的数据的标识发送给对端设备;
[0041] 同步模块,用于接收对端设备发送的由对端设备的修改导致的需要同步的数据,并将所接收的数据同步到自身数据库中;
[0042] 该设备进一步包括协商模块,用于同对端设备进行协商,并确定指纹产生方式。
[0043] 由上述技术方案可见,本发明实施例通过比较需要进行数据同步双方的数据库中的数据指纹,确定需要同步的数据,然后对所述需要同步的数据进行数据同步。 本发
明实施例的技术方案利用数据指纹实现数据同步,避免了需要进行数据同步的双方之间
通过传送大量的数据。
[0044] 附图说明
[0045] 图1是现有技术中SyncML数据同步协议的框架结构图;
[0046] 图2是现有的SyncML同步协议中服务器和客户端进行数据同步的流程图;
[0047] 图3是本发明实施例一种实现数据同步的方法的流程图;
[0048] 图4是本发明实施例客户端和服务器进行数据同步的流程图;
[0049] 图5是本发明实施例Notification消息的格式示意图;
[0050] 图6是本发明实施例在客户端的DS MO中增加的树结构示意图;
[0051] 图7是本发明一种实现数据同步的方法的第一较佳实施例的流程图;
[0052] 图8是本发明实施例中的数据库结构示意图;
[0053] 图9是本发明实施例确定需要同步的数据的第一方法流程图;
[0054] 图10是本发明实施例确定需要同步的数据的第二方法流程图;
[0055] 图11是本发明一种实现数据同步的方法的第二较佳实施例的流程图;
[0056] 图12是本发明实施例一种数据同步系统的结构框图;
[0057] 图13是本发明一种数据同步设备的第一实施例结构框图;
[0058] 图14是本发明一种数据同步设备的第二实施例结构框图。

具体实施方式

[0059] 图3是本发明实施例一种实现数据同步的方法的流程图。 如图3所示,包括以下步骤:
[0060] 步骤301,通过比较需要进行数据同步双方的数据库中的数据指纹,确定需要同步的数据。
[0061] 步骤302,对所述需要同步的数据进行数据同步。
[0062] 为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举较佳实施例,对本发明进一步详细说明。
[0063] 由于不同的指纹算法对同一个数据会计算出不同的指纹,因此在图3所示的实施例中,需要进行数据同步的双方,如服务器和客户端,利用数据指纹来确定需要进行
同步的数据,因此,服务器和客户端双方数据的指纹必须是使用同一种指纹算法计算而
来的。 如果服务器和客户端使用单向指纹产生方式,即客户端计算数据指纹,服务器只
保存客户端计算的指纹,则双方保存的同一数据的指纹是相同的;如果服务器和客户端
使用双向指纹产生方式,即服务器和客户端分别计算指纹,且保存各自计算的指纹,则
双方需要使用同一种指纹计算方法,才能保证双方保存的同一数据的指纹是相同的。
[0064] 因此,服务器和客户端在执行图3所示的数据同步过程之前需要协商好指纹的产生方式和计算指纹的算法。 在现有技术中需要进行数据同步的双方对单双向指纹产生
方式的选择是通过默认的约定进行的,即约定单向或是双向。 这种约定的方式限制了指
纹运用的灵活性,更主要的,现有技术中没有给出何种情况下使用的何种指纹产生方式
才能正确高效地实现数据同步的方案。
[0065] 接下来给出本发明实施例中,服务器和客户端协商指纹产生方式的几种方式:
[0066] 第一种方式:在服务器上保存一个布尔型的单向标识变量FPMethod,如果FPMethod的值为真(true),则表示使用单向指纹产生方式,即指纹由客户端计算,服
务器保存客户端提供的指纹,服务器中未保存有指纹的数据用空指纹表示该数据;如果
FPMethod的值为假(false),则表示使用双向指纹产生方式,即指纹由客户端和服务器同
时计算,并各自保存自身计算的指纹。 FPMethod的缺省值可以为false。 当服务器与终
端协商后的指纹计 算方法不在服务器的指纹计算方法集中,则将FPMethod设置为true。
[0067] 第二种方式:服务器和客户端中的一方接收另一方发送的同步数据和该同步数据的指纹,并保存所接收的同步数据,计算所保存数据的指纹,如果计算所得的指纹与
所接收的指纹不同,则要求服务器将FPMethod设置为true。该验证工作更好的可以在服
务器侧完成,即服务器接收客户端发送的同步数据和指纹,保存所接收的数据后计算其
指纹,将计算所得的指纹与所接收指纹进行比较。
[0068] 第三种方式:根据使用的具体指纹算法类型来确定指纹产生方式。 例如,Change Log算法是在同步后内容发生改变则将指纹设置为1,再次同步后置为0,因此
服务器和客户端采用该算法对同一数据计算出的指纹不会产生偏差,因此在使用Change
Log算法计算指纹的情况下可以采用双向指纹产生方式;而Hash算法在同一数据的保
存格式不同时所计算出的指纹也会不同,由于客户端和服务器保存数据的方式可能不一
致,所以在使用Hash算法计算指纹的情况下采用单向指纹产生方式。
[0069] 第四种方式:对于需要进行同步的数据库中的所有叶子节点的指纹,即数据的指纹一律采用单向产生的方式;对于中间节点,即目录和文件夹可以采用单向或双向计
算的方式,至于使用单向还是双向方式,可以根据上述方式中所示的方法来确定,此时
FPMethod的含义为目录和文件夹是否采用单向产生指纹的方式。
[0070] 在上述服务器和客户端协商指纹产生方式的四种方式中,服务器和客户端需要进行通信以了解对方是否支持指纹特性以及对方支持哪种指纹算法等信息,例如服务器
要通知终端协商后的单双向标识,或通知终端其支持的指纹算法集等。 本发明实施例中
给出三种服务器和客户端进行协商的通信方式:Notification通知法、DS MO设置法和
Device Info指示法。 下面分别介绍。
[0071] 方式一、消息通知法
[0072] 图4是本发明实施例客户端和服务器进行数据同步的流程图。 如图4所 示,在PKG1之前,服务器可以在PKG0中下发其是否支持指纹特性,以及其所支持的指纹算法
集,客户端将这两个参数保存在与该服务器ID相关的条目中。 PKG0为Notification通
知消息。 服务器仅当上述指纹特性以及其所支持的指纹算法集等参数发生变化时再次通
过通知(Notification)消息通知客户端。 图5是本发明实施例Notification消息的格式示意
图,如图5所示,Notification消息体(Notification-body)中的“Actionl”字段又包括四个
字段,分别为:“Action-type”字段、“Action-specific”字段、“URI-length”字段和
“URI”字段。 在本发明实施例中将上述四个字段分别定义为“0101”、“Specific”、
“Algorithm-length”和“Algorithm”,其中:
[0073] <0101>;‘用于标识该Actionl字段是指示指纹特性的’
[0074] ::=//;‘用于标识服务器的指纹支持信息’
[0075] 如::=‘00’; ‘表示服务器不支持指纹’
[0076] ::=‘10’ ; ‘表示客户端单向产生指纹’
[0077] ::=‘11’ ‘表示客户端和服务器双方产生指纹’
[0078] ::=1*CHAR;‘用于标识服务器的指纹算法信息长度’
[0079] ::=*4*BIT;‘用于标识服务器的指纹信息’
[0080] 在上述参数中,Algorithm中每种指纹算法用4bit表示,每个值表示一种算法类型。Algorithm中的值为服务器所支持的每种算法所对应的4bit数级联而得,级联后字符
串的长度由Algorithm-length设定。
[0081] 方式二、数据同步管理对象设置法
[0082] 服务器通过数据同步(DS,Date Synchronization)管理对象(MO,ManagementObject)把自身关于指纹的信息下发给客户端,后续通过设备管理(DM,Device
Management)的方式对客户端的DS MO其进行读写、修改。客户端也可以把自身关于指
纹的信息保存在DS MO中。
[0083] 图6是本发明实施例在客户端的DS MO中增加的树结构示意图,如图6所示,在FPSupport中记录是否支持DS的指纹特性,Algorithm中记录所使用的指纹算法。 下
面是对图6所示的MO节点的描述:
[0084]
[0085]Status Occurrence Format Access
REQUIRED One Node Get
[0086] 这是一个内部节点,记录DS客户端或服务器与指纹相关的信息。上述表格中描述的是关于节点的信息,其中:该节点的状态(Status)是“REQUIRED”,表示该
节点是必须的;该节点的出现次数(Occurrence)是“One”,表示该节点在图6所示的树
结构中只出现一次;该节点的格式(Format)是“Node”,表示该节点是中间节点;该节
点内容的接入方式(Access)是“Get”,表示该节点的内容是可获取的,即可读的。
[0087] /
[0088]Status Occurrence Format Access
REQUIRED ZeroOrOne Node Get
[0089] 这是一个内部节点,记录DS客户端所支持的指纹算法。如果这个节点不存在,即表明DS客户端不支持指纹。与该节点对应的表格中该节点的出现次数(Occurrence)是
“ZeroOrOne”,表示该节点在图6所示的树结构中出现零次或一次。
[0090] //
[0091]Status Occurrence Format Access
REQUIRED ZeroOrMore Node Get
[0092] 这是一个占位符节点,用于包含一个或多个叶子节点,记录DS客户端所支持的指纹算法。 如果这个节点不存在,即表明DS客户端不支持指纹。 与该节点对应的表格
中该节点的出现次数(Occurrence)是“ZeroOrMore”,表示该节点在图6所示的树结构
中出现零次或多次。
[0093] ///
[0094]Status Occurrence Format Access
REQUIRED One Chr Get
[0095] 这是一个叶子节点,记录DS客户端所支持的指纹算法。 如果这个节点不存在,即表明DS客户端不支持指纹。 与该节点对应的表格中该节点的格式(Format)是
“Chr”,表示该节点是叶子节点且为字符串类型。
[0096] 该节点可能的值及其解释如表3所示:
[0097]




1





表 改
0 修 纹
,纹指其为作变改否是值 纹指其为作数次的变 纹指其为作值hsaH将 被段字些哪示指以可息信 纹指其为作值要摘将,要 指其为作值的CRC将,C 纹指其为作戳间时的改其将 改将 ,hs 纹指 摘5 RC 更后
,目 ,目 aH ,目 DM 作目 最目
条 条 作 条 作 条 条
据 据 目 据 目 据 据
)noitanalp 数个一对, 数个一对, 条据数对, 数对,法算 条据数对, 数对,法算 数对将,法 用备
xE(释 法算记 法算数 法算hsa 定特段 法算要 余冗环 算戳间 后以作
解 标 计 H 字 摘 循 时 留
c
)eulaV( galFdegnah tnuoCdegnah hsa fiicepsmetI-bu 5D CR pmatsemi devrese
值 C C H S M C T R
[0098] 表3
[0099] /
[0100]Status Occurrence Format Access
REQUIRED ZeroOrMore Chr Get
[0101] 占位符节点,用于指示对于客户端或服务器的不同的数据库的指纹特性。
[0102] //
[0103]Status Occurrence Format Access
REQUIRED One Node Get
[0104] 用于指示该指纹特性是与哪个数据库相关。 该节点下存储客户端和服务器对应的数据库的标识信息。
[0105] ///
[0106]Status Occurrence Format Access
REQUIRED One Chr Get
[0107] 用于指示客户端数据库的标识。
[0108] ///
[0109]Status Occurrence Format Access
REQUIRED One Chr Get
[0110] 用于指示服务器端数据库的标识。 客户端数据库与服务器数据库必须是成对的,互相对应的。
[0111] //
[0112]Status Occurrence Format Access
REQUIRED One Bool Get
[0113] 用于指示DS客户端或服务器的某个数据库是否支持指纹特性。与该节点对应的表格中该节点的格式(Fomat)是“Bool”,表示该节点是叶子节点,且是布尔类型的。
[0114] 其值含义如表4所示:
[0115]Value Description
True 支持指纹特性
False 不支持指纹特性
[0116] 表4
[0117] //
[0118]Status Occurrence Format Access
REQUIRED ZeroOrOne Bool Get
[0119] 定义DS客户端或服务器的某个数据库的指纹产生方式。其值含义如表5所示:
[0120]Value Description
True 客户端单向产生指纹
False 客户端与服务器双向产生指纹
[0121] 表5
[0122] //
[0123]Status Occurrence Format Access
REQUIRED ZeroOrOne Chr Get
[0124] 这是叶子节点,记录DS客户端或服务器某个数据库所采用的指纹算法。其值为客户端所支持的算法中的一个。
[0125] //
[0126]Status Occurrence Format Access
REQUIRED ZeroOrOne Bool Get
[0127] 这是叶子节点,指示对于某个数据库,指纹算法算出来的指纹是否唯一。
[0128] 其值的含义如表6所示:
[0129]Value Description
True 唯一
False 不唯一
[0130] 表6
[0131] 如果数据库中所有的数据条目的指纹都不一样,则指纹算法唯一,如果有两个或多个不同的数据条目,对应相同的指纹,则指纹算法不唯一。
[0132] 从图6可以看出,/分支为关于客户端的指纹特性信息。服务器从客户端的MO中读取图6所示树型数据结构中关于客户端的指纹特性信息,即读
/分支所保存的信息,根据所读取的信息确定服务器和客户端中的
需要同步的数据库的指纹特性信息,如采用单向指纹产生方式还双向指纹产生方式,采
用哪种指纹计算方法等,并将确定的信息保存到客户端MO中的如图6所示树型结构中
/x分支的相应位置中,以达到协商指纹产生方式,指纹计算方法,并且服务
器将协商结果通知客户端的目的。
[0133] 方式三、Device Info指示法
[0134] 客户端和服务器也可将需要进行同步的数据库的指纹信息保存在设备信息(Device Info)中,通过读取Device Info中的信息完成协商过程。 下面是Device Info中的
元素的数据模型(Schema):
[0135]
[0136] 这个元素用于表示是否支持指纹。其值,可以是True或False,True表示支持,False表示不支持。
[0137] 在服务器和终端上都保存一个标识单向指纹产生方式的布尔型变量FPMethod,如果该变量的值为true,则表示指纹由客户端计算,服务器保存客户端提供的指纹,服务
器中未保存有指纹的数据用空指纹表示该数据;如果该变量的值为false,则表示指纹由
客户端和服务器同时计算,并保存各自计算的指纹。 FPMethod的缺省值可以为false。
该FPMethod值保存在与设备相关的Device Info中,Schema可以类似于:
[0138]
[0139] 其值,可以是True或False,True表示单向指纹产生方式,False表示双向指纹产生方式。
[0140] 指纹产生算法的Schema可以是:
[0141]
[0142] 这个元素用于表明指纹算法,其值的含义可以同表3中所描述。
[0143]
[0144] 这个元素用于表明指纹算法是否唯一。
[0145] 服务器和客户端通过上述Device Info进行指纹产生方式以及指纹计算方法等的协商可以是:首先,客户端在自身的Device Info中保存自身的指纹特性信息,如是否支
持指纹以及所支持的指纹算法集等信息;服务器向客户端下发Notification通知消息,以
通知客户端上报Device Info中的关于指纹特性的信息;客户端接收到Notification通知消
息后将自身Device Info中的关于指纹特性的信息上报给服务器;服务器根据客户端的上
报信息以及自身的指纹特征信息,确定指纹产生方式以及指纹计算方法等,例如,服务
器从上报信息中查看自己是否支持客户端所支持的指纹算法集中的一种,是则选择服务
器和客户端都支持的一种指纹计算方法,并确定指纹产生方式为单向或双向,否则确定
指纹产生方式为单向;服务器将所确定的结果通过Notification通知消息发送给客户端;
客户端根据Notification通知消息获知协商结果,如果Notification通知消息中指示为单向
产生指纹,则客户端从自身所支持的指纹算法集中选择一种指纹计算方法即可。
[0146] 可选择地,服务器在确定自身不支持客户端所支持的指纹算法集中的任一种,从而确定指纹产生方式为单向时,从客户端所支持的指纹算法集中指定一种算法,并通
过Notification通知消息通知客户端。
[0147] 上述实施例中给出了Notification通知法、DS MO设置法和Device Info指示法三种服务器和客户端进行协商的通信方式。 通过上述三种方式中任一种,服务器和客户端
可以协商好数据同步过程中所涉及的指纹产生方式和指纹计算方法等。 接下来给出本发
明中实现数据同步的一个具体实施例。
[0148] 图7是本发明一种实现数据同步的方法的第一较佳实施例的流程图。 如图7所示,包括以下步骤:
[0149] 步骤701,客户端发送PKG1到服务器,该PKG1中还包括客户端的数 据库指纹Container。
[0150] 如果服务器和客户端没有预先协商好指纹产生方法,则本步骤中的PKG1中还可以包含客户端所使用的指纹计算方法。 如果服务器没有记录终端是否支持指纹特性,
则PKG1中还可以包含一个布尔型的参数FPSupport,指示客户端是否支持指纹特性。
[0151] PKG1的一个消息实例为:
[0152]
[0153] ……
[0154] true <!-客户端支持指纹-->
[0155] 142a7ed3 <!-客户端数据库的指纹-->
[0156] MD5 <!-客户端使用的指纹算法为MD5-->
[0157]
[0158] 步骤702,服务器收PKG1后,检验收到的Container和保存的自身数据库的指纹Container是否一致,如果一致则表示数据没有发生变化,无需进行同步,结束流程;否
则向客户端下发PKG2,PKG2中包含服务器数据库中所有数据条目的指纹和标识(ID)。
[0159] 如果服务器和客户端没有预先协商好指纹产生方法,且步骤701中的PKG1中包含客户端所使用的指纹计算方法,则本步骤中,服务器验证自身是否支持PKG1中提供
的指纹计算方法,如果不支持则将布尔型参数FPMethod的值设为true,表示指纹产生方
式为单向,并将FPMethod通过PKG2下发给客户端。
[0160] PKG2的一个消息实例为:
[0161] true <!-服务器不支持指纹,采用客户端单向指纹-->
[0162]
[0163] ……
[0164] 400 <!-双方的数据库指纹Container不一致-->
[0165]
[0166]
[0167]
[0168] 112a34dta
[0169]
[0170]
[0171] 235ba147f
[0172]
[0173] ……
[0174]
[0175] 步骤703,客户端收到PKG2后,根据数据条目的ID一一比较下发的数据条目指纹和本身数据库中对应的数据条目的指纹,根据指纹间的差异确定需要同步的数据条
目,向服务器发送PKG3,PKG3中包含需同步的数据条目的ID。
[0176] 如果需要向服务器进行同步,则本步骤中的PKG3还可包含与需要同步的数据条目ID对应的数据条目内容,如果是单向指纹产生方式,则还需要在PKG3中携带所述
需要同步的数据条目的指纹。
[0177] PKG3的一个消息实例为:
[0178]
[0179]
[0180] LUID004 <!-需要同步的数据条目的ID-->
[0181] …
[0182]
[0183] ……
[0184]
[0185] 步骤704,服务器收到PKG3后,检查自身数据库中的修改日志(ChangeLog),确定需要进行同步的数据条目中哪些是由于服务器数据库中的数据发生改变而导致需要
同步的,以及哪些由于客户端数据库中的数据发生改变而导致需要同步的,并在PKG4
中向客户端下发由于服务器数据库中的数据发生改变而导致需要同步的数据条目ID和对
应的数据条目内容。
[0186] 如果需要向服务器进行同步,则步骤703中的PKG3中包含与需要同步的数据条目ID对应的数据条目内容,则本步骤中,服务器还需根据PKG3中的与数据条目ID对应
的数据条目内容,将由于客户端数据库中的数据发 生改变而导致需要同步的数据,同步
到自身数据库中。 如果是单向指纹产生方式,PKG3中携带了所述需要同步的数据条目
的指纹,则本步骤中,服务器在同步完自身数据库中的数据的同时保存PKG3中带来的
与所同步的数据对应的指纹。
[0187] 如果所采用的指纹算法可以用于判别数据的完整性,比如Hash算法,则在PKG4中还可以包括与数据条目内容对应的指纹,以便接收方能够根据指纹验证所接收数
据的完整性。
[0188] PKG4的一个消息实例为:
[0189]
[0190]
[0191]
[0192] 1
[0193] <!--data ofthe item-->
[0194] 9d8723e5
[0195]
[0196] ……
[0197]
[0198]
[0199] 步骤705,客户端在接收到PKG4后,根据PKG4中的内容同步自身数据库中的相应数据,并为这些新同步的数据计算指纹并保存,同时向服务器发送确认消息PKG5。
[0200] 如果采用单向指纹产生方式,则PKG5中还需要包括客户端对新同步的数据所计算的指纹和相应的数据条目ID。
[0201] 如果终端在PKG3中客户端没有向服务器发送同步数据条目的内容和指纹,则可以在本步骤的PKG5中发送需要向服务器进行同步的数据条目内容和指纹。
[0202] 步骤706,服务器收到PKG5后,向客户端返回PKG6,以表示此次同步会话结束。
[0203] 如果PKG5中包括了更新数据条目的内容和指纹,则服务器通过PKG6向客户端确认收到PKG5,返回同步结果。
[0204] 到此结束了图7所示的同步流程。
[0205] 在图7所示的上述流程中,由于客户端先把自身数据库的指纹Container发送给服务器,由服务器通过比较双方的Container来判断是否需要进行同步,在不需要进行同
步时直接结束流程的方案,节省了不必要的数据发送流程,提高了效率。 并且在如图7
所示的同步流程中,服务器和客户端可以互换角色,即步骤701中可以是服务器向客户
端发送PKG1,之后客户端向服务器发送PKG2,以此类推。
[0206] 在图7所示流程中的步骤703中,客户端需要根据数据条目的ID一一比较服务器数据库中的所有数据条目指纹和自身数据库中对应的数据条目的指纹,来确定需要进
行同步的数据条目。这里数据条目的指纹是指数据库中叶子节点的指纹。 如果数据库中
叶子节点较多,则步骤703中一一比较叶子节点指纹的方法比较消耗时间,因此接下来
结合图8和图9给出本发明实施例提供的比较服务器数据库和客户端数据库中节点的指纹
确定同步数据的方法。
[0207] 图8是本发明实施例中的数据库结构示意图。 如图8所示,数据库中的每个节点都有自己的ID(在图8中用UID表示)和指纹,例如,节点MP3的UID=02,指纹
为FP02,根节点的指纹FP00即是数据库的指纹Container。 每个中间节点的指纹由其下
面的子节点的指纹计算获得,如中间节点Contacts的指纹FP01是通过对其子节点的指纹
FP05、FP06和FP07进行指纹计算得到的;而叶子节点的指纹由叶子节点中的数据条目
内容计算而得。
[0208] 图9是本发明实施例确定需要同步的数据的第一方法流程图。 如图9所示包括以下步骤:
[0209] 步骤901,获取服务器和客户端双方的数据库指纹,即获取双方数据库的根节点的指纹。
[0210] 步骤902,根据双方的数据库指纹判断是否要进行数据同步,是则执行步骤903,否则,结束流程。
[0211] 本步骤中,如果服务器和客户端双方的数据库指纹一致则不需要进行数 据同步,否则需要进行数据同步。
[0212] 步骤903,进入未进行指纹比较的任一下一级节点。
[0213] 步骤904,获取该节点的双方指纹。
[0214] 步骤905,根据所获取的指纹,判断该节点是否需要同步,是则执行步骤906,否则执行步骤908。
[0215] 本步骤中,如果关于该节点的服务器和客户端双方的指纹一致则该节点不需要进行数据同步,否则需要进行数据同步。
[0216] 步骤906,判断该节点是否为中间节点,是则执行步骤903,否则执行步骤907。
[0217] 步骤907,记录该节点需要同步。
[0218] 步骤908,返回上一级节点。
[0219] 步骤909,判断所返回的上一级节点,是否还有其它未进行指纹比较过的下一级节点,是则执行步骤903,否则执行步骤910。
[0220] 步骤910,判断所述返回的上一级节点是否为根节点,是则结束流程,否则执行步骤908。
[0221] 在图9所述的流程中,最先判定根节点的指纹,即判断服务器和客户端数据库指纹是否一致,如果根节点的指纹一致,则无需进行同步;如果不一致,则进入一个下
级节点,并获取该下级节点的指纹,比对客户端和服务器数据库中与该节点对应的的指
纹,判定该节点是否需要同步,如果需要同步,则将该节点的UID记录下来,然后判
断该节点是否为中间节点,即是否为目录或文件夹,如果是中间节点,则进入该中间节
点,重复上面的操作。 完成该节点的判定后,再检查该节点的上级节点是否还有其它下
级节点,执行相同的操作直至完成对整个数据库的判定。 最后获得的UID记录表即是这
个数据库中需要同步的节点。 与图7所示的同步流程对应,服务器在接收的PKG1后执
行步骤901和步骤902中的过程,而客户端在接收到PKG2后执行步骤903至步骤910的
过程,并在PKG3中将所记录的需要同步的数据条目ID,即需要同步的叶子节点ID发送
给服务器。
[0222] 图9所示的方法,与一一比较服务器数据库中的所有数据条目指纹和客户端数据库中对应的数据条目的指纹,来确定需要进行同步的数据条目方式相比,可以减少比
对的次数。 例如,当一个中间节点下没有更改的节点时,则检查完这一中间节点的指纹
一致后即可替代对其下所有节点的检查,即无需再对该中间节点下的众多叶子节点进行
比较。
[0223] 接下来给出本发明实施例中的又一种数据指纹比较方式,该方式对数据库中的节点指纹逐层进行比较,确定需要同步的数据。这里,层和级是不同的两个定义。 一个
节点是其父节点的下级,是其子节点的上级,这是两个节点间的关系。 所有以根节点为
父节点的节点为1层节点,所有以任一n层节点为父节点的节点为n+1层节点,这是数据
库内的一种关系。
[0224] 图10是本发明实施例确定需要同步的数据的第二方法流程图。 如图10所示包括以下步骤:
[0225] 步骤1001,获取服务器和客户端双方的数据库指纹,即双方数据库的根节点的指纹。
[0226] 步骤1002,根据双方的数据库指纹判断是否要进行数据同步,是则执行步骤1003,否则,结束流程。
[0227] 本步骤中,如果服务器和客户端双方的数据库指纹一致则不需要进行数据同步,否则需要进行数据同步。
[0228] 步骤1003,进入下一层节点。
[0229] 步骤1004,获取该层节点中的任一未进行指纹比较的节点的双方指纹。
[0230] 步骤1005,根据所获取的双方指纹,判断该下层节点是否需要同步,是则执行步骤1006,否则执行步骤1007。
[0231] 步骤1006,记录该下层节点需要同步,即记录该节点的ID,并执行步骤1007。
[0232] 步骤1007,判断该层节点中是否还有未进行指纹比较的节点,是则执行步骤1004,否则执行步骤1008。
[0233] 步骤1008,通知对方需要同步的节点。
[0234] 步骤1009,对已获知的需要同步的节点进行同步操作。
[0235] 步骤1010,上述执行同步操作的节点中是否有中间节点,是则返回步骤1003,进入该中间节点的下一层节点;否则结束流程。
[0236] 如果将图10所示的方法应用于图7所示的同步流程,则在服务器在PKG2中下发的数据条目为数据库第一层节点的数据条目ID和指纹;客户端比对第一层节点,记录
不同指纹的节点ID,并在PKG3中上报需同步的节点的ID,如果这些节点中存在中间节
点,则同时上报这些中间节点的所有下级节点(二层节点)的ID和指纹;服务器继续比
对这些二层节点,然后在PKG4中将需要进行同步的二层节点的ID下发给客户端,如果
这些二层节点中存在中间节点,则同时在PKG4中下发这些中间节点的所有下级节点(三
层节点)的ID和指纹,以此类推,直至完成数据库中的所有节点的指纹比较操作。 数据
同步操作,可以在服务器和客户端完成数据库的全部节点的指纹比较操作后,根据最终
得到的需要同步的数据条目ID列表,即叶子节点ID列表一次性执行;可选择地,也可以
在服务器和客户端在确定每一层的需要同步的叶子节点后,便对这些叶子节点执行数据
同步过程。
[0237] 在图9和图10所示的实施例中,指纹比较操作都是从根节点开始的,当指纹比较操作从某一中间节点开始,则在图9所示的流程中以该中间节点为根节点判定该子树
上需要同步的节点;在图10所示的逐层比较节点指纹的方法中以该中间节点作为根节点
分层进行比较操作。
[0238] 在图7所示的实施例中首先通过比较服务器和客户端双方的数据库指纹Container来判断是否进行数据同步。在现有技术中,Container是由数据库中所有叶子节
点的指纹按照ID排列顺序再次进行指纹运算获得的。现有技术的这种方法在叶子节点个
数较多,运算费时费力。因此在本发明实施例中给出计算数据库指纹Container的方法。
[0239] 在本发明实施例中,通过为中间节点设置指纹来实现Container的计算,具体为:每个叶子节点的指纹为正常的指纹运算结果,即对该叶子节点中的内容进行指纹运
算而得,每个中间节点的指纹通过将其所有子节点的指纹按 照ID排列顺序再次进行指纹
运算获得,Container等于数据库根节点的指纹值,即对根节点下的所有子节点的指纹按
照ID排列顺序再次进行指纹运算获得。
[0240] 需要注意的是:在目前的具有代表性的四种算法中,Changed Flag是记录该节点是否有更改,Changed Count是记录该节点更改的次数,将这两种算法应用于中间节
点的指纹计算之上,并不会由于子节点的排列顺序导致计算结果不同;而Hash算法以
及Sub-Item specific算法计算结果与子节点指纹的排列顺序相关,所以利用这两种算法计
算父节点的指纹时,必须先约定子节点的排列顺序,比如,一种约定的排序方法可以是
按照UID的顺序排列,客户端和服务器都会记录节点的UID值,可按照值的大小进行排
序,如果服务器中有一个节点没有UID值,则可以将该节点置于所有节点之后或之前。
[0241] 接下来给出本发明一种实现数据同步的方法的又一实施例,如图11中所示。该实施例的前提条件是:客户端与服务器已协商好指纹产生方式,以及指纹算法。
[0242] 图11是本发明一种实现数据同步的方法的第二较佳实施例的流程图。 如图11所示,包括以下步骤:
[0243] 步骤1101,客户端向服务器发送初始化包PKG1,PKG1中包括认证信息、客户端的设备能力信息以及同步协商参数。
[0244] 通过客户端的设备能力信息的上报,客户端会告诉服务器自身的数据库是否支持指纹、指纹是单向产生还是双向产生以及所使用的指纹产生算法等。
[0245] 同步协商参数的上报是为了便于双方协商同步机制。 同步协商参数包括:同步方向、同步行为、ID有效性和Change Log有效性等,其中:
[0246] 同步方向包括:从客户端单向、从服务器单向、双向以及无方向。
[0247] 同步行为包括:刷新和保存。 刷新是指用一方的数据覆盖另一方的数据,从而使双方的数据保持一致,后者数据库中的修改不作保留。 而保存是指, 一方保存另一方
发送上来的数据,但自身数据的修改仍然保留。 例如,同步之前,客户端增加了数据条
目A,服务器增加了数据条目B,如果客户端发起单向刷新同步,则服务器上增加的数据
条目B会被删掉,而如果客户端发起单向保存同步,则服务器上增加的数据条目B不会
被删掉。
[0248] ID有效性是指数据库中数据条目的标识信息是否有效。 由于软件升级、误操作等,数据库中数据条目的标识信息可能会丢失或错乱。
[0249] Change Log有效性是指数据库的修改日志是否有效。 在有些情况下,修改日志会丢失或无效,这样的话,就无法知道从上次同步后,哪些数据被修改了。
[0250] 可选地,客户端还发送待同步内部节点的指纹信息,如数据库或文件夹的指纹信息,这一指纹信息用于服务器判断客户端的待同步节点与服务器的待同步节点的数据
是否一致,如果一致,两者不需要同步,服务器可以拒绝同步会话,如果不一致,则两
者继续同步会话。 如果客户端明确知道双方的数据不一致,则不需要发送此指纹信息,
比如,客户端的Change Log有效且显示有数据被修改,则双方的数据不会保持一致,此
时,客户端不需要发送此指纹信息。
[0251] 举一个消息实例:
[0252]
[0253]
[0254] ……
[0255]
[0256] 上述消息表示:客户端指示同步方向为双向,同步行为为保存,ID有效,Change Log有效。
[0257] 步骤1102,服务器根据预定义的规则进行判断,判断客户端发送的同步参数是否合适,并向客户端发送初始化包PKG2,在PKG2中返回同意或修改的同步参数,并指
示客户端是否发送指纹,以及发送哪些指纹。
[0258] 预定义的同步参数协商的规则包括:
[0259] 1).如果客户端支持指纹,客户端应该发送指纹;如果客户端不支持指纹,客户端不能发送指纹。
[0260] 2).如果客户端的ID无效,并且指纹算法不唯一,客户端不应该发送指纹。
[0261] 因为在指纹算法不唯一的情况下,可能有多个不同的数据条目对应相同的指纹,如果ID又无效,客户端将无法通过指纹与数据条目相关联,这时,发送指纹就没有
太大的意义。
[0262] 3).如果修改日志有效,客户端发送修改的数据条目或者是其指纹。如果修改日志无效,客户端发送所有的数据条目或者是其指纹。
[0263] 4).如果ID有效,指纹与ID配对使用,如果ID无效,则只发送指纹。
[0264] 5).如果ID无效,修改日志的有效性将没有意义,客户端应该发送所有的数据条目或是其指纹,而不是发送修改的数据的指纹。
[0265] 因为此时,即使修改日志有效,由于ID错乱,客户端也无法正确地识别哪些数据条目被更改了,只能发送所有的数据条目或是其指纹。
[0266] 6).服务器端的修改日志有效性对客户端的修改日志有效性没有影响,但服务器端的ID有效性对客户端的ID有效性有影响。
[0267] 因为服务器端维护LUID(Local Unique Identifier,客户端上数据条目的标识)与GUID(Glaobal Unique Identifier,服务器上数据条目的标识)的映射表,如果服务器端侧
的映射表无效,即使客户端发送LUID,服务器侧也无法进行正确的匹配、识别。
[0268] 运用上述规则时,需要考虑组合的情况,比如,规则1与规则4的组合、规则3和规则4的组合等。 例如,规则3和规则4组合时,具体为:在修改日志有效,且ID
有效时,指示客户端发送修改过数据条目和相应的ID或者是其指纹和相应的ID;修改日
志有效,ID无效时,指示客户端发送所有的数据条目或者是其指纹;修改日志无效,ID
有效时,指示客户端发送所有的数据条目和相应ID或者是所有数据条目的指纹和相应的
ID;修改日志无效,且ID无效时,指示客户端发送所有的数据条目或者是其指纹。
[0269] 同步参数确定后,服务器可指示客户端是否发送指纹,以及发送哪些数据的指纹,比如:发送所有数据条目的指纹或是修改的数据条目的指纹。
[0270] 消息实例:
[0271]
[0272] SyncAlert
[0273] 200<!-Status code for OK-->
[0274] ……
[0275]
[0276] 上述消息表示:服务器同意客户端发送的同步参数。
[0277] 步骤1103,根据服务器的指示,客户端发送包含相应的数据指纹的PKG3。
[0278] 如果客户端发送修改数据的指纹,则需要根据Change Log来确定哪些数据条目被修改了,发送这部分数据条目的指纹信息。
[0279] 在部分同步中,客户端同样可以从Change Log中找出属于指定目录的数据条目,并发送这部分数据中的修改数据的指纹。 比如,Change Log中有3个修改了的元
素:LUID001、LUID003、LUID005,但只有LUID005属于待同步目录,则客户端只发
送LUID005的指纹。
[0280] 指纹信息一般是与ID配对发送,如果ID无效,也可以单独发送指纹。
[0281] 消息实例为:
[0282]
[0283]
[0284] LUID0042c8a357e
[0285]
[0286] ……
[0287]
[0288] 值得说明的是,PKG1与PKG3可以合并,PKG2与PKG4也可以合并,即,客户端也可以在PKG1中发送指纹。
[0289] 步骤1104,服务器比较接收到的指纹,在PKG4中指示客户端需要发送的数据条目的标识或指纹。
[0290] 本步骤中,服务器根据存储或计算的指纹与客户端发送的指纹进行比较,如果指纹相同,则表明双方的数据条目一样,客户端不需要发送数据条目,即数据条目内容
相同。 如果指纹不一样,服务器可以根据冲突检测策略确定客户端是否需要发送数据条
目,如果冲突检测策略是服务器端赢,则将以服务器的修改为准,客户端没有必要发送
数据条目,否则客户端需要发送数据条目。 比较完后,服务器将客户端需要发送的数据
条目的标识或指纹通过PKG4返回给客户端。 本步骤中,指纹的作用与数据标识相同,
即服务器通过在PKG4中发送指纹来告知客户端发送哪些数据条目。
[0291] 消息实例为:
[0292]
[0293]
[0294] LUID004
[0295] …
[0296]
[0297] ……
[0298]
[0299] 步骤1105,客户端在PKG5中向服务器发送所指示的数据条目。
[0300] 本步骤中,客户端根据PKG4中的数据标识或指纹确定相应的数据,并将确定的数据通过PKG5发送给服务器。
[0301] 值得注意的是,如果是单向产生指纹,在PKG5中发送完整数据的同时,也要发送相应的指纹。
[0302] 步骤1106,服务器通过PKG6向服务器返回接收状态信息。
[0303] 可选地,服务器可以在PKG6中将服务器端的修改数据发送给客户端,以供客户端进行同步。
[0304] 步骤1107,客户端通过PKG7返回接收数据的状态,发送映射命令给服务器。
[0305] 步骤1108,服务器端通过PKG8向客户端返回对映射命令的状态信息。
[0306] 在上述流程中,可选择在PKG1之前,服务器下发Notification通知消 息给客户端,指示同步方向及同步行为,客户端根据Notification中的指示信息发起同步会话。
[0307] 可选择地,在PKG1中,客户端发送同步锚信息,服务器根据同步锚信息判断上次会话的成功或失败的情况及会话中断的情况。
[0308] 基于上述实施例,接下来给出本发明实施中的数据同步的系统和设备的组成结构。
[0309] 图12是本发明实施例一种数据同步系统的结构框图。 如图12所示,该系统包括需要相互进行数据同步的第一设备和第二设备,其中:
[0310] 第一设备,用于将自身数据库中的所有数据指纹和相应的数据标识发送给第二设备;用于在接收到第二设备发送的需要同步的数据的标识后,根据自身数据库的修改
日志,将需要同步的数据区分为由第一设备的修改导致需要同步的数据和由第二设备的
修改导致需要同步的数据,并将由自身的修改导致需要同步的数据和相应的数据标识发
送给第二设备;
[0311] 第二设备,用于根据所接收的数据标识比较自身数据库中的数据指纹和所接收的数据指纹,将指纹不一致的数据确定为需要同步的数据,并将所有需要同步的数据的
标识发送给第一设备;用于根据所接收的数据标识将同时所接收的由第一设备的修改导
致需要同步的数据同步到自身数据库中。
[0312] 在图12所示的系统中,如果第一设备和第二设备需要进行双向同步,则:第二设备,将所有需要同步的数据的标识发送给第一设备的同时,进一步用于将自身数据库
中的需要同步的数据发送给第一设备;第一设备,在将需要同步的数据区分为由第一设
备的修改导致需要同步的数据和由第二设备的修改导致需要同步的数据后,进一步用于
将由第二设备的修改导致需要同步的数据同步到自身数据库中。
[0313] 在图12所示的系统中,为了减少不必要的数据传输过程,两个设备可以先比较双方的数据库指纹是否一致,如果一致则不必进行数据同步。 因此第二设备,可以进一
步用于将自身的数据库指纹发送给第一设备;第一设备,进一步用于判断自身的数据库
指纹是否与第二设备的数据库指纹一致,并在 不一致时将自身数据库中的所有数据指纹
和相应的数据标识发送给第二设备。
[0314] 在图12所示的系统中,第一设备可以为客户端,第二设备可以是服务器;或者,第一设备是服务器,第二设备是客户端。
[0315] 图13是本发明一种数据同步设备的第一实施例结构框图。 如图13所示,该设备主要包括:确定模块1301和同步模块1302,其中,
[0316] 确定模块1301,用于接收对端设备发送的数据指纹和相应的数据标识,根据所接收的数据标识比较自身数据库中的数据指纹和所接收的数据指纹,将指纹不一致的数
据确定为需要同步的数据,将所有需要同步的数据的标识发送给对端设备。
[0317] 同步模块1302,用于接收对端设备发送的由对端设备的修改导致的需要同步的数据,并将所接收的数据同步到自身数据库中。
[0318] 这里,对端设备是指与图13所示的数据同步设备进行数据同步的设备。
[0319] 在图13中,确定模块1301,将所有需要同步的数据的标识发送给对端设备的同时,进一步用于将自身数据库中的需要同步到对端的数据发送给对端设备。
[0320] 图13所示的数据同步设备还可以进一步包括数据库指纹模块1303,用于将自身所在数据同步设备的数据库指纹发送给对端设备,以供对端设备判断是否进行数据同
步。
[0321] 图13所示的数据同步设备还可以进一步包括协商模块1304,用于同对端设备进行协商,并确定指纹产生方式。
[0322] 图13所示的设备可以是客户端,也可以是服务器。
[0323] 图14是本发明一种数据同步设备的第二实施例结构框图。 如图1 4所示,该设备主要包括:发送模块1401和区分模块1402,其中,
[0324] 发送模块1401,用于将自身所在数据同步设备的数据库中的所有数据指纹和相应的数据标识发送给对端设备。
[0325] 区分模块1402,用于接收对端设备发送的需要同步的数据的标识,并根 据自身所在设备的数据库的修改日志,将需要同步的数据区分为由自身所在设备的修改导致需
要同步的数据和由对端设备的修改导致需要同步的数据,并将由自身所在设备的修改导
致需要同步的数据和相应的数据标识发送给对端设备。
[0326] 在图14中,区分模块1402,还可以进一步用于接收对端设备发送的需要同步的数据,并在将需要同步的数据区分为由自身所在设备的修改导致需要同步的数据和由对
端设备的修改导致需要同步的数据后,进一步用于将由第二设备的修改导致需要同步的
数据同步到自身数据库中。
[0327] 图14所示的数据同步设备还可以进一步包括数据库指纹模块1403,用于接收对端设备发送的数据库指纹,根据所接收的数据库指纹和自身所在设备的数据库指纹,判
断是否进行数据同步。
[0328] 图14所示的设备可以是客户端,也可以是服务器。
[0329] 综上所述,本发明实施例中通过比较需要进行数据同步双方的数据库中的数据指纹,确定需要同步的数据,然后对所述需要同步的数据进行数据同步。 该技术方案利
用数据指纹实现数据同步,避免了需要进行数据同步的双方之间通过传送大量的数据来
确定需要同步的数据的过程。 此外,本发明实施例中该给出了需要进行数据同步的双
方如何协商指纹产生方式的多种方法,以及如何比较双方数据库中的数据指纹的具体方
法。
[0330] 以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均应包含在本发明
的保护范围之内。