一種面向磁盤(pán)的讀寫(xiě)平衡高速數(shù)據(jù)采集隊(duì)列存儲(chǔ)方法
【技術(shù)領(lǐng)域】
:
[0001]本發(fā)明涉及數(shù)據(jù)采集技術(shù)領(lǐng)域,具體涉及一種面向磁盤(pán)的讀寫(xiě)平衡高速數(shù)據(jù)采集隊(duì)列存儲(chǔ)方法。
【背景技術(shù)】
:
[0002]在互聯(lián)網(wǎng)應(yīng)用中,數(shù)據(jù)采集是一種普遍的應(yīng)用模式。數(shù)據(jù)采集一般是從各種各樣的傳感器上將物理數(shù)值通過(guò)網(wǎng)絡(luò)傳輸?shù)椒?wù)器上,然后由服務(wù)器寫(xiě)入到文件系統(tǒng)或者數(shù)據(jù)庫(kù)中?!皵?shù)據(jù)采集”是指在網(wǎng)絡(luò)應(yīng)用中,特別是在物聯(lián)網(wǎng)應(yīng)用中,將各種各樣傳感器的數(shù)據(jù),通過(guò)網(wǎng)絡(luò)傳輸?shù)椒?wù)器(一般是一臺(tái)計(jì)算機(jī))上,然后寫(xiě)入到服務(wù)器的文件系統(tǒng)中(或數(shù)據(jù)庫(kù)中,寫(xiě)入數(shù)據(jù)庫(kù)也等效于寫(xiě)入文件系統(tǒng))。服務(wù)器的文件系統(tǒng),目前廣泛都是構(gòu)建在溫切斯特磁盤(pán)(簡(jiǎn)稱:硬盤(pán))上的。
[0003]隨著互聯(lián)網(wǎng)技術(shù)的廣泛應(yīng)用,特別是在目前廣泛部署的物聯(lián)網(wǎng)應(yīng)用中,數(shù)據(jù)量越來(lái)越大,系統(tǒng)采集的數(shù)據(jù)必須同步寫(xiě)入磁盤(pán)(這樣才能確保數(shù)據(jù)不丟失),給服務(wù)器文件系統(tǒng)帶來(lái)巨大的負(fù)荷壓力。
[0004]為了解決這個(gè)問(wèn)題,通常的做法是換用性能更高的服務(wù)器,或者使用昂貴的非溫切斯特存儲(chǔ)磁盤(pán)。但是,受限于磁盤(pán)的物理結(jié)構(gòu),高檔服務(wù)器依然使用的是同樣物理結(jié)構(gòu)的磁盤(pán),仍然無(wú)法回避“小文件同步寫(xiě)”問(wèn)題。高檔服務(wù)器在CPU與內(nèi)存等諸多方面性能有了顯著提高,但是磁盤(pán)的性能受限于磁盤(pán)的旋轉(zhuǎn)速度與尋道速度,其性能無(wú)法顯著提高。而是用價(jià)格昂貴的FLASH磁盤(pán),受限于其性價(jià)比遠(yuǎn)遠(yuǎn)低于溫切斯特磁盤(pán),還無(wú)法廣泛使用。
[0005]目前在服務(wù)器上存儲(chǔ)采集數(shù)據(jù)的主要方式還是使用磁盤(pán)。而磁盤(pán)受限于其機(jī)械結(jié)構(gòu),當(dāng)大量采集數(shù)據(jù)需要被同步寫(xiě)入到磁盤(pán)中的時(shí)候,將面臨著巨大的“小數(shù)據(jù)同步寫(xiě)”問(wèn)題,也就是說(shuō)大量小數(shù)據(jù)(小數(shù)據(jù)指采集的數(shù)據(jù)通常容量不大,例如容量一般是幾十字節(jié)到幾百字節(jié))同時(shí)寫(xiě)入磁盤(pán)(同時(shí)寫(xiě)入是指:數(shù)據(jù)必須盡可能快地完成寫(xiě)入到磁盤(pán),這樣才能保證采集數(shù)據(jù)不丟失),將導(dǎo)致磁盤(pán)陷入頻繁的尋道(尋道是指磁盤(pán)的磁頭為了到達(dá)需要寫(xiě)入數(shù)據(jù)的磁道,而“往返奔波”浪費(fèi)的大量時(shí)間)中,從而嚴(yán)重的降低磁盤(pán)的性能,使整個(gè)采集系統(tǒng)的性能急劇降低。
[0006]當(dāng)前計(jì)算機(jī)的磁盤(pán)(即溫切斯特磁盤(pán))的結(jié)構(gòu)都是采用磁頭尋道,磁盤(pán)旋轉(zhuǎn)的工作方式。受限于機(jī)械結(jié)構(gòu)與效率,磁盤(pán)旋轉(zhuǎn)的最高速度大約是每分鐘I萬(wàn)轉(zhuǎn)(此速度受限于機(jī)械結(jié)構(gòu),近20年來(lái),基本上無(wú)法進(jìn)行顯著提高)。這個(gè)速度已經(jīng)達(dá)到了機(jī)械設(shè)計(jì)的極限,很難有重大的提高。磁頭尋道的速度大約是每磁道1ms左右。這個(gè)速度受限于磁盤(pán)上采用的電動(dòng)機(jī)的運(yùn)行與機(jī)械的因素,也很難提高。
[0007]RAID是由加利福尼亞大學(xué)伯克利分校(University of California-Berkeley)在1987年,發(fā)表的文章:“A Case for Redundant Arrays of Inexpensive Disks”。文章中,談到了 RAID這個(gè)詞匯,而且定義了 RAID的5層級(jí)。柏克利大學(xué)研究目的是反應(yīng)當(dāng)時(shí)CPU快速的性能。CPU效能每年大約成長(zhǎng)30?50%,而硬磁機(jī)只能成長(zhǎng)約7%。RAID可以先解決磁盤(pán)損壞速度丟失的問(wèn)題,但是對(duì)性能的提高卻很有限度。并且在RAID系統(tǒng)中,小數(shù)據(jù)同步寫(xiě)的性能瓶頸依然存在,并且非常嚴(yán)重。例如,在RAID5中,小數(shù)據(jù)同步寫(xiě)將顯著降低RAID5的性能。
[0008]現(xiàn)有磁盤(pán)面對(duì)小數(shù)據(jù)同步寫(xiě)的技術(shù)方案中的問(wèn)題:
[0009]( I)采集數(shù)據(jù)一般分成“元數(shù)據(jù)”與“數(shù)據(jù)”兩部分,(“元數(shù)據(jù)”可以理解為數(shù)據(jù)的索引,例如數(shù)據(jù)的ID,而“數(shù)據(jù)”才是真正的物理值。)這兩部分在“小數(shù)據(jù)同步寫(xiě)”問(wèn)題中,都必須寫(xiě)入到磁盤(pán)上,才能完成一次“小數(shù)據(jù)同步寫(xiě)”。如果元數(shù)據(jù)與數(shù)據(jù)分別被寫(xiě)到磁盤(pán)上的不同磁道,那么計(jì)算機(jī)在寫(xiě)入一個(gè)“小數(shù)據(jù)”的時(shí)候,就必須分別尋道到不同的磁道,然后旋轉(zhuǎn)到合適的位置,才能完成元數(shù)據(jù)或者數(shù)據(jù)的寫(xiě)入。這導(dǎo)致一次“小數(shù)據(jù)同步寫(xiě)”,會(huì)包含兩次尋道延遲時(shí)間、兩個(gè)旋轉(zhuǎn)延遲時(shí)間。
[0010](2)磁盤(pán)的尋道延遲隨著磁盤(pán)的尋道距離增大而增大。因此,必須縮小磁盤(pán)的尋道距離,才能降低尋道延遲。而傳統(tǒng)的數(shù)據(jù)采集系統(tǒng)中,并不能有效地保證“元數(shù)據(jù)”與“數(shù)據(jù)”之間的磁道距離很近。
【發(fā)明內(nèi)容】
:
[0011]本發(fā)明的目的是提供一種面向磁盤(pán)的讀寫(xiě)平衡高速數(shù)據(jù)采集隊(duì)列存儲(chǔ)方法,它能將每一個(gè)磁道劃分為兩個(gè)部分,一個(gè)部分在寫(xiě)的時(shí)候,另外一個(gè)部分可以用于讀。這樣寫(xiě)與讀可以共用磁盤(pán)的尋道帶寬。磁頭做周期性電梯運(yùn)動(dòng)。在每一個(gè)磁道,寫(xiě)與讀盡可能同時(shí)進(jìn)行。高速存儲(chǔ)設(shè)備中動(dòng)態(tài)地根據(jù)數(shù)據(jù)采集速度與磁頭運(yùn)動(dòng)速度,保留當(dāng)前的元數(shù)據(jù)信息。這樣無(wú)需配置大量的高速存儲(chǔ)設(shè)備。
[0012]為了解決【背景技術(shù)】所存在的問(wèn)題,本發(fā)明是采用以下技術(shù)方案:它的存儲(chǔ)方法為:(I)、磁盤(pán)存儲(chǔ)系統(tǒng)中,每個(gè)磁道劃分為兩半,各自使用一半的扇區(qū),在一半用于數(shù)據(jù)寫(xiě)的時(shí)候,另外一半用于數(shù)據(jù)讀出。在傳統(tǒng)計(jì)算機(jī)系統(tǒng)上添加一個(gè)一定容量的高速存儲(chǔ)設(shè)備H ;
[0013](2)、磁頭固定做電梯運(yùn)動(dòng);
[0014](3)、元數(shù)據(jù)與數(shù)據(jù)首先寫(xiě)入到H中,當(dāng)數(shù)據(jù)積累到一半磁道容量的X%時(shí)候,啟動(dòng)寫(xiě)入磁盤(pán),這時(shí),如果磁頭正在讀,則寫(xiě)入讀磁道的寫(xiě)區(qū),如果磁頭正在寫(xiě),則尋找下一個(gè)空的寫(xiě)區(qū),列入計(jì)劃;x的計(jì)算方式:1-((平均尋道的道數(shù)*磁頭尋道平均時(shí)間)*采集數(shù)據(jù)到達(dá)速度)/ (H磁道容量*0.5) /2。
[0015](4)、沒(méi)有寫(xiě)計(jì)劃的時(shí)候,磁頭進(jìn)行電梯運(yùn)動(dòng)的時(shí)候,不斷地讀出數(shù)據(jù),并進(jìn)行清洗工作,有寫(xiě)入計(jì)劃的時(shí)候,同時(shí)讀出另外50%的讀數(shù)據(jù),進(jìn)行清洗;
[0016](5)、當(dāng)H中的元數(shù)據(jù)達(dá)到一定程度后,可以整理后,寫(xiě)入到磁盤(pán)的一個(gè)磁道上,同時(shí)釋放H中的空間,當(dāng)從磁盤(pán)上讀取元數(shù)據(jù)的時(shí)候,需要和H中的元數(shù)據(jù)進(jìn)行“合并”。
[0017]本發(fā)明的具體操作方法為:
[0018](A)、在傳統(tǒng)計(jì)算機(jī)系統(tǒng)上添加一個(gè)一定容量的高速存儲(chǔ)設(shè)備H,所述的高速存儲(chǔ)設(shè)備H可以是非溫切斯特磁盤(pán),典型的也可以采用目前廣泛使用的FLASH磁盤(pán),但不僅限于FLASH磁盤(pán);
[0019](B)、將原計(jì)算機(jī)上的磁盤(pán)的每一個(gè)柱面劃分為一個(gè)分區(qū),磁盤(pán)有N的柱面,則磁盤(pán)就劃分為N個(gè)分區(qū)P,同時(shí),對(duì)應(yīng)的將高速存儲(chǔ)設(shè)備H分成N個(gè)分區(qū)Q,每個(gè)P對(duì)應(yīng)著一個(gè)Q;
[0020](C)、當(dāng)采集輸入到達(dá)的時(shí)候,數(shù)據(jù)同步寫(xiě)入方法如下:采集數(shù)據(jù)到達(dá)服務(wù)器的時(shí)候,分別將元數(shù)據(jù)與數(shù)據(jù)寫(xiě)入到H中,當(dāng)元數(shù)據(jù)與數(shù)據(jù)寫(xiě)入到H中后,即完成數(shù)據(jù)同步寫(xiě)操作;當(dāng)H中的數(shù)據(jù)積累到磁道容量的X%時(shí)候,開(kāi)始將這些數(shù)據(jù)寫(xiě)入到磁盤(pán),這時(shí),如果磁頭正在某柱面讀,則將這些數(shù)據(jù)寫(xiě)入到該讀柱面的寫(xiě)區(qū)W,如果磁頭正在某柱面寫(xiě),則尋找磁頭運(yùn)動(dòng)方向的下一個(gè)空的可以供寫(xiě)的柱面,將寫(xiě)操作列入計(jì)劃;在等待寫(xiě)這段時(shí)間,繼續(xù)到達(dá)的采集數(shù)據(jù),繼續(xù)保存在H中,X的數(shù)值是動(dòng)態(tài)調(diào)整的,方法如下:Χ=1-((平均尋道的道數(shù)*磁頭尋道平均時(shí)間)*采集數(shù)據(jù)到達(dá)速度)/(H磁道容量*0.5)/2,在上公式中,除以2的用意是為了確保留下足夠的空間來(lái)存儲(chǔ)突發(fā)性到達(dá)的數(shù)據(jù);
[0021]當(dāng)采集數(shù)據(jù)寫(xiě)入到H的時(shí)候,僅僅只寫(xiě)入到柱面的50%,一旦寫(xiě)滿50%,其余的數(shù)據(jù)寫(xiě)入另外的柱面;
[0022]如果在H中的元數(shù)據(jù)容量超過(guò)了 H容量的20%,可以將其中元數(shù)據(jù)達(dá)到時(shí)間較早的10%整理后,寫(xiě)入到磁盤(pán)上,并且釋放H上的這部分空間;
[0023](D)、速度從系統(tǒng)中讀取出來(lái)的方案:
[0024]如果需要讀取數(shù)據(jù),首先在H中查找元數(shù)據(jù),如果找到元數(shù)據(jù),則根據(jù)元數(shù)據(jù)標(biāo)記的位置,去磁盤(pán)中讀取信息;
[0025]如果H中沒(méi)有查找到元數(shù)據(jù),則去磁盤(pán)中存儲(chǔ)的元數(shù)據(jù)區(qū)中查找元數(shù)據(jù);如果磁盤(pán)中的元數(shù)據(jù)區(qū)中也沒(méi)有找到元數(shù)據(jù),則該數(shù)據(jù)不在系統(tǒng)中;
[0026]當(dāng)磁盤(pán)沒(méi)有寫(xiě)計(jì)劃的時(shí)候,磁頭進(jìn)行電梯運(yùn)動(dòng)的時(shí)候,不斷地讀出數(shù)據(jù),并進(jìn)行數(shù)據(jù)清洗工作,有寫(xiě)入計(jì)劃的時(shí)候,如果該柱面有已經(jīng)寫(xiě)入的數(shù)據(jù),同時(shí)讀出另外50%的讀數(shù)據(jù),進(jìn)行清洗,清洗一旦完成,就更改在H中的元數(shù)據(jù),表示該數(shù)據(jù)已經(jīng)被清除開(kāi)系統(tǒng)了,如果在H中沒(méi)有找到該被清除的數(shù)據(jù)的元數(shù)據(jù),則還是將新的元數(shù)據(jù)寫(xiě)入到H中,在未來(lái)從磁盤(pán)上讀出就的元數(shù)據(jù)的時(shí)候,需要和當(dāng)前在H中的元數(shù)據(jù)“合并”,合并的時(shí)候,以在H中的元數(shù)據(jù)為高優(yōu)先級(jí),可以覆蓋從磁盤(pán)上讀出的元數(shù)據(jù)。
[0027]本發(fā)明具有以下有益效果:
[0028]1、每一個(gè)磁道劃分為兩個(gè)部分,一個(gè)部分在寫(xiě)的時(shí)候,另外一個(gè)部分可以用于讀。這樣寫(xiě)與讀可以共用磁盤(pán)的尋道帶寬。
[0029