国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      存儲(chǔ)方法和分布式存儲(chǔ)系統(tǒng)與流程

      文檔序號(hào):12664122閱讀:318來源:國(guó)知局
      存儲(chǔ)方法和分布式存儲(chǔ)系統(tǒng)與流程

      本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,具體涉及一種存儲(chǔ)方法和分布式存儲(chǔ)系統(tǒng)。



      背景技術(shù):

      隨著計(jì)算機(jī)應(yīng)用規(guī)模越來越大,對(duì)存儲(chǔ)空間的需求也與日俱增。對(duì)應(yīng)的,將復(fù)數(shù)設(shè)備的存儲(chǔ)資源(比如,諸如磁盤組的存儲(chǔ)介質(zhì))統(tǒng)合為一體作為一個(gè)存儲(chǔ)池來提供存儲(chǔ)服務(wù)成為了現(xiàn)在的主流。然而,在一個(gè)包含多個(gè)存儲(chǔ)控制節(jié)點(diǎn)的分布式存儲(chǔ)系統(tǒng)中,雖然多個(gè)存儲(chǔ)控制節(jié)點(diǎn)同時(shí)對(duì)存儲(chǔ)池中的同一個(gè)存儲(chǔ)單元執(zhí)行讀取操作不會(huì)互相沖突,但當(dāng)多個(gè)存儲(chǔ)控制節(jié)點(diǎn)同時(shí)對(duì)同一個(gè)存儲(chǔ)單元執(zhí)行寫入操作時(shí)會(huì)產(chǎn)生沖突,或當(dāng)兩個(gè)存儲(chǔ)控制節(jié)點(diǎn)同時(shí)對(duì)存儲(chǔ)池中的同一個(gè)存儲(chǔ)單元分別執(zhí)行讀取操作和寫入操作時(shí)也會(huì)產(chǎn)生沖突。由此可見,急需一種可避免上述提到的沖突的存儲(chǔ)方式,以保證存儲(chǔ)過程的效率和質(zhì)量。



      技術(shù)實(shí)現(xiàn)要素:

      有鑒于此,本發(fā)明實(shí)施例提供了一種存儲(chǔ)方法、存儲(chǔ)裝置和分布式存儲(chǔ)系統(tǒng),解決了現(xiàn)有存儲(chǔ)方式導(dǎo)致的讀操作和寫操作之間沖突,以及寫操作和寫操作之間沖突的問題。

      本發(fā)明一實(shí)施例提供的一種存儲(chǔ)方法應(yīng)用于一種分布式存儲(chǔ)系統(tǒng),所述分布式存儲(chǔ)系統(tǒng)包括:至少兩個(gè)存儲(chǔ)控制節(jié)點(diǎn)和一個(gè)由所述至少兩個(gè)存儲(chǔ)控制節(jié)點(diǎn)共享的存儲(chǔ)池,存儲(chǔ)池包括至少兩個(gè)存儲(chǔ)單元,當(dāng)任一所述存儲(chǔ)控制節(jié)點(diǎn)要對(duì)所述存儲(chǔ)池寫入數(shù)據(jù)時(shí),所述方法包括:

      判斷存儲(chǔ)池中是否存在數(shù)據(jù)內(nèi)容與當(dāng)前寫入數(shù)據(jù)相同的重復(fù)存儲(chǔ)單元;以及

      若判斷結(jié)果為否,從所述存儲(chǔ)池中分配一個(gè)空閑存儲(chǔ)單元,將當(dāng)前寫入數(shù)據(jù)寫入所述空閑存儲(chǔ)單元。

      本發(fā)明一實(shí)施例提供的一種分布式存儲(chǔ)系統(tǒng)包括:至少兩個(gè)存儲(chǔ)控制節(jié)點(diǎn)和一個(gè)由所述至少兩個(gè)存儲(chǔ)控制節(jié)點(diǎn)共享的存儲(chǔ)池,所述存儲(chǔ)控制節(jié)點(diǎn)包括:

      去重判斷模塊,配置為判斷存儲(chǔ)池中是否存在數(shù)據(jù)內(nèi)容與當(dāng)前寫入數(shù)據(jù)相同的重復(fù)存儲(chǔ)單元;

      空閑單元管理模塊,配置為從所述存儲(chǔ)池中分配一個(gè)空閑存儲(chǔ)單元;以及

      寫入模塊,配置為若所述去重判斷模塊返回的判斷結(jié)果為是,返回所述重復(fù)存儲(chǔ)單元的存儲(chǔ)地址;否則,將當(dāng)前寫入數(shù)據(jù)寫入所述空閑單元管理模塊所分配的空閑存儲(chǔ)單元,返回已寫入所述當(dāng)前寫入數(shù)據(jù)的所述空閑存儲(chǔ)單元的存儲(chǔ)地址。

      本發(fā)明實(shí)施例提供的一種存儲(chǔ)方法和分布式存儲(chǔ)系統(tǒng),每當(dāng)存儲(chǔ)控制節(jié)點(diǎn)要向存儲(chǔ)池中寫入數(shù)據(jù)時(shí),首先判斷存儲(chǔ)池中是否存在數(shù)據(jù)內(nèi)容與當(dāng)前寫入數(shù)據(jù)相同的重復(fù)存儲(chǔ)單元。當(dāng)不存在重復(fù)存儲(chǔ)單元時(shí),說明當(dāng)前寫入數(shù)據(jù)為存儲(chǔ)池中所沒有的新的數(shù)據(jù)內(nèi)容,此時(shí)在一個(gè)空閑存儲(chǔ)單元中寫入當(dāng)前寫入數(shù)據(jù)。這樣其他存儲(chǔ)控制節(jié)點(diǎn)同時(shí)進(jìn)行的讀取操作仍可從當(dāng)前存儲(chǔ)單元中讀取原有數(shù)據(jù)內(nèi)容,其他存儲(chǔ)控制節(jié)點(diǎn)同時(shí)進(jìn)行的另一個(gè)寫入操作則可在另一個(gè)空閑存儲(chǔ)單元中寫入另一個(gè)寫入數(shù)據(jù)。由此可見,通過本發(fā)明實(shí)施例所提供的存儲(chǔ)方式,讀操作和寫操作、以及寫操作和寫操作之間都不會(huì)產(chǎn)生沖突,從而有效保證了數(shù)據(jù)內(nèi)容存儲(chǔ)的效率和質(zhì)量。同時(shí),通過重復(fù)存儲(chǔ)單元的判斷過程避免了數(shù)據(jù)內(nèi)容的重復(fù)存儲(chǔ),節(jié)約了存儲(chǔ)空間,提高了存儲(chǔ)資源的利用效率。

      附圖說明

      圖1所示為本發(fā)明一實(shí)施例提供的一種存儲(chǔ)方法的流程示意圖。

      圖2a所示為本發(fā)明一實(shí)施例提供的一種存儲(chǔ)方法的原理示意圖。

      圖2b所示為本發(fā)明一實(shí)施例提供的存儲(chǔ)對(duì)象結(jié)構(gòu)示意圖。

      圖3所示為本發(fā)明一實(shí)施例提供的一種存儲(chǔ)方法的流程示意圖。

      圖4所示為本發(fā)明一實(shí)施例提供的一種存儲(chǔ)方法中判斷是否存在重復(fù)存儲(chǔ)單元的流程示意圖。

      圖5所示為本發(fā)明一實(shí)施例提供的存儲(chǔ)控制節(jié)點(diǎn)的結(jié)構(gòu)示意圖。

      圖6所示為本發(fā)明另一實(shí)施例提供的存儲(chǔ)控制節(jié)點(diǎn)的的結(jié)構(gòu)示意圖。

      圖7所示為本發(fā)明另一實(shí)施例提供的存儲(chǔ)控制節(jié)點(diǎn)的的結(jié)構(gòu)示意圖。

      圖8所示為本發(fā)明一實(shí)施例提供的一種分布式存儲(chǔ)系統(tǒng)的結(jié)構(gòu)示意圖。

      具體實(shí)施方式

      下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。

      圖1所示為本發(fā)明一實(shí)施例提供的一種存儲(chǔ)方法的流程示意圖。該存儲(chǔ)方法應(yīng)用于一種分布式存儲(chǔ)系統(tǒng),該分布式存儲(chǔ)系統(tǒng)包括:至少兩個(gè)存儲(chǔ)控制節(jié)點(diǎn)和一個(gè)由該至少兩個(gè)存儲(chǔ)控制節(jié)點(diǎn)共享的存儲(chǔ)池,存儲(chǔ)池包括至少兩個(gè)存儲(chǔ)單元,當(dāng)任一存儲(chǔ)控制節(jié)點(diǎn)要對(duì)存儲(chǔ)池寫入數(shù)據(jù)時(shí),該方法包括:

      步驟101:判斷存儲(chǔ)池中是否存在數(shù)據(jù)內(nèi)容與當(dāng)前寫入數(shù)據(jù)相同的重復(fù)存儲(chǔ)單元。

      若存儲(chǔ)池中存在重復(fù)存儲(chǔ)單元,則說明當(dāng)前寫入數(shù)據(jù)已經(jīng)存儲(chǔ)在了存儲(chǔ)池中,此時(shí)就沒有必要重復(fù)寫入該當(dāng)前寫入數(shù)據(jù)了。

      步驟102:如圖2a所示,若判斷結(jié)果為否,從存儲(chǔ)池中分配一個(gè)空閑存儲(chǔ)單元,將當(dāng)前寫入數(shù)據(jù)寫入該空閑存儲(chǔ)單元。

      若存儲(chǔ)池中并不存在重復(fù)存儲(chǔ)單元,則說明當(dāng)前寫入數(shù)據(jù)為并未存儲(chǔ)在存儲(chǔ)池中的新的數(shù)據(jù)內(nèi)容。通過先分配一個(gè)空閑存儲(chǔ)單元,將其鎖定后再寫入新數(shù)據(jù),可以保證不會(huì)有其它存儲(chǔ)控制節(jié)點(diǎn)寫入同一存儲(chǔ)單元。由此可見,通過本發(fā)明實(shí)施例所提供的存儲(chǔ)方式,讀操作和寫操作、以及寫操作和寫操作之間都不會(huì)產(chǎn)生沖突,從而有效保證了數(shù)據(jù)內(nèi)容存儲(chǔ)的效率和質(zhì)量。同時(shí),通過重復(fù)存儲(chǔ)單元的判斷過程避免了數(shù)據(jù)內(nèi)容的重復(fù)存儲(chǔ),節(jié)約了存儲(chǔ)空間,提高了存儲(chǔ)資源的利用效率。

      雖然圖2a所示的僅為針對(duì)一個(gè)存儲(chǔ)單元執(zhí)行寫入操作的過程,然而在本發(fā)明一實(shí)施例中,一個(gè)或多個(gè)存儲(chǔ)單元可構(gòu)成一個(gè)存儲(chǔ)對(duì)象。這樣當(dāng)一個(gè)存儲(chǔ)控制節(jié)點(diǎn)要對(duì)存儲(chǔ)池中的一個(gè)存儲(chǔ)對(duì)象執(zhí)行寫入操作時(shí),需要針對(duì)存儲(chǔ)對(duì)象所包括的多個(gè)存儲(chǔ)單元逐一判斷是否存在重復(fù)存儲(chǔ)單元,并將存儲(chǔ)對(duì)象中不存在重復(fù)存儲(chǔ)單元的存儲(chǔ)單元的數(shù)據(jù)寫入存儲(chǔ)池中的空閑存儲(chǔ)單元中。

      在本發(fā)明一實(shí)施例中,存儲(chǔ)池可被預(yù)先劃分為多個(gè)存儲(chǔ)單元,其中每個(gè)存儲(chǔ)單元所占據(jù)的存儲(chǔ)空間相同。在一進(jìn)一步實(shí)施例中,存儲(chǔ)單元可以是一個(gè)邏輯層面上的存儲(chǔ)概念。如圖2b所示,一個(gè)存儲(chǔ)單元可以是一個(gè)邏輯page,而一個(gè)邏輯page可包括至少一個(gè)物理page,該至少一個(gè)物理page可分布在至少一個(gè)存儲(chǔ)介質(zhì)中。這樣當(dāng)一個(gè)或多個(gè)存儲(chǔ)單元構(gòu)成一個(gè)存儲(chǔ)對(duì)象時(shí),從邏輯的層面上看一個(gè)存儲(chǔ)對(duì)象中的不同存儲(chǔ)單元是連續(xù)的,但在物理的層面上看該存儲(chǔ)對(duì)象所對(duì)應(yīng)的物理page可能是分布在存儲(chǔ)池的多個(gè)存儲(chǔ)介質(zhì)中的。在一進(jìn)一步實(shí)施例中,為了提高對(duì)于存儲(chǔ)單元的讀寫效率,一個(gè)邏輯page所對(duì)應(yīng)的至少一個(gè)物理page可分布在不同的存儲(chǔ)介質(zhì)中;為了實(shí)現(xiàn)物理層面上的容災(zāi)機(jī)制以保證數(shù)據(jù)存儲(chǔ)安全,一個(gè)邏輯page所對(duì)應(yīng)的至少一個(gè)物理page之間還可以冗余存儲(chǔ)(例如RAID或Erasure Code)方式保存數(shù)據(jù)內(nèi)容。

      同時(shí)應(yīng)當(dāng)理解,與存儲(chǔ)單元對(duì)應(yīng)的存儲(chǔ)地址也可以是一個(gè)邏輯層面上的概念,對(duì)應(yīng)一個(gè)邏輯page;一個(gè)存儲(chǔ)地址還可能包括至少一個(gè)實(shí)際的物理地址,該至少一個(gè)物理地址可以是不連續(xù)的,分別對(duì)應(yīng)不同的物理page。由此可見,當(dāng)對(duì)存儲(chǔ)池中的一個(gè)存儲(chǔ)單元執(zhí)行寫入操作時(shí),實(shí)際上可能是對(duì)分布在存儲(chǔ)池的不同存儲(chǔ)介質(zhì)中的多個(gè)物理page執(zhí)行了寫入操作,這樣在后續(xù)的讀取操作或?qū)懭氩僮鲿r(shí)可同時(shí)享用不同存儲(chǔ)介質(zhì)的硬件資源以提高讀寫效率,并可以用冗余存儲(chǔ)的方式提高數(shù)據(jù)可靠性和可用度,在部分存儲(chǔ)介質(zhì)出現(xiàn)故障時(shí)依然能正常讀寫數(shù)據(jù)。

      還應(yīng)當(dāng)理解,當(dāng)本發(fā)明實(shí)施例所提供的存儲(chǔ)方法應(yīng)用到不同的分布式存儲(chǔ)系統(tǒng)結(jié)構(gòu)中時(shí),存儲(chǔ)對(duì)象可能對(duì)應(yīng)不同的具體形式。例如該存儲(chǔ)對(duì)象可以是一個(gè)塊設(shè)備、一個(gè)文件系統(tǒng)中的文件,或一個(gè)對(duì)象分布式存儲(chǔ)系統(tǒng)中的對(duì)象等。本發(fā)明對(duì)存儲(chǔ)對(duì)象的具體形式不做限定。

      在本發(fā)明一實(shí)施例中,每個(gè)存儲(chǔ)控制節(jié)點(diǎn)都能夠無需借助其他存儲(chǔ)控制節(jié)點(diǎn)而訪問存儲(chǔ)池中的所有存儲(chǔ)單元,從而使得本發(fā)明所有的存儲(chǔ)介質(zhì)都實(shí)際上被所有的存儲(chǔ)控制節(jié)點(diǎn)共享,進(jìn)而實(shí)現(xiàn)了全局存儲(chǔ)池的效果。在一進(jìn)一步實(shí)施例中,上述全局存儲(chǔ)池的效果可通過存儲(chǔ)網(wǎng)絡(luò)實(shí)現(xiàn)。具體而言,該分布式存儲(chǔ)系統(tǒng)可進(jìn)一步包括存儲(chǔ)網(wǎng)絡(luò),至少兩個(gè)存儲(chǔ)節(jié)點(diǎn)和至少一個(gè)存儲(chǔ)介質(zhì)分別連接至存儲(chǔ)網(wǎng)絡(luò),每個(gè)存儲(chǔ)控制節(jié)點(diǎn)通過存儲(chǔ)網(wǎng)絡(luò)訪問存儲(chǔ)池中的存儲(chǔ)單元。存儲(chǔ)網(wǎng)絡(luò)被配置為使得每一個(gè)存儲(chǔ)控制節(jié)點(diǎn)都能夠無需借助其他存儲(chǔ)控制節(jié)點(diǎn)而訪問所有存儲(chǔ)介質(zhì)。

      在本發(fā)明一實(shí)施例中,存儲(chǔ)網(wǎng)絡(luò)可以包括至少一個(gè)存儲(chǔ)交換設(shè)備,通過其中包括的存儲(chǔ)交換設(shè)備之間的數(shù)據(jù)交換來實(shí)現(xiàn)存儲(chǔ)控制節(jié)點(diǎn)對(duì)存儲(chǔ)介質(zhì)的訪問。具體而言,存儲(chǔ)控制節(jié)點(diǎn)和存儲(chǔ)介質(zhì)分別通過存儲(chǔ)通道與存儲(chǔ)交換設(shè)備連接。

      在本發(fā)明另一實(shí)施例中,存儲(chǔ)網(wǎng)絡(luò)可以包括至少兩個(gè)存儲(chǔ)交換設(shè)備,每個(gè)存儲(chǔ)控制節(jié)點(diǎn)都可以通過任意一個(gè)存儲(chǔ)交換設(shè)備連接到任何一個(gè)存儲(chǔ)介質(zhì)。當(dāng)任何一個(gè)存儲(chǔ)交換設(shè)備或連接到一個(gè)存儲(chǔ)交換設(shè)備的存儲(chǔ)通道出現(xiàn)故障時(shí),存儲(chǔ)控制節(jié)點(diǎn)通過其它存儲(chǔ)交換設(shè)備讀寫存儲(chǔ)介質(zhì)上的數(shù)據(jù)。

      在本發(fā)明一實(shí)施例中,存儲(chǔ)交換設(shè)備可以是SAS交換機(jī)或PCI/e交換機(jī)或Omni Path交換機(jī)或Infiniband交換機(jī)或以太網(wǎng)交換機(jī)或TLink交換機(jī),對(duì)應(yīng)地,存儲(chǔ)通道可以是SAS(串行連接SCSI)通道或PCI/e通道或Omni Path通道或Infiniband通道或以太網(wǎng)通道或TLink通道。

      在本發(fā)明一實(shí)施例中,存儲(chǔ)池包括至少一個(gè)連接至存儲(chǔ)網(wǎng)絡(luò)的存儲(chǔ)設(shè)備,每個(gè)存儲(chǔ)設(shè)備又包括至少一個(gè)存儲(chǔ)介質(zhì),存儲(chǔ)控制節(jié)點(diǎn)所在的物理機(jī)獨(dú)立于存儲(chǔ)設(shè)備,存儲(chǔ)設(shè)備更多作為連接存儲(chǔ)介質(zhì)與存儲(chǔ)網(wǎng)絡(luò)的一個(gè)通道。這樣的方式,使得在需要進(jìn)行動(dòng)態(tài)平衡時(shí),無需將物理數(shù)據(jù)在不同的存儲(chǔ)介質(zhì)中進(jìn)行遷移,只需要通過配置平衡不同的存儲(chǔ)控制節(jié)點(diǎn)所管理的存儲(chǔ)介質(zhì)即可。

      在本發(fā)明另一實(shí)施例中,存儲(chǔ)控制節(jié)點(diǎn)側(cè)進(jìn)一步包括計(jì)算節(jié)點(diǎn),并且計(jì)算節(jié)點(diǎn)和存儲(chǔ)控制節(jié)點(diǎn)設(shè)置在一臺(tái)物理服務(wù)器中,該物理服務(wù)器通過存儲(chǔ)網(wǎng)絡(luò)與存儲(chǔ)設(shè)備連接。利用本發(fā)明實(shí)施方式所構(gòu)建的將計(jì)算節(jié)點(diǎn)和存儲(chǔ)控制節(jié)點(diǎn)位于同一物理機(jī)的分布式共享(Distributed Shared)存儲(chǔ)系統(tǒng),從整體結(jié)構(gòu)而言,可以減少所需物理設(shè)備的數(shù)量,從而降低成本。同時(shí),計(jì)算節(jié)點(diǎn)也可以在本地訪問到其希望訪問的存儲(chǔ)資源。另外,由于將計(jì)算節(jié)點(diǎn)和存儲(chǔ)控制節(jié)點(diǎn)聚合在同一臺(tái)物理服務(wù)器上,兩者之間數(shù)據(jù)交換可以簡(jiǎn)單到僅僅是共享內(nèi)存,性能特別優(yōu)異。

      在本發(fā)明一實(shí)施例中,存儲(chǔ)介質(zhì)可以包括但不限于硬盤、閃存、SRAM、DRAM、NVME或其它形式,存儲(chǔ)介質(zhì)的訪問接口可以包括但不限于SAS接口、SATA接口、PCI/e接口、DIMM接口、NVMe接口、SCSI接口、AHCI接口。

      在本發(fā)明一實(shí)施例中,當(dāng)存儲(chǔ)控制節(jié)點(diǎn)的寫入數(shù)據(jù)操作被調(diào)用時(shí),存儲(chǔ)控制節(jié)點(diǎn)需要將該當(dāng)前寫入數(shù)據(jù)的實(shí)際存儲(chǔ)地址返回給該調(diào)用者。而由于根據(jù)是否存在重復(fù)存儲(chǔ)單元的情況不同,當(dāng)前寫入數(shù)據(jù)的實(shí)際存儲(chǔ)地址是不同的。此時(shí)就需要根據(jù)是否存在重復(fù)存儲(chǔ)單元的判斷結(jié)果返回給調(diào)用者不同的存儲(chǔ)地址。

      圖3所示為本發(fā)明一實(shí)施例提供的一種存儲(chǔ)方法的流程示意圖。當(dāng)存儲(chǔ)控制節(jié)點(diǎn)的寫入數(shù)據(jù)操作被調(diào)用時(shí),相對(duì)于圖1所示的存儲(chǔ)方法,圖3所示的存儲(chǔ)方法進(jìn)一步包括:

      步驟103:若判斷結(jié)果為否,返回已寫入當(dāng)前寫入數(shù)據(jù)的空閑存儲(chǔ)單元的存儲(chǔ)地址。

      當(dāng)不存儲(chǔ)重復(fù)存儲(chǔ)單元時(shí),當(dāng)前寫入數(shù)據(jù)的實(shí)際存儲(chǔ)地址為該寫入的孔隙存儲(chǔ)單元的存儲(chǔ)地址,因此需要將該空閑存儲(chǔ)單元的存儲(chǔ)地址返給調(diào)用者以便于調(diào)用者定位到該當(dāng)前寫入數(shù)據(jù)。

      步驟104:若判斷結(jié)果為是,返回重復(fù)存儲(chǔ)單元的存儲(chǔ)地址。

      當(dāng)存在重復(fù)存儲(chǔ)單元時(shí),當(dāng)前寫入數(shù)據(jù)其實(shí)并沒有被寫入存儲(chǔ)池,由于重復(fù)存儲(chǔ)單元的數(shù)據(jù)內(nèi)容與當(dāng)前寫入數(shù)據(jù)是相同的,將該重復(fù)存儲(chǔ)單元的存儲(chǔ)地址返回給調(diào)用者仍可保證調(diào)用者定位到與該當(dāng)前寫入數(shù)據(jù)相同的數(shù)據(jù)內(nèi)容。

      在本發(fā)明一實(shí)施例中,當(dāng)一個(gè)或多個(gè)存儲(chǔ)單元構(gòu)成一個(gè)存儲(chǔ)對(duì)象時(shí),可在存儲(chǔ)對(duì)象的元數(shù)據(jù)中記錄存儲(chǔ)對(duì)象中每個(gè)存儲(chǔ)單元的存儲(chǔ)地址。當(dāng)在當(dāng)前的寫操作中存儲(chǔ)單元的存儲(chǔ)地址被更改時(shí),存儲(chǔ)對(duì)象的元數(shù)據(jù)要實(shí)時(shí)更新。例如,當(dāng)對(duì)一個(gè)存儲(chǔ)對(duì)象執(zhí)行寫入操作時(shí),發(fā)現(xiàn)其中一個(gè)存儲(chǔ)單元存在重復(fù)存儲(chǔ)單元,則在存儲(chǔ)對(duì)象的元數(shù)據(jù)中將該存儲(chǔ)單元的存儲(chǔ)地址更新為該重復(fù)存儲(chǔ)單元的存儲(chǔ)地址;而對(duì)于存儲(chǔ)對(duì)象中并不存在重復(fù)存儲(chǔ)單元的存儲(chǔ)單元,說明這些存儲(chǔ)單元的數(shù)據(jù)內(nèi)容相對(duì)于原有數(shù)據(jù)內(nèi)容發(fā)生了變化,由于這些存儲(chǔ)單元的當(dāng)前寫入數(shù)據(jù)被寫入了空閑存儲(chǔ)單元,因此要在存儲(chǔ)對(duì)象的元數(shù)據(jù)中將該存儲(chǔ)單元的存儲(chǔ)地址更新為該寫入的空閑存儲(chǔ)單元的存儲(chǔ)地址。這樣當(dāng)后續(xù)的讀取操作要讀取該存儲(chǔ)對(duì)象中的該存儲(chǔ)地址發(fā)生變化的存儲(chǔ)單元的數(shù)據(jù)內(nèi)容時(shí),便可從該更新后的元數(shù)據(jù)中獲取該更新后的存儲(chǔ)地址。而被更新掉的存儲(chǔ)單元?jiǎng)t被從當(dāng)前存儲(chǔ)對(duì)象中釋放。當(dāng)一存儲(chǔ)單元不從屬于任何存儲(chǔ)對(duì)象時(shí),該存儲(chǔ)對(duì)象便可用于回收利用,具體的回收利用機(jī)制在后續(xù)的實(shí)施例中描述。

      在本發(fā)明一實(shí)施例中,如圖4所示,上述判斷是否存在重復(fù)存儲(chǔ)單元的過程也可具體通過如下過程實(shí)現(xiàn):首先計(jì)算當(dāng)前寫入數(shù)據(jù)的數(shù)字摘要(S41);然后,判斷存儲(chǔ)池中是否存在數(shù)字摘要與當(dāng)前寫入數(shù)據(jù)的數(shù)字摘要相同的存儲(chǔ)單元(S42);以及將存儲(chǔ)池中數(shù)字摘要與當(dāng)前寫入數(shù)據(jù)的數(shù)字摘要不相同的存儲(chǔ)單元確定為不重復(fù)存儲(chǔ)單元(S43)。由于數(shù)字摘要與當(dāng)前寫入數(shù)據(jù)的數(shù)字摘要不相同的存儲(chǔ)單元肯定不是重復(fù)存儲(chǔ)單元,因此通過這種判斷過程相當(dāng)于縮小了在存儲(chǔ)池中判斷重復(fù)存儲(chǔ)單元的范圍,提高了判斷效率。在本發(fā)明一實(shí)施例中,可以將存儲(chǔ)池中數(shù)字摘要與當(dāng)前寫入數(shù)據(jù)的數(shù)字摘要相同的存儲(chǔ)單元確定為重復(fù)存儲(chǔ)單元。然而應(yīng)當(dāng)理解,也可以將數(shù)字摘要與其他的判斷方式相結(jié)合來判斷重復(fù)存儲(chǔ)單元。例如,在本發(fā)明一實(shí)施例中,考慮到數(shù)字摘要并不能完全代表存儲(chǔ)單元的數(shù)據(jù)內(nèi)容,不同的數(shù)據(jù)內(nèi)容仍有很小的概率計(jì)算出相同的數(shù)字摘要,為了避免當(dāng)前寫入數(shù)據(jù)被漏寫,即便數(shù)字摘要的判斷結(jié)果為相同,仍需要驗(yàn)證數(shù)字摘要與當(dāng)前寫入數(shù)據(jù)的數(shù)字摘要相同的存儲(chǔ)單元的數(shù)據(jù)內(nèi)容是否與當(dāng)前寫入數(shù)據(jù)相同,只有數(shù)據(jù)內(nèi)容對(duì)比結(jié)果也為相同時(shí)才將數(shù)字摘要比較結(jié)果為相同的存儲(chǔ)單元確定為重復(fù)存儲(chǔ)單元。

      在本發(fā)明一實(shí)施例中,存儲(chǔ)單元或當(dāng)前寫入數(shù)據(jù)的數(shù)字摘要可為字符串形式,此時(shí)數(shù)字摘要的獲取方法包括:選取一個(gè)N個(gè)字符構(gòu)成的字符集;計(jì)算出二進(jìn)制形式的數(shù)字摘要,這里計(jì)算二進(jìn)制形式數(shù)字摘要的具體算法可根據(jù)需要提前選取,本發(fā)明對(duì)此不做限定;將二進(jìn)制形式的數(shù)字摘要轉(zhuǎn)換成N進(jìn)制;以及將N進(jìn)制形式的數(shù)字摘要轉(zhuǎn)換為字符串,轉(zhuǎn)換方法為將N進(jìn)制形式的數(shù)字摘要的每一位轉(zhuǎn)換成字符集中對(duì)應(yīng)的一個(gè)字符。采用預(yù)先設(shè)定的固定長(zhǎng)度字符集可簡(jiǎn)化二進(jìn)制數(shù)字摘要的內(nèi)容,從而進(jìn)一步簡(jiǎn)化重復(fù)存儲(chǔ)單元的判斷過程,提高判斷效率。

      應(yīng)當(dāng)理解,當(dāng)本發(fā)明實(shí)施例所提供的存儲(chǔ)方法應(yīng)用到不同的分布式存儲(chǔ)系統(tǒng)結(jié)構(gòu)中時(shí),上述對(duì)于重復(fù)存儲(chǔ)單元的判斷過程又可能有不同的具體實(shí)現(xiàn)形式。例如,當(dāng)存儲(chǔ)池中建立有文件系統(tǒng)時(shí),每個(gè)存儲(chǔ)單元為文件系統(tǒng)中的一個(gè)文件,文件的文件名為存儲(chǔ)單元的數(shù)字摘要。此時(shí)對(duì)于是否存儲(chǔ)重復(fù)存儲(chǔ)單元的判斷過程其實(shí)為:判斷文件系統(tǒng)中是否存在文件名與當(dāng)前寫入數(shù)據(jù)的數(shù)字摘要相同的文件。

      如前所述,隨著對(duì)存儲(chǔ)池中存儲(chǔ)單元的不斷寫入操作,一個(gè)存儲(chǔ)對(duì)象中所包括的存儲(chǔ)單元也不斷更新,被更新掉的存儲(chǔ)單元?jiǎng)t會(huì)被從原有的存儲(chǔ)對(duì)象中釋放。而當(dāng)一個(gè)存儲(chǔ)單元不再?gòu)膶儆谌我粋€(gè)存儲(chǔ)對(duì)象時(shí),該存儲(chǔ)單元就可被回收用于后續(xù)寫入操作的空閑存儲(chǔ)單元。

      在本發(fā)明一實(shí)施例中,可記錄存儲(chǔ)池中每個(gè)存儲(chǔ)單元的引用計(jì)數(shù)。每當(dāng)對(duì)于是否存在重復(fù)存儲(chǔ)單元的判斷結(jié)果為是時(shí),說明該重復(fù)存儲(chǔ)單元又被加入到了一個(gè)存儲(chǔ)對(duì)象中,此時(shí)增加重復(fù)存儲(chǔ)單元的引用計(jì)數(shù)。而每當(dāng)一個(gè)存儲(chǔ)單元被釋放時(shí),減少該存儲(chǔ)單元的引用計(jì)數(shù)。在本發(fā)明一進(jìn)一步實(shí)施例中,當(dāng)一個(gè)存儲(chǔ)單元的引用計(jì)數(shù)減為零時(shí),說明該存儲(chǔ)單元已經(jīng)不從屬于任何存儲(chǔ)對(duì)象,則將該存儲(chǔ)單元記錄為空閑存儲(chǔ)單元,從而實(shí)現(xiàn)對(duì)存儲(chǔ)池中存儲(chǔ)空間的回收利用。

      在本發(fā)明一實(shí)施例中,可通過一個(gè)記錄表記錄存儲(chǔ)池中每個(gè)存儲(chǔ)單元的引用計(jì)數(shù),該引用計(jì)數(shù)的初始值為零。由于每個(gè)存儲(chǔ)單元都會(huì)對(duì)應(yīng)一個(gè)存儲(chǔ)地址,因此該記錄表記錄的也是存儲(chǔ)池中每個(gè)存儲(chǔ)地址的引用計(jì)數(shù)。當(dāng)利用存儲(chǔ)對(duì)象的元數(shù)據(jù)記錄存儲(chǔ)對(duì)象中每個(gè)存儲(chǔ)單元的存儲(chǔ)地址時(shí),每當(dāng)一個(gè)存儲(chǔ)地址被更新至一個(gè)存儲(chǔ)對(duì)象的元數(shù)據(jù)中時(shí),該存儲(chǔ)地址的引用計(jì)數(shù)加1;每當(dāng)一個(gè)存儲(chǔ)地址被從一個(gè)存儲(chǔ)對(duì)象的元數(shù)據(jù)中被更新掉時(shí),存儲(chǔ)地址的引用計(jì)數(shù)減1。例如一個(gè)存儲(chǔ)系統(tǒng)包含S1和S2兩個(gè)存儲(chǔ)對(duì)象,一個(gè)存儲(chǔ)對(duì)象S1包括四個(gè)存儲(chǔ)單元,所對(duì)應(yīng)的存儲(chǔ)地址分別為ABCD;而另一個(gè)存儲(chǔ)對(duì)象S2也包括四個(gè)存儲(chǔ)單元,所對(duì)應(yīng)的存儲(chǔ)地址分別為EBFG,可見其中的B存儲(chǔ)地址被S1和S2所共用。那么此時(shí)記錄表所記錄的ABCDEFG幾個(gè)存儲(chǔ)地址的引用計(jì)數(shù)就分別為1211111。當(dāng)S1和S2各經(jīng)過一次寫操作后,S1的元數(shù)據(jù)中存儲(chǔ)地址被更新為了AHCD,其中的B地址被更新掉了;而S2的元數(shù)據(jù)中存儲(chǔ)地址被更新為了EIJG,其中的B地址和F地址被更新掉了。此時(shí)記錄表所記錄的ABCDEFG幾個(gè)存儲(chǔ)地址的引用計(jì)數(shù)就變成了1011101,其中的B地址和F地址的引用計(jì)數(shù)減為了零,說明此時(shí)B地址所對(duì)應(yīng)的存儲(chǔ)單元和F地址所對(duì)應(yīng)的存儲(chǔ)單元并沒有被任何存儲(chǔ)對(duì)象所占用,可以用于回收利用。

      在本發(fā)明一實(shí)施例中,如前所述,當(dāng)一個(gè)存儲(chǔ)控制節(jié)點(diǎn)要將當(dāng)前寫入數(shù)據(jù)寫入存儲(chǔ)池的一個(gè)空閑存儲(chǔ)單元時(shí),要先從存儲(chǔ)池中分配一個(gè)空閑存儲(chǔ)單元。考慮到不同的存儲(chǔ)控制節(jié)點(diǎn)在同時(shí)從存儲(chǔ)池中獲取空閑存儲(chǔ)單元時(shí)會(huì)產(chǎn)生沖突,可在存儲(chǔ)池中設(shè)置至少兩個(gè)預(yù)留空閑存儲(chǔ)空間,其中每個(gè)預(yù)留空閑存儲(chǔ)空間對(duì)應(yīng)一個(gè)存儲(chǔ)控制節(jié)點(diǎn)。這樣當(dāng)一個(gè)存儲(chǔ)控制節(jié)點(diǎn)要將當(dāng)前寫入數(shù)據(jù)寫入存儲(chǔ)池的一個(gè)空閑存儲(chǔ)單元時(shí),其實(shí)是從存儲(chǔ)控制節(jié)點(diǎn)所對(duì)應(yīng)的預(yù)留空閑存儲(chǔ)空間中分配一個(gè)空閑存儲(chǔ)單元,因此并不會(huì)與其他存儲(chǔ)控制節(jié)點(diǎn)的寫入過程產(chǎn)生沖突。

      在一進(jìn)一步實(shí)施例中,為了保持一個(gè)存儲(chǔ)控制節(jié)點(diǎn)所對(duì)應(yīng)的預(yù)留空閑存儲(chǔ)空間中總是有足夠數(shù)量的空閑存儲(chǔ)單元,還可在當(dāng)一個(gè)存儲(chǔ)控制節(jié)點(diǎn)所對(duì)應(yīng)的預(yù)留空閑存儲(chǔ)空間的大小低于第一閾值時(shí),從存儲(chǔ)池未分配的空閑存儲(chǔ)空間中分配一部分給一個(gè)存儲(chǔ)控制節(jié)點(diǎn)所對(duì)應(yīng)的預(yù)留空閑存儲(chǔ)空間例如,假設(shè)一個(gè)存儲(chǔ)控制節(jié)點(diǎn)所對(duì)應(yīng)的預(yù)留空閑存儲(chǔ)空間中最多包括N個(gè)空閑存儲(chǔ)單元,其中N為大于等于2的整數(shù);則當(dāng)預(yù)留空閑存儲(chǔ)空間中的空閑存儲(chǔ)單元數(shù)量少于M時(shí),從存儲(chǔ)池中獲取N-M個(gè)空閑存儲(chǔ)單元以補(bǔ)充預(yù)留空閑存儲(chǔ)空間,其中M為小于N大于0的整數(shù)。

      本發(fā)明一實(shí)施例提供一種分布式存儲(chǔ)系統(tǒng),包括:至少兩個(gè)存儲(chǔ)控制節(jié)點(diǎn)和一個(gè)由至少兩個(gè)存儲(chǔ)控制節(jié)點(diǎn)共享的存儲(chǔ)池。如圖5所示,該存儲(chǔ)控制節(jié)點(diǎn)包括:

      去重判斷模塊51,配置為判斷存儲(chǔ)池中是否存在數(shù)據(jù)內(nèi)容與當(dāng)前寫入數(shù)據(jù)相同的重復(fù)存儲(chǔ)單元;

      空閑單元管理模塊52,配置為從存儲(chǔ)池中分配一個(gè)空閑存儲(chǔ)單元;以及

      寫入模塊53,寫入模塊,配置為若去重判斷模塊51返回的判斷結(jié)果為是,返回所述重復(fù)存儲(chǔ)單元的存儲(chǔ)地址;否則,將當(dāng)前寫入數(shù)據(jù)寫入空閑單元管理模塊52所分配的空閑存儲(chǔ)單元,返回已寫入所述當(dāng)前寫入數(shù)據(jù)的所述空閑存儲(chǔ)單元的存儲(chǔ)地址。

      在本發(fā)明一實(shí)施例中,如圖6所示,該去重判斷模塊51包括:

      數(shù)字摘要記錄單元511,配置為記錄所有存儲(chǔ)單元的數(shù)字摘要;

      數(shù)字摘要計(jì)算單元512,配置為計(jì)算當(dāng)前寫入數(shù)據(jù)的數(shù)字摘要;以及

      第一判斷單元513,配置為判斷數(shù)字摘要記錄單元中是否存在與當(dāng)前寫入數(shù)據(jù)的數(shù)字摘要相同的數(shù)字摘要,將數(shù)字摘要記錄單元中數(shù)字摘要與當(dāng)前寫入數(shù)據(jù)的數(shù)字摘要不相同的存儲(chǔ)單元確定為不重復(fù)存儲(chǔ)單元。

      在本發(fā)明一實(shí)施例中,去重判斷模塊51進(jìn)一步包括:

      驗(yàn)證單元,配置為在將數(shù)字摘要記錄單元中數(shù)字摘要與當(dāng)前寫入數(shù)據(jù)的數(shù)字摘要相同的存儲(chǔ)單元確定為重復(fù)存儲(chǔ)單元之前,驗(yàn)證數(shù)字摘要與當(dāng)前寫入數(shù)據(jù)的數(shù)字摘要相同的存儲(chǔ)單元的數(shù)據(jù)內(nèi)容是否與當(dāng)前寫入數(shù)據(jù)相同。

      在本發(fā)明一實(shí)施例中,存儲(chǔ)池中建立有文件系統(tǒng),每個(gè)存儲(chǔ)單元為文件系統(tǒng)中的一個(gè)文件,文件的文件名為存儲(chǔ)單元的數(shù)字摘要;

      則,去重判斷模塊51中的第一判斷單元513進(jìn)一步配置為,判斷文件系統(tǒng)中是否存在文件名與當(dāng)前寫入數(shù)據(jù)的數(shù)字摘要相同的文件。

      在本發(fā)明一實(shí)施例中,如圖7所示,該存儲(chǔ)控制節(jié)點(diǎn)進(jìn)一步包括:

      引用次數(shù)記錄模塊54,配置為記錄存儲(chǔ)池中每個(gè)存儲(chǔ)單元的引用計(jì)數(shù);其中每當(dāng)去重判斷模塊51返回的判斷結(jié)果為是時(shí),增加重復(fù)存儲(chǔ)單元的引用計(jì)數(shù);每當(dāng)一個(gè)存儲(chǔ)單元被釋放時(shí),減少該存儲(chǔ)單元的引用計(jì)數(shù);

      其中空閑單元管理模塊52進(jìn)一步配置為,當(dāng)引用次數(shù)記錄模塊54所記錄的一個(gè)存儲(chǔ)單元的引用計(jì)數(shù)減為零時(shí),將該存儲(chǔ)單元記錄為一個(gè)空閑存儲(chǔ)單元。

      在本發(fā)明一實(shí)施例中,存儲(chǔ)池包括至少兩個(gè)預(yù)留空閑存儲(chǔ)空間,其中每個(gè)預(yù)留空閑存儲(chǔ)空間對(duì)應(yīng)一個(gè)存儲(chǔ)控制節(jié)點(diǎn);

      其中空閑單元管理模塊52進(jìn)一步配置為,從存儲(chǔ)控制節(jié)點(diǎn)所對(duì)應(yīng)的預(yù)留空閑存儲(chǔ)空間中分配空閑存儲(chǔ)單元。

      在本發(fā)明一實(shí)施例中,每個(gè)存儲(chǔ)控制節(jié)點(diǎn)都能夠無需借助其他存儲(chǔ)控制節(jié)點(diǎn)而訪問存儲(chǔ)池中的所有存儲(chǔ)單元。

      在本發(fā)明一實(shí)施例中,如圖8所示,該分布式存儲(chǔ)系統(tǒng)進(jìn)一步包括存儲(chǔ)網(wǎng)絡(luò)30,至少兩個(gè)存儲(chǔ)節(jié)點(diǎn)10和至少一個(gè)存儲(chǔ)介質(zhì)20分別連接至存儲(chǔ)網(wǎng)絡(luò)30,存儲(chǔ)池40由至少一個(gè)存儲(chǔ)介質(zhì)20構(gòu)成,每個(gè)存儲(chǔ)控制節(jié)點(diǎn)10通過存儲(chǔ)網(wǎng)絡(luò)30訪問存儲(chǔ)池40中的存儲(chǔ)介質(zhì)20。

      應(yīng)當(dāng)理解,上述實(shí)施例所提供的分布式存儲(chǔ)系統(tǒng)中記載的每個(gè)模塊或單元都與前述的一個(gè)方法步驟相對(duì)應(yīng)。由此,前述的方法步驟描述的操作和特征同樣適用于該分布式存儲(chǔ)系統(tǒng)及其中所包含的對(duì)應(yīng)的模塊和單元,重復(fù)的內(nèi)容在此不再贅述。

      本發(fā)明的教導(dǎo)還可以實(shí)現(xiàn)為一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)程序代碼,當(dāng)計(jì)算機(jī)程序代碼由處理器執(zhí)行時(shí),其使得處理器能夠按照本發(fā)明實(shí)施方式的方法來實(shí)現(xiàn)如本文實(shí)施方式的存儲(chǔ)方法。計(jì)算機(jī)存儲(chǔ)介質(zhì)可以為任何有形媒介,例如軟盤、CD-ROM、DVD、硬盤驅(qū)動(dòng)器、甚至網(wǎng)絡(luò)介質(zhì)等。

      應(yīng)當(dāng)理解,雖然以上描述了本發(fā)明實(shí)施方式的一種實(shí)現(xiàn)形式可以是計(jì)算機(jī)程序產(chǎn)品,但是本發(fā)明的實(shí)施方式的方法或裝置可以被依軟件、硬件、或者軟件和硬件的結(jié)合來實(shí)現(xiàn)。硬件部分可以利用專用邏輯來實(shí)現(xiàn);軟件部分可以存儲(chǔ)在存儲(chǔ)器中,由適當(dāng)?shù)闹噶顖?zhí)行系統(tǒng),例如微處理器或者專用設(shè)計(jì)硬件來執(zhí)行。本領(lǐng)域的普通技術(shù)人員可以理解上述的方法和設(shè)備可以使用計(jì)算機(jī)可執(zhí)行指令和/或包含在處理器控制代碼中來實(shí)現(xiàn),例如在諸如磁盤、CD或DVD-ROM的載體介質(zhì)、諸如只讀存儲(chǔ)器(固件)的可編程的存儲(chǔ)器或者諸如光學(xué)或電子信號(hào)載體的數(shù)據(jù)載體上提供了這樣的代碼。本發(fā)明的方法和裝置可以由諸如超大規(guī)模集成電路或門陣列、諸如邏輯芯片、晶體管等的半導(dǎo)體、或者諸如現(xiàn)場(chǎng)可編程門陣列、可編程邏輯設(shè)備等的可編程硬件設(shè)備的硬件電路實(shí)現(xiàn),也可以用由各種類型的處理器執(zhí)行的軟件實(shí)現(xiàn),也可以由上述硬件電路和軟件的結(jié)合例如固件來實(shí)現(xiàn)。

      應(yīng)當(dāng)理解,盡管在上文的詳細(xì)描述中提及了裝置的若干模塊或單元,但是這種劃分僅僅是示例性而非強(qiáng)制性的。實(shí)際上,根據(jù)本發(fā)明的示例性實(shí)施方式,上文描述的兩個(gè)或更多模塊/單元的特征和功能可以在一個(gè)模塊/單元中實(shí)現(xiàn),反之,上文描述的一個(gè)模塊/單元的特征和功能可以進(jìn)一步劃分為由多個(gè)模塊/單元來實(shí)現(xiàn)。此外,上文描述的某些模塊/單元在某些應(yīng)用場(chǎng)景下可被省略。

      應(yīng)當(dāng)理解,為了不模糊本發(fā)明的實(shí)施方式,說明書僅對(duì)一些關(guān)鍵、未必必要的技術(shù)和特征進(jìn)行了描述,而可能未對(duì)一些本領(lǐng)域技術(shù)人員能夠?qū)崿F(xiàn)的特征做出說明。

      以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。

      當(dāng)前第1頁(yè)1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1