一種基于動(dòng)態(tài)規(guī)劃的快速數(shù)據(jù)同步方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種數(shù)據(jù)同步方法,尤其是涉及一種基于動(dòng)態(tài)規(guī)劃的快速數(shù)據(jù)同步方 法。
【背景技術(shù)】
[0002] 在C/S架構(gòu)系統(tǒng)中,多個(gè)客戶(hù)端都要從服務(wù)器獲取數(shù)據(jù),并保持與服務(wù)器的數(shù)據(jù) 同步。在復(fù)雜的網(wǎng)絡(luò)環(huán)境下,從服務(wù)器傳送數(shù)據(jù)到一個(gè)客戶(hù)端可能要經(jīng)過(guò)多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn),這 必然就需要對(duì)網(wǎng)絡(luò)傳輸路徑進(jìn)行規(guī)劃。
[0003] 按照傳統(tǒng)的方式,從服務(wù)器到客戶(hù)端選擇傳輸路徑時(shí),往往采取固定的幾條路徑, 當(dāng)某一條路徑出現(xiàn)故障時(shí),再選擇其他的路徑,其效率不能保證,并且需要事先選擇好固定 的路由,增加了工程實(shí)施的工作量。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種基于動(dòng)態(tài)規(guī)劃 的數(shù)據(jù)同步方法,通過(guò)應(yīng)用該算法解決多階段最優(yōu)決策問(wèn)題,尋找最佳的傳輸路徑,實(shí)現(xiàn)數(shù) 據(jù)的快速同步。
[0005] 本發(fā)明的目的可以通過(guò)以下技術(shù)方案來(lái)實(shí)現(xiàn):
[0006] -種基于動(dòng)態(tài)規(guī)劃的快速數(shù)據(jù)同步方法,其特征在于,該方法包括以下步驟:
[0007] -種基于動(dòng)態(tài)規(guī)劃的快速數(shù)據(jù)同步方法,其特征在于,該方法包括以下步驟:
[0008] (1)數(shù)據(jù)源節(jié)點(diǎn)獲取待同步的節(jié)點(diǎn)集合{Node。};
[0009](2)數(shù)據(jù)源節(jié)點(diǎn)遍歷待同步的節(jié)點(diǎn)集合{Node。},向集合中的每一個(gè)待同步的節(jié)點(diǎn) 發(fā)送同步通知,包括時(shí)間戳、更新數(shù)據(jù)包大小和數(shù)據(jù)的MD5碼;
[0010] (3)待同步的節(jié)點(diǎn)根據(jù)設(shè)定周期生成網(wǎng)絡(luò)拓?fù)鋱D;
[0011] (4)待同步的節(jié)點(diǎn)根據(jù)更新數(shù)據(jù)包大小隨機(jī)休眠一段時(shí)間;
[0012] (5)獲取與待同步的節(jié)點(diǎn)連通的節(jié)點(diǎn)集合{NodeJ;
[0013] (6)遍歷集合{NodeJ,找到數(shù)據(jù)已經(jīng)同步成功的節(jié)點(diǎn)集合{NodeJ;
[0014] (7)遍歷集合{NodeJ,對(duì)集合中的每一個(gè)節(jié)點(diǎn)Noder,根據(jù)動(dòng)態(tài)規(guī)劃算法求出代價(jià) 函數(shù)值;
[0015] (8)代價(jià)函數(shù)值最小值對(duì)應(yīng)的路徑為最短傳輸路徑,根據(jù)此路徑進(jìn)行數(shù)據(jù)傳輸;
[0016] (9)傳輸完成后,比對(duì)此次傳輸接收到的MD5碼和接收到的同步通知中的MD5碼, 若一致則結(jié)束本次傳輸,否則執(zhí)行步驟(10);
[0017] (10)尋找次優(yōu)路徑進(jìn)行數(shù)據(jù)傳輸,返回步驟(9)。
[0018] 所述的步驟(2)中所述的設(shè)定周期根據(jù)網(wǎng)絡(luò)穩(wěn)定性確定,對(duì)于不穩(wěn)定的網(wǎng)絡(luò),周 期設(shè)定在〇. 5-5小時(shí)之間,對(duì)于穩(wěn)定的網(wǎng)絡(luò),周期設(shè)定在8-48小時(shí)之間。
[0019] 所述的步驟(2)中網(wǎng)絡(luò)拓?fù)鋱D包括連通性和帶寬信息。
[0020] 所述的步驟⑷中休眠時(shí)間sleepTime(單位為秒)與更新數(shù)據(jù)包大 小dataSize(單位為MB)具體關(guān)系為sleepTime=rand() %(unsignedint) (dataSize/10)+l〇
[0021] 所述的步驟(4)中休眠時(shí)間的上限為每IOMb-秒。
[0022] 所述的步驟(7)中動(dòng)態(tài)規(guī)劃算法具體包括以下子步驟:
[0023] (201)設(shè)所述的待同步的節(jié)點(diǎn)集合{Node。}中的一具體節(jié)點(diǎn)為Node。,將所述的已 經(jīng)同步成功的節(jié)點(diǎn)Noc^和Node。之間劃分為N個(gè)階段,并將各階段狀態(tài)集合記為Si,其中 i= 1,2…N;
[0024] (202)判斷i是否等于N,若是則執(zhí)行步驟(203),否則執(zhí)行步驟(204);
[0025] (203)計(jì)算代價(jià)函數(shù)值,計(jì)算公式為:
[0026
,其中Nodej是狀態(tài)集合SN中的節(jié)點(diǎn);
[0027] (204)計(jì)算代價(jià)函數(shù)值,計(jì)算公式為:
[0028]
,其中Node」是狀態(tài)集合 Si中的節(jié)點(diǎn);Node15是Node在下一階段的后繼節(jié)點(diǎn)。
[0029] 與現(xiàn)有技術(shù)相比,本發(fā)明具有如下優(yōu)點(diǎn):
[0030] (1)在數(shù)據(jù)同步時(shí),解決了求解最優(yōu)路徑的問(wèn)題,降低了數(shù)據(jù)同步的代價(jià),提高了 數(shù)據(jù)同步的速度;
[0031] ⑵使用本發(fā)明的數(shù)據(jù)同步節(jié)點(diǎn)優(yōu)先會(huì)從臨近節(jié)點(diǎn)同步數(shù)據(jù),無(wú)形中降低了服務(wù) 器的負(fù)載;
[0032] (3)當(dāng)已規(guī)劃的路徑中有節(jié)點(diǎn)故障時(shí),系統(tǒng)可以重新生成拓?fù)?,?dòng)態(tài)跳過(guò)故障節(jié) 點(diǎn),從次優(yōu)路徑同步數(shù)據(jù)。
【附圖說(shuō)明】
[0033] 圖1為本發(fā)明網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)示意圖;
[0034] 圖2為本發(fā)明基于動(dòng)態(tài)規(guī)劃的快速數(shù)據(jù)同步方法工作流程圖;
[0035] 圖3為本發(fā)明應(yīng)用于有軌電車(chē)弱電集成系統(tǒng)的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0036] 下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明。
[0037] 實(shí)施例
[0038] 本發(fā)明利用動(dòng)態(tài)規(guī)劃算法求解各個(gè)節(jié)點(diǎn)如何找到一條耗時(shí)最短的路徑來(lái)同步數(shù) 據(jù)。如圖1所示,S為數(shù)據(jù)源節(jié)點(diǎn),節(jié)點(diǎn)413233』1、82、(:1、02、0是從節(jié)點(diǎn)3上獲取數(shù)據(jù) 的節(jié)點(diǎn)。
[0039] 當(dāng)節(jié)點(diǎn)S需要把數(shù)據(jù)同步到其他各節(jié)點(diǎn)時(shí),整個(gè)工作流程如圖2所示,具體描述如 下:
[0040] 步驟1 :數(shù)據(jù)源節(jié)點(diǎn)S獲取待同步的節(jié)點(diǎn)集合{Node。}(對(duì)于不同的數(shù)據(jù)內(nèi)容,待同 步的節(jié)點(diǎn)對(duì)象可能不同),執(zhí)行步驟2 ;
[0041]步驟2 :數(shù)據(jù)源節(jié)點(diǎn)S遍歷待同步的節(jié)點(diǎn)集合{Node。},向集合中的每一個(gè)待同步 的節(jié)點(diǎn)發(fā)送同步通知,包括時(shí)間戳、更新數(shù)據(jù)包大小和數(shù)據(jù)的MD5碼,執(zhí)行步驟3 ;
[0042] 步驟3:待同步的節(jié)點(diǎn)根據(jù)設(shè)定周期生成網(wǎng)絡(luò)拓?fù)鋱D,其中設(shè)定周期視網(wǎng)絡(luò)穩(wěn)定 性而定,對(duì)于不穩(wěn)定的網(wǎng)絡(luò),同步周期可以設(shè)定在0. 5-5小時(shí)之間,而對(duì)于可靠的網(wǎng)絡(luò),周 期可以設(shè)定在8-48小時(shí)之間,網(wǎng)絡(luò)拓?fù)鋱D包括連通性和帶寬信息等,執(zhí)行步驟4 ;
[0043] 步驟4 :將待同步節(jié)點(diǎn)集合中的一個(gè)節(jié)點(diǎn)記為Node。,當(dāng)Node。收到了數(shù)據(jù)源節(jié)點(diǎn) S發(fā)送的同步通知時(shí),待同步的節(jié)點(diǎn)根據(jù)更新數(shù)據(jù)包大小隨機(jī)休眠一段時(shí)間,目的是防止所 有節(jié)點(diǎn)同時(shí)進(jìn)行同步數(shù)據(jù),休眠時(shí)間的上限為每IOMb-秒,執(zhí)行步驟5 ;
[0044]步驟5 :獲取與待同步的節(jié)點(diǎn)連通的節(jié)點(diǎn)集合{NodeJ,執(zhí)行步驟6 ;
[0045]步驟6 :遍歷集合{NodeJ,找到數(shù)據(jù)已經(jīng)同步成功的節(jié)點(diǎn)集合{NodeJ,執(zhí)行步驟 7 ;
[0046]步驟7 :遍歷集合{NodeJ,對(duì)集合中的每一個(gè)節(jié)點(diǎn)Nodep根據(jù)動(dòng)態(tài)規(guī)劃算法,將 Node。和Node 間劃分為4個(gè)階段,并將各階段狀態(tài)記SS1,其中i= 1,2…N,執(zhí)行步驟 8 ;
[0047] 步驟8 :將i賦值為N,執(zhí)行步驟9 ;
[0048] 步驟9:判斷i是否小于N,若是則執(zhí)行步驟11,否則執(zhí)行步驟10;
[0049] 步驟10 :計(jì)算代價(jià)函數(shù)值,計(jì)算公式為:
[0050