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