唐廣花 李強(qiáng)
摘 要:文章通過(guò)對(duì)移動(dòng)應(yīng)用中離線數(shù)據(jù)技術(shù)的研究,結(jié)合電力、公路等外業(yè)管理系統(tǒng)的業(yè)務(wù)需求,提出了移動(dòng)應(yīng)用系統(tǒng)中采用離線數(shù)據(jù)技術(shù)的總體解決方案,從而解決當(dāng)前移動(dòng)應(yīng)用系統(tǒng)在信號(hào)不穩(wěn)定區(qū)域的應(yīng)用問(wèn)題。
關(guān)鍵詞:外業(yè)管理;離線數(shù)據(jù);移動(dòng)應(yīng)用
中圖分類(lèi)號(hào):TP393.02 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-2945(2018)31-0045-02
Abstract: Based on the research of off-line data technology in mobile application and the business requirement of electric power and highway field management system, this paper puts forward the overall solution of off-line data technology in mobile application system, thus solving the application problem of the current mobile application system in the region with unstable signal.
Keywords: field management; offline data; mobile applications
1 概述
隨著智能手機(jī)及其他智能移動(dòng)終端的普及,伴隨而來(lái)的是APP呈現(xiàn)爆發(fā)式增長(zhǎng)。然而,當(dāng)前大部分的APP都是在線使用,而部分行業(yè),外業(yè)工作人員很多時(shí)候需要在崇山峻嶺的野外,甚至是隧道中進(jìn)行戶(hù)外作業(yè),這些地方通訊信號(hào)還沒(méi)完全覆蓋或者網(wǎng)絡(luò)很不穩(wěn)定,在線的APP將無(wú)法進(jìn)行正常的操作,因此在這些APP中必須采用離線數(shù)據(jù)處理技術(shù),讓工作人員能夠在無(wú)網(wǎng)絡(luò)的情況下保持順暢的數(shù)據(jù)錄入及查詢(xún)工作。
2 移動(dòng)應(yīng)用系統(tǒng)離線數(shù)據(jù)技術(shù)分析
2.1 離線數(shù)據(jù)技術(shù)分析
當(dāng)前,用于移動(dòng)APP的離線數(shù)據(jù)存儲(chǔ)技術(shù)的發(fā)展已經(jīng)比較成熟,常見(jiàn)的離線數(shù)據(jù)存儲(chǔ)技術(shù)主要有SQLite數(shù)據(jù)庫(kù)技術(shù)、基于LocalStorage客戶(hù)端本地文件存儲(chǔ)技術(shù)以及IndexedDB移動(dòng)數(shù)據(jù)庫(kù)技術(shù)等等。
各種離線數(shù)據(jù)技術(shù)各有千秋,SQLite功能強(qiáng)大但操作比較麻煩,基于LocalStorage本地文件方式操作簡(jiǎn)單但是只能存儲(chǔ)數(shù)量級(jí)較小的數(shù)據(jù),相對(duì)而言IndexedDB既可以存儲(chǔ)大量的數(shù)據(jù)又操作便捷,IndexedDB能夠在客戶(hù)端存儲(chǔ)大量的結(jié)構(gòu)化數(shù)據(jù),數(shù)據(jù)以對(duì)象的方式進(jìn)行保存和管理,IndexedDB創(chuàng)建了一套使用索引高效檢索的API,通過(guò)API可以高效地對(duì)數(shù)據(jù)進(jìn)行保存和讀取,同時(shí)支持查詢(xún)和搜索,所以使用IndexedDB做為移動(dòng)端數(shù)據(jù)庫(kù)比較合適。
2.2 離線應(yīng)用系統(tǒng)總體方案
2.2.1 業(yè)務(wù)模式
外業(yè)人員使用移動(dòng)APP基于離線狀態(tài)獨(dú)立開(kāi)展外業(yè)處理(數(shù)據(jù)采集等),移動(dòng)端APP通過(guò)本地?cái)?shù)據(jù)庫(kù)臨時(shí)存儲(chǔ)離線狀態(tài)下新錄入的業(yè)務(wù)數(shù)據(jù),回到網(wǎng)絡(luò)狀況好的環(huán)境下,啟動(dòng)數(shù)據(jù)同步,將移動(dòng)端數(shù)據(jù)提交到服務(wù)器數(shù)據(jù)中,內(nèi)業(yè)人員及管理人員通過(guò)PC端對(duì)數(shù)據(jù)進(jìn)行后續(xù)的處理及應(yīng)用。
2.2.2 實(shí)現(xiàn)思路
移動(dòng)端APP基于IndexedDB數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù),建立移動(dòng)端與服務(wù)器端的數(shù)據(jù)操作規(guī)則(哪些數(shù)據(jù)在移動(dòng)端進(jìn)行新增和修改,哪些數(shù)據(jù)只能在Web端修改等),據(jù)此規(guī)則建立基于http的數(shù)據(jù)同步服務(wù)(Webservice)并部署至外網(wǎng),移動(dòng)端通過(guò)Webservice與服務(wù)器進(jìn)行數(shù)據(jù)交換。
2.2.3 系統(tǒng)結(jié)構(gòu)(見(jiàn)圖1)
3 離線數(shù)據(jù)的實(shí)現(xiàn)方案
3.1 數(shù)據(jù)規(guī)則定義
為了讓數(shù)據(jù)在移動(dòng)端的離線操作和PC Web端的在線操作之間達(dá)到統(tǒng)一,而不出現(xiàn)混亂,就必須在數(shù)據(jù)的訪問(wèn)、修改、交換上定義一定的規(guī)則,從數(shù)據(jù)交換的角度,移動(dòng)端的所有數(shù)據(jù)可以分為基礎(chǔ)數(shù)據(jù)、業(yè)務(wù)數(shù)據(jù)兩大類(lèi),其訪問(wèn)、修改及交換的規(guī)則如下:
基礎(chǔ)數(shù)據(jù):只能在PC端進(jìn)行修改,移動(dòng)端只能訪問(wèn)不可修改,在進(jìn)行數(shù)據(jù)交換時(shí),只需從服務(wù)器下載至移動(dòng)端,無(wú)需從移動(dòng)端上傳服務(wù)器。
業(yè)務(wù)數(shù)據(jù):對(duì)于本地新增的部分業(yè)務(wù)數(shù)據(jù),在數(shù)據(jù)與服務(wù)器進(jìn)行交換前可以任意修改,當(dāng)數(shù)據(jù)上傳服務(wù)器之后,在移動(dòng)端只能查詢(xún),不能再進(jìn)行編輯,只能在pc端進(jìn)行修改。非本設(shè)備新增的業(yè)務(wù)數(shù)據(jù)一律不能編輯、只能查詢(xún)。在進(jìn)行數(shù)據(jù)交換時(shí),需要上傳本地新增的部分?jǐn)?shù)據(jù),還需要從服務(wù)器下載必要的業(yè)務(wù)數(shù)據(jù)到移動(dòng)端,以備查閱。
3.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
為了實(shí)現(xiàn)移動(dòng)端與服務(wù)器數(shù)據(jù)的交換,保證交換的規(guī)則和交換效率,數(shù)據(jù)庫(kù)結(jié)構(gòu)的設(shè)計(jì)需要在實(shí)現(xiàn)原有業(yè)務(wù)需求的基礎(chǔ)上增加以下的設(shè)計(jì):
(1)增加一個(gè)數(shù)據(jù)交換定義表,用于記錄移動(dòng)端數(shù)據(jù)與服務(wù)器的交換規(guī)則,后續(xù)的數(shù)據(jù)管理及交換都按此表中的定義進(jìn)行操作,數(shù)據(jù)定義表主要包含表名稱(chēng)、說(shuō)明、交換規(guī)則等字段,表結(jié)構(gòu)及數(shù)據(jù)示例如表1:
(2)在所有的業(yè)務(wù)數(shù)據(jù)庫(kù)表上增加同步狀態(tài)標(biāo)志字
段,用來(lái)標(biāo)記哪些記錄為新增的(需要上傳的),哪些是同步完成(不能再在移動(dòng)端進(jìn)行修改)的記錄,字段類(lèi)型為整數(shù),移動(dòng)端新增的記錄該字段默認(rèn)為0,同步完成后的相應(yīng)記錄的狀態(tài)標(biāo)記字段設(shè)為1,一般業(yè)務(wù)數(shù)據(jù)表結(jié)構(gòu)及數(shù)據(jù)如表2:
3.3 離線數(shù)據(jù)訪問(wèn)實(shí)現(xiàn)
IndexedDB以對(duì)象的方式存取數(shù)據(jù),它創(chuàng)建了一套API,通過(guò)API實(shí)現(xiàn)數(shù)據(jù)的基本操作,使用起來(lái)簡(jiǎn)單且直觀。通過(guò)indexedDB.open(數(shù)據(jù)庫(kù)名稱(chēng),版本號(hào))打開(kāi)移動(dòng)端數(shù)據(jù)庫(kù),建立與數(shù)據(jù)庫(kù)的連接。在indexedDB中沒(méi)有表的概念,而是objectStore,一個(gè)數(shù)據(jù)庫(kù)中可以包含多個(gè)objectStore,objectStore是一個(gè)靈活的數(shù)據(jù)結(jié)構(gòu),可以存放多種類(lèi)型數(shù)據(jù)。一個(gè)objectStore相當(dāng)于一張表,里面存儲(chǔ)的每條數(shù)據(jù)和一個(gè)鍵相關(guān)聯(lián)。
3.4 數(shù)據(jù)同步
當(dāng)移動(dòng)終端處于離線操作時(shí),采集的數(shù)據(jù)只能臨時(shí)保存在本機(jī),無(wú)法存儲(chǔ)到更加安全的服務(wù)器上,也不能進(jìn)行后續(xù)的業(yè)務(wù)處理,同時(shí)本地的基礎(chǔ)數(shù)據(jù)等也會(huì)因?yàn)榉?wù)器上的數(shù)據(jù)更新而變得過(guò)時(shí),所以當(dāng)移動(dòng)設(shè)備進(jìn)入網(wǎng)絡(luò)狀況較好的區(qū)域時(shí),需要盡快進(jìn)行數(shù)據(jù)同步,將采集的數(shù)據(jù)上傳至服務(wù)器,同時(shí)從服務(wù)器下載最新的其他數(shù)據(jù)。讓本機(jī)和服務(wù)器的數(shù)據(jù)都保持最新?tīng)顟B(tài)。數(shù)據(jù)同步主要分為數(shù)據(jù)上傳和數(shù)據(jù)下載兩個(gè)部分,通過(guò)調(diào)用部署在服務(wù)器上的webservice的相關(guān)方法來(lái)實(shí)現(xiàn)。
3.4.1 數(shù)據(jù)上傳
將本地新增數(shù)據(jù)上傳至服務(wù)器,保存到服務(wù)器數(shù)據(jù)庫(kù)中,上傳數(shù)據(jù)的整個(gè)流程:(1)獲取數(shù)據(jù):根據(jù)數(shù)據(jù)定義表中定義的數(shù)據(jù)上傳表清單(這些表中有可能有新增數(shù)據(jù)),逐個(gè)表進(jìn)行獲取數(shù)據(jù),只讀取各表中數(shù)據(jù)同步狀態(tài)為0的數(shù)據(jù);(2)數(shù)據(jù)上傳:將獲取到的數(shù)據(jù)轉(zhuǎn)換成JSON格式或者xml格式的文件包,通過(guò)調(diào)用數(shù)據(jù)同步服務(wù)的提交數(shù)據(jù)方法,將數(shù)據(jù)提交給服務(wù),通過(guò)服務(wù)(Webservice)將數(shù)據(jù)傳輸給服務(wù)器;(3)數(shù)據(jù)接收:服務(wù)器接收到上傳的數(shù)據(jù)包后,進(jìn)行解析,將上傳的數(shù)據(jù)逐個(gè)插入到對(duì)應(yīng)的表中,在數(shù)據(jù)插入前先開(kāi)啟事務(wù),如果發(fā)生異常,全部回滾,返回失敗標(biāo)記給移動(dòng)端;當(dāng)全部數(shù)據(jù)正常插入后,結(jié)束事務(wù),返回成功標(biāo)記給移動(dòng)端;(4)數(shù)據(jù)狀態(tài)更新:當(dāng)數(shù)據(jù)同步服務(wù)反饋數(shù)據(jù)同步成功后,移動(dòng)端將本次上傳數(shù)據(jù)對(duì)應(yīng)的狀態(tài)全部修改為1。
3.4.2 數(shù)據(jù)下載
下載基礎(chǔ)數(shù)據(jù)及必要的業(yè)務(wù)數(shù)據(jù)到移動(dòng)端,替換現(xiàn)有數(shù)據(jù),數(shù)據(jù)下載流程:(1)請(qǐng)求下載:通過(guò)調(diào)用Webserice的數(shù)據(jù)下載接口,發(fā)起數(shù)據(jù)下載請(qǐng)求;(2)數(shù)據(jù)準(zhǔn)備:Webservice獲取服務(wù)器上最新的數(shù)據(jù)(只獲取同步定義表中列舉的表中的全部數(shù)據(jù)),轉(zhuǎn)換成JSON格式或者XML格式的數(shù)據(jù)包;(3)數(shù)據(jù)傳輸:通過(guò)http協(xié)議將數(shù)據(jù)包從服務(wù)器下載至移動(dòng)端;(4)數(shù)據(jù)替換:解析收到的數(shù)據(jù)包后,開(kāi)啟事務(wù),將移動(dòng)端對(duì)應(yīng)表中原有的數(shù)據(jù)全部刪除,將下載的新數(shù)據(jù)添加到對(duì)應(yīng)的表中,如發(fā)生異常,回滾事務(wù),將移動(dòng)端數(shù)據(jù)還原為下載之前的狀態(tài),正常完成數(shù)據(jù)替換后,更新移動(dòng)端數(shù)據(jù)同步時(shí)間。
4 結(jié)束語(yǔ)
本文基于外業(yè)APP系統(tǒng),對(duì)數(shù)據(jù)離線技術(shù)及實(shí)現(xiàn)方案進(jìn)行了探索,以indexdb作為移動(dòng)終端的數(shù)據(jù)庫(kù),提出了離線應(yīng)用系統(tǒng)數(shù)據(jù)處理的基本框架,從數(shù)據(jù)交換規(guī)則定義、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)、移動(dòng)數(shù)據(jù)庫(kù)訪問(wèn)、數(shù)據(jù)同步等方面對(duì)實(shí)現(xiàn)應(yīng)用系統(tǒng)的離線數(shù)據(jù)處理方案進(jìn)行了分析,為移動(dòng)應(yīng)用系統(tǒng)使用離線數(shù)據(jù)庫(kù)提供了實(shí)現(xiàn)思路。
參考文獻(xiàn):
[1]穆鑫鑫,蔣同海,程力,等.基于JSON的離線數(shù)據(jù)同步策略及應(yīng)用[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2017,12.
[2]李青巖.Android下的移動(dòng)空間數(shù)據(jù)存取方法研究[D].江西理工大學(xué),2015.
[3]霍冰鵬.基于HTML5的離線存儲(chǔ)技術(shù)[J].十堰職業(yè)技術(shù)學(xué)院學(xué)報(bào),2013,4.