多移动终端笔记数据的同步方案设计
   来源:智能计算机与应用     2018年09月10日 01:14

2.4 数据通信中的同步方法-多数据中心的数据同步模型研究与设计

王广鹏 周庆华 朱科风 王乐 林思宇

文章编号: 2095-2163(2018)03-0076-04中图分类号: 文献标志码: A

摘要: 关键词: (School of Physical & Electronic Science, Changsha University of Science & Technology, Changsha 410114, China)

Abstract: This article focuses on the synchronization of note data in the personal cloud note App. To solve several problems including notes data synchronization strategy and synchronization conflict of multiple Android terminals, the paper uses optimistic replication, vector clock and other technology,and according to the characteristics of note data which is rich-media note containing text and several attachments, proposes a suitable data model. After that, the paper uses differential transmission scheme, further designs a viable synchronization program.

Key words:

基金项目:

作者简介:

收稿日期: 引言

随着移动互联网的迅速发展,智能手机和平板电脑等智能终端的普及,移动信息应用技术已经影响了人们生活的方方面面。就制作笔记而言,电子笔记已经完全超越了传统的笔记,电子笔记使用方便,容量大,功能丰富。现在,很多人都拥有不止一台智能设备,因此笔记数据在各个设备上实现同步就尤为重要。云笔记是一类基于Android平台的个人云笔记应用,就可用户创建各类富媒体笔记,并且支持多终端同时在线、笔记数据的同步等功能。

本文在乐观复制等同步技术的基础上,将笔记分为附件和笔记内容,分别使用各自的数据传输方案,选取矢量时钟判断笔记的新旧程度,设计提出了一套同步策略,为Android移动端数据同步提供了新思路。

1总体设计

云笔记应用是一种个人云同步系统,重点基于云计算和云存储,以个人为中心进行不同设备之间的笔记数据共享。分析可知,该应用的性能特点可表述如下:

(1)移动环境下的分布式数据系统。

(2)节点有主、副本之分,服务端为主节点,移动端为副本节点,数据同步均通过主节点来掌控操作。

(3)副本节点之间没有连接,主、副本节点之间为移动网络下的弱连接,没有高速稳定连接。

(4)主、副本节点之间没有严格的时钟同步关系。

(5)主、副本节点间采用差量传输(只复制更新的部分)。

综上分析可知,云笔记的同步适合使用C/S结构的乐观复制技术路线。乐观复制只能保证最终一致性,即不需要各个节点的数据时刻保持一致,系统中的各个节点的数据随时都可以进行读写操作,如果从某个时间点起,各个节点都不再涉及写操作,一定时间后,系统中的各个节点将完全同步。系统的星型拓扑结构则如图1所示。

C/S结构的乐观复制是一种对称副本乐观复制,所有副本节点没有主、次之分。在云同步系统中,各个移动端的节点即为对称的副本节点,服务端的节点为主节点,主节点的数据是最终版本。每当有新的副本节点加入(即用户在一个新设备上使用云笔记应用),都会先从主节点将笔记数据同步到该副本节点。各个副本节点提交的同步请求如果没有冲突,就会在主节点进行更新并且同步到所有副本节点;如果有冲突,针对不同的冲突采用不同的冲突解决策略消除冲突(下文将详细说明),再进行更新同步。

2关键模块设计

2.1数据模型

