一種云存儲(chǔ)中糾刪碼數(shù)據(jù)的修改方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及云存儲(chǔ)技術(shù)領(lǐng)域,特別是涉及一種云存儲(chǔ)中糾刪碼數(shù)據(jù)的修改方法及系統(tǒng)。
【背景技術(shù)】
[0002]目前,云存儲(chǔ)系統(tǒng)為了保證數(shù)據(jù)的安全性,通常會(huì)采用數(shù)據(jù)多副本的方式實(shí)現(xiàn)數(shù)據(jù)的冗余,隨著數(shù)據(jù)量的持續(xù)、不斷增長(zhǎng),副本方式帶來(lái)的存儲(chǔ)效率低的問(wèn)題越來(lái)越明顯,于是,出現(xiàn)了糾刪碼方式的數(shù)據(jù)冗余策略,在同等數(shù)據(jù)冗余度的情況下,糾刪碼方式能夠帶來(lái)存儲(chǔ)效率至少50%以上的提高。
[0003]在糾刪碼方式中,通常需要計(jì)算數(shù)據(jù)的校驗(yàn)數(shù)據(jù)塊,為了便于數(shù)據(jù)管理,在計(jì)算時(shí)需要先將原始數(shù)據(jù)劃分為固定大小的數(shù)據(jù)塊,然后針對(duì)數(shù)據(jù)塊進(jìn)行校驗(yàn)塊的計(jì)算,最后將數(shù)據(jù)塊和計(jì)算出的校驗(yàn)塊分發(fā)至不同的存儲(chǔ)磁盤。為了保證傳輸和存儲(chǔ)的效率,云存儲(chǔ)系統(tǒng)通常以4MB為單位傳輸和存儲(chǔ)數(shù)據(jù),一個(gè)存儲(chǔ)的數(shù)據(jù)塊中會(huì)存在多個(gè)數(shù)據(jù)分片的數(shù)據(jù)。舉個(gè)例子,如圖1所示的3+1糾刪碼數(shù)據(jù)存放形式,原始數(shù)據(jù)分為3個(gè)數(shù)據(jù)塊,每個(gè)數(shù)據(jù)塊由多個(gè)糾刪數(shù)據(jù)分片組成,不同數(shù)據(jù)塊上的數(shù)據(jù)分片計(jì)算后形成與其對(duì)應(yīng)的校驗(yàn)塊。其中,為了保證計(jì)算效率數(shù)據(jù)的分片通常為4kB?64kB之間。
[0004]在需要對(duì)原始數(shù)據(jù)進(jìn)行修改操作時(shí),數(shù)據(jù)分片內(nèi)一個(gè)字節(jié)的修改也意味著整個(gè)數(shù)據(jù)分片和校驗(yàn)塊的重新計(jì)算,因此,在數(shù)據(jù)修改時(shí)需要將整個(gè)數(shù)據(jù)分片都讀取出來(lái)恢復(fù)原始數(shù)據(jù),在修改后重新針對(duì)修改后數(shù)據(jù)進(jìn)行分片和計(jì)算相應(yīng)的校驗(yàn)塊,然后將數(shù)據(jù)分片和計(jì)算得到的校驗(yàn)塊重新寫(xiě)入。
[0005]可見(jiàn),現(xiàn)有的修改方法中,在數(shù)據(jù)修改時(shí)需要將整個(gè)數(shù)據(jù)分片都讀取、恢復(fù)、修改、重新分片、重新計(jì)算后再寫(xiě)入,特別是當(dāng)修改數(shù)據(jù)為小塊數(shù)據(jù)時(shí),對(duì)其的寫(xiě)入為隨機(jī)寫(xiě)入,在SATA硬盤上效率遠(yuǎn)低于順序?qū)懭耄臅r(shí)長(zhǎng)、效率低,尤其是在磁盤壓力較大的情況下。
【發(fā)明內(nèi)容】
[0006]有鑒于此,本發(fā)明提供了一種云存儲(chǔ)中糾刪碼數(shù)據(jù)的修改方法及系統(tǒng),以實(shí)現(xiàn)減少數(shù)據(jù)修改過(guò)程中的耗時(shí)進(jìn)而提高修改效率的目的。
[0007]為解決上述技術(shù)問(wèn)題,本發(fā)明提供一種云存儲(chǔ)中糾刪碼數(shù)據(jù)的修改方法,該方法包括:
[0008]對(duì)原始數(shù)據(jù)進(jìn)行糾刪碼編碼,將編碼得到的原始編碼數(shù)據(jù)存至磁盤;
[0009]當(dāng)檢測(cè)到對(duì)所述原始數(shù)據(jù)的修改指令時(shí),獲取與所述修改指令對(duì)應(yīng)的修改數(shù)據(jù);
[0010]判斷所述修改數(shù)據(jù)的大小是否小于或者等于預(yù)設(shè)數(shù)據(jù)量閾值;
[0011]當(dāng)判定所述修改數(shù)據(jù)的大小小于或者等于所述數(shù)據(jù)量閾值時(shí),對(duì)所述修改數(shù)據(jù)進(jìn)行糾刪碼編碼,并將編碼得到的修改編碼數(shù)據(jù)作為與所述原始數(shù)據(jù)相對(duì)應(yīng)的修改編碼數(shù)據(jù)保存至kv數(shù)據(jù)庫(kù)。
[0012]上述方法中,優(yōu)選地,還包括:
[0013]當(dāng)判定所述修改數(shù)據(jù)的大小大于所述數(shù)據(jù)量閾值時(shí),從所述磁盤中獲取所述原始編碼數(shù)據(jù),并利用獲取到的所述原始編碼數(shù)據(jù)和所述修改數(shù)據(jù),得到修改后數(shù)據(jù);
[0014]對(duì)所述修改后數(shù)據(jù)進(jìn)行糾刪編碼得到修改后編碼數(shù)據(jù),并將所述修改后編碼數(shù)據(jù)存回所述磁盤。
[0015]上述方法中,優(yōu)選地,還包括:
[0016]當(dāng)檢測(cè)到對(duì)所述原始數(shù)據(jù)的讀取指令時(shí),判斷所述kv數(shù)據(jù)庫(kù)中是否存在與所述原始數(shù)據(jù)相對(duì)應(yīng)的修改編碼數(shù)據(jù);
[0017]當(dāng)判定存在所述相對(duì)應(yīng)的修改編碼數(shù)據(jù)時(shí),從所述磁盤中獲取所述原始編碼數(shù)據(jù),并從所述kv數(shù)據(jù)庫(kù)中所述相對(duì)應(yīng)的修改編碼數(shù)據(jù);
[0018]分別對(duì)所述原始編碼數(shù)據(jù)和所述相對(duì)應(yīng)的修改編碼數(shù)據(jù)進(jìn)行糾刪碼解碼,得到所述原始數(shù)據(jù)和所述修改數(shù)據(jù);
[0019]合并解碼得到的所述原始數(shù)據(jù)和所述修改數(shù)據(jù),并將合并得到的所述修改后數(shù)據(jù)反饋至讀取請(qǐng)求端。
[0020]上述方法中,優(yōu)選地,當(dāng)判定所述kv數(shù)據(jù)庫(kù)中不存在所述相對(duì)應(yīng)的修改編碼數(shù)據(jù)時(shí),還包括:
[0021]從所述磁盤中獲取所述原始編碼數(shù)據(jù),對(duì)所述原始編碼數(shù)據(jù)進(jìn)行糾刪碼解碼,并將解碼得到的所述原始數(shù)據(jù)反饋至所述讀取請(qǐng)求端;
[0022]或者,
[0023]從所述磁盤中獲取所述修改后編碼數(shù)據(jù),對(duì)所述修改后編碼數(shù)據(jù)進(jìn)行糾刪碼解碼,并將解碼得到的所述修改后數(shù)據(jù)反饋至所述讀取請(qǐng)求端。
[0024]上述方法中,優(yōu)選地,所述將編碼得到的修改編碼數(shù)據(jù)作為與所述原始數(shù)據(jù)相對(duì)應(yīng)的修改編碼數(shù)據(jù)保存至kv數(shù)據(jù)庫(kù),包括:
[0025]將所述原始編碼數(shù)據(jù)的數(shù)據(jù)塊標(biāo)識(shí)作為key值存入所述kv數(shù)據(jù)庫(kù)中;
[0026]將所述相對(duì)應(yīng)的修改編碼數(shù)據(jù)作為與所述key值對(duì)應(yīng)的value值存入所述kv數(shù)據(jù)庫(kù)中。
[0027]本發(fā)明還提供了一種云存儲(chǔ)中糾刪碼數(shù)據(jù)的修改系統(tǒng),該系統(tǒng)包括:
[0028]數(shù)據(jù)塊存儲(chǔ)單元,用于對(duì)原始數(shù)據(jù)進(jìn)行糾刪碼編碼,將編碼得到的原始編碼數(shù)據(jù)存至磁盤;
[0029]修改數(shù)據(jù)獲取單元,用于當(dāng)檢測(cè)到對(duì)所述原始數(shù)據(jù)的修改指令時(shí),獲取與所述修改指令對(duì)應(yīng)的修改數(shù)據(jù);
[0030]閾值判斷單元,用于判斷所述修改數(shù)據(jù)的大小是否小于或者等于預(yù)設(shè)數(shù)據(jù)量閾值;
[0031]數(shù)據(jù)庫(kù)存儲(chǔ)單元,用于當(dāng)判定所述修改數(shù)據(jù)的大小小于或者等于所述數(shù)據(jù)量閾值時(shí),對(duì)所述修改數(shù)據(jù)進(jìn)行糾刪碼編碼,并將編碼得到的修改編碼數(shù)據(jù)作為與所述原始數(shù)據(jù)相對(duì)應(yīng)的修改編碼數(shù)據(jù)保存至kv數(shù)據(jù)庫(kù)。
[0032]上述系統(tǒng)中,優(yōu)選地,還包括:
[0033]修改后數(shù)據(jù)確定單元,用于當(dāng)判定所述修改數(shù)據(jù)的大小大于所述數(shù)據(jù)量閾值時(shí),從所述磁盤中獲取所述原始編碼數(shù)據(jù),并利用獲取到的所述原始編碼數(shù)據(jù)和所述修改數(shù)據(jù),得到修改后數(shù)據(jù);
[0034]所述數(shù)據(jù)塊存儲(chǔ)單元還用于對(duì)所述修改后數(shù)據(jù)進(jìn)行糾刪編碼得到修改后編碼數(shù)據(jù),并將所述修改后編碼數(shù)據(jù)存回所述磁盤。
[0035]上述系統(tǒng)中,優(yōu)選地,還包括:
[0036]存在判斷單元,用于當(dāng)檢測(cè)到對(duì)所述原始數(shù)據(jù)的讀取指令時(shí),判斷所述kv數(shù)據(jù)庫(kù)中是否存在與所述原始數(shù)據(jù)相對(duì)應(yīng)的修改編碼數(shù)據(jù);
[0037]編碼數(shù)據(jù)獲取單元,用于當(dāng)判定存在所述相對(duì)應(yīng)的修改編碼數(shù)據(jù)時(shí),從所述磁盤中獲取所述原始編碼數(shù)據(jù),并從所述kv數(shù)據(jù)庫(kù)中所述相對(duì)應(yīng)的修改編碼數(shù)據(jù);
[0038]解碼單元,用于分別對(duì)所述原始編碼數(shù)據(jù)和所述相對(duì)應(yīng)的修改編碼數(shù)據(jù)進(jìn)行糾刪碼解碼,得到所述原始數(shù)據(jù)和所述修改數(shù)據(jù);
[0039]讀取指令反饋單元,用于合并解碼得到的所述原始數(shù)據(jù)和所述修改數(shù)據(jù),并將合并得到的所述修改后數(shù)據(jù)反饋至讀取請(qǐng)求端。
[0040]上述系統(tǒng)中,優(yōu)選地,所述讀取指令反饋單元還用于:當(dāng)判定所述kv數(shù)據(jù)庫(kù)中不存在所述相對(duì)應(yīng)的修改編碼數(shù)據(jù)時(shí),從所述磁盤中獲取所述原始編碼數(shù)據(jù),對(duì)所述原始編碼數(shù)據(jù)進(jìn)行糾刪碼解碼,并將解碼得到的所述原始數(shù)據(jù)反饋至所述讀取請(qǐng)求端;或者,從所述磁盤中獲取所述修改后編碼數(shù)據(jù),對(duì)所述修改后編碼數(shù)據(jù)進(jìn)行糾刪碼解碼,并將解碼得到的所述修改后數(shù)據(jù)反饋至所述讀取請(qǐng)求端。
[0041]上述系統(tǒng)中,優(yōu)選地,所述數(shù)據(jù)庫(kù)存儲(chǔ)單元具體用于:將所述原始編碼數(shù)據(jù)的數(shù)據(jù)塊標(biāo)識(shí)作為key值存入所述kv數(shù)據(jù)庫(kù)中;將所述相對(duì)應(yīng)的修改編碼數(shù)據(jù)作為與所述key值對(duì)應(yīng)的value值存入所述kv數(shù)據(jù)庫(kù)中。
[0042]以上本發(fā)明提供的一種云存儲(chǔ)中糾刪碼數(shù)據(jù)的修改方法及系統(tǒng)中,在原始數(shù)據(jù)的第一次寫(xiě)入時(shí),將對(duì)原始數(shù)據(jù)進(jìn)行糾刪碼編碼得到的原始編碼數(shù)據(jù)以數(shù)據(jù)塊形式存至磁盤;當(dāng)檢測(cè)到對(duì)所述原始數(shù)據(jù)的修改指令時(shí),獲取與所述修改指令對(duì)應(yīng)的修改數(shù)據(jù),并判斷該修改數(shù)據(jù)的大小是否小于或者等于預(yù)設(shè)數(shù)據(jù)量閾值(例如16k,該閾值可根據(jù)糾刪編碼的條帶值進(jìn)行相適應(yīng)設(shè)定);當(dāng)判定修改數(shù)據(jù)的大小小于或者等于所述數(shù)據(jù)量閾值時(shí),認(rèn)為該修改數(shù)據(jù)為小塊數(shù)據(jù),則對(duì)這個(gè)修改數(shù)據(jù)進(jìn)行糾刪碼編碼,并將編碼得到的修改編碼數(shù)據(jù)作為與所述原始數(shù)據(jù)相對(duì)應(yīng)的修改編碼數(shù)據(jù)保存至kv數(shù)據(jù)庫(kù)。
[0043]在修改數(shù)據(jù)為小塊數(shù)據(jù)時(shí),只需在對(duì)其進(jìn)行編碼后存至kv數(shù)據(jù)庫(kù)中即可,同時(shí),由于kv數(shù)據(jù)庫(kù)在處理少量數(shù)據(jù)時(shí)具有充分的效率優(yōu)勢(shì),可見(jiàn),相較現(xiàn)有技術(shù)(在數(shù)據(jù)修改時(shí)需要將整個(gè)數(shù)據(jù)分片都讀取、恢復(fù)、修改、重新分片、重新計(jì)算后再寫(xiě)入,特別是當(dāng)修改數(shù)據(jù)為小塊數(shù)據(jù)時(shí),對(duì)其的寫(xiě)入為隨機(jī)寫(xiě)入,在SATA硬盤上效率遠(yuǎn)低于順序?qū)懭?,耗時(shí)長(zhǎng)、效率低,尤其是在磁盤壓力較大的情況下),本發(fā)明充分利用了 kv數(shù)據(jù)庫(kù)在處理小文件時(shí)候的寫(xiě)操作性能以及糾刪碼在計(jì)算校驗(yàn)塊時(shí)需要條帶為小數(shù)據(jù)的特性,將兩者結(jié)合加速了數(shù)據(jù)的修改速度,進(jìn)而有效實(shí)現(xiàn)了減少數(shù)據(jù)修改過(guò)程中的耗時(shí)進(jìn)而提高修改效率的目的。
【附圖說(shuō)明】
[0044]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
[0045]圖1為現(xiàn)有技術(shù)中的3+1糾刪碼數(shù)據(jù)存放形式的場(chǎng)景示意圖;
[0046]圖2為本發(fā)明實(shí)施例提供的一種云存儲(chǔ)中糾刪碼數(shù)據(jù)的修改方法的流程圖;
[0047]圖3為本發(fā)明實(shí)施例提供的一種云存儲(chǔ)中糾刪碼數(shù)據(jù)的修改方法的另一流程圖;