胡海燕
摘 要 為更好地實(shí)現(xiàn)工程教育改革目標(biāo),將CDIO模式下的教學(xué)系統(tǒng)擴(kuò)展移植到Android手機(jī)平臺,本文重點(diǎn)研究了CDIO教學(xué)系統(tǒng)在Android移動平臺使用的過程中,如何更好地保持客戶端與服務(wù)器數(shù)據(jù)庫同步的問題。研究的關(guān)鍵問題是將Hash算法運(yùn)用于Android平臺CDIO教學(xué)系統(tǒng)的數(shù)據(jù)庫更新,相對于傳統(tǒng)的數(shù)據(jù)同步算法減少了網(wǎng)絡(luò)流量,增加了網(wǎng)絡(luò)利用率,使系統(tǒng)性能得到優(yōu)化。
關(guān)鍵詞 Android 數(shù)據(jù)同步 Hash
中圖分類號:TN929.5-4;TP391 文獻(xiàn)標(biāo)識碼:A
0引言
受到網(wǎng)絡(luò)條件以及Android系統(tǒng)資源等多方面因素,Android系統(tǒng)通常不能和服務(wù)器網(wǎng)絡(luò)保持實(shí)時連接,而且網(wǎng)絡(luò)狀況也是不停地在變化,絕大部分Android系統(tǒng)是離線工作的,客戶端數(shù)據(jù)更新時,不僅要更新本地存儲設(shè)備內(nèi)的數(shù)據(jù)庫,同時也要通知遠(yuǎn)程服務(wù)器,并使服務(wù)器內(nèi)的數(shù)據(jù)庫進(jìn)行更新,這樣才能保持?jǐn)?shù)據(jù)的一致性。而當(dāng)本地設(shè)備要進(jìn)行數(shù)據(jù)查詢時,它要發(fā)送請求給遠(yuǎn)程數(shù)據(jù)庫,得到最新的數(shù)據(jù)信息,并更新到本地數(shù)據(jù)庫。
1傳統(tǒng)數(shù)據(jù)同步技術(shù)的不足
(1)當(dāng)Android系統(tǒng)進(jìn)行查詢時,即使本地存儲設(shè)備上的數(shù)據(jù)是最新的,它不去讀取它,而直接向服務(wù)器數(shù)據(jù)庫提交查詢,增加了服務(wù)器的負(fù)擔(dān),浪費(fèi)了本地數(shù)據(jù)庫可用資源。
(2)查詢的所有結(jié)果通過網(wǎng)絡(luò)進(jìn)行傳輸,傳回Android系統(tǒng),即使查詢結(jié)果中的部分?jǐn)?shù)據(jù),和本地存儲設(shè)備上的數(shù)據(jù)是重復(fù)一樣的,這些重復(fù)數(shù)據(jù)也要進(jìn)行傳輸。
(3)Android系統(tǒng)在得到數(shù)據(jù)結(jié)果后,要更新所有的數(shù)據(jù),即使其中的部分?jǐn)?shù)據(jù)不需要更新。
2一種基于 Hash算法的新方案
由于Andriod的移動性、間斷性、資源的有限性、存儲設(shè)備的特點(diǎn)以及網(wǎng)絡(luò)帶寬多樣性,決定了要有一種策略,使得該系統(tǒng)的數(shù)據(jù)庫和服務(wù)器數(shù)據(jù)庫進(jìn)行更新時達(dá)到優(yōu)化。本文利用Hash算法具有可以使任意長度的的信息壓縮成為固定長度的比特串的特點(diǎn),來減少數(shù)據(jù)流量從而增加系統(tǒng)利用率,實(shí)現(xiàn)同步優(yōu)化。
2.1系統(tǒng)模型
(1)Android系統(tǒng)向本地數(shù)據(jù)庫行一次查詢,得到查詢信息,并利用Hash算法,把自己的查詢數(shù)據(jù)結(jié)果取可以唯一地表示一段數(shù)據(jù)的“簽名”,任何兩段不同的數(shù)據(jù)所取得的簽名不會一致,即任何不同的數(shù)據(jù)查詢結(jié)果不會重復(fù)。Android系統(tǒng)把該簽名信息與查詢語句一并通過網(wǎng)絡(luò)提交給服務(wù)器數(shù)據(jù)庫。
(2)服務(wù)器數(shù)據(jù)庫得到查詢請求后,得到一組數(shù)據(jù)結(jié)果,并且用相同的Hash算法得到這組數(shù)據(jù)的數(shù)字“簽名”。然后服務(wù)器把兩組簽名進(jìn)行比對,可以得到Android系統(tǒng)的哪些數(shù)據(jù)結(jié)果和服務(wù)器數(shù)據(jù)庫的查詢結(jié)果不吻合。服務(wù)器只把所有不吻合的數(shù)據(jù)結(jié)果,通過網(wǎng)絡(luò)返回給Android系統(tǒng)。
(3)Android系統(tǒng)在得到這些不吻合數(shù)據(jù)后,對自己的本地數(shù)據(jù)庫進(jìn)行更新,寫到存儲設(shè)備之上。
2.2 具體方案
2.2.1Android平臺教學(xué)系統(tǒng)中Hash應(yīng)用
在Android平臺教學(xué)系統(tǒng)中,當(dāng)有新的查詢要求時,可以先對本地的數(shù)據(jù)庫數(shù)據(jù)進(jìn)行離線查詢,并且對查詢數(shù)據(jù)結(jié)果進(jìn)行Hash運(yùn)算,取得簽名,由于Hash函數(shù)的特性,一條數(shù)據(jù)結(jié)果可以用該簽名唯一地代表,下面表述了全部過程。
(1)經(jīng)過查詢后,可以在Android存儲器的數(shù)據(jù)庫中得到N列結(jié)果,假設(shè)分別為(R1,R2,…,Rn),且每列數(shù)據(jù)長度為m。
(2)對每一列結(jié)果進(jìn)行Hash運(yùn)算,得到N個Hash簽名,(H1,H2,…,Hn),且每個Hash摘要長度為n。
(3)對所有N列結(jié)果進(jìn)行Hash計算,得到長度為n的HL
(4)把HL和(H1,H2,…,Hn)以及查詢語句一并通過網(wǎng)絡(luò)發(fā)送給服務(wù)端
2.2.2服務(wù)端的Hash應(yīng)用
在服務(wù)端維護(hù)著數(shù)據(jù)庫的實(shí)時數(shù)據(jù)??蛻舳藭粫r地把最新的數(shù)據(jù)發(fā)送給服務(wù)端,更新服務(wù)端的數(shù)據(jù),同時,它也負(fù)責(zé)著對客戶端數(shù)據(jù)庫服務(wù)系統(tǒng)的查詢做出及時的響應(yīng)。
在接受到客戶端的請求之后,當(dāng)然包括了HL、(H1,H2,…,Hn),以及查詢語句,服務(wù)端進(jìn)行如下操作。
(1)用查詢語句對服務(wù)器端數(shù)據(jù)庫進(jìn)行查詢,得到T列數(shù)據(jù)結(jié)果,假設(shè)分別是(R1,R2,…,Rn),且每列數(shù)據(jù)長度為m;
(2)把該組數(shù)據(jù)結(jié)果用相同的Hash算法進(jìn)行處理,得到T列結(jié)果,假設(shè)分別為(H1,H2,…,Hn)且每個摘要的長度為rl;
(3)對所有N列結(jié)果進(jìn)行Hash計算,得到長度為n的HL;
(4)比較HL與HL,如果兩者相同,由Hash函數(shù)的特性,可以肯定的說,客戶端得到的數(shù)據(jù)結(jié)果與服務(wù)器數(shù)據(jù)庫得到的數(shù)據(jù)結(jié)果是一致的,那么服務(wù)端數(shù)據(jù)庫就不用把所有的查詢結(jié)果都返回給客戶端,只要通知客戶端在其之上的數(shù)據(jù)就是最新的數(shù)據(jù)即可,所有Android上的當(dāng)前數(shù)據(jù)都是有效的。
(5)如果HL與HL兩者不同。那么就說明兩者的原始查詢數(shù)據(jù)結(jié)果是不同的,這時服務(wù)端把從客戶端得到的(H1,H2,…,Hn)與從服務(wù)端得到的(R1,R2,…,Rn)逐條進(jìn)行比較,所有不相同的結(jié)果即為被更新或新增加的數(shù)據(jù)。這些所有不同的Hash所對應(yīng)的原始數(shù)據(jù)結(jié)果,都應(yīng)該被通過網(wǎng)絡(luò)傳送回客戶端。
(6)客戶端在接收到這些不同的數(shù)據(jù)結(jié)果后,會把他們更新到自己本地的數(shù)據(jù)庫之中,使其與服務(wù)器端保持?jǐn)?shù)據(jù)的一致性。
3結(jié)論
為了能實(shí)現(xiàn)學(xué)生“隨時、隨地、隨身”個性化學(xué)習(xí),本文將CDIO教學(xué)系統(tǒng)引入Android移動平臺,在教學(xué)方式上實(shí)現(xiàn)突破。本文重點(diǎn)對此模式下數(shù)據(jù)同步技術(shù)優(yōu)化的研究,針對于傳統(tǒng)數(shù)據(jù)同步技術(shù) 的不足,提出了一種新的數(shù)據(jù)同步方案,通過實(shí)驗(yàn)驗(yàn)證,對系統(tǒng)優(yōu)化有實(shí)際意義。
基金項(xiàng)目:吉林省社會科學(xué)基金項(xiàng)目 《基于大數(shù)據(jù)服務(wù)平臺的創(chuàng)新創(chuàng)業(yè)型大學(xué)生培養(yǎng)研究》(2016B192)。