穆鑫鑫,蔣同海,程 力,馬玉鵬
1(中國科學院 新疆理化技術研究所,烏魯木齊 830011)
2(新疆民族語音語言信息處理實驗室,烏魯木齊 830011)
3(中國科學院大學 計算機與控制學院,北京 100049)
基于JSON的離線數據同步策略及應用①
穆鑫鑫1,2,3,蔣同海1,程 力1,馬玉鵬1
1(中國科學院 新疆理化技術研究所,烏魯木齊 830011)
2(新疆民族語音語言信息處理實驗室,烏魯木齊 830011)
3(中國科學院大學 計算機與控制學院,北京 100049)
針對智能移動應用的特殊性及其在離線情況下的數據同步問題,提出了一種數據同步方案,使用JSON技術設計數據交換協議,移動端離線數據存放在SQLite數據庫中、使用基于時間戳的沖突檢測算法提高同步的準確性,并采用增量同步方式保證同步的效率和準確性. 將該策略應用在智慧安防系統中,結果表明,基于JSON離線數據同步效率相比傳統基于XML的方案提高約8%.
數據同步; JSON; SQLite; 混合移動應用
隨著移動互聯網的跨越式發展,移動智能應用的也呈現井噴式增長,通常系統所有的信息都保存在服務端 (Server-side),客戶端 (Mobile device)數據暫存在客戶端,為了保障數據的一致性,一般需要進行客戶端和服務端數據的沖突檢測以及雙向的數據同步,所以,數據同步問題也成了最近國內外移動計算研究領域中的熱點. 然而移動應用在以下幾個方面有特殊性: 無線網絡帶寬限制,移動應用資源有限(如存儲),移動性(設備和網絡),網絡中斷,電池容量有限[1]. 為了在上述各種情況下很好地進行數據在客戶端和服務端間的同步,研究者們提出了許多方法和策略. MY Choi等提出了一種基于信息摘要(Message digest)的數據同步算法SAMD[2],包括移動端數據庫、同步數據服務器和服務端數據庫服務器三個組件,和傳統關系型數據庫管理系統(RDBMS)中數據同步框架類似(如圖1),該策略雖然保證了數據同步的安全性和準確性,但由于加入了中間層同步服務器來進行數據同步服務,所以在性能上大打折扣,不能滿足移動應用的需求; D Sethia等人提出了一種基于元組時間戳的同步策略MRDMS[3],由移動端和服務端兩部分組成,因為省去了中間同步數據服務器的處理,相比文獻[2]中的SAMD省去了同步數據服務器處理數據時間,不足是MRDMS采用的基于元組的時間戳,要維護每個元組的時間戳組成的時間戳表,雖然,這樣做同步的數據更加精確,但是維護大量時間戳表會消耗很多時間和系統資源,而移動端系統資源本身很有限,所以該方法的效率有待提高; 本文提出一種基于JSON和SQLite數據庫的離線數據同步策略,設計了基于JSON的數據交換協議,利用時間戳技術檢測數據沖突,使用增量同步方式保證傳輸數據的高效性,避免不必要的冗余數據傳輸,使用 HTTP POST 請求進行數據傳輸,并將該同步策略應用于混合移動應用“智慧安防”中,結果表明,該策略不僅能保證離線情況下的數據完整性,而且在離線數據同步效率上優于傳統的同步方法.

圖1 經典數據同步框架
互聯網的高速發展和移動計算技術的不斷發展,使得移動智能設備在日常生活中扮演的角色越來越重要,移動應用的數量急劇增長,通常,系統數據保存在服務端,應用端也會保存少量備份,當數據在不同的移動終端中被修改后,就要將修改的結果同步到服務端,在網絡連接正常的情況下,可以進行實時的數據同步.但是,由于各種原因會發生移動終端離線的情況,在網絡連接中斷的時候,數據的一致性和完整性就顯得格外重要. 離線情況下的數據同步算法應當滿足如下幾個要求[4]:
(1) 應當保證最少的數據傳輸量.
(2) 離線后的數據改變在網絡重新連接之后要同步到服務端.
(3) 數據同步算法要能很容易地用現有技術實現.
(4) 數據傳輸格式要簡單高效.
基于以上各方面的綜合考慮,本文提出了一種基于JSON和SQLite的離線數據同步策略(ODSSJS),后面部分將對ODSSJS做詳細說明.
離線數據同步策略主要包括: 移動端數據存儲策略、數據交換協議、沖突檢測策略和同步算法,下面對各個組成部分做詳細解釋.
目前移動應用中使用的存儲數據的方法主要有Android存儲類SharedPreference、文件存儲、HTML5 Local Storage 存儲以及 SQLite 數據庫. 然而不同的存儲方式有各自特殊的特點和適用范圍,如表1所示.