在云笔记系统中要同步的数据有2种。一种是用户的个人资料,包括用户名、密码、邮箱、地址等等,另一种是笔记。前者是结构化的数据,可以直接表示为数据表中的一行记录;而后者是文件型数据,包含文本内容和附件(图片、音频文件等),笔记的内容保存为文件,但笔记的基本信息和同步所需的相关信息则可以记录在数据库中,笔记“新”的程度可用矢量时钟(vector clock)来刻画。矢量时钟实际上是一个{节点,计数器}对列表、即{node,counter}对列表。节点-计数器对指明了在哪一节点更新、以及更新的次数。例如,当某个笔记的矢量时钟表示为[(A,2),(B,3),(C,0)],其含义是:在A节点有过2次更新,B节点有3次更新,在C节点暂无更新。矢量时钟与每个对象的历次版本相关联,通过查证其矢量时钟,可以判断一个对象(即笔记)的2个版本的新、旧关系。假设在A设备上某个笔记数据的矢量时钟表示为[(A,2),(B,3),(C,0)],这说明系统中有3个节点、即有3台移动设备。在A设备进行了2次修改并且同步成功,在B设备进行了3次修改并且同步成功,C设备节点没有修改;假设在服务端该笔记的矢量时钟为[(A,2),(B,4),(C,1)],后者每个节点的counter数都大于或等于前者,这就表征着后者的笔记数据要更“新”。此时若A设备进行同步,將会用服务端的笔记数据覆盖掉A设备上的内容;如果服务端的矢量时钟为[(A,1),(B,4),(C,0)],此时将无法比较2个笔记数据的新旧关系,如果进行同步就会发生冲突,就需要引入冲突协调。为了解决上述问题,移动端数据表设计可见表1。

6isDeleteBoolean是否已删除7isNewBoolean是否为新建笔记由表1可知,笔记数据表的各个字段的详细说明如下:

(1)_id:笔记的唯一标识。由用户名+设备唯一标识码+笔记创建时间组成。

(2)name:用户设置的笔记名。不同的笔记可以重名。

(3)isSync:标识笔记是否同步。当用户新建一个笔记,或者修改、删除一个笔记,但是尚未同步,将此字段置为false,同步成功后则置为true。

(4)createTime:笔记创建的时间。

(5)changeTime:笔记最后修改(不一定已同步)的时间。

(6)isDelete:笔记删除标志。当删除一个已经同步成功的笔记,将此字段置为true;如果删除一个未同步的笔记,将直接删除该条记录。

(7)isNew:笔记新建标志。在移动端新建一个笔记并且未同步至服务端,将此字段置为true。

还需指出,服务端的note数据表和移动端的基本相同,只是没有isSync和isNew字段。

2.2冲突协调

多个移动端笔记的同步过程有时会有冲突,必须进行冲突协调,具体情况可剖析分述如下:

(1)在一个移动端修改了某个笔记,但是该笔记已经在另一个移动端经过修改并且成功同步到了服务端,此时同步就会产生冲突,进一步推得3种方案可供用户自行选择,相应的方案内容可阐释如下:

① 放弃此次修改并将服务端的最新版本的笔记同步到本地。

② 仍然坚持此次修改,并且将修改的笔记覆盖掉服务端的笔记。

③ 将此次修改的笔记保存为一个新的笔记并同步到服务端。

(2)在一个移动端修改了某个笔记,但是该笔记已经在另一个移动端被删除并且成功同步到了服务端,此时同步也会产生冲突。解决方案为:保存此次修改的笔记到服务端。

(3)在一个移动端删除了某个笔记,但是该笔记已经在另一个移动端被修改并且成功同步到了服务端,此时同步也会产生冲突。解决方案为:放弃此次删除,并且将服务端该笔记的最新版本同步至本地。

2.3数据传输

在云笔记同步系统中需要同步的對象是笔记数据。一个笔记实例即如图2所示。

由图2可以看出,笔记的内容为文本和附件的组合。为了节省同步时间和流量,可以采用差量传输的方式进行同步以便减少重复数据的传输。本文采取一种设计处理方法,详情展开如下:

笔记的内容分开存储,分为文本内容和附件,为每一个笔记配置一个清单文件保存笔记内容的顺序。比如图2所示的笔记可以分为4块,分别是:文本1、附件1、附件2、文本2。每个笔记中的附件都配备唯一的附件名,该附件名采用此附件在系统中的文件名+时间戳(添加此附件后笔记首次保存的时间)以保证唯一性。同步时,对于文本内容较小的笔记数据并不提送检测,而是直接用新的文本内容覆盖旧的;对于附件较大的这类数据通过对比附件名找出不重合的进行传输,以达到减少传输数据的目的。

