基于分布共享存儲(chǔ)的移動(dòng)設(shè)備數(shù)據(jù)共享方法
【專利說明】基于分布共享存儲(chǔ)的移動(dòng)設(shè)備數(shù)據(jù)共享方法
[0001]
技術(shù)領(lǐng)域
[0002]本發(fā)明涉及一種基于分布共享存儲(chǔ)的移動(dòng)設(shè)備數(shù)據(jù)共享方法,屬于計(jì)算機(jī)應(yīng)用技術(shù)領(lǐng)域,具體涉及在局域網(wǎng)絡(luò)中的移動(dòng)設(shè)備上構(gòu)建一個(gè)數(shù)據(jù)共享平臺(tái)。
【背景技術(shù)】
[0003]隨著移動(dòng)智能設(shè)備的性能越來越高,存儲(chǔ)量越來越大,日常生活已離不開移動(dòng)設(shè)備的參與。在這種情況下,在不同移動(dòng)設(shè)備間進(jìn)行數(shù)據(jù)的共享就成為了人們的迫切需求。目前,移動(dòng)設(shè)備間的數(shù)據(jù)共享主要有兩種方式:Hub-and_Spoke以及Cloud Storage。
[0004]在hub-and-spoke系統(tǒng)中,用戶需要指定一臺(tái)特定的機(jī)器作為整個(gè)系統(tǒng)的“主節(jié)點(diǎn)”,即hub device,它保存了所有共享的數(shù)據(jù)的副本。其他設(shè)備如果要進(jìn)行通信,必須首先同“主節(jié)點(diǎn)”進(jìn)行連接,將需要發(fā)送的數(shù)據(jù)首先拷貝到“主節(jié)點(diǎn)”上,然后“主節(jié)點(diǎn)”再將數(shù)據(jù)推送到其他的設(shè)備上。在進(jìn)行連接時(shí),可以利用快速的本地連接,比如直接連接或者局域網(wǎng)。由其特點(diǎn)可知,在hub-and-spoke模型中,只需要查看hub device,就可以很容易的得到所有共享的數(shù)據(jù)。此外,由于所有操作都需要通過唯一的hub device來進(jìn)行,因此,對(duì)于同步問題,該模型也可以很容易處理。但是,該系統(tǒng)也有其缺陷:在一個(gè)hub-and-spoke系統(tǒng)中,hub device必須存在;一旦hub device崩潰或者斷連,則整個(gè)系統(tǒng)無法正常工作;它僅在星型的拓?fù)浣Y(jié)構(gòu)中高效運(yùn)行,對(duì)于其他拓?fù)浣Y(jié)構(gòu),它的效率就不高了 ;如果兩臺(tái)設(shè)備有直接的連接,它們直接的通信仍需要通過hub device來進(jìn)行;Hub device保存了所有共享的數(shù)據(jù)副本,它的存儲(chǔ)容量成為整個(gè)系統(tǒng)的瓶頸。
[0005]另一種共享數(shù)據(jù)的方式Cloud Storage,也就是常說的云存儲(chǔ)方式,它是利用存在于互聯(lián)網(wǎng)中的多臺(tái)服務(wù)器來替代hub-and-spoke中的hub device。這些服務(wù)器基于分布式系統(tǒng)進(jìn)行構(gòu)建,但對(duì)于用戶而言,它們的拓?fù)浣Y(jié)構(gòu)并不重要。用戶只需要登錄一個(gè)網(wǎng)站,就可以查看存儲(chǔ)在各個(gè)服務(wù)器上的文件,而不需要知道文件具體存儲(chǔ)在哪個(gè)服務(wù)器上。相較于hub-and-spoke模型,云存儲(chǔ)更可靠。由于存在多臺(tái)服務(wù)器,且數(shù)據(jù)往往都會(huì)有冗余,因此,即使其中一些服務(wù)器無法運(yùn)行,其他服務(wù)器仍能提供服務(wù)。此外,由于有整個(gè)互聯(lián)網(wǎng)中服務(wù)器的支持,在hub-and-spoke中存儲(chǔ)容量的限制,在云存儲(chǔ)中幾乎不存在。但是云存儲(chǔ)也帶來了一些新的限制:服務(wù)提供商可能會(huì)限制支持的數(shù)據(jù)類型;設(shè)備仍然無法直接進(jìn)行通信,即使它們共處于一個(gè)快速的局域網(wǎng)中;文件操作需要通過網(wǎng)絡(luò)服務(wù)提供商來進(jìn)行,受到了網(wǎng)絡(luò)帶寬等的限制;數(shù)據(jù)存儲(chǔ)在服務(wù)器中,可能出現(xiàn)安全與隱私問題。
【發(fā)明內(nèi)容】
[0006]發(fā)明目的:本發(fā)明要解決的技術(shù)問題是在局域網(wǎng)中提供一種基于分布共享存儲(chǔ)的移動(dòng)設(shè)備數(shù)據(jù)共享平臺(tái)的構(gòu)建方法,該平臺(tái)不需要一臺(tái)集中的服務(wù)器來支持,能夠供開發(fā)者設(shè)計(jì)自己的數(shù)據(jù)同步與沖突消解策略,并提供其它應(yīng)用基于該平臺(tái)進(jìn)行快速開發(fā)的接□ O
[0007]技術(shù)方案:一種基于分布共享存儲(chǔ)的移動(dòng)設(shè)備數(shù)據(jù)共享方法,其主要包括以下步驟:
1)在各個(gè)移動(dòng)設(shè)備上設(shè)置需要共享的數(shù)據(jù),利用數(shù)據(jù)監(jiān)控進(jìn)程對(duì)共享的數(shù)據(jù)進(jìn)行監(jiān)控,記錄數(shù)據(jù)變化信息;
2)數(shù)據(jù)管理進(jìn)程為了能夠管理共享的文件,會(huì)生成一個(gè)同文件系統(tǒng)對(duì)應(yīng)的樹形數(shù)據(jù)結(jié)構(gòu)來管理對(duì)應(yīng)的文件數(shù)據(jù),這個(gè)樹形數(shù)據(jù)結(jié)構(gòu)稱為文件樹。操作系統(tǒng)的文件系統(tǒng)是用來管理本地文件,并且提供接口來讓其他應(yīng)用對(duì)文件執(zhí)行讀寫等操作的。而數(shù)據(jù)管理進(jìn)程利用文件樹,也能夠?qū)崿F(xiàn)對(duì)共享文件的管理。當(dāng)?shù)玫絹碜员O(jiān)控進(jìn)程的變化信息時(shí),對(duì)其進(jìn)行分析,依靠文件樹找到對(duì)應(yīng)的文件節(jié)點(diǎn),并利用版本控制模塊更新該節(jié)點(diǎn)的數(shù)據(jù)版本信息,將發(fā)生的變化信息發(fā)送給數(shù)據(jù)同步進(jìn)程;
3)數(shù)據(jù)同步進(jìn)程依照設(shè)定的同步策略,將樹形數(shù)據(jù)結(jié)構(gòu)的變化以及需要同步的數(shù)據(jù),通過數(shù)據(jù)傳輸模塊與其它移動(dòng)設(shè)備進(jìn)行同步;
4)接收到同步信息時(shí),利用數(shù)據(jù)管理進(jìn)程中的沖突檢測(cè)與消解模塊,對(duì)接收到的數(shù)據(jù)進(jìn)行處理;
5)在網(wǎng)絡(luò)連接出現(xiàn)問題時(shí)利用斷連處理模塊進(jìn)行處理,并在設(shè)備重新建立連接后進(jìn)行重連處理。
[0008]上述步驟I)的具體過程為:
11)在局域網(wǎng)絡(luò)中部署需要使用的移動(dòng)設(shè)備;
12)設(shè)定需要同步的數(shù)據(jù);
13)利用Android系統(tǒng)的系統(tǒng)API,對(duì)需要同步的數(shù)據(jù)進(jìn)行監(jiān)控,記錄下數(shù)據(jù)變化的信息,并將信息發(fā)送到全局消息隊(duì)列中。
[0009]在Android系統(tǒng)中,利用系統(tǒng)API進(jìn)行數(shù)據(jù)的監(jiān)控時(shí),一旦數(shù)據(jù)發(fā)生變化,都會(huì)拋出一系列的響應(yīng)事件。對(duì)于哪些事件感興趣,就可以在系統(tǒng)API中進(jìn)行注冊(cè)。
[0010]上述步驟2)的具體過程為:
21)依據(jù)共享的文件數(shù)據(jù),構(gòu)建一個(gè)樹形數(shù)據(jù)結(jié)構(gòu)來表示共享的數(shù)據(jù),該結(jié)構(gòu)稱為文件樹。文件樹的每個(gè)節(jié)點(diǎn)同共享的數(shù)據(jù)文件是一一對(duì)應(yīng)的,它不僅包含了共享數(shù)據(jù)的路徑,以便依據(jù)路徑找到真實(shí)數(shù)據(jù),還包括了數(shù)據(jù)的基本信息,包括大小,作者,修改時(shí)間等,也包括了數(shù)據(jù)的版本信息,除了擁有版本號(hào)之外,還擁有一個(gè)向量時(shí)鐘VC,VC是一組向量[tl,t2,一,tn],每個(gè)元素ti對(duì)應(yīng)于該數(shù)據(jù)在i設(shè)備上的版本號(hào),其初始值為[0,0…O];
每個(gè)文件同文件樹中的節(jié)點(diǎn)都是一一對(duì)應(yīng)的關(guān)系。每個(gè)文件節(jié)點(diǎn)都包含了基本信息,版本信息等,同時(shí)還提供了讀寫等操作供其他模塊使用。
[0011]22)分析每種數(shù)據(jù)操作所對(duì)應(yīng)的數(shù)據(jù)變化信息;
23)由保存的數(shù)據(jù)變化信息反推出在共享數(shù)據(jù)上的數(shù)據(jù)操作,包括了修改,復(fù)制,刪除,重命名等;這些文件數(shù)據(jù)操作,每一個(gè)都對(duì)應(yīng)于一個(gè)或多個(gè)系統(tǒng)事件。其中文件移動(dòng)和文件夾移動(dòng)都對(duì)應(yīng)了多個(gè)事件序列,這是由它們的起始目錄和目標(biāo)目錄是否被監(jiān)聽所決定的。
[0012]24)每當(dāng)本地修改數(shù)據(jù),使得數(shù)據(jù)發(fā)生變化時(shí),都會(huì)依靠文件樹找到對(duì)應(yīng)的文件節(jié)點(diǎn),更新數(shù)據(jù)的基本信息。在更新版本信息時(shí),除了更新版本號(hào)外,還會(huì)增加本地向量時(shí)鐘VC中對(duì)應(yīng)于本地的部分,即VC中相應(yīng)維數(shù)的值加1,同時(shí)將變化信息以消息的形式發(fā)送給數(shù)據(jù)同步進(jìn)程;在接收到遠(yuǎn)端的數(shù)據(jù)更新時(shí),同樣需要將本地的VC進(jìn)行更新。
[0013]25)當(dāng)出現(xiàn)新建,刪除,移動(dòng)文件使得文件結(jié)構(gòu)發(fā)生變化時(shí),文件樹的結(jié)構(gòu)也要得到對(duì)應(yīng)的變化,并將變化信息發(fā)送給數(shù)據(jù)同步進(jìn)程。
[0014]上述步驟3)的具體過程為:
31)設(shè)計(jì)數(shù)據(jù)同步策略,包括何時(shí)同步以及如何同步;
32)利用TCP協(xié)議在需要通信的移動(dòng)設(shè)備間建立連接;
33)利用Socket在不同設(shè)備間傳輸需要發(fā)送的信息以及需要同步的數(shù)據(jù)。
[0015]在進(jìn)行同步時(shí),先發(fā)送數(shù)據(jù)的基本信息與版本信息,當(dāng)對(duì)方確實(shí)需要數(shù)據(jù)時(shí),再傳輸文件數(shù)據(jù)。由于基本信息與版本信息很小,避免了每次都發(fā)送數(shù)據(jù),從而有效地提高了數(shù)據(jù)同步效率。
[0016]上述步驟4)的具體過程為:
41)對(duì)于接收到的數(shù)據(jù)同步信息,將其中的數(shù)據(jù)版本信息交付給沖突檢測(cè)模塊,同本地的版本信息進(jìn)行比較;
42)設(shè)本地的版本信息時(shí)鐘向量為[tl,t2,…,tn],其中本地及遠(yuǎn)端的對(duì)應(yīng)維度向量值為ti,tj ;收到的版本信息時(shí)鐘向量為[yl,y2,…,yn],其中本地及遠(yuǎn)端的對(duì)應(yīng)維度向量值為yi, yj°
[0017]a)若ti>yi, t j=yj,遠(yuǎn)端版本低于本地版本;
b)若tj>yj,ti=yi,本地版本低于遠(yuǎn)端版本;
c)若ti>yi,tj〈yj,發(fā)生沖突;
d)若ti〈yi或者tj>yj,理論上不應(yīng)該存在這種情況。
[0018]沖突檢測(cè)模塊利用上述規(guī)則進(jìn)行判斷處理;
對(duì)于大于兩臺(tái)設(shè)備的環(huán)境下,由于設(shè)備間的通信也是兩兩進(jìn)行的,因此在兩兩之間利用上述規(guī)則進(jìn)行判斷。
[0019]43)如果出現(xiàn)上述的a),b)情況,由數(shù)據(jù)同步進(jìn)程進(jìn)行處理;如果出現(xiàn)c),則由沖突消解模塊進(jìn)行處理;
44)沖突消解模塊依照開發(fā)者設(shè)定的沖突消解方法,對(duì)發(fā)生沖突的數(shù)據(jù)進(jìn)行處理。沖突消解的方法可以是對(duì)于沖突的數(shù)據(jù),進(jìn)行重命名操作;或者向用戶拋出沖突信息,并停止對(duì)于沖突數(shù)