表1 移動端數據存儲方式
由于在安防系統中數據中會有圖片等多媒體數據,另外,離線情況下的數據同步是本文的關注點,所以綜合考慮各種因素之后,選擇SQLite數據庫存儲移動端數據.
數據交換協議指的是數據交換的格式,以往的移動應用數據交換多數采用XML格式的數據(如文獻[8]),XML用標簽對來包含數據,然后通過XML解析器來進行解析. JSON(JavaScript object notation)是一種比XML使用更加容易的數據交換格式,可以直接使用 JavaScript來解析,所以,相比 XML ,JSON 使用更加便捷而且效率要比XML高[9]. 從簡潔和高效兩個方面考慮,本文數據交換采用JSON格式,具體做法為:我們將要同步的數據按照事先定義的協議格式表示成JSON對象,然后將其轉換成JSON字符串寫入文本文件中,壓縮后發送到要同步的一端,同步端將數據解壓,解析其中的JSON對象,然后將數據通過SQL插入到移動端SQLite數據庫或者服務端數據庫中.
服務端發送給移動端的JSON數據格式定義為:
{“success”:“true”,
“message”:“服務器操作異常時的提示信息”,
“obj”: {plans:[巡檢任務],items:[巡檢明細]}”,//服務端數據
}
移動端上傳給服務端的JSON數據格式定義為為:
{“success”:“true”,
“message”:“服務器操作異常時的提示信息”,
“obj”: {items:[巡檢任務],appendix:[資源信息],station:[定位信息]}”,//客戶端數據
}
“success”: 表示數據傳輸成功與否,true 代表成功,false代表失敗.
“message”: 由數據發送端傳給接受端的關于數據操作中的具體情況,如數據庫鏈接錯誤時提示數據庫連接錯誤.
“obj”: 協議中的數據主要存放在 obj中,上傳協議和下載協議中的obj具體內容略有差別.
下載協議(服務端發送給移動端)obj中包含:
“plan”: 存放具體任務的信息.
“item”: 存放任務的明細,這里就是要同步數據存放的地方.
上傳協議(移動端發送給服務端)obj中的字段有:
“item”: 和下載協議一樣,存放任務的明細,存放主要同步數據存.
“appendix”: 存放要上傳服務端的其他資源信息,如圖片等多媒體資源.
“station”: 位置信息,為了在 PC 端應用中將具體設備等顯示在地圖上.
目前實現數據同步的方式主要有基于觸發器、時間戳、標志位以及日志處理等方式,其中觸發器方式需要消耗的系統資源很大,對于移動客戶端來說資源有限,觸發器的方式不是很適用[8]; 而讀日志的方式也需要耗用額外的時間和資源來進行日志解析,所以效率較低,在移動設備資源有限的情況下,讀日志的方式效率低下; 基于時間戳和基于標志位的方式類似,但時間戳能明確給出數據的修改時間,對于要使用數據修改時間的系統能獲取操作時間是很重要的,所以,本文的離線數據同步策略中采用的是時間戳方式來檢測數據的沖突.
離線數據的同步可以分為上傳和下載兩個部分.上傳由MC(移動客戶端)發起,當MC連接到S(服務端)時,將離線操作數據發送給S; 而下載可以有不同的實現方式,可以由MC發起,也可以是先由MC將離線操作數據上傳后,S將差異數據返回給MC.
數據同步方式有全量同步和增量同步兩種方式,全量同步一次性同步數據庫中的所有數據,而增量同步則只對兩個數據庫中的差異數據進行同步. 對于離線數據的同步,要保證傳輸最少的數據量[10],所以本文中的離線同步采用增量同步方式.
MC和S數據表中數據沖突檢測需要的字段為:

