一種數(shù)據(jù)存儲方法及裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及計算機領域,尤其涉及一種數(shù)據(jù)存儲方法及裝置。
【背景技術】
[0002]隨著大數(shù)據(jù)時代的到來,數(shù)據(jù)總量不斷增加,存儲設備的存儲壓力也越來越大,而存儲設備的存儲壓力有很大一部分來源于重復數(shù)據(jù)。為了減少存儲設備的存儲壓力,需要在存儲數(shù)據(jù)時刪除重復數(shù)據(jù)。
[0003]如圖1所示,為一種常見的數(shù)據(jù)存儲系統(tǒng)的示意圖。文件被劃分為固定大小(如4KB,即4千字節(jié))的數(shù)據(jù)塊,每個數(shù)據(jù)塊對應一個指紋信息(英文-fingerprint,縮寫:FP,F(xiàn)P為用于唯一標識數(shù)據(jù)塊的一個簡短的特征值)。數(shù)據(jù)塊以容器(英文container)為單位存儲在磁盤中,每個容器的大小固定(如4MB,即4兆字節(jié))。磁盤中除了存儲有數(shù)據(jù)塊之外,還存儲有元數(shù)據(jù)(英文:metadata),元數(shù)據(jù)包括塊索引(英文:chunk index)和文件配方(英文:file recipe)。文件配方用于指示構成文件的數(shù)據(jù)塊的指紋信息,塊索引用于指示每一個指紋信息與容器之間的對應關系。
[0004]在如圖1所示的數(shù)據(jù)存儲系統(tǒng)中,數(shù)據(jù)存儲方法具體包括:將待存儲文件劃分為固定大小的待存儲數(shù)據(jù)塊,計算每一個待存儲數(shù)據(jù)塊的指紋信息,并在磁盤中存儲待存儲文件的文件配方;對于每一個待存儲數(shù)據(jù)塊,查找磁盤中存儲的塊索引中是否存在與該待存儲數(shù)據(jù)塊的指紋信息相同的指紋信息;若塊索引中存在與該待存儲數(shù)據(jù)塊的指紋信息相同的指紋信息,說明磁盤中至少有一個容器中存儲有與該待存儲數(shù)據(jù)塊相同的數(shù)據(jù)塊,則需要將該待存儲數(shù)據(jù)塊刪除;若塊索引中不存在與該待存儲數(shù)據(jù)塊的指紋信息相同的指紋信息,說明磁盤中的每一個容器中均未存儲與該待存儲數(shù)據(jù)塊相同的數(shù)據(jù)塊,則需要將該待存儲數(shù)據(jù)塊寫入磁盤。例如,存儲文件A時,若磁盤中的容器I中存儲的數(shù)據(jù)塊I與文件A的數(shù)據(jù)塊I相同,則可以在磁盤中存儲的塊索引中查找到與文件A的數(shù)據(jù)塊I的指紋信息相同的指紋信息,此時需要將文件A的數(shù)據(jù)塊I刪除;當需要讀取文件A的數(shù)據(jù)塊I時,只需要讀取磁盤中的容器I中存儲的數(shù)據(jù)塊I即可。
[0005]采用上述方法時,隨著磁盤中存儲的文件的增多,后續(xù)存儲的文件的數(shù)據(jù)塊很大概率上會與磁盤中的容器中已存儲的數(shù)據(jù)塊重復,后續(xù)存儲的文件的數(shù)據(jù)塊可能會分散在磁盤中的多個不同的容器中。當數(shù)據(jù)塊以容器為單位存儲在磁盤時,數(shù)據(jù)塊的讀取也是以容器為單位的,即讀取容器I中存儲的數(shù)據(jù)塊I時,需要讀取容器I中存儲的所有數(shù)據(jù)塊,但是只有容器I中存儲的數(shù)據(jù)塊I是有用的數(shù)據(jù)塊。當文件數(shù)目很多時,多數(shù)文件的數(shù)據(jù)塊會分散在多個不同的容器中,導致讀取文件時的有效數(shù)據(jù)率(有用的數(shù)據(jù)塊與讀取的所有數(shù)據(jù)塊的比值)較低。
【發(fā)明內容】
[0006]本發(fā)明實施例提供一種數(shù)據(jù)存儲方法及裝置,可以減少磁盤的存儲壓力并提高讀取文件時的有效數(shù)據(jù)率,從而提高讀取性能。
[0007]為達到上述目的,本發(fā)明的實施例采用如下技術方案:
[0008]本發(fā)明實施例的第一方面,提供一種數(shù)據(jù)存儲方法,包括:
[0009]接收待存儲文件,將所述待存儲文件劃分為預設大小的多個數(shù)據(jù)塊,并從所述多個數(shù)據(jù)塊中確定第一數(shù)據(jù)塊集合,所述第一數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊為與磁盤中的任一容器中存儲的數(shù)據(jù)塊重復的數(shù)據(jù)塊;
[0010]當所述第一數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊的個數(shù)與所述多個數(shù)據(jù)塊的個數(shù)的比值大于第一閾值時,若存在包含的數(shù)據(jù)塊的個數(shù)大于第二閾值的第二數(shù)據(jù)塊集合,則從所述第一數(shù)據(jù)塊集合中刪除第三數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊,所述第二數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊為所述磁盤中一容器中存儲的、與所述第一數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊重復的數(shù)據(jù)塊,所述第三數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊為與所述第二數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊重復的數(shù)據(jù)塊;
[0011]將所述多個數(shù)據(jù)塊中剩余的數(shù)據(jù)塊寫入快速的非易失存儲設備;
[0012]當所述快速的非易失存儲設備中存儲的數(shù)據(jù)塊在所述快速的非易失存儲設備中占用的存儲空間與所述快速的非易失存儲設備的存儲空間的比值大于第三閾值時,將所述快速的非易失存儲設備中存儲的數(shù)據(jù)塊寫入所述磁盤。
[0013]結合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,所述將所述多個數(shù)據(jù)塊中剩余的數(shù)據(jù)塊寫入快速的非易失存儲設備,包括:
[0014]若所述快速的非易失存儲設備中存儲有數(shù)據(jù)塊,則從所述多個數(shù)據(jù)塊中剩余的數(shù)據(jù)塊中確定第四數(shù)據(jù)塊集合,所述第四數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊為與所述快速的非易失存儲設備中存儲的數(shù)據(jù)塊重復的數(shù)據(jù)塊;
[0015]從所述多個數(shù)據(jù)塊中剩余的數(shù)據(jù)塊中刪除所述第四數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊,并將刪除所述第四數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊后的所述多個數(shù)據(jù)塊中剩余的數(shù)據(jù)塊寫入所述快速的非易失存儲設備。
[0016]結合第一方面的第一種可能的實現(xiàn)方式,在第一方面的第二種可能的實現(xiàn)方式中,在所述從所述多個數(shù)據(jù)塊中剩余的數(shù)據(jù)塊中刪除所述第四數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊之前,所述方法還包括:
[0017]從所述快速的非易失存儲設備中存儲的數(shù)據(jù)塊中確定第五數(shù)據(jù)塊集合,所述第五數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊為與所述第四數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊重復的數(shù)據(jù)塊;
[0018]所述當所述快速的非易失存儲設備中存儲的數(shù)據(jù)塊在所述快速的非易失存儲設備中占用的存儲空間與所述快速的非易失存儲設備的存儲空間的比值大于第三閾值時,將所述快速的非易失存儲設備中存儲的數(shù)據(jù)塊寫入所述磁盤,包括:
[0019]當所述快速的非易失存儲設備中存儲的數(shù)據(jù)塊在所述快速的非易失存儲設備中占用的存儲空間與所述快速的非易失存儲設備的存儲空間的比值大于所述第三閾值時,優(yōu)先將所述快速的非易失存儲設備中存儲的數(shù)據(jù)塊中的第五數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊寫入所述磁盤。
[0020]結合第一方面,在第一方面的第三種可能的實現(xiàn)方式中,所述方法還包括:
[0021]當所述第一數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊的個數(shù)與所述多個數(shù)據(jù)塊的個數(shù)的比值大于所述第一閾值時,若不存在包含的數(shù)據(jù)塊的個數(shù)大于所述第二閾值的所述第二數(shù)據(jù)塊集合,則將所述多個數(shù)據(jù)塊寫入所述快速的非易失存儲設備。
[0022]結合第一方面,在第一方面的第四種可能的實現(xiàn)方式中,所述方法還包括:
[0023]當所述第一數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊的個數(shù)與所述多個數(shù)據(jù)塊的個數(shù)的比值小于等于所述第一閾值時,則將所述多個數(shù)據(jù)塊寫入所述磁盤。
[0024]結合第一方面和上述可能的實現(xiàn)方式,在第一方面的第五種可能的實現(xiàn)方式中,將數(shù)據(jù)塊寫入所述磁盤包括:
[0025]若待寫入的數(shù)據(jù)塊的個數(shù)大于所述磁盤中一個容器所能夠存儲的數(shù)據(jù)塊的個數(shù)時,將所述待寫入的數(shù)據(jù)塊寫入所述磁盤中地址連續(xù)的容器。
[0026]本發(fā)明實施例的第二方面,提供一種數(shù)據(jù)存儲裝置,包括:
[0027]接收單元,用于接收待存儲文件;
[0028]數(shù)據(jù)塊劃分單元,用于將所述接收單元接收的所述待存儲文件劃分為預設大小的多個數(shù)據(jù)塊;
[0029]確定單元,用于從所述數(shù)據(jù)塊劃分單元劃分的所述多個數(shù)據(jù)塊中確定第一數(shù)據(jù)塊集合,所述第一數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊為與磁盤中任一容器中存儲的數(shù)據(jù)塊重復的數(shù)據(jù)塊;
[0030]刪除單元,用于當所述確定單元確定的所述第一數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊的個數(shù)與所述數(shù)據(jù)塊劃分單元劃分的所述多個數(shù)據(jù)塊的個數(shù)的比值大于第一閾值時,若存在包含的數(shù)據(jù)塊的個數(shù)大于第二閾值的第二數(shù)據(jù)塊集合,則從所述第一數(shù)據(jù)塊集合中刪除第三數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊,所述第二數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊為所述磁盤中一容器中存儲的、與所述第一數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊重復的數(shù)據(jù)塊,所述第三數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊為與所述第二數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊重復的數(shù)據(jù)塊;
[0031]寫入單元,用于將所述刪除單元刪除所述第三數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊后所述多個數(shù)據(jù)塊中剩余的數(shù)據(jù)塊寫入快速的非易失存儲設備;
[0032]所述寫入單元,還用于當所述快速的非易失存儲設備中存儲的數(shù)據(jù)塊在所述快速的非易失存儲設備中占用的存儲空間與所述快速的非易失存儲設備的存儲空間的比值大于第三閾值時,將所述快速的非易失存儲設備中存儲的數(shù)據(jù)塊寫入所述磁盤。
[0033]結合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,
[0034]所述確定單元,還用于若所述快速的非易失存儲設備中存儲有數(shù)據(jù)塊,則從所述多個數(shù)據(jù)塊中剩余的數(shù)據(jù)塊中確定第四數(shù)據(jù)塊集合,所述第四數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊為與所述快速的非易失存儲設備中存儲的數(shù)據(jù)塊重復的數(shù)據(jù)塊;
[0035]所述刪除單元,還用于從所述多個數(shù)據(jù)塊中剩余的數(shù)據(jù)塊中刪除所述第四數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊;
[0036]所述寫入單元,具體用于將所述刪除單元刪除所述第四數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊后的所述多個數(shù)據(jù)塊中剩余的數(shù)據(jù)塊寫入所述快速的非易失存儲設備。
[0037]結合第二方面的第一種可能的實現(xiàn)方式,在第二方面的第二種可能的實現(xiàn)方式中,
[0038]所述確定單元,還用于在所述刪除單元從所述多個數(shù)據(jù)塊中剩余的數(shù)據(jù)塊中刪除所述第四數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊之前,從所述快速的非易失存儲設備中存儲的數(shù)據(jù)塊中確定第五數(shù)據(jù)塊集合,所述第五數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊為與所述第四數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊重復的數(shù)據(jù)塊;
[0039]所述寫入單元,還具體用于當所述快速的非易失存儲設備中存儲的數(shù)據(jù)塊在所述快速的非易失存儲設備中占用的存儲空間與所述快速的非易失存儲設備的存儲空間的比值大于所述第三閾值時,優(yōu)先將所述快速的非易失存儲設備中存儲的數(shù)據(jù)塊中的第五數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊寫入所述磁盤。
[0040]結合第二方面,在第二方面的第三種可能的實現(xiàn)方式中,所述寫入單元,還用于當所述第一數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊的個數(shù)與所述多個數(shù)據(jù)塊的個數(shù)的比值大于所述第一閾值時,若不存在包含的數(shù)據(jù)塊的個數(shù)大于所述第二閾值的所述第二數(shù)據(jù)塊集合,則將所述多個數(shù)據(jù)塊寫入所述快速的非易失存儲設備。
[0041]結合第二方面,在第二方面的第四種可能的實現(xiàn)方式中,所述寫入單元,還用于當所述第一數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊的個數(shù)與所述多個數(shù)據(jù)塊的個數(shù)的比值小于等于所述第一閾值時,則將所述多個數(shù)據(jù)塊寫入所述磁盤。
[0042]結合第二方面和上述可能的實現(xiàn)方式,在第二方面的第五種可能的實現(xiàn)方式中,所述寫入單元,還用于在將數(shù)據(jù)塊寫入所述磁盤時,若待寫入的數(shù)據(jù)塊的個數(shù)大于所述磁盤中一個容器所能夠存儲的數(shù)據(jù)塊的個數(shù)時,將所述待寫入的數(shù)據(jù)塊寫入所述磁盤中地址連續(xù)的容器。
[0043]本發(fā)明實施例提供的數(shù)據(jù)存儲方法及裝置,一方面,當?shù)谝粩?shù)據(jù)塊集合中包含的數(shù)據(jù)塊的個數(shù)與該多個數(shù)據(jù)塊的個數(shù)的比值大于第一閾值時,說明該多個數(shù)據(jù)塊中的重復數(shù)據(jù)塊所占的比例較高,才有必要進行數(shù)據(jù)去重。并且,若存在包含的數(shù)據(jù)塊的個數(shù)大于第二閾值的第二數(shù)據(jù)塊集合,則從第一數(shù)據(jù)塊集合中刪除第三數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊,而并不是將第一數(shù)據(jù)塊集合中包含的所有數(shù)據(jù)塊都刪除,當要讀取待存儲文件時,需要該容器中存儲的第二數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊,由于該容器中存儲的第二數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊的個數(shù)大于第二閾值,并且一個容器所能夠存儲的數(shù)據(jù)塊的個數(shù)是固定的,因此,第二數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊在該容器中所占的比例較高,從而可以提高讀取文件時的有效數(shù)據(jù)率,進而提高讀取性能。此外,刪除第三數(shù)據(jù)塊集合中包含的數(shù)據(jù)塊可以減少磁盤的存儲