3同步过程

对于某一个账号,每当有一个新终端加入并进行同步时,通过比对服务端与终端的笔记数据的_id,找出服务端有而终端没有的笔记,将其同步至本地,找出终端存在而服务端没有的笔记同步至服务端;通过对比服务端与移动终端的矢量时钟,找出需要更新的笔记,利用前文提及的方法更新至本地,并进行相应的冲突协调。整个同步过程内容可见如下:

步骤1查询移动端的note数据表,首先将isNew字段为true,isSync字段为false的笔记上传至服务端。原因在于这些笔记都是在移动端新建的、并且尚未同步到服务端,因而就涉及到了上传笔记信息和完备笔记内容,同步成功后,更新移动端的相应笔记的矢量时钟,将isSync置为true。

步骤2将移动端note数据表中isNew字段为false,isSync字段为false的笔记的矢量时钟发送至服务端,对比服务端对应笔记信息的矢量时钟。经过对比如果发现服务端的比移动端的新,说明该笔记没有在其它移动端修改并同步到服务端,可用移动端的笔记覆盖服务端的笔记。同步成功后,更新服务端note表中相应笔记的矢量时钟,将changeTime修改为移动端的changeTime,更新移动端note表中相应笔记的矢量时钟,将isSync置为true。如果对比后无法判定新旧关系,说明在移动端修改的笔记的版本并不是最新的版本,修改后的版本与服务端的最新版本有冲突,此时将按照上文提到的冲突解决方案进行冲突协调。

步骤3将移动端note数据表中isDelete字段为true,isSync字段为false的笔记的矢量时钟上传至服务端对比,如果没有冲突则将该笔记在服务端删除。删除成功后,把该笔记在移动端note表中对应的一条记录直接删除;如果有冲突,则按上文提到的冲突解决方案进行冲突协调。

步骤4将移动端note表的_id列全部发送至服务端,与服务端的关联项进行对比,再将移动端没有的笔记同步到本地。

4结束语

本文借鉴了乐观复制、矢量时钟等同步方法,而且根据笔记数据的特点,将笔记数据分为文本和附件,更具针对性地提出了有效数据模型。同时,为了(下转第83页)节省传输时间和流量采用差量传输,又综合制定了不同情况下的冲突协调策略,最终设计并实现了一套实用的同步方案,解决了笔记数据在多个终端的同步问题。现已应用到Android手机端的云笔记应用,并已取得了良好的效果。

参考文献

[1] 朱航. 基于Android平台的数据安全同步技术的研究与设计[D]. 北京:北京邮电大学,2015.

[2] 李辉. 基于安卓手机的信息云同步系统的设计与实现[D]. 南京:南京大学,2014.

[3] 郑金光. 基于Android终端的用户信息同步平台设计与实现[D]. 北京:北京邮电大学,2014.

[4] 田原. 基于SyncML协议的移动多终端信息同步的设计与实现[D]. 成都:电子科技大学,2013.

[5] 冯久凌. 个人云系统移动终端数据同步的设计与实现[D]. 北京:北京邮电大学,2013.

[6] 王文方,王刚,刘璟. 对等网维护数据副本一致性的乐观复制技术研究[J]. 计算机工程,2006,32(20):45-47.

[7] 郑增威,林怀忠,王苏仪. 乐观复制方法研究[J]. 计算机工程与科学,2003,25(5):97-99,107.

[8] HALDAR S,VITNYI P. Bounded concurrent timestamp systems using vector clocks[J]. Journal of the ACM (JACM),2002,49(1):101-126.

[9] 许春艳. NoSQL中基于向量时钟的最终一致性方法研究[D]. 武汉:华中科技大学,2014.

[10]连向辉,王培东 .对移动数据库复制技术中冲突问题的研究[J]. 黑龙江科技信息,2007(7):63,153.

[11]魏喆,谭建荣,冯毅雄,等. 移动环境下产品数据一致性控制技术研究[J]. 计算机集成制造系统,2007,13(2):363-369.

笔记 节点 文章