T_MC T_S IS_VALID MC修改時間 S修改時間 是否刪除
(1) 數據下載算法
BEGIN
① 同步.
② MC將本地最大的T_MC作為參數向S發出同步請求.
③ S將T_S > T_MC的數據從數據表抽取出來,按下載協議格式組裝成JSON文件F,將F壓縮成壓縮文件D發送給MC.
④ MC收到壓縮文件D,解壓出JSON文件F.
⑤ 如果 F為空,則轉到 END.
⑥ 如果F不為空,則MC解析JSON文件F內容:
a) 將F中的obj中攜帶的數據轉換成SQL操作.
b) 創建SQLite數據庫DB.
c) 新建事先設計的SQLite數據表T.
d) 通過事先封裝的Angular服務(service)API將每條記錄插入T中.
⑦ 數據寫入完成后向服務器發送SUCCESS消息.
END
(2) 數據上傳算法
BEGIN
① MC將待上傳數據按照同步協議格式組裝成JSON文件F.
② MC將F壓縮成D發送給S.
③ S 收到數據 D,響應 SUCCESS(上傳成功).
④ 如果D為空,則轉到END.
⑤ 如果D不為空,轉到⑥.
⑥ S將D加壓為JSON文件F后解析.
a) 將F中的obj中的數據記錄和對應的表中的記錄作對比.
b) 如果 T_MC > T_S,則插入新數據到服務端數據表中.
c) 更新 T_MC 和 T_S.
d) 否則轉到 a).
⑦ 刪除D和F.
END
整個離線數據同步過程時序圖如圖2所示.

圖2 離線數據同步時序圖
在安防系統中,需要對園區設施設備等進行巡檢,可以通過如掃描NFC卡的方式來檢查設施和設備,而為此開發的移動應用需要在有網絡的情況下才能將檢測數據上傳到服務器,但園區通常很大,很多絕大部分區域都沒有網絡覆蓋,這就需要在離線的狀態下對設備設施進行檢查,然后將數據在有網絡環境下上傳到服務端,因此,離線數據的同步策略就變得尤為重要.
筆者將本文中的離線數據同步策略作為“智慧安防”系統的離線數據同步策略,整個系統分為移動端、PC端和服務端,系統架構如圖3所示,PC端界面如圖4所示,移動端,其中移動端采用混合開發框架(Hybrid)Cordova來開發,相比原生移動應用(Native)和web移動應用,Hyper應用開發周期短,可擴展性良好,還能提供對SQLite數據庫操作的第三方JavaScript庫如cordova-sqlite-storage,大大減輕了開發難度,然而混合移動應用也有不足的地方,就是是運行速度不如Native應用快,因為它是通過第三方API來調用Android native API去操作系統硬件的,要經過中間層的額外性能損耗,所以,很自然其性能不如 Native APP[10];移動端和PC端的UI及前端業務流程都使用目前流行的Angular框架來實現,同時,利用第三方庫cordovasqlite-storage封裝了用于操作SQLite數據庫的服務(SQLiteService),通過該service來進行數據的增刪改查(CRUD)將十分方便; 系統后端使用SSH整合框架來實現,使用Oracle數據庫作為服務端數據管理系統.

圖3 智慧安防系統架構圖

圖4 PC 端界面
系統在前端實現離線數據同步協議中的數據存儲、離線數據上傳以及向服務端請求同步等功能,在服務端實現數據的沖突檢測和提供同步數據的下載.
實驗在WiFi環境下進行,移動端Android版本是4.4.0,通過對文獻[2]中基于同步服務器的同步方法(SAMD)、文獻[8]中基于XML的同步策略和本文基于JSON的離線同步策略(ODSSJS)三種方法同步不同數據量的離線數據時的效率進行了對比,結果如圖5所示.

