選擇一個(gè)存儲(chǔ)數(shù)據(jù)副本的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),并將第一操作指令發(fā)送給選擇的數(shù)據(jù)存儲(chǔ)將誒點(diǎn)。
[0040]步驟217:根據(jù)第一操作指令,對選擇的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)中的副本進(jìn)行讀取。
[0041]根據(jù)第一操作指令,讀取選擇的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)中的數(shù)據(jù)。
[0042]步驟218,判斷對該數(shù)據(jù)是否讀取成功,如果判斷結(jié)果為是,執(zhí)行步驟22,在進(jìn)行讀操作成功之后,更新所述保留的數(shù)據(jù)塊對應(yīng)的訪問頻率。反之,執(zhí)行步驟221。
[0043]步驟219:所有的數(shù)據(jù)塊處理完成時(shí),返回與第一操作指令對應(yīng)的結(jié)果。
[0044]其中,所有的數(shù)據(jù)塊處理完成時(shí),返回?cái)?shù)據(jù)讀操作請求的結(jié)果。
[0045]步驟220:若沒有查找到對應(yīng)的數(shù)據(jù)副本時(shí),返回?cái)?shù)據(jù)塊分配異常。
[0046]步驟221:若數(shù)據(jù)塊讀取失敗時(shí),返回?cái)?shù)據(jù)塊輸入輸出異常。
[0047]在上述步驟14指示分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)共享保留的數(shù)據(jù)塊之后,還包括對分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中的數(shù)據(jù)進(jìn)行讀操作和寫操作的具體處理方式,其中,對分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中的數(shù)據(jù)進(jìn)行寫操作的具體處理如下述:
[0048]步驟一,接收對保留的數(shù)據(jù)塊中的數(shù)據(jù)進(jìn)行寫操作的第二操作指令。
[0049]步驟二,在對所述保留的數(shù)據(jù)塊進(jìn)行寫操作成功之后,更新保留的數(shù)據(jù)塊對應(yīng)的訪問頻率。
[0050]步驟三,在確定出所述寫操作成功的數(shù)據(jù)塊已進(jìn)行過備份存儲(chǔ)時(shí),根據(jù)第二操作指令,對備份存儲(chǔ)的數(shù)據(jù)塊中的數(shù)據(jù)進(jìn)行寫操作后存儲(chǔ)。
[0051]其中,對保留的數(shù)據(jù)塊中的數(shù)據(jù)進(jìn)行寫操作,如圖3所示,可以包括下述步驟:
[0052]步驟511,根據(jù)接收到的第二操作指令,確定待進(jìn)行寫操作的數(shù)據(jù)塊。
[0053]步驟512,根據(jù)待進(jìn)行寫操作的數(shù)據(jù)塊的邏輯地址,查找和所述待進(jìn)行寫操作的數(shù)據(jù)塊副本和存儲(chǔ)副本的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)。
[0054]其中,可以在接收到進(jìn)行讀操作的第二操作指令時(shí),根據(jù)數(shù)據(jù)讀操作所在的數(shù)據(jù)卷、邏輯地址偏移量和長度,計(jì)算第二操作指令對應(yīng)的數(shù)據(jù)塊列表。
[0055]步驟513,判斷是否所有的數(shù)據(jù)塊均處理完成,如果判斷結(jié)果為是,執(zhí)行步驟523,反之,執(zhí)行步驟514。
[0056]步驟514,在查找到的存儲(chǔ)副本的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)中,選擇其中一個(gè)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)。
[0057]根據(jù)邏輯地址,采用平衡樹結(jié)構(gòu),查找對應(yīng)的數(shù)據(jù)庫塊副本和存儲(chǔ)該副本的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)。
[0058]步驟515,判斷是否找到與第二操作指令對應(yīng)的數(shù)據(jù)塊副本。如果判斷結(jié)果為是,執(zhí)行步驟515A,反之,執(zhí)行步驟524。
[0059]步驟515A,判斷該選擇的數(shù)據(jù)塊是否在工作緩沖區(qū),如果判斷結(jié)果為是,執(zhí)行步驟516,反之,執(zhí)行步驟525。
[0060]步驟516,將查找到的數(shù)據(jù)塊副本按照第二操作指令進(jìn)行寫操作,在寫操作完成后數(shù)據(jù)塊副本存儲(chǔ)到數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)中。
[0061]其中,可以將對該選擇的數(shù)據(jù)塊進(jìn)行寫操作,發(fā)送給分布式數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)中所有存儲(chǔ)該數(shù)據(jù)塊副本的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)。
[0062]步驟517,按照第二操作指令,對數(shù)據(jù)塊進(jìn)行寫操作。
[0063]步驟518,判斷分布式存儲(chǔ)系統(tǒng)中所有相同的數(shù)據(jù)開副本的寫操作是否成功,如果判斷結(jié)果為是,執(zhí)行步驟519,反之,執(zhí)行步驟526。
[0064]步驟519,更新寫操作完成后的數(shù)據(jù)塊的訪問頻率。
[0065]其中,可以增加進(jìn)行寫操作的數(shù)據(jù)塊的寫操作技術(shù)。
[0066]進(jìn)一步地,還可以包括下述步驟:
[0067]步驟520,判斷數(shù)據(jù)塊是否存儲(chǔ)在預(yù)備份存儲(chǔ)節(jié)點(diǎn)中,如果判斷結(jié)果為是,執(zhí)行步驟521,反之執(zhí)行步驟527。
[0068]步驟521,該數(shù)據(jù)塊存儲(chǔ)在預(yù)備份存儲(chǔ)節(jié)點(diǎn)中,以異步處理的方式將第二操作指令發(fā)送給預(yù)備份存儲(chǔ)節(jié)點(diǎn),并進(jìn)行共享關(guān)系處理。
[0069]步驟522,返回?cái)?shù)據(jù)塊寫操作成功。進(jìn)而返回執(zhí)行判斷所有數(shù)據(jù)塊是否處理完成的步驟。
[0070]步驟523,返回與第二操作指令對應(yīng)的寫操作結(jié)果。
[0071]步驟524,若未找到對應(yīng)的數(shù)據(jù)副本,則為數(shù)據(jù)卷分配數(shù)據(jù)塊。
[0072]步驟525,若數(shù)據(jù)塊未在工作緩沖區(qū),則可以選擇若干個(gè)數(shù)據(jù)數(shù)據(jù)節(jié)點(diǎn),將第二操作指令發(fā)送給選擇的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)中。并繼續(xù)執(zhí)行步驟516。
[0073]步驟526,若數(shù)據(jù)塊寫操作失敗時(shí),返回?cái)?shù)據(jù)塊輸入輸出異常。
[0074]步驟527,通過異步的方式轉(zhuǎn)發(fā)第二操作指令給預(yù)備份存儲(chǔ)節(jié)點(diǎn),進(jìn)行共享關(guān)系處理。
[0075]本發(fā)明實(shí)施例提出的技術(shù)方案中,對于分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中的數(shù)據(jù),首先區(qū)分冷數(shù)據(jù)和熱數(shù)據(jù),對于冷數(shù)據(jù)的寫操作,首先在數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)集群中,正常寫入數(shù)據(jù)的各個(gè)副本。并把請求的信息發(fā)送給分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中的預(yù)備份存儲(chǔ)節(jié)點(diǎn)。如果預(yù)備份存儲(chǔ)節(jié)點(diǎn)自身存儲(chǔ)有該數(shù)據(jù)塊信息,則會(huì)降低該數(shù)據(jù)塊的引用計(jì)數(shù),即解除冗余數(shù)據(jù)塊服務(wù)的共享。如果沒有共享情況,則在預(yù)備份存儲(chǔ)節(jié)點(diǎn)中直接放棄該數(shù)據(jù)塊。如果預(yù)備份存儲(chǔ)節(jié)點(diǎn)內(nèi)沒有該數(shù)據(jù)塊,則可忽略該信息。
[0076]對于數(shù)據(jù)備份操作,分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中的備份進(jìn)程會(huì)首先在預(yù)備份存儲(chǔ)節(jié)點(diǎn)中查找要備份的數(shù)據(jù)塊。如果找到該數(shù)據(jù)塊則會(huì)直接從預(yù)備份存儲(chǔ)節(jié)點(diǎn)中讀取數(shù)據(jù)塊。如果沒有找到該數(shù)據(jù)塊則從在存儲(chǔ)節(jié)點(diǎn)上讀取該數(shù)據(jù)塊。這樣,大部分冷數(shù)據(jù)的I/o請求都會(huì)落在預(yù)備份存儲(chǔ)節(jié)點(diǎn)上,從而降低備份操作對在線數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的性能影響。
[0077]相應(yīng)地,本發(fā)明實(shí)施還提出一種數(shù)據(jù)存儲(chǔ)裝置,如圖4所示,包括:
[0078]接收模塊401,用于在分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中,若確定出數(shù)據(jù)塊中的數(shù)據(jù)是冷數(shù)據(jù)時(shí),接收并備份存儲(chǔ)所述冷數(shù)據(jù)。
[0079]存儲(chǔ)模塊402,用于根據(jù)備份存儲(chǔ)的所述冷數(shù)據(jù),在確定出數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)中至少有兩個(gè)和所述冷數(shù)據(jù)相同的數(shù)據(jù)塊時(shí),保留其中一個(gè)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)中的數(shù)據(jù)塊。
[0080]指示模塊403,用于指示分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)共享保留的數(shù)據(jù)塊。
[0081]可選地,所述裝置還包括確定模塊,用于在第一設(shè)定時(shí)長內(nèi),確定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)中的每個(gè)數(shù)據(jù)塊的訪問頻率和值,并確定每個(gè)數(shù)據(jù)塊的訪問頻率,若單個(gè)數(shù)據(jù)塊的訪問頻率和所述訪問頻率和值的比值小于第一設(shè)定閾值時(shí),確定所述數(shù)據(jù)塊中的數(shù)據(jù)是冷數(shù)據(jù)。
[0082]可選地,所述接收模塊,還用于接收對保留的數(shù)據(jù)塊中的數(shù)據(jù)進(jìn)行讀操作的第一操作指令;所述裝置還包括:更新模塊,用于在進(jìn)行讀操作成功之后,更新所述保留的數(shù)據(jù)塊對應(yīng)的訪問頻率。
[0083]可選地,所述裝置還包括:確定模塊,還用于根據(jù)接收到的第一操作指令,確定待進(jìn)行讀操作的數(shù)據(jù)塊;查找模塊,用于根據(jù)所述待進(jìn)行讀操作的數(shù)據(jù)塊的邏輯地址,查找和所述待進(jìn)行讀操作的數(shù)據(jù)塊副本和存儲(chǔ)所述副本的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);選擇模塊,用于在查找到的存儲(chǔ)所述副本的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)中,選擇其中一個(gè)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);發(fā)送模塊,還用于將所述第一操作指令發(fā)送給選擇的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);讀取模塊,用于根據(jù)所述第一操作指令,對選擇的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)中的副本進(jìn)行讀取。
[0084]可選地,所述接收模塊,還用于接收對保留的數(shù)據(jù)塊中的數(shù)據(jù)進(jìn)行寫操作的第二操作指令;所述裝置還包括:更新模塊,在對所述保留的數(shù)據(jù)塊進(jìn)行寫操作成功之后,更新所述保留的數(shù)據(jù)塊對應(yīng)的訪問頻率;在確定出所述寫操作成功的數(shù)據(jù)塊已進(jìn)行過備份存儲(chǔ)時(shí),根據(jù)所述第二操作指令,對備份存儲(chǔ)的數(shù)據(jù)塊中的數(shù)據(jù)進(jìn)行寫操作后存儲(chǔ)。
[0085]可選地,該裝置還包括:確定模塊,用于根據(jù)接收到的第二操作指令,確定待進(jìn)行寫操作的數(shù)據(jù)塊;查找模塊,用于根據(jù)所述待進(jìn)行寫操作的數(shù)據(jù)塊的邏輯地址,查找和所述待進(jìn)行寫操作的數(shù)據(jù)塊副本和存儲(chǔ)所述副本的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);將查找到的數(shù)據(jù)塊副本按照第二操作指令進(jìn)行寫操作,在寫操作完成后數(shù)據(jù)塊副本存儲(chǔ)到數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)中;更新模塊,用于更新寫操作完成后的數(shù)據(jù)塊的訪問頻率。
[0086]采用上述技術(shù)方案,能夠?qū)崿F(xiàn)自動(dòng)監(jiān)測數(shù)據(jù)塊級別的訪問熱度,動(dòng)態(tài)將冷數(shù)據(jù)的副本占用降低,釋放存儲(chǔ)空間,提高存儲(chǔ)空間的利用率。能夠利用在線存儲(chǔ)系統(tǒng)外的預(yù)備份存儲(chǔ)節(jié)點(diǎn)上進(jìn)行復(fù)雜的消冗操作,并根據(jù)結(jié)果來調(diào)整在線數(shù)據(jù)塊副本