本發(fā)明涉及視頻處理,特別涉及一種嵌入式通信設(shè)備數(shù)據(jù)傳輸方法。
背景技術(shù):
隨著信息技術(shù)的不斷發(fā)展,數(shù)據(jù)日益成為人們?nèi)粘I钪兄匾Y源。爆炸式增長(zhǎng)的數(shù)據(jù)必然帶來(lái)存儲(chǔ)設(shè)備的持續(xù)增加。目前,數(shù)據(jù)存儲(chǔ)環(huán)境下的現(xiàn)代數(shù)據(jù)中心的存儲(chǔ)節(jié)點(diǎn)規(guī)模少則幾萬(wàn)多則幾十萬(wàn),但在規(guī)模巨大的存儲(chǔ)環(huán)境系統(tǒng)中,存儲(chǔ)節(jié)點(diǎn)異?;蛘呤б殉蔀橐环N普遍現(xiàn)象;與此同時(shí),因網(wǎng)絡(luò)連接設(shè)備或者存儲(chǔ)節(jié)點(diǎn)其它元器件造成的數(shù)據(jù)不可訪問(wèn)或者丟失現(xiàn)象也時(shí)有發(fā)生。對(duì)于視頻編碼存儲(chǔ)而言,計(jì)算量少的編譯碼復(fù)雜度與數(shù)據(jù)丟失時(shí)如何利用最少的數(shù)據(jù)量進(jìn)行數(shù)據(jù)恢復(fù)都具有局部的時(shí)間特性,例如存儲(chǔ)中心網(wǎng)絡(luò)帶寬因素,cpu計(jì)算能力因素,在視頻文件利用編碼冗余策略進(jìn)行存儲(chǔ)時(shí),會(huì)對(duì)文件的存儲(chǔ)時(shí)間性能造成影響。若系統(tǒng)內(nèi)具有高速帶寬與高性能的計(jì)算能力,視頻存儲(chǔ)單位大小的文件就會(huì)消耗更短的時(shí)間。而較高的可靠性與系統(tǒng)內(nèi)最小的數(shù)據(jù)冗余與系統(tǒng)消耗較少的電能具有全局的時(shí)間特性,這將會(huì)直接決定系統(tǒng)消耗的設(shè)備成本,管理成本及能耗成本。為了滿足日益擴(kuò)展的數(shù)據(jù)存儲(chǔ)需求,人們對(duì)視頻數(shù)據(jù)存儲(chǔ)的可靠性,可用性等相關(guān)特性提出了更高的要求,如何實(shí)現(xiàn)數(shù)據(jù)的低冗余度高可靠性存儲(chǔ)已經(jīng)成為業(yè)界面臨的一個(gè)巨大挑戰(zhàn)。
技術(shù)實(shí)現(xiàn)要素:
為解決上述現(xiàn)有技術(shù)所存在的問(wèn)題,本發(fā)明提出了一種嵌入式通信設(shè)備數(shù)據(jù)傳輸方法,包括:
當(dāng)檢測(cè)到存儲(chǔ)節(jié)點(diǎn)發(fā)生數(shù)據(jù)丟失時(shí),調(diào)度分布式存儲(chǔ)在子集中的校驗(yàn)數(shù)據(jù)塊,對(duì)丟失數(shù)據(jù)塊進(jìn)行重建。
優(yōu)選地,所述調(diào)度分布式存儲(chǔ)在子集中的校驗(yàn)數(shù)據(jù)塊之前,還包括:
通過(guò)下載部分原數(shù)據(jù)分塊與部分校驗(yàn)數(shù)據(jù)塊,通過(guò)重建的方式在嵌入式終端重建丟失數(shù)據(jù)塊,恢復(fù)完成后,在使用文件的同時(shí)將已經(jīng)重建出的數(shù)據(jù)分塊,經(jīng)過(guò)數(shù)據(jù)驗(yàn)證,重新發(fā)送到存儲(chǔ)系統(tǒng)。
優(yōu)選地,所述調(diào)度分布式存儲(chǔ)在子集中的校驗(yàn)數(shù)據(jù)塊,進(jìn)一步包括:
嵌入式終端調(diào)度子集中可滿足重建要求的最少校驗(yàn)數(shù)據(jù)塊。
優(yōu)選地,若出現(xiàn)多個(gè)存儲(chǔ)節(jié)點(diǎn)發(fā)生異常,計(jì)算恢復(fù)所有文件所需要的計(jì)算量,并按照計(jì)算量的均衡負(fù)載原則,對(duì)恢復(fù)節(jié)點(diǎn)進(jìn)行任務(wù)分配。
優(yōu)選地,所述當(dāng)校驗(yàn)信息子集中出現(xiàn)節(jié)點(diǎn)異常時(shí),調(diào)度源文件進(jìn)行二次編碼,并再次部署于新加入的節(jié)點(diǎn)上。
優(yōu)選地,利用定期心跳和事件廣播組合的方式實(shí)現(xiàn)系統(tǒng)節(jié)點(diǎn)狀態(tài)的監(jiān)測(cè),當(dāng)系統(tǒng)出現(xiàn)新的節(jié)點(diǎn)時(shí),該節(jié)點(diǎn)將通過(guò)廣播的方式將本節(jié)點(diǎn)的信息傳播給協(xié)調(diào)服務(wù)器及各個(gè)存儲(chǔ)節(jié)點(diǎn);同時(shí),每個(gè)存儲(chǔ)節(jié)點(diǎn)定期向其對(duì)應(yīng)的文件管理節(jié)點(diǎn)報(bào)告自已存在的狀態(tài),如果對(duì)應(yīng)的文件管理節(jié)點(diǎn)一段時(shí)間內(nèi)沒(méi)有收到心跳則認(rèn)為該存儲(chǔ)節(jié)點(diǎn)異常。
優(yōu)選地,異常節(jié)點(diǎn)在恢復(fù)過(guò)程中,首先檢測(cè)與其余節(jié)點(diǎn)之間的連接情況,當(dāng)恢復(fù)文件的節(jié)點(diǎn)與其余節(jié)點(diǎn)具有差別較大的網(wǎng)絡(luò)連接時(shí),對(duì)各個(gè)鏈路發(fā)送測(cè)試數(shù)據(jù)包進(jìn)行數(shù)據(jù)通路測(cè)評(píng),并進(jìn)行排序,并計(jì)算出所需恢復(fù)的最少文件塊個(gè)數(shù)p,從而從最優(yōu)的p個(gè)網(wǎng)絡(luò)連接中,獲取文件塊,對(duì)文件進(jìn)行恢復(fù)。
本發(fā)明相比現(xiàn)有技術(shù),具有以下優(yōu)點(diǎn):
本發(fā)明提出了一種嵌入式通信設(shè)備數(shù)據(jù)傳輸方法,盡可能少地利用視頻存儲(chǔ)節(jié)點(diǎn)集內(nèi)部網(wǎng)絡(luò)帶寬及計(jì)算能力來(lái)實(shí)現(xiàn)數(shù)據(jù)恢復(fù),在實(shí)現(xiàn)數(shù)據(jù)高可用性的同時(shí),提高了擴(kuò)展性能。
附圖說(shuō)明
圖1是根據(jù)本發(fā)明實(shí)施例的嵌入式通信設(shè)備數(shù)據(jù)傳輸方法的流程圖。
具體實(shí)施方式
下文與圖示本發(fā)明原理的附圖一起提供對(duì)本發(fā)明一個(gè)或者多個(gè)實(shí)施例的詳細(xì)描述。結(jié)合這樣的實(shí)施例描述本發(fā)明,但是本發(fā)明不限于任何實(shí)施例。本發(fā)明的范圍僅由權(quán)利要求書(shū)限定,并且本發(fā)明涵蓋諸多替代、修改和等同物。在下文描述中闡述諸多具體細(xì)節(jié)以便提供對(duì)本發(fā)明的透徹理解。出于示例的目的而提供這些細(xì)節(jié),并且無(wú)這些具體細(xì)節(jié)中的一些或者所有細(xì)節(jié)也可以根據(jù)權(quán)利要求書(shū)實(shí)現(xiàn)本發(fā)明。
本發(fā)明的一方面提供了一種嵌入式通信設(shè)備數(shù)據(jù)傳輸方法。圖1是根據(jù)本發(fā)明實(shí)施例的嵌入式通信設(shè)備數(shù)據(jù)傳輸方法流程圖。
本發(fā)明的視頻數(shù)據(jù)存儲(chǔ)系統(tǒng)采用了存儲(chǔ)節(jié)點(diǎn)子集擴(kuò)展策略。在系統(tǒng)軟件結(jié)構(gòu)上采用新的數(shù)據(jù)恢復(fù)方式,同時(shí)利用嵌入式終端的計(jì)算能力,使得系統(tǒng)盡可能少的利用存儲(chǔ)節(jié)點(diǎn)集內(nèi)部網(wǎng)絡(luò)帶寬及計(jì)算能力來(lái)實(shí)現(xiàn)丟失數(shù)據(jù)的恢復(fù)重建。將丟失數(shù)據(jù)塊的恢復(fù)功能部分的遷移到嵌入式終端。視頻數(shù)據(jù)存儲(chǔ)系統(tǒng)中將單個(gè)文件的數(shù)據(jù)經(jīng)過(guò)編碼后分塊封裝,均勻地存儲(chǔ)于鏡像子集的不同節(jié)點(diǎn)上,系統(tǒng)提供一個(gè)可擴(kuò)展的存儲(chǔ)卷,卷內(nèi)的數(shù)據(jù)采用層次目錄結(jié)構(gòu)組織,支持多機(jī)多進(jìn)程的并發(fā)存取。使系統(tǒng)可根據(jù)存儲(chǔ)容量的需求進(jìn)行鏡像子集擴(kuò)展,利用各個(gè)鏡像子集節(jié)點(diǎn)存儲(chǔ)能力達(dá)到按需擴(kuò)展的目的。
鏡像子集形成一個(gè)統(tǒng)一的單一文件映射,每個(gè)子集間形成一致的編碼存儲(chǔ)視圖。每個(gè)子集內(nèi)存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)的為相同文件的不同分塊,系統(tǒng)維護(hù)同一文件的不同分塊與存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系。各個(gè)鏡像子集間將組合成一個(gè)具有層次結(jié)構(gòu)的樹(shù)狀圖,以建立存儲(chǔ)文件集合與設(shè)備集合之間的映射關(guān)系。同時(shí),各個(gè)存儲(chǔ)節(jié)點(diǎn)開(kāi)辟一段單獨(dú)的存儲(chǔ)空間,用于系統(tǒng)特殊用途的數(shù)據(jù)存儲(chǔ),避免造成鏡像子集內(nèi)的存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)文件目錄不一致的情況。系統(tǒng)中各個(gè)存儲(chǔ)節(jié)點(diǎn)獨(dú)立地維護(hù)子集的存儲(chǔ)資源和文件的元數(shù)據(jù)本身,并能夠獨(dú)立提供文件分塊讀取服務(wù)。當(dāng)存儲(chǔ)節(jié)點(diǎn)內(nèi)磁盤(pán)損壞時(shí),磁盤(pán)所在節(jié)點(diǎn)對(duì)數(shù)據(jù)塊進(jìn)行恢復(fù),文件恢復(fù)節(jié)點(diǎn)將調(diào)度分布式存儲(chǔ)在子集中可滿足重建要求的最少校驗(yàn)分塊,對(duì)丟失數(shù)據(jù)塊進(jìn)行重建。若出現(xiàn)多個(gè)存儲(chǔ)節(jié)點(diǎn)發(fā)生異常時(shí),文件服務(wù)器將計(jì)算恢復(fù)所有文件所需要的計(jì)算量,并按照計(jì)算量的均衡負(fù)載原則,對(duì)恢復(fù)節(jié)點(diǎn)進(jìn)行任務(wù)分配。當(dāng)校驗(yàn)信息子集中出現(xiàn)節(jié)點(diǎn)異常時(shí),系統(tǒng)將調(diào)度源文件進(jìn)行二次編碼,并再次部署于新加入的節(jié)點(diǎn)上。
存儲(chǔ)節(jié)點(diǎn)間采用對(duì)等結(jié)構(gòu)設(shè)計(jì),當(dāng)存儲(chǔ)節(jié)點(diǎn)加入視頻數(shù)據(jù)存儲(chǔ)系統(tǒng)時(shí),將自已的資源列表提供給協(xié)調(diào)服務(wù)器,任何一個(gè)組內(nèi)節(jié)點(diǎn)既可以作為文件分塊的請(qǐng)求者,也可以作為文件分塊的提供者,視頻數(shù)據(jù)存儲(chǔ)系統(tǒng)根據(jù)存儲(chǔ)數(shù)據(jù)量及存儲(chǔ)系統(tǒng)利用率確定是否啟動(dòng)下一鏡像子集。在任一鏡像子集sk(a;b)(k=1,2,3...)中將存儲(chǔ)節(jié)點(diǎn)分為文件分塊存儲(chǔ)節(jié)點(diǎn)及編碼校驗(yàn)分塊存儲(chǔ)節(jié)點(diǎn)。文件分塊存儲(chǔ)節(jié)點(diǎn)構(gòu)成信息鏡像子集sk(a),其中節(jié)點(diǎn)ak,i∈sk(a)(k,i屬于正整數(shù)),用于存儲(chǔ)原文件的分塊;而編碼校驗(yàn)分塊存儲(chǔ)節(jié)點(diǎn)bk,i(k,i屬于正整數(shù))構(gòu)成校驗(yàn)信息鏡像子集s(b)。
為了降低整個(gè)系統(tǒng)內(nèi)部文件的數(shù)據(jù)冗余度,本發(fā)明系統(tǒng)架構(gòu)將文件級(jí)重復(fù)數(shù)據(jù)刪除引入系統(tǒng)。并在數(shù)據(jù)源位置執(zhí)行重復(fù)數(shù)據(jù)消冗的策略。嵌入式終端軟件運(yùn)行時(shí),利用sha加密算法計(jì)算待上傳文件的散列值,并將該值上傳到協(xié)調(diào)服務(wù)器,協(xié)調(diào)服務(wù)器協(xié)調(diào)各個(gè)存儲(chǔ)節(jié)點(diǎn)對(duì)該值進(jìn)行查詢,當(dāng)發(fā)現(xiàn)存在該值時(shí),協(xié)調(diào)服務(wù)器更新該文件的引用度,并通知嵌入式終端數(shù)據(jù)已存儲(chǔ),當(dāng)未檢測(cè)出相同散列時(shí),嵌入式終端接收該文件,并對(duì)文件的信息分塊計(jì)算散列,并分布式存儲(chǔ)到鏡像子集的節(jié)點(diǎn)中。
文件級(jí)別的相同數(shù)據(jù)檢測(cè)可以檢測(cè)出不同文件名的相同文件,也可以檢測(cè)出不同目錄下的相同文件。系統(tǒng)將文件劃分成各個(gè)分塊,并計(jì)算每個(gè)分塊的sha值,將整個(gè)文件的散列值作為該文件的特征簽名。系統(tǒng)將每個(gè)文件的特征簽名與文件路徑以及其他相關(guān)信息構(gòu)成元數(shù)據(jù)一起放在內(nèi)存中,而其各個(gè)分塊的簽名放在磁盤(pán)中,只有當(dāng)系統(tǒng)有節(jié)點(diǎn)異常時(shí),才將各個(gè)分塊的簽名讀入內(nèi)存中,以便嵌入式終端對(duì)丟失數(shù)據(jù)恢復(fù)后,進(jìn)行校驗(yàn)對(duì)比。為加快分塊的查找,系統(tǒng)將分塊的位置信息、及其散列值、以及文件塊標(biāo)識(shí)統(tǒng)一存儲(chǔ)在一張表中。
當(dāng)系統(tǒng)出現(xiàn)節(jié)點(diǎn)異常,數(shù)據(jù)丟失而嵌入式終端卻需要讀取數(shù)據(jù)時(shí),嵌入式終端通過(guò)下載部分原數(shù)據(jù)分塊與部分校驗(yàn)數(shù)據(jù)塊,通過(guò)重建的方式在嵌入式終端重建丟失數(shù)據(jù)塊,恢復(fù)完成后,嵌入式終端在使用文件的同時(shí),將已經(jīng)重建出的數(shù)據(jù)分塊,經(jīng)過(guò)數(shù)據(jù)驗(yàn)證,重新發(fā)送到存儲(chǔ)系統(tǒng)。
針對(duì)各個(gè)鏡像子集中數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)都具有相同目錄信息的特點(diǎn),先將鏡像子集中的元文件均勻分塊存儲(chǔ)到各個(gè)存儲(chǔ)節(jié)點(diǎn)中,當(dāng)嵌入式終端需要元文件信息時(shí),鏡像子集的各個(gè)存儲(chǔ)節(jié)點(diǎn)將查詢本節(jié)點(diǎn)存儲(chǔ)的元數(shù)據(jù)。這樣將元數(shù)據(jù)的查詢轉(zhuǎn)換成各個(gè)存儲(chǔ)節(jié)點(diǎn)分別對(duì)元數(shù)據(jù)子塊的查詢。
當(dāng)嵌入式終端發(fā)出文件存儲(chǔ)請(qǐng)求時(shí),文件服務(wù)器根據(jù)子集sk(a;b)中節(jié)點(diǎn)的運(yùn)行情況,產(chǎn)生元數(shù)據(jù),并向子集sk(a;b)中的某一空閑節(jié)點(diǎn)發(fā)出指令,嵌入式終端將直接和該存儲(chǔ)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)交互。該節(jié)點(diǎn)對(duì)文件進(jìn)行分塊并編碼,產(chǎn)生校驗(yàn)數(shù)據(jù),并按照數(shù)據(jù)封裝格式進(jìn)行封裝。文件的原始分塊將發(fā)送到子集sk(a),校驗(yàn)數(shù)據(jù)塊分布式存儲(chǔ)到子集sk(b)上。這樣每個(gè)文件的數(shù)據(jù)塊及校驗(yàn)塊跨越子集中的所有存儲(chǔ)節(jié)點(diǎn),各節(jié)點(diǎn)間具有相同的文件存儲(chǔ)視圖。當(dāng)鏡像子集sk(a;b)中的存儲(chǔ)空間即將利用完畢時(shí),系統(tǒng)啟動(dòng)下一鏡像子集sk+1(a;b)。為增加集群存儲(chǔ)系統(tǒng)計(jì)算資源的利用率,子集s1(b),s2(b),...sk+1(b)中節(jié)點(diǎn)也可被文件服務(wù)器用來(lái)分配對(duì)后續(xù)待存儲(chǔ)文件進(jìn)行編碼計(jì)算。
當(dāng)有文件讀取需求時(shí),嵌入式終端向文件服務(wù)器請(qǐng)求源數(shù)據(jù),文件服務(wù)器直接發(fā)送待讀取文件與鏡像子集及存儲(chǔ)節(jié)點(diǎn)之間的映射與匹配信息給嵌入式終端。獲得應(yīng)答后,嵌入式終端先將所要求的文件名和字節(jié)偏移轉(zhuǎn)換成文件的索引,向存儲(chǔ)節(jié)點(diǎn)發(fā)送包含文件名和索引的請(qǐng)求,直接和目標(biāo)存儲(chǔ)節(jié)點(diǎn)集合建立文件讀取互操作。嵌入式終端向文件鏡像子集中每一個(gè)存儲(chǔ)節(jié)點(diǎn)發(fā)送一個(gè)請(qǐng)求,請(qǐng)求指定的文件分塊和塊內(nèi)數(shù)據(jù)區(qū)。如果下載鏡像子集sk(b)中存儲(chǔ)校驗(yàn)塊,則利用數(shù)據(jù)重建的方式獲取原文件。
當(dāng)嵌入式終端發(fā)出文件存儲(chǔ)請(qǐng)求,且存儲(chǔ)系統(tǒng)中無(wú)相同數(shù)據(jù)時(shí),協(xié)調(diào)服務(wù)器根據(jù)子集sk(b)中節(jié)點(diǎn)的運(yùn)行情況產(chǎn)生元數(shù)據(jù),并向子集sk(b)中的某一空閑節(jié)點(diǎn)發(fā)出指令,嵌入式終端直接和該存儲(chǔ)節(jié)點(diǎn)進(jìn)行文件交互。該節(jié)點(diǎn)對(duì)文件進(jìn)行分塊并編碼,產(chǎn)生校驗(yàn)數(shù)據(jù),并按照數(shù)據(jù)封裝格式進(jìn)行封裝,同時(shí)計(jì)算出各個(gè)文件信息分塊的散列值,并將散列值發(fā)送到協(xié)調(diào)服務(wù)器。存儲(chǔ)文件的數(shù)據(jù)分塊將發(fā)送到子集sk(a),校驗(yàn)數(shù)據(jù)塊分布式存儲(chǔ)到子集sk(b)上。這樣每個(gè)文件的數(shù)據(jù)塊及校驗(yàn)塊跨越子集中的所有存儲(chǔ)節(jié)點(diǎn),各節(jié)點(diǎn)間具有相同的文件存儲(chǔ)視圖。當(dāng)鏡像子集sk(a;b)中的存儲(chǔ)空間即將利用完畢時(shí),系統(tǒng)啟動(dòng)下一鏡像子集sk+1(a;b)。
當(dāng)有文件讀取需求時(shí),嵌入式終端向文件服務(wù)器請(qǐng)求源數(shù)據(jù),文件服務(wù)器直接發(fā)送待讀取文件與鏡像子集及存儲(chǔ)節(jié)點(diǎn)之間的映射與匹配信息給嵌入式終端。獲得應(yīng)答后,用戶先將所要求的文件名和字節(jié)偏移轉(zhuǎn)換成文件的索引,向存儲(chǔ)節(jié)點(diǎn)發(fā)送包含文件名和索引的請(qǐng)求,直接和目標(biāo)存儲(chǔ)節(jié)點(diǎn)集合建立文件讀取互操作。協(xié)調(diào)服務(wù)器根據(jù)查詢結(jié)果返回文件塊的索引,包括文件所在的集群子集以及數(shù)據(jù)塊的位置。嵌入式終端向文件鏡像子集中每一個(gè)存儲(chǔ)節(jié)點(diǎn)發(fā)送一個(gè)請(qǐng)求,請(qǐng)求指定的文件分塊和塊內(nèi)數(shù)據(jù)區(qū)。嵌入式終端將按順序重組文件分塊獲得原文件。
協(xié)調(diào)服務(wù)器負(fù)責(zé)分配集群存儲(chǔ)任務(wù)及元數(shù)據(jù)管理,協(xié)調(diào)服務(wù)器記錄存儲(chǔ)集群中各節(jié)點(diǎn)信息,存儲(chǔ)節(jié)點(diǎn)的子集劃分信息、系統(tǒng)存儲(chǔ)文件目錄信息、從文件到塊的映射關(guān)系信息以及各個(gè)文件分塊的散列值,同時(shí)還負(fù)責(zé)對(duì)丟失文件塊進(jìn)行恢復(fù)時(shí)的策略確定,及恢復(fù)任務(wù)分配,文件分塊的遷移管理。系統(tǒng)利用定期心跳和事件廣播組合的方式實(shí)現(xiàn)系統(tǒng)節(jié)點(diǎn)狀態(tài)的監(jiān)測(cè),當(dāng)系統(tǒng)出現(xiàn)新的節(jié)點(diǎn)時(shí),該節(jié)點(diǎn)將通過(guò)廣播的方式將本節(jié)點(diǎn)的信息傳播給協(xié)調(diào)服務(wù)器及各個(gè)存儲(chǔ)節(jié)點(diǎn)。同時(shí),每個(gè)存儲(chǔ)節(jié)點(diǎn)定期向其對(duì)應(yīng)的文件管理節(jié)點(diǎn)報(bào)告自已存在的狀態(tài),如果對(duì)應(yīng)的文件管理節(jié)點(diǎn)一段時(shí)間內(nèi)沒(méi)有收到心跳則認(rèn)為該存儲(chǔ)節(jié)點(diǎn)異常。
異常節(jié)點(diǎn)在恢復(fù)過(guò)程中,首先檢測(cè)與其余節(jié)點(diǎn)之間的連接情況,當(dāng)恢復(fù)文件的節(jié)點(diǎn)與其余節(jié)點(diǎn)具有差別較大的網(wǎng)絡(luò)連接時(shí),對(duì)各個(gè)鏈路發(fā)送測(cè)試數(shù)據(jù)包進(jìn)行數(shù)據(jù)通路測(cè)評(píng),并進(jìn)行排序,并計(jì)算出所需恢復(fù)的最少文件塊個(gè)數(shù)p,從而從最優(yōu)的p個(gè)網(wǎng)絡(luò)連接中,獲取文件塊,對(duì)文件進(jìn)行恢復(fù)。若節(jié)點(diǎn)k負(fù)責(zé)對(duì)文件f丟失的文件塊進(jìn)行恢復(fù),節(jié)點(diǎn)k從與其連接的p個(gè)節(jié)點(diǎn)發(fā)送全部文件塊讀取請(qǐng)求,節(jié)點(diǎn)k獲得所需文件塊后,利用系統(tǒng)編碼方法將源文件恢復(fù)后,根據(jù)標(biāo)記和丟失的節(jié)點(diǎn)和文件塊,利用系統(tǒng)采用的編碼方法對(duì)源文件進(jìn)行二次編碼,獲得丟失的冗余文件塊,重新按照文件封裝協(xié)議,依據(jù)各個(gè)丟失的文件塊尺寸進(jìn)行重新封裝,并將重新恢復(fù)出的文件塊f的l個(gè)文件塊,分別均勻按順序存儲(chǔ)在存儲(chǔ)節(jié)點(diǎn)上。各個(gè)節(jié)點(diǎn)開(kāi)辟一個(gè)專門(mén)的分區(qū)暫時(shí)存儲(chǔ)被重建出的數(shù)據(jù)塊,當(dāng)異常節(jié)點(diǎn)被替換后,重建出的數(shù)據(jù)將按照協(xié)調(diào)服務(wù)器的數(shù)據(jù)塊放置路徑統(tǒng)一進(jìn)行放置。
本發(fā)明基于嵌入式終端的使用需求進(jìn)行丟失數(shù)據(jù)塊恢復(fù)。利用散布在嵌入式終端大量的計(jì)算資源參與丟失文件塊的重建與集群內(nèi)部集中重建相結(jié)合的方式,來(lái)實(shí)現(xiàn)異常節(jié)點(diǎn)上文件分塊的重建。
若原文件為k個(gè)分塊,經(jīng)編碼后產(chǎn)生n-k個(gè)校驗(yàn)數(shù)據(jù)塊,則從這n個(gè)數(shù)據(jù)塊中任意取出k個(gè)分塊便可重建出原文件。集群存儲(chǔ)系統(tǒng)運(yùn)行時(shí),對(duì)重建臨界參數(shù)k(1<k<n-m)進(jìn)行設(shè)置。當(dāng)集群中異常存儲(chǔ)節(jié)點(diǎn)kf<k時(shí),集群管理器并不組織內(nèi)部節(jié)點(diǎn)對(duì)異常存儲(chǔ)節(jié)點(diǎn)上的數(shù)據(jù)塊進(jìn)行恢復(fù),而是利用用戶對(duì)所需求的數(shù)據(jù)塊進(jìn)行恢復(fù)。用戶在讀取某一文件時(shí),需要同時(shí)下載集群中所剩余的n-kf個(gè)原文件數(shù)據(jù)分塊和kf個(gè)校驗(yàn)數(shù)據(jù)塊,并下載碼字信息,重建出異常的kf個(gè)數(shù)據(jù)塊,并將重建出的數(shù)據(jù)塊與已下載的n-kf個(gè)數(shù)據(jù)塊,拼接成原文件。同時(shí),嵌入式終端對(duì)恢復(fù)出的kf個(gè)數(shù)據(jù)塊按照集群系統(tǒng)中數(shù)據(jù)塊封裝的格式再次進(jìn)行封裝,并上傳到服務(wù)器集群上。文件服務(wù)器將計(jì)算該數(shù)據(jù)塊的散列值,并與已存儲(chǔ)的原數(shù)據(jù)塊的散列值進(jìn)行比較,若相同,則存儲(chǔ)該分塊,若不同則拒絕該數(shù)據(jù)分塊的上傳請(qǐng)求。當(dāng)計(jì)算機(jī)集群中異常的節(jié)點(diǎn)個(gè)數(shù)超過(guò)設(shè)置的重建臨界參數(shù)值k時(shí),協(xié)調(diào)服務(wù)器將根據(jù)未被恢復(fù)的文件分塊數(shù)據(jù)量大小及集群內(nèi)節(jié)點(diǎn)運(yùn)行情況確定集群內(nèi)恢復(fù)策略。協(xié)調(diào)服務(wù)器將計(jì)算重建所有剩余文件分塊所需要的計(jì)算量,按照計(jì)算量的均衡負(fù)載原則,對(duì)恢復(fù)節(jié)點(diǎn)進(jìn)行任務(wù)分配。并將恢復(fù)的文件分塊再次部署于集群內(nèi)存儲(chǔ)節(jié)點(diǎn)上。
實(shí)現(xiàn)時(shí),嵌入式終端首先計(jì)算已經(jīng)重建出數(shù)據(jù)塊的散列函數(shù)值,將散列值上傳到協(xié)調(diào)服務(wù)器,由于協(xié)調(diào)服務(wù)器中已經(jīng)存儲(chǔ)了在最初文件存儲(chǔ)時(shí)已經(jīng)存儲(chǔ)的散列值庫(kù),與庫(kù)中的丟失文件的散列值進(jìn)行比對(duì),如果發(fā)現(xiàn)嵌入式終端重建出的數(shù)據(jù)塊的散列值與丟失數(shù)據(jù)塊的散列值相同,則允許嵌入式終端上傳該數(shù)據(jù)塊,若嵌入式終端重建出的數(shù)據(jù)塊的散列值與丟失數(shù)據(jù)塊的散列值不同,說(shuō)明重建的數(shù)據(jù)塊不正確,或者該數(shù)據(jù)已經(jīng)被惡意篡改,不接收該數(shù)據(jù)塊。對(duì)于重要數(shù)據(jù),當(dāng)數(shù)據(jù)塊上傳完畢時(shí),系統(tǒng)內(nèi)部需要對(duì)已經(jīng)上傳完畢的數(shù)據(jù)塊進(jìn)行二次檢測(cè)。管理節(jié)點(diǎn)再次計(jì)算該數(shù)據(jù)塊的散列值,并與原數(shù)據(jù)塊的散列值再次比對(duì),檢測(cè)其是否在上傳過(guò)程中,受到惡意攻擊或者篡改。
當(dāng)系統(tǒng)無(wú)原文件分塊丟失時(shí),嵌入式終端直接下載原文件分塊來(lái)實(shí)現(xiàn)文件的讀取。在出現(xiàn)網(wǎng)絡(luò)阻塞時(shí),嵌入式終端以重建的方式獲得比直接下載原數(shù)據(jù)塊更好的文件讀取性能。若某文件為m,信息節(jié)點(diǎn)個(gè)數(shù)為k,校驗(yàn)節(jié)點(diǎn)個(gè)數(shù)為r。若某時(shí)刻信息節(jié)點(diǎn)可提供的數(shù)據(jù)讀取速率為ma,而校驗(yàn)節(jié)點(diǎn)可提供的數(shù)據(jù)下載速率為mb,則mb>ma。若嵌入式終端重建m/k數(shù)據(jù)塊的速率為md,若有
針對(duì)流媒體文件內(nèi)部讀取的特征,本發(fā)明首先對(duì)媒體文件進(jìn)行均勻分塊,然后對(duì)分塊進(jìn)行校驗(yàn)計(jì)算獲取校驗(yàn)塊,同時(shí)對(duì)流媒體文件前t個(gè)文件塊進(jìn)行復(fù)制,并分別存儲(chǔ)到存儲(chǔ)集群的各個(gè)節(jié)點(diǎn)上。系統(tǒng)對(duì)于備份分塊采用單獨(dú)管理的模式,存儲(chǔ)節(jié)點(diǎn)將用磁盤(pán)中單獨(dú)開(kāi)辟的空間存儲(chǔ)數(shù)據(jù)分塊的備份數(shù)據(jù)。統(tǒng)計(jì)某文件的被讀取次數(shù)x,若在單位時(shí)間內(nèi)被讀取次數(shù)大于某一設(shè)定值y,則該文件的數(shù)據(jù)塊數(shù)保持復(fù)制和編碼冗余共存的狀態(tài)。若單位時(shí)間內(nèi)被讀取次數(shù)小于某一設(shè)定值z(mì),則系統(tǒng)清除該文件所有的復(fù)制分塊。
系統(tǒng)中的節(jié)點(diǎn)進(jìn)一步分為活動(dòng)存儲(chǔ)節(jié)點(diǎn)和休眠存儲(chǔ)節(jié)點(diǎn)?;顒?dòng)節(jié)點(diǎn)的任務(wù)是存儲(chǔ)新的文件,以及承擔(dān)用戶對(duì)系統(tǒng)內(nèi)部數(shù)據(jù)的讀取任務(wù)。優(yōu)選地,將存儲(chǔ)文件信息的存儲(chǔ)節(jié)點(diǎn)子集sn(a)設(shè)置為活動(dòng)節(jié)點(diǎn),讓其磁盤(pán)處于活動(dòng)狀態(tài),以滿足海量用戶的數(shù)據(jù)讀取請(qǐng)求,存儲(chǔ)校驗(yàn)數(shù)據(jù)的存儲(chǔ)節(jié)點(diǎn)子集sn(b)中存儲(chǔ)節(jié)點(diǎn)設(shè)置為靜態(tài)節(jié)點(diǎn),使請(qǐng)求僅定向到部分布式存儲(chǔ)儲(chǔ)節(jié)點(diǎn)上。系統(tǒng)在重復(fù)數(shù)據(jù)散列值查詢時(shí),利用該部分的節(jié)點(diǎn)進(jìn)行分布式查詢。同時(shí),文件管理器將統(tǒng)計(jì)對(duì)文件的讀取頻率,高頻率的數(shù)據(jù)將轉(zhuǎn)移到活動(dòng)節(jié)點(diǎn),訪問(wèn)頻度很小的數(shù)據(jù)將被轉(zhuǎn)移到休眠存儲(chǔ)節(jié)點(diǎn)。
在邏輯上,若存儲(chǔ)系統(tǒng)共有n個(gè)存儲(chǔ)節(jié)點(diǎn),存儲(chǔ)系統(tǒng)需要達(dá)到的糾刪性能為系統(tǒng)可以容許任意r個(gè)存儲(chǔ)節(jié)點(diǎn)出現(xiàn)異常。則當(dāng)嵌入式終端提出文件存儲(chǔ)請(qǐng)求時(shí),系統(tǒng)首先對(duì)文件進(jìn)行分塊,分塊的數(shù)目為k=n-r。并利用reedsolomon編碼矩陣g,產(chǎn)生r個(gè)校驗(yàn)分塊。并利用k個(gè)節(jié)點(diǎn)存儲(chǔ)文件的原始分塊,其余r個(gè)節(jié)點(diǎn)用于存儲(chǔ)經(jīng)過(guò)與g運(yùn)算后產(chǎn)生的校驗(yàn)數(shù)據(jù)分塊。其具體過(guò)程為:
步驟一:當(dāng)系統(tǒng)接到文件存儲(chǔ)請(qǐng)求時(shí),系統(tǒng)直接對(duì)文件進(jìn)行分塊,分為m×k個(gè)文件塊,若文件大小無(wú)法直接被m×k整除,則在文件末尾添加“0”。利用生成矩陣中各行向量中“0”、“1”對(duì)應(yīng)的位置構(gòu)造的規(guī)則,直接將編碼矩陣g中的向量與分割出的m×k數(shù)據(jù)塊進(jìn)行運(yùn)算,以獲取校驗(yàn)數(shù)據(jù)塊。
步驟二:若原文件的分塊用d=(d1,d2,…dk)t表示,將di稱為宏塊。di由m個(gè)微塊組成,而對(duì)于di中的m個(gè)數(shù)據(jù)塊(di,1,di,2…di,m)t稱為微塊組。若生成的校驗(yàn)宏塊組用p=(p1,p2,…pr)t表示,其中每一個(gè)校驗(yàn)宏塊pi中包含m個(gè)校驗(yàn)微塊。原始文件塊及校驗(yàn)塊的集合用e=(d1,d2,…dk|p1,p2,…pr)t表示。則:g·d=e。
整個(gè)文件的m×k個(gè)數(shù)據(jù)分塊可表示為:d1,1,d1,2…d1,m,…,dk,1,dk,2…dk,m。原始文件分塊生成的每個(gè)校驗(yàn)宏塊pi中包含m個(gè)校驗(yàn)微塊,則校驗(yàn)微塊分別表示為:p1,1,p1,2…p1,m,…,pr,1,pr,2…pr,m。
將reedsolomon編碼矩陣g表示為g=[i,v’]t。其中i為m×m的單位陣,v’為(m×r)×(m×k)的矩陣。微塊pi,j的生成過(guò)程為:將待存儲(chǔ)文件的m×k個(gè)數(shù)據(jù)分塊d1,1,d1,2…d1,m,…,dk,1,dk,2…dk,m按順序排列,并與矩陣v’中第(i-1)·m+j行上的m·k個(gè)元素的位置依次對(duì)應(yīng)。第(i-1)·m+j行上的0-1分布情況決定著校驗(yàn)微塊pi,j的產(chǎn)生規(guī)則:將(i-1)·m+j行上所有值為“1”的元素位置所對(duì)應(yīng)的那些文件數(shù)據(jù)分塊進(jìn)行模2累加運(yùn)算,得到的結(jié)果就是由該行決定的一個(gè)校驗(yàn)微塊。如此,矩陣g中的子矩陣v’一共可以產(chǎn)生針對(duì)原文件的r·m個(gè)校驗(yàn)微塊p1,1,p1,2,…,p1,m,…,pr,1,pr,2,…,pr,m,即可以產(chǎn)生t個(gè)校驗(yàn)宏塊。單位矩陣i生成的數(shù)據(jù)塊即為文件的原始分塊。這些原始文件分塊按順序直接拼接起來(lái)就是原文件。
然后針對(duì)二進(jìn)制編碼矩陣進(jìn)行編碼優(yōu)化。首先繼續(xù)將編碼矩陣表示為:
g=[ik×m,gr×m]t其中:gr,m=[l1,i,l2,i,…lr×m,i]t
根據(jù)生成校驗(yàn)位的行向量l1,i,l2,i,…lr×m,i中“1”的個(gè)數(shù)確定出根據(jù)該向量計(jì)算校驗(yàn)位時(shí)所需要的異或計(jì)算次數(shù)。并計(jì)算任意兩向量la,j,lb,j之間不相同的位數(shù)。下面根據(jù)以上參數(shù)確定校驗(yàn)位計(jì)算優(yōu)化方法。其優(yōu)化流程如下:
1.根據(jù)編碼矩陣中每一行向量中“1”的個(gè)數(shù),確定出根據(jù)該行向量計(jì)算校驗(yàn)位所需要的異或次數(shù);
2.比較編碼矩陣中任意兩個(gè)行向量之間的元素相同位與元素不同位的個(gè)數(shù),記為(e/d),其中e表示兩個(gè)向量中元素相同的位個(gè)數(shù);d表示兩個(gè)向量中元素不同的位個(gè)數(shù);
3.若行向量li(1<i<r·m)所需要的異或次數(shù)小于或等于步驟2中不同位數(shù)d,則直接根據(jù)該向量計(jì)算出該行所對(duì)應(yīng)的校驗(yàn)數(shù)據(jù)塊,并將該向量記為lj;
4.利用步驟3中確定的向量lj,根據(jù)步驟2中相同位數(shù)與不同位數(shù)之比,確定下一個(gè)計(jì)算行向量。當(dāng)某行向量lk與向量lj不同位數(shù)小于相同位數(shù),且lk與向量lj不同位數(shù)與其余各個(gè)向量不同位數(shù)達(dá)到最小時(shí),則根據(jù)向量lj已計(jì)算出的校驗(yàn)數(shù)據(jù)來(lái)計(jì)算由lk確定的校驗(yàn)數(shù)據(jù);
5.若仍有未計(jì)算校驗(yàn)位,則按照步驟4中的計(jì)算規(guī)則,以lk為基礎(chǔ)向量,尋找下一待計(jì)算向量。
6.確定是否已全部校驗(yàn)位計(jì)算過(guò)程,若是,則保存校驗(yàn)位依次計(jì)算過(guò)程,若否,則按照原始對(duì)應(yīng)關(guān)系進(jìn)行計(jì)算。
為詳細(xì)的描述本方法,假定存儲(chǔ)數(shù)據(jù)塊d1,d2,…dr的節(jié)點(diǎn)出現(xiàn)異常,則嵌入式終端獲取原文件的具體過(guò)程如下:
步驟1:根據(jù)編碼矩陣g=[i,v’]t直接得到校驗(yàn)矩陣h=[v’t,im·r]t用于對(duì)丟失的數(shù)據(jù)塊進(jìn)行重建。
步驟2:從正常工作的存儲(chǔ)節(jié)點(diǎn)上,任意選擇k個(gè)存儲(chǔ)節(jié)點(diǎn)下載k個(gè)數(shù)據(jù)塊dr+1,dr+2,…dk,dk+l,…dk+r-1,dk+r。
步驟3:將丟失的宏塊d1,d2,…dr分別表示為x1,x2,…xr,令β=[x1,x2,…xr,dr+1,…dk+r-1,dk+r],其中βr=[x1,x2,…xr],βk=[dr+1,…dk+r-1,dk+r]。即β=[βr,βk]。則按照關(guān)系β·h(k+r)r=0來(lái)重建出丟失的數(shù)據(jù)塊。
步驟四:若矩陣h(k+r)r中與丟失數(shù)據(jù)塊對(duì)應(yīng)的向量矩陣表示為h’r·r,矩陣h(k+r)r中與完好數(shù)據(jù)塊對(duì)應(yīng)的向量矩陣表示為h”k.r;則有:
βl×r·h’r·r=βl×k·h”k·r
其中βl×r是未知的,丟失的數(shù)據(jù)塊βl×r可按照上式解出丟失數(shù)據(jù)塊,即:
βl×r=βl×k·h”k·r(h’r·r)-1
求出的數(shù)據(jù)塊[x1,x2,…xr]即為丟失的數(shù)據(jù)塊[d1,d2,…dr]。
步驟五:將數(shù)據(jù)塊[d1,d2,…dr]與系統(tǒng)中未丟失的數(shù)據(jù)塊dr+1,dr+2…,dk,按照依次順序組合為[d1,d2,…dk],則該數(shù)據(jù)塊組合即為原文件。
在存儲(chǔ)系統(tǒng)網(wǎng)絡(luò)帶寬受限的環(huán)境中,如果較低的維護(hù)帶寬來(lái)實(shí)現(xiàn)丟失數(shù)據(jù)的可靠性恢復(fù)。則采用以下基于校驗(yàn)矩陣的丟失數(shù)據(jù)塊優(yōu)化重建方法。即選擇出需要最少重建帶寬的恢復(fù)矩陣h(k+r)m·rm的方法。具體如下:
1.首先計(jì)算出校驗(yàn)矩陣h(k+r)m·rm的每一個(gè)列向量中元素“1”的個(gè)數(shù)。
2.從校驗(yàn)矩陣h(k+r)m·rm中抽取出丟失數(shù)據(jù)塊所對(duì)應(yīng)的行向量,構(gòu)成矩陣hr’m·rm,則h(k+r)m·rm中剩余的行向量構(gòu)成矩陣h(k+r-r’)m·rm,其下端r·m個(gè)向量構(gòu)成了一個(gè)單位陣。上部表示為h(k-r’)m·rm。
3.依次確定h(k-r’)m·rm中行向量中元素“0”的個(gè)數(shù),當(dāng)該行向量中“0”的個(gè)數(shù)大于或等于r’·m時(shí),記錄每個(gè)“0”元素所在的列向量;并在所確定的列向量中進(jìn)一步尋找是否存在“0”元素個(gè)數(shù)大于或等于r’·m的行向量,若無(wú),則記錄上一步所確定的列向量。若有,則確定出新的列向量。以此循環(huán),并記錄下每次循環(huán)所確定的列向量。
4.當(dāng)循環(huán)檢索完畢后,分別根據(jù)每一組列向量中“1”的個(gè)數(shù),確定出“1”元素和為最小的r’·m個(gè)列向量,并確定與之對(duì)應(yīng)的h(r’·m)(r’·m)的秩為滿秩,即該子矩陣秩為r'·m。
在本發(fā)明的進(jìn)一步方面,將地址索引表ait引入鏡像子集作為擴(kuò)展的尋址維度。地址索引表ait是用來(lái)描述尋址鏈表act屬性的元數(shù)據(jù),ait將act劃分成為單個(gè)的可尋址邏輯成分,可以分別獨(dú)立訪問(wèn),三元?jiǎng)討B(tài)結(jié)構(gòu)的視頻數(shù)據(jù)存儲(chǔ)系統(tǒng)具有并行讀寫(xiě)訪問(wèn)的能力。而ait的指針是直接指向act邏輯成分的目標(biāo)地址單元,無(wú)需搜索比較即可快速實(shí)現(xiàn)隨機(jī)訪問(wèn)。
地址索引表ait是尋址項(xiàng)aht集合,即ait={aht1,…,ahtm,…,ahtm};
其中ahtm有一個(gè)輸入項(xiàng)和相對(duì)應(yīng)的一個(gè)輸出項(xiàng)。它的輸入項(xiàng)為尋址變量值的一個(gè)組合,輸出項(xiàng)是該組合對(duì)應(yīng)的數(shù)據(jù)索引。
在視頻存儲(chǔ)系統(tǒng)鏡像子集的ait中,每個(gè)尋址項(xiàng)aht的輸入值是一組數(shù)據(jù)的尋址變量值,即邏輯地址la,其輸出值均為與該la值相對(duì)應(yīng)的一個(gè)尋址鏈表act的指針、一個(gè)偏移量、一個(gè)數(shù)據(jù)長(zhǎng)度。該act指針指向該組數(shù)據(jù)所要訪問(wèn)的存儲(chǔ)單元在尋址鏈表act中的位置;偏移量在該存儲(chǔ)單元內(nèi)確定了訪問(wèn)起始地址;數(shù)據(jù)長(zhǎng)度規(guī)定了訪問(wèn)范圍;當(dāng)該數(shù)據(jù)長(zhǎng)度缺省或?yàn)?時(shí),表示訪問(wèn)直到文件的末尾。于是,對(duì)于視頻數(shù)據(jù)存儲(chǔ)系統(tǒng)的訪問(wèn)可以根據(jù)目標(biāo)數(shù)據(jù)的尋址變量組合的邏輯地址la,在文件元數(shù)據(jù)尋址鏈表act中唯一確定一個(gè)位置,從該位置起讀寫(xiě)訪問(wèn)存儲(chǔ)節(jié)點(diǎn),aht中規(guī)定了訪問(wèn)的數(shù)據(jù)長(zhǎng)度。
訪問(wèn)視頻存儲(chǔ)系統(tǒng)鏡像子集的地址索引表ait采用如下步驟實(shí)現(xiàn):
1.根據(jù)訪問(wèn)目標(biāo)數(shù)據(jù)的尋址變量值檢索元數(shù)據(jù)地址索引表ait,由此獲得一個(gè)尋址鏈表act指針、一個(gè)偏移量和一個(gè)數(shù)據(jù)長(zhǎng)度;
2.通過(guò)該尋址鏈表指針獲得該組數(shù)據(jù)所要讀寫(xiě)的存儲(chǔ)單元在尋址鏈表act中的位置,通過(guò)該偏移量獲得該組數(shù)據(jù)所要讀寫(xiě)的存儲(chǔ)單元內(nèi)的讀寫(xiě)起始地址,通過(guò)該數(shù)據(jù)長(zhǎng)度獲得讀寫(xiě)范圍;依據(jù)該位置、該讀寫(xiě)起始地址、該讀寫(xiě)范圍進(jìn)行該組數(shù)據(jù)的讀寫(xiě)操作;
3.當(dāng)采用多個(gè)線程進(jìn)行數(shù)據(jù)的讀操作時(shí),或者多個(gè)線程進(jìn)行數(shù)據(jù)的寫(xiě)操作但不涉及修改尋址鏈表act指針、偏移量和數(shù)據(jù)長(zhǎng)度,則不涉及生成新的尋址鏈表,則每個(gè)線程各自執(zhí)行步驟(1)和(2),由此實(shí)現(xiàn)多組數(shù)據(jù)的并行讀寫(xiě)操作;
4.當(dāng)采用多個(gè)線程進(jìn)行數(shù)據(jù)的寫(xiě)操作時(shí),涉及到修改尋址鏈表act指針或偏移量或數(shù)據(jù)長(zhǎng)度,訪問(wèn)步驟如下:
(4-1)當(dāng)采用多個(gè)線程進(jìn)行數(shù)據(jù)的寫(xiě)操作時(shí),不涉及修改尋址鏈表act指針,則將數(shù)據(jù)從新給定的偏移量位置上寫(xiě)入存儲(chǔ)單元,在需要更新數(shù)據(jù)長(zhǎng)度時(shí),計(jì)算新的數(shù)據(jù)長(zhǎng)度并將新的偏移量和新的數(shù)據(jù)長(zhǎng)度記入該aht輸出項(xiàng);
(4-2)當(dāng)采用多個(gè)線程進(jìn)行數(shù)據(jù)的寫(xiě)操作時(shí),涉及到修改尋址鏈表act指針,則訪問(wèn)進(jìn)入生成地址索引表ait的流程。
在本發(fā)明的視頻數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)的基礎(chǔ)上中,視頻幀數(shù)據(jù)在編碼端使用快速運(yùn)動(dòng)估計(jì),首先簡(jiǎn)要介紹如下:除了在整幀范圍內(nèi)進(jìn)行塊運(yùn)動(dòng)搜索和限定范圍運(yùn)動(dòng)搜索之外,同時(shí)對(duì)應(yīng)大范圍運(yùn)動(dòng)搜索和對(duì)應(yīng)小范圍運(yùn)動(dòng)搜索。在大范圍搜索方式中采用迭代搜索,以上次搜索結(jié)果位置作為下次搜索的起始點(diǎn)位置,當(dāng)搜索結(jié)果滿足一定條件,即當(dāng)上次搜索結(jié)果與下一次搜索結(jié)果相同時(shí),以其結(jié)果位置為起始點(diǎn)進(jìn)行小范圍搜索。將小范圍搜索結(jié)果作為最終結(jié)果。
在編碼端加入塊分類的功能,本發(fā)明將幀內(nèi)的塊分為跳越塊和直接塊。對(duì)跳越塊,運(yùn)動(dòng)向量為0,實(shí)際殘差接近于0,因此僅傳送欖式信息,不傳送運(yùn)動(dòng)向量和殘差信息。其中通過(guò)以下方式判斷跳越塊:
dm=σi,j∈blockm|x(i,j)-y(i,j)|/n
x(i,j)代表幀中的塊位置m所中的一個(gè)像素i,j,y(i,j)代表參考幀中的對(duì)應(yīng)像素,n代表塊中的像素個(gè)數(shù)。當(dāng)結(jié)果dm小于預(yù)設(shè)門(mén)限值時(shí),設(shè)定該塊為跳越塊。僅傳送模式信息到解碼端。
在進(jìn)行殘差計(jì)算時(shí),釆用已解碼的關(guān)鍵幀作為參考幀。下文使用已解碼的關(guān)鍵幀生成邊信息。在幀中剩下的塊中,繼續(xù)確定屬于直接模式的塊,該類型塊的殘差接近于0,僅傳送模式信息和運(yùn)動(dòng)向量信息。為了減少編碼端復(fù)雜度,可以采用快速運(yùn)動(dòng)塊搜索算法。
設(shè)定大范圍運(yùn)動(dòng)搜索迭代次數(shù)最大值為4,小范圍搜索次數(shù)為1,對(duì)應(yīng)最大橫向或縱向距離(0,7)或(7,0),對(duì)應(yīng)定長(zhǎng)碼編碼碼率為3比特。如果大范圍向量搜索成功收斂,再將得到的運(yùn)動(dòng)殘差與門(mén)限值進(jìn)行比較,門(mén)限值與跳越模式門(mén)限相同,當(dāng)不超過(guò)門(mén)限值時(shí),確定為直接模塊,需要向解碼端傳送模式信息和運(yùn)動(dòng)向量信息。
在傳送跳越塊和直接塊相關(guān)信息時(shí),如果將兩者合并編碼,零運(yùn)動(dòng)向量用(0,0)表示。在傳送運(yùn)動(dòng)向量信息時(shí),可以用定長(zhǎng)編碼或算法,具體計(jì)算流程如下:
步驟1.對(duì)運(yùn)動(dòng)向量信息,分別采用定長(zhǎng)編碼和指數(shù)編碼,取k中碼字長(zhǎng)度較小的值為rate1;
步驟2.將跳越模式和直接模式合并為一類,此時(shí)的碼率為:
mode1=mode(跳越模式)∪mode(直接模式)
mode2=mode(普通模式)
rate2=ent(mode1,mode2)*code_length+2*num(mode(跳越模式))
其中,模式信息mode()表示塊的類型對(duì)應(yīng)的模式,ent()計(jì)算對(duì)應(yīng)信息的熵,code_length為待編碼碼字長(zhǎng)度。
步驟3.總碼率為以上兩個(gè)碼率之和。
total_rate=ratel+rate2
在解碼端,得到對(duì)應(yīng)的模式信息和運(yùn)動(dòng)向量信息后,對(duì)跳越模塊和直接模塊進(jìn)行重建。對(duì)跳越模塊,直接將前一參考幀的相同位置的塊作為最后的重建塊。對(duì)于直接塊,利用運(yùn)動(dòng)向量,將對(duì)應(yīng)的運(yùn)動(dòng)補(bǔ)償?shù)膲K作為最后的重建塊。而對(duì)于剩余的普通模式的塊,需要在解碼端生成邊信息和殘差信息。
所述使用已解碼的關(guān)鍵幀生成邊信息,包括以下過(guò)程:
步驟1.獲得初始運(yùn)動(dòng)向量。首先采用平行運(yùn)動(dòng)估計(jì)算法,計(jì)算平行運(yùn)動(dòng)向量。運(yùn)動(dòng)匹配搜索的表示為:
(vx,vy)=argminmx,my(d(mx,my)*(1+0.05(mx2+my2)1/2)
(vx,vy)=±(vx/2,vy/2)
其中,x(i,j)代表參考?jí)K像素,y(i+mx,j+my)代表另一幀運(yùn)動(dòng)搜索塊像素。||m||為0階范式,代表塊m的大小。最后的得到的運(yùn)動(dòng)估計(jì)向量為第一行計(jì)算得到的運(yùn)動(dòng)向量的一半。根據(jù)運(yùn)動(dòng)估計(jì)的原始方向取反或不變。
當(dāng)?shù)玫角昂髱瑢?duì)應(yīng)位置塊的運(yùn)動(dòng)向量后,將二者轉(zhuǎn)換為同一方向的運(yùn)動(dòng)向量,即將其中一個(gè)運(yùn)動(dòng)向量取反。將此兩個(gè)運(yùn)動(dòng)向量求平均,得到雙向運(yùn)動(dòng)搜索估計(jì)的初始運(yùn)動(dòng)向量。
步驟2.對(duì)于每一個(gè)塊,將第1步的平均向量作為初始向量,假定該塊在短時(shí)間內(nèi)做勻速直線運(yùn)動(dòng)。即該塊在前后幀中的運(yùn)動(dòng)向量大小相等,方向相反。在初始向量的預(yù)定范圍內(nèi)進(jìn)行雙向運(yùn)動(dòng)搜索,先以初始向量為中心,設(shè)定搜索范圍為-3到3,如果第一步的兩個(gè)運(yùn)動(dòng)向量差值在任一方向大于5,則將該方向搜索范圍擴(kuò)展為-5到5。如果在此搜索范圍內(nèi),實(shí)際搜索位置數(shù)小于門(mén)限,則繼續(xù)以零向量為中心,以-6到6為搜導(dǎo)范圍進(jìn)行搜索,取二者的最小值為運(yùn)動(dòng)搜索結(jié)果,對(duì)運(yùn)動(dòng)搜索的結(jié)果進(jìn)行殘差計(jì)算,計(jì)算公式如下:
(vx,vy)=argminmx,myd(mx,my)
x,y代表前后參考幀。
當(dāng)計(jì)算的絕對(duì)殘差和達(dá)到最小時(shí),得到雙向運(yùn)動(dòng)估計(jì)的運(yùn)動(dòng)向量結(jié)果。以根據(jù)該運(yùn)動(dòng)向量,得到對(duì)應(yīng)的邊信息參考?jí)Ksideblock、殘差估計(jì)塊residentblock和殘差信息resident。
residide=min(d(mx,my))
sideblock(i,j)=(x(i-vx,j-vy)+y(i+vx,j+vy))/2
residentblock(i,j)=(x(i-vx,j-vy)-y(i+vx,j+vy))/2
步驟3.對(duì)于步驟2得到的運(yùn)動(dòng)向量估計(jì)的結(jié)果進(jìn)行進(jìn)一步處理。當(dāng)運(yùn)動(dòng)向量幅度大于一定門(mén)限時(shí),進(jìn)行雙向平行運(yùn)動(dòng)估計(jì)補(bǔ)償。根據(jù)步驟1計(jì)算得到雙向平行運(yùn)動(dòng)估計(jì)向量,得到四個(gè)運(yùn)動(dòng)補(bǔ)償塊,對(duì)于得到的四個(gè)運(yùn)動(dòng)補(bǔ)償塊,如果均位于圖像顯示范圍之內(nèi),且同方向的運(yùn)動(dòng)向量之間的距離小于預(yù)設(shè)范圍,可以通過(guò)下式計(jì)算該塊對(duì)應(yīng)的邊信息塊和殘差塊:
sideblock=(block1+block2+block3+block4)/4
residentblock=(block1+block2-block3-block4)/4
其中block1和block2屬于當(dāng)前幀的前驅(qū)幀,block3和block4屬于后繼幀。
步驟4.對(duì)處于運(yùn)動(dòng)邊緣的塊,如果其對(duì)應(yīng)的殘差值大于門(mén)限,進(jìn)行如下處理:首先,對(duì)于第1步得到的兩個(gè)平行運(yùn)動(dòng)估計(jì)向量,取任意一個(gè)運(yùn)動(dòng)向量,如果在初始運(yùn)動(dòng)估計(jì)的反方向上,該向量運(yùn)動(dòng)估計(jì)的位置超過(guò)了圖像邊界,且本方向運(yùn)動(dòng)向量的估計(jì)殘差小于相反方向運(yùn)動(dòng)向量的估計(jì)殘差,則其對(duì)應(yīng)的運(yùn)動(dòng)補(bǔ)償塊用該估計(jì)方向上得到的平行運(yùn)動(dòng)補(bǔ)償塊表示。在此情況下,用單向搜索進(jìn)行補(bǔ)償。如果第1步的條件不滿足,則對(duì)另一個(gè)運(yùn)動(dòng)向量進(jìn)行處理。將得到的運(yùn)動(dòng)補(bǔ)償塊進(jìn)行加權(quán)平均。
綜上所述,本發(fā)明提出了一種嵌入式通信設(shè)備數(shù)據(jù)傳輸方法,盡可能少地利用視頻存儲(chǔ)節(jié)點(diǎn)集內(nèi)部網(wǎng)絡(luò)帶寬及計(jì)算能力來(lái)實(shí)現(xiàn)數(shù)據(jù)恢復(fù),在實(shí)現(xiàn)數(shù)據(jù)高可用性的同時(shí),提高了擴(kuò)展性能。
顯然,本領(lǐng)域的技術(shù)人員應(yīng)該理解,上述的本發(fā)明的各模塊或各步驟可以用通用的計(jì)算系統(tǒng)來(lái)實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算系統(tǒng)上,或者分布在多個(gè)計(jì)算系統(tǒng)所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算系統(tǒng)可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)系統(tǒng)中由計(jì)算系統(tǒng)來(lái)執(zhí)行。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
應(yīng)當(dāng)理解的是,本發(fā)明的上述具體實(shí)施方式僅僅用于示例性說(shuō)明或解釋本發(fā)明的原理,而不構(gòu)成對(duì)本發(fā)明的限制。因此,在不偏離本發(fā)明的精神和范圍的情況下所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。此外,本發(fā)明所附權(quán)利要求旨在涵蓋落入所附權(quán)利要求范圍和邊界、或者這種范圍和邊界的等同形式內(nèi)的全部變化和修改例。