圖5 同步效率對比圖
由圖5可以看出,SAMD在三種策略中是效率最差的,原因在于SAMD采用如圖1的架構,通過中間層數據同步服務器來進行數據同步,這樣做就在中間層處理同步數據過程中確實損失了效率; 而文獻[8]中基于XML的同步策略雖然也是用增量同步的方式保證傳輸數據量最少,但在攜帶相同數據的情況下,相比JSON 格式,XML 總數據量更大,解析效率低,所以整體效率不如本文的ODSSJS.
本文提出了一種基于JSON的離線數據同步方案,設計了基于JSON的數據交換協議,通過HTTP POST傳輸數據,使用SQLite存儲移動離線數據,通過時間戳技術來檢測數據沖突,同時,采用增量同步的方式保證數據同步過程的高效. 該方案已經在“智慧安防”混合移動應用中實現,可靠性和高效性完全達到移動應用離線數據同步的要求. 下一步研究可在進一步提高同步效率及在其他設備(如POS機、PDA設備)中的擴展應用等方面進行.
1Imam AA,Basri S,Ahmad R. Data synchronization between mobile devices and server-side databases: A systematic literature review. Journal of Theoretical & Applied Information Technology,2015,81(2): 364–382.
2Choi MY,Cho EA,Park DH,et al. A database synchronization algorithm for mobile devices. IEEE Trans. on Consumer Electronics,2010,56(2): 392–398. [doi: 10.1109/TCE.2010.5505945]
3Sethia D,Mehta S,Chowdhary A,et al. MRDMS-mobile replicated database management synchronization. Proc. of International Conference on Signal Processing and Integrated Networks. Noida,India. 2014. 624–631.
4郝平,林原沖. 一種移動網絡下基于雙時間戳的數據增量同步研究. 計算機應用與軟件,2016,33(4): 143–145,226.
5知乎. Android 開發時,如何實現和服務器的數據同步?https://www.zhihu.com/question/19708808. [2016-06-14].
6陳俊龍. Android平臺的數據傳輸與同步的設計與實現[碩士學位論文]. 北京: 北京郵電大學,2015.
7Imam AA,Basri S. Data synchronization patterns in mobile application design. Journal of Theoretical and Applied Information Technology,2015,81(2): 364–382.
8劉宇,戴鴻君,郭鳳華,等. Android 平臺可增量同步的網絡應用協議. 計算機工程,2011,37(18): 59–61. [doi: 10.3969/j.issn.1000-3428.2011.18.020]
9w3schools. JSON introduction. http://www.w3schools.in/json/intro/. [2016-11-01].
10Carmatec. Hybrid apps vs native apps in the mobile app development world. http://www.carmatec.com/blog/hybridapps-vs-native-apps. [2015-08-13].
Offline Data Synchronization Strategy Based on JSON and its Application
MU Xin-Xin1,2,3,JIANG Tong-Hai1,CHENG Li1,MA Yu-Peng1
1(Xinjiang Technical Institute of Physics and Chemistry,Chinese Academy of Sciences,Urumqi 830011,China)
2(Xinjiang Key Laboratory of Minority Speech and Language Information Processing,Urumqi 830011,China)
3(School of Computer and Control Engineering,University of Chinese Academy of Sciences,Beijing 100049,China)
In view of the particularity of intelligent mobile applications and its data offline synchronization problems,we put forward a scheme of data synchronization,using JSON technology to design data exchange protocol and the SQLite database to store the mobile terminal offline data,using the conflict detection algorithm based on time stamp to improve the accuracy of synchronization as well as the incremental synchronization mode to ensure the efficiency and accuracy of synchronization. This proposed method is applied to an intelligent security system,and the results show that the efficiency of offline data synchronization based on JSON is about 8% higher than that of the traditional XML based scheme.
data synchronization; JSON; SQLite; hybrid mobile applications
穆鑫鑫,蔣同海,程力,馬玉鵬.基于JSON的離線數據同步策略及應用.計算機系統應用,2017,26(12):257–261. http://www.c-sa.org.cn/1003-3254/6084.html
中國科學院西部之光人才培養計劃項目(XBBS201319); 新疆維吾爾自治區青年科技創新人才培養工程基金項目(2014721033)
2017-03-08; 修改時間: 2017-03-27; 采用時間: 2017-03-29