一種基于彈性塊存儲(chǔ)的數(shù)據(jù)寫、讀方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲(chǔ)領(lǐng)域,特別涉及一種基于彈性塊存儲(chǔ)的數(shù)據(jù)寫、讀方法及裝置。
【背景技術(shù)】
[0002]彈性塊存儲(chǔ)是一種基于存儲(chǔ)網(wǎng)絡(luò)、容量可彈性擴(kuò)展的、由云主機(jī)進(jìn)行管理和使用的原始?jí)K存儲(chǔ)卷設(shè)備。它獨(dú)立于主機(jī)的生命周期而存在,可以被連接到任意運(yùn)行中的主機(jī),為主機(jī)提供持久化的塊存儲(chǔ)服務(wù),并可隨時(shí)解除連接掛載至其他主機(jī),支持硬盤的克隆和快照,因此數(shù)據(jù)的安全性高,幾乎不存在磁盤故障而出現(xiàn)數(shù)據(jù)丟失的情況,具有容量按需擴(kuò)展、低成本、穩(wěn)定可靠等優(yōu)點(diǎn)。
[0003]目前,將彈性塊存儲(chǔ)中的數(shù)據(jù)寫入到存儲(chǔ)服務(wù)器中,存儲(chǔ)服務(wù)器中存儲(chǔ)有每段數(shù)據(jù)、以及每段數(shù)據(jù)的邏輯地址和物理地址,存在數(shù)據(jù)相同的數(shù)據(jù)段,即數(shù)據(jù)存在冗余,造成存儲(chǔ)空間的浪費(fèi)。
【發(fā)明內(nèi)容】
[0004]本發(fā)明實(shí)施例的目的在于提供一種基于彈性塊存儲(chǔ)的數(shù)據(jù)寫、讀方法及裝置,以去除冗余數(shù)據(jù),避免存儲(chǔ)空間的浪費(fèi)。
[0005]為達(dá)到上述目的,本發(fā)明實(shí)施例公開了一種基于彈性塊存儲(chǔ)的數(shù)據(jù)寫方法,預(yù)先創(chuàng)建至少一個(gè)虛擬塊設(shè)備,所述虛擬塊設(shè)備為彈性塊存儲(chǔ),所述虛擬塊設(shè)備中存儲(chǔ)有待處理數(shù)據(jù);所述方法包括:
[0006]從所述至少一個(gè)虛擬塊設(shè)備中,獲得待處理數(shù)據(jù);
[0007]將所述待處理數(shù)據(jù)以第一預(yù)設(shè)值進(jìn)行分段,并分別計(jì)算每段數(shù)據(jù)的哈希值;
[0008]對(duì)計(jì)算得到的哈希值對(duì)應(yīng)的段數(shù)據(jù)去重,以使計(jì)算得到的每個(gè)哈希值對(duì)應(yīng)的段數(shù)據(jù)唯一存在;
[0009]將去重后的剩余的每個(gè)哈希值對(duì)應(yīng)的第一數(shù)據(jù)寫入到預(yù)先設(shè)置的存儲(chǔ)介質(zhì)中,所述第一數(shù)據(jù)包括:元數(shù)據(jù)和段數(shù)據(jù),其中,所述元數(shù)據(jù)包括:哈希值、該哈希值對(duì)應(yīng)的數(shù)據(jù)段的邏輯地址和物理地址及其對(duì)應(yīng)關(guān)系;并將去重后的剩余的每個(gè)哈希值,確定為該哈希值對(duì)應(yīng)的數(shù)據(jù)段的索引;
[0010]當(dāng)寫入所述存儲(chǔ)介質(zhì)中的所述第一數(shù)據(jù)的數(shù)據(jù)量每達(dá)到第二預(yù)設(shè)值時(shí),通知服務(wù)進(jìn)程,以使所述服務(wù)進(jìn)程將每達(dá)到所述第二預(yù)設(shè)值的數(shù)據(jù)量對(duì)應(yīng)的所述存儲(chǔ)介質(zhì)中的所述第一數(shù)據(jù)寫入到存儲(chǔ)服務(wù)器中。
[0011]較佳的,所述存儲(chǔ)介質(zhì)可以為固態(tài)硬盤。
[0012]其中,所述通知服務(wù)進(jìn)程,以使所述服務(wù)進(jìn)程將每達(dá)到所述第二預(yù)設(shè)值的數(shù)據(jù)量對(duì)應(yīng)的所述存儲(chǔ)介質(zhì)中的所述第一數(shù)據(jù)寫入到存儲(chǔ)服務(wù)器中,可以包括:
[0013]將所述存儲(chǔ)介質(zhì)中存儲(chǔ)的、每達(dá)到所述第二預(yù)設(shè)值的數(shù)據(jù)量對(duì)應(yīng)的所述第一數(shù)據(jù)對(duì)應(yīng)的列表數(shù)據(jù)寫入預(yù)設(shè)文件;
[0014]當(dāng)預(yù)設(shè)文件中存在列表數(shù)據(jù)時(shí),喚醒服務(wù)進(jìn)程,以使服務(wù)進(jìn)程將所述列表數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)寫入到存儲(chǔ)服務(wù)器,其中,所述預(yù)設(shè)文件中沒有列表數(shù)據(jù)時(shí),所述服務(wù)進(jìn)程處于休眠狀態(tài)。
[0015]較佳的,在所述從所述至少一個(gè)虛擬塊設(shè)備中,獲得待處理數(shù)據(jù)之前,還可以包括:
[0016]創(chuàng)建具有不同優(yōu)先級(jí)的隊(duì)列,其中,每個(gè)虛擬塊設(shè)備對(duì)應(yīng)一個(gè)隊(duì)列;
[0017]所述將去重后的剩余的每個(gè)哈希值對(duì)應(yīng)的第一數(shù)據(jù)寫入到預(yù)先設(shè)置的存儲(chǔ)介質(zhì)中,可以包括:
[0018]將每個(gè)所述第一數(shù)據(jù)寫入到所述預(yù)先設(shè)置的存儲(chǔ)介質(zhì)中對(duì)應(yīng)的寫請(qǐng)求,存儲(chǔ)到獲得相應(yīng)的待處理數(shù)據(jù)對(duì)應(yīng)的虛擬塊設(shè)備對(duì)應(yīng)的隊(duì)列中;
[0019]根據(jù)隊(duì)列優(yōu)先級(jí)由高至低的順序,依次將隊(duì)列中存儲(chǔ)的寫請(qǐng)求對(duì)應(yīng)的所述第一數(shù)據(jù)寫入到預(yù)先設(shè)置的存儲(chǔ)介質(zhì)中。
[0020]較佳的,在所述從所述至少一個(gè)虛擬塊設(shè)備中,獲得待處理數(shù)據(jù)之前,還可以包括:
[0021]將預(yù)先創(chuàng)建的至少一個(gè)虛擬塊設(shè)備,劃分為M個(gè)虛擬塊設(shè)備組,每個(gè)虛擬塊設(shè)備組中包含不同的虛擬塊設(shè)備;
[0022]在所述將去重后的剩余的每個(gè)哈希值對(duì)應(yīng)的第一數(shù)據(jù)寫入到預(yù)先設(shè)置的存儲(chǔ)介質(zhì)中之前,還可以包括:
[0023]針對(duì)每個(gè)虛擬塊設(shè)備組,對(duì)該虛擬塊設(shè)備組中的去重后的剩余的哈希值對(duì)應(yīng)的段數(shù)據(jù)再次進(jìn)行去重,以使每個(gè)虛擬塊設(shè)備組中的每個(gè)哈希值對(duì)應(yīng)的段數(shù)據(jù)唯一存在。
[0024]較佳的,所述將去重后的剩余的每個(gè)哈希值對(duì)應(yīng)的第一數(shù)據(jù)寫入到預(yù)先設(shè)置的存儲(chǔ)介質(zhì)中,和/或,所述服務(wù)進(jìn)程將每達(dá)到所述第二預(yù)設(shè)值的數(shù)據(jù)量對(duì)應(yīng)的所述存儲(chǔ)介質(zhì)中的所述第一數(shù)據(jù)寫入到存儲(chǔ)服務(wù)器中的寫入方式,可以包括:
[0025]基于內(nèi)容存儲(chǔ)的寫入方式。
[0026]本發(fā)明實(shí)施例還公開了一種基于彈性塊存儲(chǔ)的數(shù)據(jù)讀方法,包括:
[0027]接收用戶針對(duì)不同虛擬塊設(shè)備的數(shù)據(jù)讀請(qǐng)求;
[0028]針對(duì)每個(gè)數(shù)據(jù)讀請(qǐng)求,以數(shù)據(jù)段的哈希值為索引,在存儲(chǔ)介質(zhì)中查找與該數(shù)據(jù)讀請(qǐng)求對(duì)應(yīng)的物理地址;
[0029]如果查找到,則將查找到的物理地址對(duì)應(yīng)的段數(shù)據(jù),反饋給用戶;
[0030]如果沒有查找到,則以數(shù)據(jù)段的哈希值為索引,在存儲(chǔ)服務(wù)器中查找與該數(shù)據(jù)讀請(qǐng)求對(duì)應(yīng)的物理地址,如果查找到,則將查找到的物理地址對(duì)應(yīng)的段數(shù)據(jù),反饋給用戶。
[0031]其中,所述數(shù)據(jù)讀請(qǐng)求中可以包括待讀取數(shù)據(jù)的邏輯地址;
[0032]所述以數(shù)據(jù)段的哈希值為索引,在存儲(chǔ)介質(zhì)中查找與該數(shù)據(jù)讀請(qǐng)求對(duì)應(yīng)的物理地址,可以包括:
[0033]根據(jù)所述數(shù)據(jù)讀請(qǐng)求中包括的待讀取數(shù)據(jù)的邏輯地址,確定所述數(shù)據(jù)讀請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)段的哈希值;
[0034]以所確定的數(shù)據(jù)段的哈希值為索引在存儲(chǔ)介質(zhì)中查找與該數(shù)據(jù)讀請(qǐng)求對(duì)應(yīng)的物理地址。
[0035]本發(fā)明實(shí)施例還公開了一種基于彈性塊存儲(chǔ)的數(shù)據(jù)寫裝置,預(yù)先創(chuàng)建至少一個(gè)虛擬塊設(shè)備,所述虛擬塊設(shè)備為彈性塊存儲(chǔ),所述虛擬塊設(shè)備中存儲(chǔ)有待處理數(shù)據(jù);所述裝置包括:獲得模塊、分段模塊、第一去重模塊、第一存儲(chǔ)模塊和第二存儲(chǔ)模塊,其中,
[0036]所述獲得模塊,用于從所述至少一個(gè)虛擬塊設(shè)備中,獲得待處理數(shù)據(jù);
[0037]所述分段模塊,用于將所述獲得模塊獲得的待處理數(shù)據(jù)以第一預(yù)設(shè)值進(jìn)行分段,并分別計(jì)算每段數(shù)據(jù)的哈希值;
[0038]所述第一去重模塊,用于對(duì)所述分段模塊計(jì)算得到的哈希值對(duì)應(yīng)的段數(shù)據(jù)去重,以使計(jì)算得到的每個(gè)哈希值對(duì)應(yīng)的段數(shù)據(jù)唯一存在;
[0039]所述第一存儲(chǔ)模塊,用于將去重后的剩余的每個(gè)哈希值對(duì)應(yīng)的第一數(shù)據(jù)寫入到預(yù)先設(shè)置的存儲(chǔ)介質(zhì)中,所述第一數(shù)據(jù)包括:元數(shù)據(jù)和段數(shù)據(jù),其中,所述元數(shù)據(jù)包括:哈希值、該哈希值對(duì)應(yīng)的數(shù)據(jù)段的邏輯地址和物理地址及其對(duì)應(yīng)關(guān)系;并將去重后的剩余的每個(gè)哈希值,確定為該哈希值對(duì)應(yīng)的數(shù)據(jù)段的索引;
[0040]所述第二存儲(chǔ)模塊,用于當(dāng)寫入所述存儲(chǔ)介質(zhì)中的所述第一數(shù)據(jù)的數(shù)據(jù)量每達(dá)到第二預(yù)設(shè)值時(shí),通知服務(wù)進(jìn)程,以使所述服務(wù)進(jìn)程將每達(dá)到所述第二預(yù)設(shè)值的數(shù)據(jù)量對(duì)應(yīng)的所述存儲(chǔ)介質(zhì)中的所述第一數(shù)據(jù)寫入到存儲(chǔ)服務(wù)器中。
[0041]較佳的,所述存儲(chǔ)介質(zhì)可以為固態(tài)硬盤。
[0042]較佳的,所述第二存儲(chǔ)模塊可以包括:寫入子模塊和喚醒子模塊,其中,
[0043]所述寫入子模塊,用于將所述存儲(chǔ)介質(zhì)中存儲(chǔ)的、每達(dá)到所述第二預(yù)設(shè)值的數(shù)據(jù)量對(duì)應(yīng)的所述第一數(shù)據(jù)對(duì)應(yīng)的列表數(shù)據(jù)寫入預(yù)設(shè)文件;
[0044]所述喚醒子模塊,用于當(dāng)預(yù)設(shè)文件中存在列表數(shù)據(jù)時(shí),喚醒服務(wù)進(jìn)程,以使服務(wù)進(jìn)程將所述列表數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)寫入到存儲(chǔ)服務(wù)器,其中,所述預(yù)設(shè)文件中沒有列表數(shù)據(jù)時(shí),所述服務(wù)進(jìn)程處于休眠狀態(tài)。
[0045]較佳的,所述基于彈性塊存儲(chǔ)的數(shù)據(jù)寫裝置,還可以包括:
[0046]創(chuàng)建隊(duì)列模塊,用于創(chuàng)建具有不同優(yōu)先級(jí)的隊(duì)列,其中,每個(gè)虛擬塊設(shè)備對(duì)應(yīng)一個(gè)隊(duì)列;
[0047]所述第一存儲(chǔ)模塊可以包括:第一存儲(chǔ)子模塊和第二存儲(chǔ)子模塊,其中,
[0048]所述第一存儲(chǔ)子模塊,用于將每個(gè)所述第一數(shù)據(jù)寫入到所述預(yù)先設(shè)置的存儲(chǔ)介質(zhì)中對(duì)應(yīng)的寫請(qǐng)求,存儲(chǔ)到獲得相應(yīng)的待處理數(shù)據(jù)對(duì)應(yīng)的虛擬塊設(shè)備對(duì)應(yīng)的所述創(chuàng)建隊(duì)列模塊創(chuàng)建的隊(duì)列中;
[0049]所述第二存儲(chǔ)子模塊,用于根據(jù)隊(duì)列優(yōu)先級(jí)由高至低的順序,依次將所述創(chuàng)建隊(duì)列模塊創(chuàng)建的隊(duì)列中存儲(chǔ)的寫請(qǐng)求對(duì)應(yīng)的所述第一數(shù)據(jù)寫入到預(yù)先設(shè)置的存儲(chǔ)介質(zhì)中。
[0050]較佳的,所述基于彈性塊存儲(chǔ)的數(shù)據(jù)寫裝置,還可以包括:分組模塊和第二去重模塊,其中,
[0051]所述分組模塊,用于將預(yù)先創(chuàng)建的至少一個(gè)虛擬塊設(shè)備,劃分為M個(gè)虛擬塊設(shè)備組,每個(gè)虛擬塊設(shè)備組中包含不同的虛擬塊