穆鑫鑫,蔣同海,程 力,馬玉鵬
1(中國科學(xué)院 新疆理化技術(shù)研究所,烏魯木齊 830011)
2(新疆民族語音語言信息處理實驗室,烏魯木齊 830011)
3(中國科學(xué)院大學(xué) 計算機與控制學(xué)院,北京 100049)
基于JSON的離線數(shù)據(jù)同步策略及應(yīng)用①
穆鑫鑫1,2,3,蔣同海1,程 力1,馬玉鵬1
1(中國科學(xué)院 新疆理化技術(shù)研究所,烏魯木齊 830011)
2(新疆民族語音語言信息處理實驗室,烏魯木齊 830011)
3(中國科學(xué)院大學(xué) 計算機與控制學(xué)院,北京 100049)
針對智能移動應(yīng)用的特殊性及其在離線情況下的數(shù)據(jù)同步問題,提出了一種數(shù)據(jù)同步方案,使用JSON技術(shù)設(shè)計數(shù)據(jù)交換協(xié)議,移動端離線數(shù)據(jù)存放在SQLite數(shù)據(jù)庫中、使用基于時間戳的沖突檢測算法提高同步的準確性,并采用增量同步方式保證同步的效率和準確性. 將該策略應(yīng)用在智慧安防系統(tǒng)中,結(jié)果表明,基于JSON離線數(shù)據(jù)同步效率相比傳統(tǒng)基于XML的方案提高約8%.
數(shù)據(jù)同步; JSON; SQLite; 混合移動應(yīng)用
隨著移動互聯(lián)網(wǎng)的跨越式發(fā)展,移動智能應(yīng)用的也呈現(xiàn)井噴式增長,通常系統(tǒng)所有的信息都保存在服務(wù)端 (Server-side),客戶端 (Mobile device)數(shù)據(jù)暫存在客戶端,為了保障數(shù)據(jù)的一致性,一般需要進行客戶端和服務(wù)端數(shù)據(jù)的沖突檢測以及雙向的數(shù)據(jù)同步,所以,數(shù)據(jù)同步問題也成了最近國內(nèi)外移動計算研究領(lǐng)域中的熱點. 然而移動應(yīng)用在以下幾個方面有特殊性: 無線網(wǎng)絡(luò)帶寬限制,移動應(yīng)用資源有限(如存儲),移動性(設(shè)備和網(wǎng)絡(luò)),網(wǎng)絡(luò)中斷,電池容量有限[1]. 為了在上述各種情況下很好地進行數(shù)據(jù)在客戶端和服務(wù)端間的同步,研究者們提出了許多方法和策略. MY Choi等提出了一種基于信息摘要(Message digest)的數(shù)據(jù)同步算法SAMD[2],包括移動端數(shù)據(jù)庫、同步數(shù)據(jù)服務(wù)器和服務(wù)端數(shù)據(jù)庫服務(wù)器三個組件,和傳統(tǒng)關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)中數(shù)據(jù)同步框架類似(如圖1),該策略雖然保證了數(shù)據(jù)同步的安全性和準確性,但由于加入了中間層同步服務(wù)器來進行數(shù)據(jù)同步服務(wù),所以在性能上大打折扣,不能滿足移動應(yīng)用的需求; D Sethia等人提出了一種基于元組時間戳的同步策略MRDMS[3],由移動端和服務(wù)端兩部分組成,因為省去了中間同步數(shù)據(jù)服務(wù)器的處理,相比文獻[2]中的SAMD省去了同步數(shù)據(jù)服務(wù)器處理數(shù)據(jù)時間,不足是MRDMS采用的基于元組的時間戳,要維護每個元組的時間戳組成的時間戳表,雖然,這樣做同步的數(shù)據(jù)更加精確,但是維護大量時間戳表會消耗很多時間和系統(tǒng)資源,而移動端系統(tǒng)資源本身很有限,所以該方法的效率有待提高; 本文提出一種基于JSON和SQLite數(shù)據(jù)庫的離線數(shù)據(jù)同步策略,設(shè)計了基于JSON的數(shù)據(jù)交換協(xié)議,利用時間戳技術(shù)檢測數(shù)據(jù)沖突,使用增量同步方式保證傳輸數(shù)據(jù)的高效性,避免不必要的冗余數(shù)據(jù)傳輸,使用 HTTP POST 請求進行數(shù)據(jù)傳輸,并將該同步策略應(yīng)用于混合移動應(yīng)用“智慧安防”中,結(jié)果表明,該策略不僅能保證離線情況下的數(shù)據(jù)完整性,而且在離線數(shù)據(jù)同步效率上優(yōu)于傳統(tǒng)的同步方法.
圖1 經(jīng)典數(shù)據(jù)同步框架
互聯(lián)網(wǎng)的高速發(fā)展和移動計算技術(shù)的不斷發(fā)展,使得移動智能設(shè)備在日常生活中扮演的角色越來越重要,移動應(yīng)用的數(shù)量急劇增長,通常,系統(tǒng)數(shù)據(jù)保存在服務(wù)端,應(yīng)用端也會保存少量備份,當(dāng)數(shù)據(jù)在不同的移動終端中被修改后,就要將修改的結(jié)果同步到服務(wù)端,在網(wǎng)絡(luò)連接正常的情況下,可以進行實時的數(shù)據(jù)同步.但是,由于各種原因會發(fā)生移動終端離線的情況,在網(wǎng)絡(luò)連接中斷的時候,數(shù)據(jù)的一致性和完整性就顯得格外重要. 離線情況下的數(shù)據(jù)同步算法應(yīng)當(dāng)滿足如下幾個要求[4]:
(1) 應(yīng)當(dāng)保證最少的數(shù)據(jù)傳輸量.
(2) 離線后的數(shù)據(jù)改變在網(wǎng)絡(luò)重新連接之后要同步到服務(wù)端.
(3) 數(shù)據(jù)同步算法要能很容易地用現(xiàn)有技術(shù)實現(xiàn).
(4) 數(shù)據(jù)傳輸格式要簡單高效.
基于以上各方面的綜合考慮,本文提出了一種基于JSON和SQLite的離線數(shù)據(jù)同步策略(ODSSJS),后面部分將對ODSSJS做詳細說明.
離線數(shù)據(jù)同步策略主要包括: 移動端數(shù)據(jù)存儲策略、數(shù)據(jù)交換協(xié)議、沖突檢測策略和同步算法,下面對各個組成部分做詳細解釋.
目前移動應(yīng)用中使用的存儲數(shù)據(jù)的方法主要有Android存儲類SharedPreference、文件存儲、HTML5 Local Storage 存儲以及 SQLite 數(shù)據(jù)庫. 然而不同的存儲方式有各自特殊的特點和適用范圍,如表1所示.
表1 移動端數(shù)據(jù)存儲方式
由于在安防系統(tǒng)中數(shù)據(jù)中會有圖片等多媒體數(shù)據(jù),另外,離線情況下的數(shù)據(jù)同步是本文的關(guān)注點,所以綜合考慮各種因素之后,選擇SQLite數(shù)據(jù)庫存儲移動端數(shù)據(jù).
數(shù)據(jù)交換協(xié)議指的是數(shù)據(jù)交換的格式,以往的移動應(yīng)用數(shù)據(jù)交換多數(shù)采用XML格式的數(shù)據(jù)(如文獻[8]),XML用標簽對來包含數(shù)據(jù),然后通過XML解析器來進行解析. JSON(JavaScript object notation)是一種比XML使用更加容易的數(shù)據(jù)交換格式,可以直接使用 JavaScript來解析,所以,相比 XML ,JSON 使用更加便捷而且效率要比XML高[9]. 從簡潔和高效兩個方面考慮,本文數(shù)據(jù)交換采用JSON格式,具體做法為:我們將要同步的數(shù)據(jù)按照事先定義的協(xié)議格式表示成JSON對象,然后將其轉(zhuǎn)換成JSON字符串寫入文本文件中,壓縮后發(fā)送到要同步的一端,同步端將數(shù)據(jù)解壓,解析其中的JSON對象,然后將數(shù)據(jù)通過SQL插入到移動端SQLite數(shù)據(jù)庫或者服務(wù)端數(shù)據(jù)庫中.
服務(wù)端發(fā)送給移動端的JSON數(shù)據(jù)格式定義為:
{“success”:“true”,
“message”:“服務(wù)器操作異常時的提示信息”,
“obj”: {plans:[巡檢任務(wù)],items:[巡檢明細]}”,//服務(wù)端數(shù)據(jù)
}
移動端上傳給服務(wù)端的JSON數(shù)據(jù)格式定義為為:
{“success”:“true”,
“message”:“服務(wù)器操作異常時的提示信息”,
“obj”: {items:[巡檢任務(wù)],appendix:[資源信息],station:[定位信息]}”,//客戶端數(shù)據(jù)
}
“success”: 表示數(shù)據(jù)傳輸成功與否,true 代表成功,false代表失敗.
“message”: 由數(shù)據(jù)發(fā)送端傳給接受端的關(guān)于數(shù)據(jù)操作中的具體情況,如數(shù)據(jù)庫鏈接錯誤時提示數(shù)據(jù)庫連接錯誤.
“obj”: 協(xié)議中的數(shù)據(jù)主要存放在 obj中,上傳協(xié)議和下載協(xié)議中的obj具體內(nèi)容略有差別.
下載協(xié)議(服務(wù)端發(fā)送給移動端)obj中包含:
“plan”: 存放具體任務(wù)的信息.
“item”: 存放任務(wù)的明細,這里就是要同步數(shù)據(jù)存放的地方.
上傳協(xié)議(移動端發(fā)送給服務(wù)端)obj中的字段有:
“item”: 和下載協(xié)議一樣,存放任務(wù)的明細,存放主要同步數(shù)據(jù)存.
“appendix”: 存放要上傳服務(wù)端的其他資源信息,如圖片等多媒體資源.
“station”: 位置信息,為了在 PC 端應(yīng)用中將具體設(shè)備等顯示在地圖上.
目前實現(xiàn)數(shù)據(jù)同步的方式主要有基于觸發(fā)器、時間戳、標志位以及日志處理等方式,其中觸發(fā)器方式需要消耗的系統(tǒng)資源很大,對于移動客戶端來說資源有限,觸發(fā)器的方式不是很適用[8]; 而讀日志的方式也需要耗用額外的時間和資源來進行日志解析,所以效率較低,在移動設(shè)備資源有限的情況下,讀日志的方式效率低下; 基于時間戳和基于標志位的方式類似,但時間戳能明確給出數(shù)據(jù)的修改時間,對于要使用數(shù)據(jù)修改時間的系統(tǒng)能獲取操作時間是很重要的,所以,本文的離線數(shù)據(jù)同步策略中采用的是時間戳方式來檢測數(shù)據(jù)的沖突.
離線數(shù)據(jù)的同步可以分為上傳和下載兩個部分.上傳由MC(移動客戶端)發(fā)起,當(dāng)MC連接到S(服務(wù)端)時,將離線操作數(shù)據(jù)發(fā)送給S; 而下載可以有不同的實現(xiàn)方式,可以由MC發(fā)起,也可以是先由MC將離線操作數(shù)據(jù)上傳后,S將差異數(shù)據(jù)返回給MC.
數(shù)據(jù)同步方式有全量同步和增量同步兩種方式,全量同步一次性同步數(shù)據(jù)庫中的所有數(shù)據(jù),而增量同步則只對兩個數(shù)據(jù)庫中的差異數(shù)據(jù)進行同步. 對于離線數(shù)據(jù)的同步,要保證傳輸最少的數(shù)據(jù)量[10],所以本文中的離線同步采用增量同步方式.
MC和S數(shù)據(jù)表中數(shù)據(jù)沖突檢測需要的字段為:
T_MC T_S IS_VALID MC修改時間 S修改時間 是否刪除
(1) 數(shù)據(jù)下載算法
BEGIN
① 同步.
② MC將本地最大的T_MC作為參數(shù)向S發(fā)出同步請求.
③ S將T_S > T_MC的數(shù)據(jù)從數(shù)據(jù)表抽取出來,按下載協(xié)議格式組裝成JSON文件F,將F壓縮成壓縮文件D發(fā)送給MC.
④ MC收到壓縮文件D,解壓出JSON文件F.
⑤ 如果 F為空,則轉(zhuǎn)到 END.
⑥ 如果F不為空,則MC解析JSON文件F內(nèi)容:
a) 將F中的obj中攜帶的數(shù)據(jù)轉(zhuǎn)換成SQL操作.
b) 創(chuàng)建SQLite數(shù)據(jù)庫DB.
c) 新建事先設(shè)計的SQLite數(shù)據(jù)表T.
d) 通過事先封裝的Angular服務(wù)(service)API將每條記錄插入T中.
⑦ 數(shù)據(jù)寫入完成后向服務(wù)器發(fā)送SUCCESS消息.
END
(2) 數(shù)據(jù)上傳算法
BEGIN
① MC將待上傳數(shù)據(jù)按照同步協(xié)議格式組裝成JSON文件F.
② MC將F壓縮成D發(fā)送給S.
③ S 收到數(shù)據(jù) D,響應(yīng) SUCCESS(上傳成功).
④ 如果D為空,則轉(zhuǎn)到END.
⑤ 如果D不為空,轉(zhuǎn)到⑥.
⑥ S將D加壓為JSON文件F后解析.
a) 將F中的obj中的數(shù)據(jù)記錄和對應(yīng)的表中的記錄作對比.
b) 如果 T_MC > T_S,則插入新數(shù)據(jù)到服務(wù)端數(shù)據(jù)表中.
c) 更新 T_MC 和 T_S.
d) 否則轉(zhuǎn)到 a).
⑦ 刪除D和F.
END
整個離線數(shù)據(jù)同步過程時序圖如圖2所示.
圖2 離線數(shù)據(jù)同步時序圖
在安防系統(tǒng)中,需要對園區(qū)設(shè)施設(shè)備等進行巡檢,可以通過如掃描NFC卡的方式來檢查設(shè)施和設(shè)備,而為此開發(fā)的移動應(yīng)用需要在有網(wǎng)絡(luò)的情況下才能將檢測數(shù)據(jù)上傳到服務(wù)器,但園區(qū)通常很大,很多絕大部分區(qū)域都沒有網(wǎng)絡(luò)覆蓋,這就需要在離線的狀態(tài)下對設(shè)備設(shè)施進行檢查,然后將數(shù)據(jù)在有網(wǎng)絡(luò)環(huán)境下上傳到服務(wù)端,因此,離線數(shù)據(jù)的同步策略就變得尤為重要.
筆者將本文中的離線數(shù)據(jù)同步策略作為“智慧安防”系統(tǒng)的離線數(shù)據(jù)同步策略,整個系統(tǒng)分為移動端、PC端和服務(wù)端,系統(tǒng)架構(gòu)如圖3所示,PC端界面如圖4所示,移動端,其中移動端采用混合開發(fā)框架(Hybrid)Cordova來開發(fā),相比原生移動應(yīng)用(Native)和web移動應(yīng)用,Hyper應(yīng)用開發(fā)周期短,可擴展性良好,還能提供對SQLite數(shù)據(jù)庫操作的第三方JavaScript庫如cordova-sqlite-storage,大大減輕了開發(fā)難度,然而混合移動應(yīng)用也有不足的地方,就是是運行速度不如Native應(yīng)用快,因為它是通過第三方API來調(diào)用Android native API去操作系統(tǒng)硬件的,要經(jīng)過中間層的額外性能損耗,所以,很自然其性能不如 Native APP[10];移動端和PC端的UI及前端業(yè)務(wù)流程都使用目前流行的Angular框架來實現(xiàn),同時,利用第三方庫cordovasqlite-storage封裝了用于操作SQLite數(shù)據(jù)庫的服務(wù)(SQLiteService),通過該service來進行數(shù)據(jù)的增刪改查(CRUD)將十分方便; 系統(tǒng)后端使用SSH整合框架來實現(xiàn),使用Oracle數(shù)據(jù)庫作為服務(wù)端數(shù)據(jù)管理系統(tǒng).
圖3 智慧安防系統(tǒng)架構(gòu)圖
圖4 PC 端界面
系統(tǒng)在前端實現(xiàn)離線數(shù)據(jù)同步協(xié)議中的數(shù)據(jù)存儲、離線數(shù)據(jù)上傳以及向服務(wù)端請求同步等功能,在服務(wù)端實現(xiàn)數(shù)據(jù)的沖突檢測和提供同步數(shù)據(jù)的下載.
實驗在WiFi環(huán)境下進行,移動端Android版本是4.4.0,通過對文獻[2]中基于同步服務(wù)器的同步方法(SAMD)、文獻[8]中基于XML的同步策略和本文基于JSON的離線同步策略(ODSSJS)三種方法同步不同數(shù)據(jù)量的離線數(shù)據(jù)時的效率進行了對比,結(jié)果如圖5所示.
圖5 同步效率對比圖
由圖5可以看出,SAMD在三種策略中是效率最差的,原因在于SAMD采用如圖1的架構(gòu),通過中間層數(shù)據(jù)同步服務(wù)器來進行數(shù)據(jù)同步,這樣做就在中間層處理同步數(shù)據(jù)過程中確實損失了效率; 而文獻[8]中基于XML的同步策略雖然也是用增量同步的方式保證傳輸數(shù)據(jù)量最少,但在攜帶相同數(shù)據(jù)的情況下,相比JSON 格式,XML 總數(shù)據(jù)量更大,解析效率低,所以整體效率不如本文的ODSSJS.
本文提出了一種基于JSON的離線數(shù)據(jù)同步方案,設(shè)計了基于JSON的數(shù)據(jù)交換協(xié)議,通過HTTP POST傳輸數(shù)據(jù),使用SQLite存儲移動離線數(shù)據(jù),通過時間戳技術(shù)來檢測數(shù)據(jù)沖突,同時,采用增量同步的方式保證數(shù)據(jù)同步過程的高效. 該方案已經(jīng)在“智慧安防”混合移動應(yīng)用中實現(xiàn),可靠性和高效性完全達到移動應(yīng)用離線數(shù)據(jù)同步的要求. 下一步研究可在進一步提高同步效率及在其他設(shè)備(如POS機、PDA設(shè)備)中的擴展應(yīng)用等方面進行.
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郝平,林原沖. 一種移動網(wǎng)絡(luò)下基于雙時間戳的數(shù)據(jù)增量同步研究. 計算機應(yīng)用與軟件,2016,33(4): 143–145,226.
5知乎. Android 開發(fā)時,如何實現(xiàn)和服務(wù)器的數(shù)據(jù)同步?https://www.zhihu.com/question/19708808. [2016-06-14].
6陳俊龍. Android平臺的數(shù)據(jù)傳輸與同步的設(shè)計與實現(xiàn)[碩士學(xué)位論文]. 北京: 北京郵電大學(xué),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 平臺可增量同步的網(wǎng)絡(luò)應(yīng)用協(xié)議. 計算機工程,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的離線數(shù)據(jù)同步策略及應(yīng)用.計算機系統(tǒng)應(yīng)用,2017,26(12):257–261. http://www.c-sa.org.cn/1003-3254/6084.html
中國科學(xué)院西部之光人才培養(yǎng)計劃項目(XBBS201319); 新疆維吾爾自治區(qū)青年科技創(chuàng)新人才培養(yǎng)工程基金項目(2014721033)
2017-03-08; 修改時間: 2017-03-27; 采用時間: 2017-03-29