本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,尤其是涉及一種基于糾刪碼的隨機(jī)寫(xiě)方法及系統(tǒng)。
背景技術(shù):
在常規(guī)的云存儲(chǔ)項(xiàng)目中,用戶(hù)數(shù)據(jù)往往只保存一個(gè)副本,若發(fā)生機(jī)器故障,很容易造成用戶(hù)數(shù)據(jù)的丟失,而目前網(wǎng)絡(luò)raid可以做到在節(jié)約用戶(hù)成本的基礎(chǔ)上,對(duì)用戶(hù)的數(shù)據(jù)進(jìn)行跨節(jié)點(diǎn)保護(hù),目前常見(jiàn)的網(wǎng)絡(luò)raid的實(shí)現(xiàn)方式主要是基于糾刪碼技術(shù)(erasurecode技術(shù),簡(jiǎn)稱(chēng)ec)。而ec技術(shù)主要是將用戶(hù)的數(shù)據(jù)進(jìn)行條帶化,之后為該條帶計(jì)算相應(yīng)的校驗(yàn)數(shù)據(jù),若此時(shí)需要更新已經(jīng)寫(xiě)入的條帶數(shù)據(jù)時(shí),需要將整個(gè)條帶的數(shù)據(jù)讀取出來(lái),在重新計(jì)算校驗(yàn)數(shù)據(jù),這對(duì)后端存儲(chǔ)的網(wǎng)絡(luò)壓力會(huì)造成巨大影響。
如用戶(hù)數(shù)據(jù)對(duì)應(yīng)的安全級(jí)別為4+2,若用戶(hù)需要更新條帶中的一個(gè)字節(jié)的數(shù)據(jù),后端存儲(chǔ)需要讀取6mb的數(shù)據(jù),然后找出本次需要更新數(shù)據(jù)的位置,并進(jìn)行更新,之后重新計(jì)算條帶的校驗(yàn)數(shù)據(jù),并將這6mb的數(shù)據(jù)寫(xiě)入存儲(chǔ)設(shè)備中,此過(guò)程將用戶(hù)的寫(xiě)數(shù)據(jù)放大了6291456倍。正是由于該原因,很多廠家提供出去的網(wǎng)絡(luò)raid接口根本不支持隨機(jī)寫(xiě),那么基于ec,如何實(shí)現(xiàn)隨機(jī)寫(xiě),成為了一個(gè)難題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于克服上述技術(shù)不足,提出一種基于糾刪碼的隨機(jī)寫(xiě)方法及系統(tǒng),解決現(xiàn)有技術(shù)中的上述技術(shù)問(wèn)題。
為達(dá)到上述技術(shù)目的,本發(fā)明的技術(shù)方案提供一種基于糾刪碼的隨機(jī)寫(xiě)方法,包括:
s1、生成隨機(jī)寫(xiě)文件并唯一標(biāo)示隨機(jī)寫(xiě)文件,設(shè)置隨機(jī)寫(xiě)文件的文件數(shù)據(jù)安全級(jí)別;s2、輸入隨機(jī)寫(xiě)文件中的部分隨機(jī)寫(xiě)數(shù)據(jù),根據(jù)糾刪碼和文件數(shù)據(jù)安全級(jí)別將輸入的隨機(jī)寫(xiě)數(shù)據(jù)條帶化,條帶由數(shù)據(jù)存儲(chǔ)單元組成,計(jì)算隨機(jī)寫(xiě)數(shù)據(jù)大小、隨機(jī)寫(xiě)偏移;
s3、根據(jù)隨機(jī)寫(xiě)數(shù)據(jù)大小、隨機(jī)寫(xiě)偏移獲取本次隨機(jī)寫(xiě)所跨越的條帶列表;
s4、計(jì)算本次隨機(jī)寫(xiě)所跨越的條帶列表中各條帶的需要更新的數(shù)據(jù)存儲(chǔ)單元的范圍,更新范圍內(nèi)的各數(shù)據(jù)存儲(chǔ)單元,將更新的數(shù)據(jù)存儲(chǔ)單元的數(shù)據(jù)進(jìn)行分布式云存儲(chǔ)并將存儲(chǔ)的位置更新到數(shù)據(jù)庫(kù);
s5、用戶(hù)再次輸入隨機(jī)寫(xiě)文件中的部分隨機(jī)寫(xiě)數(shù)據(jù),則重復(fù)執(zhí)行步驟s2-s4,直到隨機(jī)寫(xiě)文件的所有隨機(jī)寫(xiě)數(shù)據(jù)輸入完畢;
s6、隨機(jī)寫(xiě)文件的所有隨機(jī)寫(xiě)數(shù)據(jù)輸入完畢后,異步重新計(jì)算并寫(xiě)入隨機(jī)寫(xiě)文件更新的所有條帶的校驗(yàn)數(shù)據(jù)。
本發(fā)明還提供一種基于糾刪碼的隨機(jī)寫(xiě)系統(tǒng),包括:
隨機(jī)寫(xiě)文件設(shè)置模塊:生成隨機(jī)寫(xiě)文件并唯一標(biāo)示隨機(jī)寫(xiě)文件,設(shè)置隨機(jī)寫(xiě)文件的文件數(shù)據(jù)安全級(jí)別;
隨機(jī)寫(xiě)數(shù)據(jù)輸入模塊:輸入隨機(jī)寫(xiě)文件中的部分隨機(jī)寫(xiě)數(shù)據(jù),根據(jù)糾刪碼和文件數(shù)據(jù)安全級(jí)別將輸入的隨機(jī)寫(xiě)數(shù)據(jù)條帶化,條帶由數(shù)據(jù)存儲(chǔ)單元組成,計(jì)算隨機(jī)寫(xiě)數(shù)據(jù)大小、隨機(jī)寫(xiě)偏移;
條帶列表獲取模塊:根據(jù)隨機(jī)寫(xiě)數(shù)據(jù)大小、隨機(jī)寫(xiě)偏移獲取本次隨機(jī)寫(xiě)所跨越的條帶列表;
數(shù)據(jù)存儲(chǔ)單元寫(xiě)入模塊:計(jì)算本次隨機(jī)寫(xiě)所跨越的條帶列表中各條帶的需要更新的數(shù)據(jù)存儲(chǔ)單元的范圍,更新范圍內(nèi)的各數(shù)據(jù)存儲(chǔ)單元,將更新的數(shù)據(jù)存儲(chǔ)單元的數(shù)據(jù)進(jìn)行分布式云存儲(chǔ)并將存儲(chǔ)的位置更新到數(shù)據(jù)庫(kù);
循環(huán)模塊:用戶(hù)再次輸入隨機(jī)寫(xiě)文件中的部分隨機(jī)寫(xiě)數(shù)據(jù),則重復(fù)執(zhí)行隨機(jī)寫(xiě)數(shù)據(jù)輸入模塊、條帶列表獲取模塊、數(shù)據(jù)存儲(chǔ)單元寫(xiě)入模塊的操作,直到隨機(jī)寫(xiě)文件的所有隨機(jī)寫(xiě)數(shù)據(jù)輸入完畢;
校驗(yàn)數(shù)據(jù)重新計(jì)算模塊:隨機(jī)寫(xiě)文件的所有隨機(jī)寫(xiě)數(shù)據(jù)輸入完畢后,異步重新計(jì)算并寫(xiě)入隨機(jī)寫(xiě)文件更新的所有條帶的校驗(yàn)數(shù)據(jù)。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果包括:基于糾刪碼進(jìn)行隨機(jī)寫(xiě)操作,在對(duì)條帶的數(shù)據(jù)存儲(chǔ)單元進(jìn)行數(shù)據(jù)寫(xiě)入時(shí),只需要更新部分?jǐn)?shù)據(jù)存儲(chǔ)單元,不需要將整個(gè)條帶的數(shù)據(jù)讀取出來(lái)進(jìn)行更新,減少了計(jì)算負(fù)擔(dān),提高了計(jì)算效率;同時(shí),通過(guò)異步重新計(jì)算校驗(yàn)數(shù)據(jù)解決了隨機(jī)寫(xiě)放大問(wèn)題。
附圖說(shuō)明
圖1是本發(fā)明提供的一種基于糾刪碼的隨機(jī)寫(xiě)方法流程圖;
圖2是本發(fā)明提供的一種基于糾刪碼的隨機(jī)寫(xiě)系統(tǒng)結(jié)構(gòu)框圖。
附圖中:1、基于糾刪碼的隨機(jī)寫(xiě)系統(tǒng),11、隨機(jī)寫(xiě)文件設(shè)置模塊,12、隨機(jī)寫(xiě)數(shù)據(jù)輸入模塊,13、條帶列表獲取模塊,14、數(shù)據(jù)存儲(chǔ)單元寫(xiě)入模塊,15、循環(huán)模塊,16、校驗(yàn)數(shù)據(jù)重新計(jì)算模塊。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明的實(shí)施例中,基于糾刪碼技術(shù)建立條帶(stripe)和條帶管理者(stripemanager),條帶管理者負(fù)責(zé)管理用戶(hù)數(shù)據(jù)對(duì)應(yīng)的條帶,并將計(jì)算任務(wù)、編碼任務(wù)下發(fā)給編碼器;建立編碼器(encoder),負(fù)責(zé)執(zhí)行編碼任務(wù)或計(jì)算任務(wù);建立數(shù)據(jù)存儲(chǔ)服務(wù)(storagerservice),負(fù)責(zé)將接收到的數(shù)據(jù)進(jìn)行分布式云存儲(chǔ);條帶(stripe)由數(shù)據(jù)存儲(chǔ)單元(unit)組成,一個(gè)unit默認(rèn)為大小為32kb。
本發(fā)明的實(shí)施例中,提供一種基于糾刪碼的隨機(jī)寫(xiě)方法,包括:
s1、客戶(hù)端向encoder請(qǐng)求隨機(jī)寫(xiě)操作,生成隨機(jī)寫(xiě)文件并唯一標(biāo)示隨機(jī)寫(xiě)文件,設(shè)置隨機(jī)寫(xiě)文件的文件數(shù)據(jù)安全級(jí)別,唯一標(biāo)示隨機(jī)寫(xiě)文件后,生成隨機(jī)寫(xiě)文件的唯一標(biāo)示信息;唯一標(biāo)示隨機(jī)寫(xiě)文件的方法可以為:利用文件名或文件key值或文件唯一hash值標(biāo)示隨機(jī)寫(xiě)文件,以便于隨機(jī)寫(xiě)文件的查找和使用,對(duì)應(yīng)的,標(biāo)示隨機(jī)寫(xiě)文件后生成隨機(jī)寫(xiě)文件的唯一標(biāo)示信息為:文件名信息或文件key值信息或文件唯一hash值信息。
s2、encoder將隨機(jī)寫(xiě)文件的唯一標(biāo)示信息、文件數(shù)據(jù)安全級(jí)別等參數(shù)發(fā)送至stripemanager;
s3、stripemanager將隨機(jī)寫(xiě)文件的唯一標(biāo)示信息、文件數(shù)據(jù)安全級(jí)別等參數(shù)存儲(chǔ)到數(shù)據(jù)庫(kù)中,并返回encoder成功;
s4、encoder返回客戶(hù)端隨機(jī)寫(xiě)打開(kāi)成功;
s5、用戶(hù)在客戶(hù)端輸入隨機(jī)寫(xiě)文件中的部分隨機(jī)寫(xiě)數(shù)據(jù),計(jì)算隨機(jī)寫(xiě)數(shù)據(jù)大小、隨機(jī)寫(xiě)偏移,并將隨機(jī)寫(xiě)數(shù)據(jù)、隨機(jī)寫(xiě)數(shù)據(jù)大小、隨機(jī)寫(xiě)偏移發(fā)送給encoder;
s6、encoder根據(jù)隨機(jī)寫(xiě)數(shù)據(jù)大小、隨機(jī)寫(xiě)偏移向stripemanager獲取本次隨機(jī)寫(xiě)所跨越的條帶列表;
s7、encoder根據(jù)stripemanager返回的條帶列表,判斷stripemanager是否返回了本次需要更新所跨越的所有條帶,若只返回部分,則由encoder將條帶信息補(bǔ)全;
s8、encoder計(jì)算本次隨機(jī)寫(xiě)所跨越的條帶列表中各條帶的需要更新的數(shù)據(jù)存儲(chǔ)單元(unit)的范圍,用s5中用戶(hù)輸入的隨機(jī)寫(xiě)數(shù)據(jù)更新范圍內(nèi)的各數(shù)據(jù)存儲(chǔ)單元(unit),將更新的數(shù)據(jù)存儲(chǔ)單元(unit)數(shù)據(jù)發(fā)送至storageservice中進(jìn)行存儲(chǔ);
s9、encoder等所有的storageservice返回存儲(chǔ)結(jié)果之后,將更新后的unit所在的storageservice的位置信息通知給stripemanager,stripemanager將這些信息更新到數(shù)據(jù)庫(kù),并返回encoder成功;
s10、encoder返回客戶(hù)端本次隨機(jī)寫(xiě)成功;
s11、用戶(hù)再次在客戶(hù)端輸入隨機(jī)寫(xiě)文件中的部分隨機(jī)寫(xiě)數(shù)據(jù),則重復(fù)執(zhí)行步驟s5-s10,直到隨機(jī)寫(xiě)文件的所有隨機(jī)寫(xiě)數(shù)據(jù)輸入完畢;
s12、隨機(jī)寫(xiě)文件的所有隨機(jī)寫(xiě)數(shù)據(jù)輸入完畢后,客戶(hù)端通知encoder隨機(jī)寫(xiě)完成,encoder通知stripemanager隨機(jī)寫(xiě)完成,stripemanager為該隨機(jī)寫(xiě)文件更新的所有條帶生成重新計(jì)算校驗(yàn)數(shù)據(jù)的任務(wù),異步重新計(jì)算并寫(xiě)入隨機(jī)寫(xiě)文件更新的所有條帶的校驗(yàn)數(shù)據(jù),并返回encoder成功,encoder返回客戶(hù)端成功;
s13、整個(gè)隨機(jī)寫(xiě)操作完成。
本發(fā)明所述的基于糾刪碼的隨機(jī)寫(xiě)方法,步驟s1中:
文件數(shù)據(jù)安全級(jí)別設(shè)置為n+m級(jí)別,n表示組成一個(gè)條帶的數(shù)據(jù)存儲(chǔ)單元個(gè)數(shù),m表示不發(fā)生數(shù)據(jù)丟失的前提下一個(gè)條帶允許同時(shí)發(fā)生故障的數(shù)據(jù)存儲(chǔ)單元個(gè)數(shù)。
本發(fā)明所述的基于糾刪碼的隨機(jī)寫(xiě)方法,步驟s12中異步重新計(jì)算并寫(xiě)入隨機(jī)寫(xiě)文件更新的所有條帶的校驗(yàn)數(shù)據(jù)的步驟為:
將重新計(jì)算并寫(xiě)入隨機(jī)寫(xiě)文件更新的所有條帶的校驗(yàn)數(shù)據(jù)的任務(wù)均勻分發(fā)給不同編碼器(encoder),編碼器(encoder)接受任務(wù)后獲取條帶數(shù)據(jù)并根據(jù)獲取的條帶數(shù)據(jù)重新計(jì)算條帶的校驗(yàn)數(shù)據(jù),重新計(jì)算條帶的校驗(yàn)數(shù)據(jù)完成后,將重新計(jì)算出的校驗(yàn)數(shù)據(jù)寫(xiě)到storageservice中,寫(xiě)入完成之后通知stripemanager任務(wù)執(zhí)行成功,stripemanager更新本地?cái)?shù)據(jù)庫(kù)中條帶信息。
本發(fā)明還提供一種基于糾刪碼的隨機(jī)寫(xiě)系統(tǒng)1,包括:
隨機(jī)寫(xiě)文件設(shè)置模塊11:生成隨機(jī)寫(xiě)文件并唯一標(biāo)示隨機(jī)寫(xiě)文件,設(shè)置隨機(jī)寫(xiě)文件的文件數(shù)據(jù)安全級(jí)別;
隨機(jī)寫(xiě)數(shù)據(jù)輸入模塊12:輸入隨機(jī)寫(xiě)文件中的部分隨機(jī)寫(xiě)數(shù)據(jù),根據(jù)糾刪碼和文件數(shù)據(jù)安全級(jí)別將輸入的隨機(jī)寫(xiě)數(shù)據(jù)條帶化,條帶由數(shù)據(jù)存儲(chǔ)單元組成,計(jì)算隨機(jī)寫(xiě)數(shù)據(jù)大小、隨機(jī)寫(xiě)偏移;
條帶列表獲取模塊13:根據(jù)隨機(jī)寫(xiě)數(shù)據(jù)大小、隨機(jī)寫(xiě)偏移獲取本次隨機(jī)寫(xiě)所跨越的條帶列表;
數(shù)據(jù)存儲(chǔ)單元寫(xiě)入模塊14:計(jì)算本次隨機(jī)寫(xiě)所跨越的條帶列表中各條帶的需要更新的數(shù)據(jù)存儲(chǔ)單元的范圍,更新范圍內(nèi)的各數(shù)據(jù)存儲(chǔ)單元,將更新的數(shù)據(jù)存儲(chǔ)單元的數(shù)據(jù)進(jìn)行分布式云存儲(chǔ)并將存儲(chǔ)的位置更新到數(shù)據(jù)庫(kù);
循環(huán)模塊15:用戶(hù)再次輸入隨機(jī)寫(xiě)文件中的部分隨機(jī)寫(xiě)數(shù)據(jù),則重復(fù)執(zhí)行隨機(jī)寫(xiě)數(shù)據(jù)輸入模塊、條帶列表獲取模塊、數(shù)據(jù)存儲(chǔ)單元寫(xiě)入模塊的操作,直到隨機(jī)寫(xiě)文件的所有隨機(jī)寫(xiě)數(shù)據(jù)輸入完畢;
校驗(yàn)數(shù)據(jù)重新計(jì)算模塊16:隨機(jī)寫(xiě)文件的所有隨機(jī)寫(xiě)數(shù)據(jù)輸入完畢后,異步重新計(jì)算并寫(xiě)入隨機(jī)寫(xiě)文件更新的所有條帶的校驗(yàn)數(shù)據(jù)。
本發(fā)明所述的基于糾刪碼的隨機(jī)寫(xiě)系統(tǒng)1,隨機(jī)寫(xiě)文件設(shè)置模塊11中:
唯一標(biāo)示隨機(jī)寫(xiě)文件后,生成隨機(jī)寫(xiě)文件的唯一標(biāo)示信息,將隨機(jī)寫(xiě)文件的唯一標(biāo)示信息、文件數(shù)據(jù)安全級(jí)別存儲(chǔ)入數(shù)據(jù)庫(kù)。
本發(fā)明所述的基于糾刪碼的隨機(jī)寫(xiě)系統(tǒng)1,隨機(jī)寫(xiě)文件設(shè)置模塊11中:
文件數(shù)據(jù)安全級(jí)別設(shè)置為n+m級(jí)別,n表示組成一個(gè)條帶的數(shù)據(jù)存儲(chǔ)單元個(gè)數(shù),m表示不發(fā)生數(shù)據(jù)丟失的前提下一個(gè)條帶允許同時(shí)發(fā)生故障的數(shù)據(jù)存儲(chǔ)單元個(gè)數(shù)。
本發(fā)明所述的基于糾刪碼的隨機(jī)寫(xiě)系統(tǒng)1,條帶列表獲取模塊13中:
獲取本次隨機(jī)寫(xiě)所跨越的條帶列表后,判斷獲取的條帶列表是否完整,如果不完整則將條帶列表補(bǔ)充完整。
本發(fā)明所述的基于糾刪碼的隨機(jī)寫(xiě)系統(tǒng)1,校驗(yàn)數(shù)據(jù)重新計(jì)算模塊16中:
將重新計(jì)算并寫(xiě)入隨機(jī)寫(xiě)文件更新的所有條帶的校驗(yàn)數(shù)據(jù)的任務(wù)均勻分發(fā)給不同編碼器,編碼器接受任務(wù)后獲取條帶數(shù)據(jù)并根據(jù)獲取的條帶數(shù)據(jù)重新計(jì)算條帶的校驗(yàn)數(shù)據(jù),重新計(jì)算條帶的校驗(yàn)數(shù)據(jù)完成后,寫(xiě)入重新計(jì)算出的條帶的校驗(yàn)數(shù)據(jù)。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果包括:基于糾刪碼進(jìn)行隨機(jī)寫(xiě)操作,在對(duì)條帶的數(shù)據(jù)存儲(chǔ)單元進(jìn)行數(shù)據(jù)寫(xiě)入時(shí),只需要更新部分?jǐn)?shù)據(jù)存儲(chǔ)單元,不需要將整個(gè)條帶的數(shù)據(jù)讀取出來(lái)進(jìn)行更新,減少了計(jì)算負(fù)擔(dān),提高了計(jì)算效率;同時(shí),通過(guò)異步重新計(jì)算校驗(yàn)數(shù)據(jù)解決了隨機(jī)寫(xiě)放大問(wèn)題。
以上所述本發(fā)明的具體實(shí)施方式,并不構(gòu)成對(duì)本發(fā)明保護(hù)范圍的限定。任何根據(jù)本發(fā)明的技術(shù)構(gòu)思所做出的各種其他相應(yīng)的改變與變形,均應(yīng)包含在本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。