數(shù)據(jù)分布式存儲的實(shí)現(xiàn)方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種數(shù)據(jù)分布式存儲的實(shí)現(xiàn)方法和系統(tǒng)。所述方法包括:獲取業(yè)務(wù)觸發(fā)的數(shù)據(jù)插入操作;根據(jù)所述業(yè)務(wù)的數(shù)據(jù)插入操作由存儲資源占用信息得到所述業(yè)務(wù)所在存儲服務(wù)器的網(wǎng)絡(luò)地址,所述存儲服務(wù)器與業(yè)務(wù)將是一對多的對應(yīng)關(guān)系;由所述網(wǎng)絡(luò)地址所在存儲服務(wù)器得到存入所述待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識,并按照所述數(shù)據(jù)內(nèi)存塊標(biāo)識將待插入數(shù)據(jù)存入相應(yīng)的數(shù)據(jù)內(nèi)存塊。采用本發(fā)明能提高訪問性能和存儲資源的使用效率。
【專利說明】數(shù)據(jù)分布式存儲的實(shí)現(xiàn)方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及存儲技術(shù),特別是涉及一種數(shù)據(jù)分布式存儲的實(shí)現(xiàn)方法和系統(tǒng)。
【背景技術(shù)】
[0002]隨著分布式存儲的發(fā)展,同一業(yè)務(wù)的數(shù)據(jù)大都分布存儲于多臺存儲服務(wù)器中,例如CMEM (Cloud Memcache)存儲系統(tǒng),若需要在CMEM存儲系統(tǒng)進(jìn)行數(shù)據(jù)訪問則需要訪問多臺的存儲服務(wù)器,例如,對業(yè)務(wù)的數(shù)據(jù)進(jìn)行批量操作,而訪問多臺服務(wù)器時的網(wǎng)絡(luò)時延將大大限制了 CMEM存儲系統(tǒng)中的數(shù)據(jù)訪問。
[0003]因此,為了避免此情況的發(fā)生,將采用組件方式的bitmap存儲系統(tǒng),一個業(yè)務(wù)的數(shù)據(jù)將獨(dú)占一個存儲服務(wù)器進(jìn)行存儲,以提高訪問速度,但是,由于大多數(shù)業(yè)務(wù)所存儲的數(shù)據(jù)均是標(biāo)志位、時間戳等數(shù)據(jù)長度較小的數(shù)據(jù),應(yīng)用組件方式的bitmap存儲系統(tǒng)所實(shí)現(xiàn)的業(yè)務(wù)數(shù)據(jù)存儲將造成了系統(tǒng)資源的浪費(fèi)。
【發(fā)明內(nèi)容】
[0004]基于此,有必要提供一種能提高訪問性能和存儲資源的使用效率的數(shù)據(jù)分布式存儲的實(shí)現(xiàn)方法。
[0005]此外,還有必要提供一種能提高訪問性能和存儲資源的使用效率的數(shù)據(jù)分布式存儲的實(shí)現(xiàn)系統(tǒng)。
[0006]一種數(shù)據(jù)分布式存儲的實(shí)現(xiàn)方法,包括如下步驟:
[0007]獲取業(yè)務(wù)觸發(fā)的數(shù)據(jù)插入操作;
[0008]根據(jù)所述業(yè)務(wù)的數(shù)據(jù)插入操作由存儲資源占用信息得到所述業(yè)務(wù)所在存儲服務(wù)器的網(wǎng)絡(luò)地址,所述存儲服務(wù)器與業(yè)務(wù)將是一對多的對應(yīng)關(guān)系;
[0009]由所述網(wǎng)絡(luò)地址所在存儲服務(wù)器得到存入所述待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識,并按照所述數(shù)據(jù)內(nèi)存塊標(biāo)識將待插入數(shù)據(jù)存入相應(yīng)的數(shù)據(jù)內(nèi)存塊。
[0010]一種數(shù)據(jù)分布式存儲的實(shí)現(xiàn)系統(tǒng),其特征在于,包括:
[0011]數(shù)據(jù)插入操作獲取模塊,用于獲取業(yè)務(wù)觸發(fā)的數(shù)據(jù)插入操作;
[0012]地址獲取模塊,用于根據(jù)所述業(yè)務(wù)的數(shù)據(jù)插入操作由存儲資源占用信息得到所述業(yè)務(wù)所在存儲服務(wù)器的網(wǎng)絡(luò)地址,所述存儲服務(wù)器與業(yè)務(wù)將是一對多的對應(yīng)關(guān)系;
[0013]存儲模塊,用于由所述網(wǎng)絡(luò)地址所在存儲服務(wù)器得存入所述待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識,并按照所述數(shù)據(jù)內(nèi)存塊標(biāo)識將待插入數(shù)據(jù)存入相應(yīng)數(shù)據(jù)內(nèi)存塊。
[0014]上述數(shù)據(jù)分布式存儲的實(shí)現(xiàn)方法和系統(tǒng),獲取業(yè)務(wù)觸發(fā)的數(shù)據(jù)插入操作,根據(jù)業(yè)務(wù)的數(shù)據(jù)插入操作由存儲資源占用信息得到業(yè)務(wù)所在存儲服務(wù)器的網(wǎng)絡(luò)地址,該存儲服務(wù)器與業(yè)務(wù)將是一對多的對應(yīng)關(guān)系,由該存儲服務(wù)器得到存入待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識,并按照數(shù)據(jù)內(nèi)存塊標(biāo)識將待插入數(shù)據(jù)存入相應(yīng)的數(shù)據(jù)內(nèi)存塊,以使得業(yè)務(wù)的數(shù)據(jù)存儲于同一存儲服務(wù)器的若干個數(shù)據(jù)內(nèi)存塊中,提高了數(shù)據(jù)存儲的訪問性能,存儲服務(wù)器中空閑的數(shù)據(jù)內(nèi)存塊可用于其它業(yè)務(wù)的數(shù)據(jù)存儲,有效提高了存儲資源的使用效率。
【專利附圖】
【附圖說明】
[0015]圖1為一個實(shí)施例中數(shù)據(jù)分布式存儲的實(shí)現(xiàn)方法的流程圖;
[0016]圖2為一個實(shí)施例中數(shù)據(jù)分布式存儲的實(shí)現(xiàn)方法的運(yùn)行環(huán)境示意圖;
[0017]圖3為圖1中由網(wǎng)絡(luò)地址所在存儲服務(wù)器得到存入待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識的方法流程圖;
[0018]圖4為一個實(shí)施例中按照數(shù)據(jù)內(nèi)存塊標(biāo)識將待插入數(shù)據(jù)存入相應(yīng)的數(shù)據(jù)內(nèi)存塊的方法流程圖;
[0019]圖5為一個實(shí)施例中數(shù)據(jù)內(nèi)存塊的示意圖;
[0020]圖6為圖5中空閑鏈表的不意圖;
[0021]圖7為圖5中數(shù)據(jù)內(nèi)存塊的結(jié)構(gòu)示意圖;
[0022]圖8為圖3中按照存儲模式從控制內(nèi)存塊中的路由信息查詢得到存入待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識的方法流程圖;
[0023]圖9為一個實(shí)施例中全量存儲模式中數(shù)據(jù)內(nèi)存塊的示意圖;
[0024]圖10為另一個實(shí)施例中按照數(shù)據(jù)內(nèi)存塊標(biāo)識將待插入數(shù)據(jù)存入相應(yīng)的數(shù)據(jù)內(nèi)存塊的方法流程圖;
[0025]圖11為另一個實(shí)施例中數(shù)據(jù)分布式存儲的實(shí)現(xiàn)方法的流程圖;
[0026]圖12為另一個實(shí)施例中數(shù)據(jù)分布式存儲的實(shí)現(xiàn)方法的流程圖;
[0027]圖13為一個實(shí)施例中數(shù)據(jù)分布式存儲的實(shí)現(xiàn)系統(tǒng)的結(jié)構(gòu)示意圖;
[0028]圖14為一個實(shí)施例中存儲模塊的結(jié)構(gòu)示意圖;
[0029]圖15為另一個實(shí)施例中存儲模塊的結(jié)構(gòu)示意圖;
[0030]圖16為圖14中尋址單元的結(jié)構(gòu)示意圖;
[0031]圖17為另一個實(shí)施例中存儲模塊的結(jié)構(gòu)示意圖;
[0032]圖18為另一個實(shí)施例中數(shù)據(jù)分布式存儲的實(shí)現(xiàn)系統(tǒng)的結(jié)構(gòu)示意圖;
[0033]圖19為另一個實(shí)施例中數(shù)據(jù)分布式存儲的實(shí)現(xiàn)系統(tǒng)的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0034]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0035]如圖1所示,在一個實(shí)施例中,一種數(shù)據(jù)分布式存儲的實(shí)現(xiàn)方法,包括如下步驟:
[0036]步驟S110,獲取業(yè)務(wù)觸發(fā)的數(shù)據(jù)插入操作。
[0037]本實(shí)施例中,請結(jié)合參閱圖2,在某一業(yè)務(wù)的數(shù)據(jù)插入過程中,將用于進(jìn)行數(shù)據(jù)存儲的后臺劃分為應(yīng)用層、控制層和存儲層,其中,應(yīng)用層將用于為后臺的運(yùn)行維護(hù)人員提供操作界面,即運(yùn)行維護(hù)人員對業(yè)務(wù)的管理入口,控制層用于管理存儲資源,并控制應(yīng)用層中觸發(fā)的操作的響應(yīng),存儲層用于實(shí)現(xiàn)數(shù)據(jù)的存儲和訪問,將以若干個存儲服務(wù)器為硬件載體實(shí)現(xiàn)。通過對后臺的三層劃分,為運(yùn)行維護(hù)人員提供應(yīng)用層,以使得運(yùn)行維護(hù)人員只需要關(guān)注業(yè)務(wù)邏輯,而不需要關(guān)注如何實(shí)現(xiàn)數(shù)據(jù)的存儲和訪問,實(shí)現(xiàn)了自動化運(yùn)營,提高了各種業(yè)務(wù)實(shí)現(xiàn)的便捷性,進(jìn)而有效降低運(yùn)行和維護(hù)的成本。
[0038]通過應(yīng)用層、控制層和存儲層所實(shí)現(xiàn)的數(shù)據(jù)分布式存儲將用于實(shí)現(xiàn)若干個業(yè)務(wù)的運(yùn)行,因此,若需要實(shí)現(xiàn)數(shù)據(jù)的插入,則應(yīng)當(dāng)在應(yīng)用層所提供的操作界面中針對相應(yīng)的業(yè)務(wù)觸發(fā)數(shù)據(jù)插入操作,此時,根據(jù)該業(yè)務(wù)的數(shù)據(jù)插入操作可獲知該業(yè)務(wù)所對應(yīng)的業(yè)務(wù)標(biāo)識、待插入數(shù)據(jù)以及待插入數(shù)據(jù)所對應(yīng)的關(guān)鍵值,并將該業(yè)務(wù)所對應(yīng)的業(yè)務(wù)標(biāo)識、待插入數(shù)據(jù)以及待插入數(shù)據(jù)所對應(yīng)的關(guān)鍵值由應(yīng)用層傳入控制層。
[0039]步驟S130,根據(jù)業(yè)務(wù)的數(shù)據(jù)插入操作由存儲資源占用信息得到業(yè)務(wù)所在存儲服務(wù)器的網(wǎng)絡(luò)地址。
[0040]本實(shí)施例中,所述存儲服務(wù)器與業(yè)務(wù)將是一對多的對應(yīng)關(guān)系,即任一業(yè)務(wù)的數(shù)據(jù)均存儲于同一存儲服務(wù)器,并且該存儲服務(wù)器將用于存儲多個業(yè)務(wù)的數(shù)據(jù)。通過控制層根據(jù)業(yè)務(wù)標(biāo)識查詢存儲資源占用信息為待插入數(shù)據(jù)分配存儲層中的存儲服務(wù)器,進(jìn)而將待插入數(shù)據(jù)存儲于分配的存儲服務(wù)器中。
[0041]進(jìn)一步的,由控制層依據(jù)存儲資源占用信息所做的分配,使得同一業(yè)務(wù)的數(shù)據(jù)分布于同一存儲服務(wù)器中,以使得后續(xù)的數(shù)據(jù)訪問不需要對不同的存儲服務(wù)器進(jìn)行訪問,進(jìn)而不會受到網(wǎng)絡(luò)延時的影響,特別是對于數(shù)據(jù)的批量操作而言,將避免了訪問不同存儲服務(wù)器來獲取數(shù)據(jù)而造成的批量操作性能瓶頸。
[0042]控制層的存儲資源占用信息用于將通過數(shù)據(jù)庫的形式實(shí)現(xiàn),將記錄了業(yè)務(wù)以及存儲服務(wù)器之間的對應(yīng)關(guān)系,進(jìn)而提供存儲服務(wù)器的占用情況。
[0043]在一個實(shí)施例中,上述步驟S130包括:獲取業(yè)務(wù)對應(yīng)的業(yè)務(wù)標(biāo)識,根據(jù)業(yè)務(wù)標(biāo)識查詢存儲資源占用信息以得到業(yè)務(wù)所在存儲服務(wù)器的網(wǎng)絡(luò)地址。
[0044]本實(shí)施例中,存儲資源占用信息被存儲于控制層中,將被控制層用于控制存儲資源的分配,因此,存儲資源占用信息將記錄了業(yè)務(wù)所在的存儲服務(wù)器,即業(yè)務(wù)所在存儲服務(wù)器的網(wǎng)絡(luò)地址、存儲層中存儲服務(wù)器的內(nèi)存分配情況以及存業(yè)務(wù)數(shù)量等信息,因此,根據(jù)觸發(fā)數(shù)據(jù)插入操作的業(yè)務(wù)所對應(yīng)的業(yè)務(wù)標(biāo)識,可在存儲資源占用信息中查詢得到該業(yè)務(wù)標(biāo)識所對應(yīng)的存儲服務(wù)器的網(wǎng)絡(luò)地址。
[0045]步驟S150,由網(wǎng)絡(luò)地址所在存儲服務(wù)器得到存入待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識,并按照數(shù)據(jù)內(nèi)存塊標(biāo)識將待插入數(shù)據(jù)存入相應(yīng)的數(shù)據(jù)內(nèi)存塊。
[0046]本實(shí)施例中,存儲服務(wù)器將采用共享內(nèi)存的形式來實(shí)現(xiàn)數(shù)據(jù)的存儲和訪問,存儲服務(wù)器的共享內(nèi)存將包括控制內(nèi)存塊(控制cache)和數(shù)據(jù)內(nèi)存塊(數(shù)據(jù)cache),其中,控制內(nèi)存塊用于存儲所在存儲服務(wù)器的控制信息和統(tǒng)計信息,例如,存儲模式、業(yè)務(wù)的路由信息、所在存儲服務(wù)器中的業(yè)務(wù)數(shù)目、數(shù)據(jù)內(nèi)存塊的狀態(tài)等,數(shù)據(jù)內(nèi)存塊用于實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)的存儲。存儲服務(wù)器中通過控制內(nèi)存塊控制數(shù)據(jù)內(nèi)存塊中的數(shù)據(jù)存儲和數(shù)據(jù)訪問。
[0047]在優(yōu)選的實(shí)施例中,每一存儲服務(wù)器將部署了一個控制內(nèi)存塊和多個數(shù)據(jù)內(nèi)存塊。數(shù)據(jù)內(nèi)存塊的大小可為512k,控制內(nèi)存塊的大小可為512M。
[0048]存儲服務(wù)器中業(yè)務(wù)所對應(yīng)的數(shù)據(jù)將被存儲于若干個數(shù)據(jù)內(nèi)存塊中,因此,根據(jù)業(yè)務(wù)標(biāo)識在存儲服務(wù)器中的控制內(nèi)存塊查詢得到觸發(fā)了數(shù)據(jù)插入操作的業(yè)務(wù)所在的數(shù)據(jù)內(nèi)存塊標(biāo)識,進(jìn)而根據(jù)該數(shù)據(jù)內(nèi)存塊標(biāo)識實(shí)現(xiàn)待插入數(shù)據(jù)的存儲。
[0049]由于存儲服務(wù)器的數(shù)據(jù)內(nèi)存塊中每一數(shù)據(jù)節(jié)點(diǎn)中除了用于存儲業(yè)務(wù)數(shù)據(jù)之外的其它控制字段的空間占用較少,進(jìn)而在保證控制性能的前提下提高了存儲資源的使用效率。
[0050]進(jìn)一步的,存儲服務(wù)器所應(yīng)用的存儲模式可以是索引存儲模式或全量存儲模式,在優(yōu)選的實(shí)施例中,該存儲模式將為索引存儲模式,以保證存儲資源的高使用效率。
[0051]例如,若存儲服務(wù)器中的數(shù)據(jù)量還未達(dá)到一定規(guī)模,則優(yōu)先選用索引存儲模式,由于在索引存儲模式之下,其控制字段只有12字節(jié),數(shù)據(jù)內(nèi)存塊中數(shù)據(jù)條數(shù)可能有幾億,控制字節(jié)的精簡會節(jié)省很多的存儲空間,進(jìn)而大為提高了存儲資源的使用效率。
[0052]相應(yīng)的,由于控制內(nèi)存塊中存儲了業(yè)務(wù)的路由信息,進(jìn)而使得對存儲服務(wù)器所進(jìn)行的數(shù)據(jù)訪問可直接通過控制內(nèi)存塊中的路由信息實(shí)現(xiàn),從而實(shí)現(xiàn)了海量用戶對數(shù)據(jù)的快速訪問。如圖3所示,在一個實(shí)施例中,上述由網(wǎng)絡(luò)地址所在存儲服務(wù)器得到存入待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識的步驟包括:
[0053]步驟S151,于網(wǎng)絡(luò)地址對應(yīng)的存儲服務(wù)器查詢控制內(nèi)存塊以得到業(yè)務(wù)的存儲模式。
[0054]本實(shí)施例中,存儲服務(wù)器中的控制內(nèi)存塊將記錄了存儲服務(wù)器屬性、存儲模式、用于存儲數(shù)據(jù)的內(nèi)存大小,例如,該內(nèi)存大小可為物理內(nèi)存*4/3、存儲服務(wù)器中的數(shù)據(jù)內(nèi)存塊數(shù)目、分配到存儲服務(wù)器的業(yè)務(wù)數(shù)目、數(shù)據(jù)內(nèi)存塊的狀態(tài)業(yè)務(wù)的路由信息和存儲服務(wù)器的訪問成功率、時延率統(tǒng)計信息等,在此不一一進(jìn)行列舉??刂苾?nèi)存塊中的存儲模式可為索引存儲模式或全量存儲模式,通過查詢控制內(nèi)存塊中記錄的信息即可得到。
[0055]步驟S152,按照存儲模式從控制內(nèi)存塊中的路由信息查詢得到存入待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識。
[0056]本實(shí)施例中,存儲模式的不同將使得數(shù)據(jù)內(nèi)存塊中的內(nèi)存結(jié)構(gòu)也各不相同,因此,需要根據(jù)當(dāng)前的存儲模式由控制內(nèi)存塊中的路由信息查詢得到存入待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識。
[0057]在一個實(shí)施例中,該存儲模式為索引存儲模式,上述步驟S152包括:
[0058]從待插入數(shù)據(jù)中提取關(guān)鍵值,將關(guān)鍵值對存儲服務(wù)器中的虛擬節(jié)點(diǎn)數(shù)目取模得到余數(shù),根據(jù)余數(shù)在控制內(nèi)存塊中的路由信息查詢得到存儲待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識。
[0059]本實(shí)施例中,索引存儲模式之下數(shù)據(jù)內(nèi)存塊中的每條數(shù)據(jù)均是通過建立索引來實(shí)現(xiàn)數(shù)據(jù)尋址的。待插入數(shù)據(jù)將是〈bid, key, value)的形式,其中,bid為業(yè)務(wù)標(biāo)識,key為關(guān)鍵值,例如,該關(guān)鍵值可為使用該業(yè)務(wù)的用戶標(biāo)識,value為待插入數(shù)據(jù)。
[0060]從待插入數(shù)據(jù)中提取得到關(guān)鍵值key,將關(guān)鍵值key對存儲服務(wù)器中的虛擬節(jié)點(diǎn)數(shù)目VN0DE_NUM取模,即key%VN0DE_NUM,進(jìn)而根據(jù)所得到的余數(shù)在控制內(nèi)存塊的路由信息中查詢得到數(shù)據(jù)內(nèi)存塊標(biāo)識,該數(shù)據(jù)內(nèi)存塊標(biāo)識所對應(yīng)的數(shù)據(jù)內(nèi)存塊將用于對關(guān)鍵值所對應(yīng)的數(shù)據(jù)進(jìn)行存儲。
[0061]如圖4所示,上述按照數(shù)據(jù)內(nèi)存塊標(biāo)識將待插入數(shù)據(jù)存入相應(yīng)的數(shù)據(jù)內(nèi)存塊的步驟包括:
[0062]步驟S153a,獲取數(shù)據(jù)內(nèi)存塊標(biāo)識對應(yīng)的數(shù)據(jù)內(nèi)存塊中的索引節(jié)點(diǎn)數(shù)量,將關(guān)鍵值對索引節(jié)點(diǎn)數(shù)量取模得到業(yè)務(wù)在數(shù)據(jù)內(nèi)存塊的索引節(jié)點(diǎn)位置。
[0063]本實(shí)施例中,在定位得到關(guān)鍵值所對應(yīng)的數(shù)據(jù)內(nèi)存塊之后,將獲取該數(shù)據(jù)內(nèi)存塊中的索引節(jié)點(diǎn)數(shù)量NodeNum,進(jìn)而將關(guān)鍵值key對索引節(jié)點(diǎn)數(shù)量NodeNum取模,即key%N0deNUm,即可得到該業(yè)務(wù)在數(shù)據(jù)內(nèi)存塊的索引節(jié)點(diǎn)位置。
[0064]在一個實(shí)施例中,索引存儲模式下數(shù)據(jù)內(nèi)存塊的內(nèi)存實(shí)現(xiàn)結(jié)構(gòu)是以hash沖突鏈的方式實(shí)現(xiàn)的,如圖5所示,數(shù)據(jù)內(nèi)存塊被劃分成N個索引節(jié)點(diǎn)和N個數(shù)據(jù)節(jié)點(diǎn),其中,N即為數(shù)據(jù)內(nèi)存塊中存儲的業(yè)務(wù)數(shù)據(jù)條數(shù)。
[0065]索引節(jié)點(diǎn)用于存儲數(shù)據(jù)節(jié)點(diǎn)的位置值,以將該索引節(jié)點(diǎn)作為數(shù)據(jù)節(jié)點(diǎn)的索引;數(shù)據(jù)節(jié)點(diǎn)用于存儲業(yè)務(wù)的單條數(shù)據(jù)、對應(yīng)的關(guān)鍵值以及下一個數(shù)據(jù)節(jié)點(diǎn)的位置值,即該數(shù)據(jù)節(jié)點(diǎn)指向下一數(shù)據(jù)節(jié)點(diǎn)的指針。
[0066]此外,如圖6所示,數(shù)據(jù)內(nèi)存塊中還將設(shè)置了空閑鏈表,該空閑鏈表包括了若干個處于空閑狀態(tài)的數(shù)據(jù)節(jié)點(diǎn),以便于在數(shù)據(jù)內(nèi)存塊中存入新的數(shù)據(jù)。
[0067]相應(yīng)的,在一個具體的實(shí)施例中,根據(jù)實(shí)現(xiàn)數(shù)據(jù)內(nèi)存塊的內(nèi)存數(shù)據(jù)結(jié)構(gòu)將得到數(shù)據(jù)內(nèi)存塊的結(jié)構(gòu),如圖7所示。
[0068]其中,Node_Head即索引節(jié)點(diǎn)頭信息,包括 Bid、NodeNum、DataSize 和 Reserved等字段,Bid為使用了該數(shù)據(jù)內(nèi)存塊的業(yè)務(wù)標(biāo)識,NodeNum為該數(shù)據(jù)內(nèi)存塊中的索引節(jié)點(diǎn)數(shù)量,DataSize為一條數(shù)據(jù)的長度,Reserved為保留字段,用于后續(xù)的功能擴(kuò)展;Obj_Head 為數(shù)據(jù)節(jié)點(diǎn)頭信息,包括 TotalObjNun、UsedObjNum、FreeHead 和 Reserved 等字段,TotalObjNun為數(shù)據(jù)內(nèi)存塊中數(shù)據(jù)節(jié)點(diǎn)數(shù)量,UsedObjNum為已經(jīng)使用的數(shù)據(jù)節(jié)點(diǎn)數(shù)目,F(xiàn)reeHead為空閑鏈表的鏈表頭,Reserved為保留字段,用于后續(xù)的功能擴(kuò)展;Node_Array即索引節(jié)點(diǎn)所對應(yīng)的元素,共計N個元素,每一元素占用4個字節(jié),用于保存數(shù)據(jù)節(jié)點(diǎn)的位置值;0bj_Data即數(shù)據(jù)節(jié)點(diǎn)所對應(yīng)的元素,共N個元素,為鏈表形式,其中,NextObj為下一個數(shù)據(jù)節(jié)點(diǎn)的位置值,將占用4個字節(jié);Uin為關(guān)鍵值,占用4個字節(jié);0bjData為存儲的數(shù)據(jù)。
[0069]由上可知,每條數(shù)據(jù)需要額外的三個字段,即NodeData、Uin和NextObj,共計12字節(jié),因此,若數(shù)據(jù)內(nèi)存塊大小為512M,N將通過512/ (12+單條數(shù)據(jù)的長度)計算得到。
[0070]步驟S154a,判斷索引節(jié)點(diǎn)位置對應(yīng)的索引節(jié)點(diǎn)中的位置值是否有效,若否,則進(jìn)入步驟S155a,若是,則進(jìn)入步驟S156a。
[0071]本實(shí)施例中,根據(jù)索引節(jié)點(diǎn)位置定位索引節(jié)點(diǎn),讀取索引節(jié)點(diǎn)中存儲的位置值,判斷該位置值是否有效,即判斷該位置值是否為有效值,若否,則說明該數(shù)據(jù)內(nèi)存塊中未存儲與該業(yè)務(wù)相關(guān)的數(shù)據(jù),因此,直接插入數(shù)據(jù)即可,若是,則需要進(jìn)一步查看數(shù)據(jù)內(nèi)存塊中存儲的與該業(yè)務(wù)相關(guān)的數(shù)據(jù)中是否存在當(dāng)前插入的數(shù)據(jù)。
[0072]步驟S155a,獲取空閑的數(shù)據(jù)節(jié)點(diǎn),將空閑的數(shù)據(jù)節(jié)點(diǎn)鏈接至索引節(jié)點(diǎn),并存入待插入數(shù)據(jù)。
[0073]本實(shí)施例中,在判斷到索引節(jié)點(diǎn)中的位置值是無效值時,說明該索引節(jié)點(diǎn)為空,并未與任一用于進(jìn)行業(yè)務(wù)數(shù)據(jù)存儲的數(shù)據(jù)節(jié)點(diǎn)進(jìn)行鏈接,此時,將由空間鏈接中獲取一空閑的數(shù)據(jù)節(jié)點(diǎn),將空閑的數(shù)據(jù)節(jié)點(diǎn)鏈接至索引節(jié)點(diǎn),索引節(jié)點(diǎn)中的位置值將是與鏈接的數(shù)據(jù)節(jié)點(diǎn)所對應(yīng)的,以使得索引節(jié)點(diǎn)指向該數(shù)據(jù)節(jié)點(diǎn),并存入待插入數(shù)據(jù)。
[0074]步驟S156a,根據(jù)位置值得到索引節(jié)點(diǎn)關(guān)聯(lián)的沖突鏈表。
[0075]本實(shí)施例中,判斷到索引節(jié)點(diǎn)中的位置值是有效值時,說明該索引節(jié)點(diǎn)為某一沖突鏈表的關(guān)索引,將根據(jù)該位置值得到鏈接的沖突鏈表。
[0076]步驟S157a,查詢沖突鏈表中是否存在關(guān)鍵值對應(yīng)的數(shù)據(jù)節(jié)點(diǎn),若否,則進(jìn)入步驟S155a,若是,則結(jié)束。
[0077]本實(shí)施例中,在沖突鏈表中遍歷查詢關(guān)鍵值,判斷沖突鏈表中是否存在關(guān)鍵值所對應(yīng)的節(jié)點(diǎn),若是,則說明待插入數(shù)據(jù)已經(jīng)存在于沖突鏈表中,不需要進(jìn)行存儲,若否,則將索引節(jié)點(diǎn)指向某一空閑的數(shù)據(jù)節(jié)點(diǎn),以便于將待插入數(shù)據(jù)存入空閑的數(shù)據(jù)節(jié)點(diǎn)中。
[0078]進(jìn)一步的,在索引存儲模式之下,在對存儲的數(shù)據(jù)進(jìn)行訪問的過程中,可以根據(jù)如上過程實(shí)現(xiàn)數(shù)據(jù)的查找,即,若查詢沖突鏈表中存在著關(guān)鍵值所對應(yīng)的數(shù)據(jù)節(jié)點(diǎn),將從該關(guān)鍵值所對應(yīng)的數(shù)據(jù)節(jié)點(diǎn)得到存儲的數(shù)據(jù),該數(shù)據(jù)即為查找的數(shù)據(jù)。
[0079]相應(yīng)的,在進(jìn)行數(shù)據(jù)內(nèi)存塊的分配之前,需要對數(shù)據(jù)內(nèi)存塊初始化,即對Node_Head部分、0bj_Head部分、Node_Array和0bj_Data進(jìn)行初始化,其中,UsedObjNum初始化為0,Node_Array中的內(nèi)容初始化為無效值,例如,將其初始化為全F,Ob j_Data初始化為一個大鏈表,其中的Uin和ObjData初始化為O。
[0080]如圖8所示,在一個實(shí)施例中,該存儲模式為全量存儲模式,上述步驟S152包括:
[0081]步驟S1521,從待插入數(shù)據(jù)中提取關(guān)鍵值,并從網(wǎng)絡(luò)地址對應(yīng)的存儲服務(wù)器提取控制內(nèi)存塊中的數(shù)據(jù)條數(shù)和業(yè)務(wù)的起始數(shù)據(jù)內(nèi)存塊標(biāo)識。
[0082]本實(shí)施例中,控制內(nèi)存塊中還將記錄了存儲服務(wù)器中存儲的數(shù)據(jù)條數(shù)以及觸發(fā)數(shù)據(jù)插入操作的業(yè)務(wù)所對應(yīng)的起始數(shù)據(jù)內(nèi)存塊標(biāo)識。因此,將從控制內(nèi)存塊中提取得到數(shù)據(jù)條數(shù)和業(yè)務(wù)的起始數(shù)據(jù)內(nèi)存塊標(biāo)識。
[0083]全量存儲模式中,數(shù)據(jù)內(nèi)存塊是以一個數(shù)組的形式存在的,其格式如圖9所示,其中,Bid為使用了該數(shù)據(jù)內(nèi)存塊的業(yè)務(wù)標(biāo)識,TotalObjNum為數(shù)據(jù)內(nèi)存塊中數(shù)據(jù)節(jié)點(diǎn)數(shù)量,Startkey為數(shù)據(jù)內(nèi)存塊中存儲的第一條數(shù)據(jù)Data [O]的關(guān)鍵值,DataSize為一條數(shù)據(jù)的長度,Reserved為保留字段,用于后續(xù)的功能擴(kuò)展,UsedOb jNum為已經(jīng)使用的數(shù)據(jù)節(jié)點(diǎn)數(shù)目。存儲于該數(shù)據(jù)內(nèi)存塊的數(shù)據(jù)所對應(yīng)的關(guān)鍵值將是連續(xù)的。在分配該數(shù)據(jù)內(nèi)存塊之前,將對其進(jìn)行初始化,其中,UsedObjNum初始化為0,Data也將初始化為O。
[0084]步驟S1523,根據(jù)關(guān)鍵值、數(shù)據(jù)條數(shù)和起始數(shù)據(jù)內(nèi)存塊標(biāo)識計算得到存儲插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存標(biāo)識。
[0085]本實(shí)施例中,將根據(jù)關(guān)鍵值、數(shù)據(jù)條數(shù)和起始數(shù)據(jù)內(nèi)存塊標(biāo)識實(shí)現(xiàn)全量存儲模式之下的尋址。對關(guān)鍵值key、數(shù)據(jù)條數(shù)RecordNum和起始數(shù)據(jù)內(nèi)存塊標(biāo)識StartCacheID進(jìn)行計算,即key/RecordNum+StartCachelD,進(jìn)而根據(jù)計算得到的數(shù)值在控制內(nèi)存塊中的路由信息進(jìn)行查詢,以得到用于存儲待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識。
[0086]如圖10所示,在一個實(shí)施例中,上述按照數(shù)據(jù)內(nèi)存塊標(biāo)識將待插入數(shù)據(jù)存入相應(yīng)的數(shù)據(jù)內(nèi)存塊的步驟包括:
[0087]步驟S153b,從數(shù)據(jù)內(nèi)存標(biāo)識對應(yīng)的數(shù)據(jù)內(nèi)存塊中獲取存儲的起始關(guān)鍵值,根據(jù)所述存儲的起始關(guān)鍵值和關(guān)鍵值計算得到待插入數(shù)據(jù)對應(yīng)的偏移量。
[0088]本實(shí)施例中,由于數(shù)據(jù)內(nèi)存塊中每一關(guān)鍵值所對應(yīng)的數(shù)據(jù)是連續(xù)存儲的,且關(guān)鍵值之間也是連續(xù)的,因此,獲取數(shù)據(jù)內(nèi)存塊中的起始關(guān)鍵值,待插入數(shù)據(jù)所對應(yīng)的關(guān)鍵值和起始關(guān)鍵值之間的差值即為待插入數(shù)據(jù)所對應(yīng)的偏移量。
[0089]步驟S154b,按照偏移量將待插入數(shù)據(jù)存入數(shù)據(jù)內(nèi)存塊。
[0090]進(jìn)一步的,在全量存儲模式之下,在對存儲的數(shù)據(jù)進(jìn)行訪問的過程中,可以根據(jù)如上過程實(shí)現(xiàn)數(shù)據(jù)的查找,即,通過控制內(nèi)存塊得到相應(yīng)的偏移量,進(jìn)而通過得到的偏移量即可查找得到所需要的數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)的快速訪問。
[0091]如圖11所示,在一個實(shí)施例中,上述步驟SllO之前,該方法還包括:
[0092]步驟S210,獲取觸發(fā)的業(yè)務(wù)上線操作得到相應(yīng)的業(yè)務(wù)上線信息。
[0093]本實(shí)施例中,通過一定的操作界面輸入存儲服務(wù)器標(biāo)識、存儲模式、業(yè)務(wù)名稱、業(yè)務(wù)數(shù)據(jù)量估值等業(yè)務(wù)上線信息之后,將觸發(fā)業(yè)務(wù)上線操作,此時,應(yīng)用層將得到的業(yè)務(wù)上線信息傳送至控制層。
[0094]步驟S230,根據(jù)業(yè)務(wù)上線信息查詢存儲資源占用信息為業(yè)務(wù)分配存儲服務(wù)器,生成業(yè)務(wù)在存儲服務(wù)器中的路由信息,并下發(fā)至存儲服務(wù)器。
[0095]本實(shí)施例中,根據(jù)輸入的業(yè)務(wù)上線信息分配存儲服務(wù)器,將查詢存儲資源占用信息以得到存儲服務(wù)器標(biāo)識所對應(yīng)的存儲服務(wù)器的數(shù)據(jù)內(nèi)存塊占用情況,以根據(jù)業(yè)務(wù)上線信息中的業(yè)務(wù)數(shù)據(jù)量估值、存儲模式進(jìn)行內(nèi)數(shù)據(jù)內(nèi)存塊的分配,以生成該業(yè)務(wù)的路由信息,并下發(fā)。
[0096]步驟S250,按照路由信息在分配的存儲服務(wù)器中分配數(shù)據(jù)內(nèi)存塊,并路由信息更新至存儲服務(wù)器中的控制內(nèi)存塊。
[0097]本實(shí)施例中,存儲層將接收到控制層所下發(fā)的路由信息,進(jìn)而按照路由信息進(jìn)行數(shù)據(jù)內(nèi)存塊的分配,以在分配的數(shù)據(jù)內(nèi)存塊中存儲業(yè)務(wù)數(shù)據(jù),根據(jù)該業(yè)務(wù)數(shù)據(jù)的格式化數(shù)據(jù)內(nèi)存塊,并將路由信息和數(shù)據(jù)內(nèi)存塊的態(tài)度更新至控制內(nèi)存塊。
[0098]步驟S270,根據(jù)存儲服務(wù)器和存儲服務(wù)器中數(shù)據(jù)內(nèi)存塊的占用更新控制層中的存儲資源占用信息。
[0099]本實(shí)施例中,存儲層完成數(shù)據(jù)內(nèi)存塊的分配之后,將向控制層返回響應(yīng)消息,此時,接收到響應(yīng)消息的控制層將更新資源占用信息。
[0100]上述數(shù)據(jù)分布式存儲的實(shí)現(xiàn)方法,使得業(yè)務(wù)上線的運(yùn)營和維護(hù)成本大大降低,運(yùn)行維護(hù)人員可通過一鍵操作即可完成業(yè)務(wù)上線,提高了業(yè)務(wù)上線的便捷性。
[0101]如圖12所示,在另一個實(shí)施例中,上述步驟S270之后,該方法還包括:
[0102]步驟S310,獲取業(yè)務(wù)觸發(fā)的下線操作。
[0103]本實(shí)施例中,通過一定的操作界面輸入待下線的業(yè)務(wù)標(biāo)識即可觸發(fā)業(yè)務(wù)的下線操作。
[0104]步驟S330,查詢存儲資源占用信息得到業(yè)務(wù)所在的存儲服務(wù)器,并向存儲服務(wù)器傳送業(yè)務(wù)刪除命令。
[0105]本實(shí)施例中,控制層根據(jù)下線操作得到待下線的業(yè)務(wù)標(biāo)識,根據(jù)業(yè)務(wù)標(biāo)識在存儲資源占用信息中進(jìn)行查詢即可得到待下線的業(yè)務(wù)所在的存儲服務(wù)器,進(jìn)而向該存儲服務(wù)器傳送業(yè)務(wù)刪除命令。
[0106]步驟S350,根據(jù)業(yè)務(wù)刪除命令刪除存儲服務(wù)器中業(yè)務(wù)在控制內(nèi)存塊的信息,并相應(yīng)刪除業(yè)務(wù)在數(shù)據(jù)內(nèi)存塊中存入的數(shù)據(jù)。
[0107]本實(shí)施例中,根據(jù)業(yè)務(wù)刪除命令刷新控制內(nèi)存塊中數(shù)據(jù)內(nèi)存塊的狀態(tài)和路由信息,以將存儲了下線業(yè)務(wù)數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊的狀態(tài)由已使用刷新為空閑,并清除該業(yè)務(wù)的路由信息。
[0108]步驟S370,根據(jù)存儲服務(wù)器中控制內(nèi)存塊和數(shù)據(jù)內(nèi)存塊的刪除更新控制層中的存儲資源占用信息。
[0109]本實(shí)施例中,由于存儲層中的存儲服務(wù)器和存儲服務(wù)器中的數(shù)據(jù)內(nèi)存塊發(fā)生了業(yè)務(wù)數(shù)據(jù)的刪除,因此,也將相應(yīng)更新控制層中的存儲資源占用信息,以保證控制層的存儲資源占用信息的準(zhǔn)確性。
[0110]通過內(nèi)存共享以及運(yùn)行維護(hù)人員的快捷操作,使得各種業(yè)務(wù)能夠快速上線,為新上線的業(yè)務(wù)分配存儲資源,也能夠?qū)磳⑾戮€的業(yè)務(wù)快速回收為其分配的存儲資源,運(yùn)行維護(hù)人員只需要關(guān)注業(yè)務(wù)邏輯,而不需要關(guān)注數(shù)據(jù)的存儲,提高了業(yè)務(wù)實(shí)現(xiàn)和穩(wěn)定運(yùn)行的可能性,進(jìn)而保證了業(yè)務(wù)運(yùn)行的可靠性。
[0111]如圖13所示,在一個實(shí)施例中,一種數(shù)據(jù)分布式存儲的實(shí)現(xiàn)系統(tǒng),包括數(shù)據(jù)插入操作獲取模塊110、地址獲取模塊130和存儲模塊150。
[0112]數(shù)據(jù)插入操作獲取模塊110,用于獲取業(yè)務(wù)觸發(fā)的數(shù)據(jù)插入操作。
[0113]實(shí)施例中,在某一業(yè)務(wù)的數(shù)據(jù)插入過程中,將用于進(jìn)行數(shù)據(jù)存儲的后臺劃分為應(yīng)用層、控制層和存儲層,其中,應(yīng)用層將用于為后臺的運(yùn)行維護(hù)人員提供操作界面,即運(yùn)行維護(hù)人員對業(yè)務(wù)的管理入口,控制層用于管理存儲資源,并控制應(yīng)用層中觸發(fā)的操作的響應(yīng),存儲層用于實(shí)現(xiàn)數(shù)據(jù)的存儲和訪問,將以若干個存儲服務(wù)器為硬件載體實(shí)現(xiàn)。通過對后臺的三層劃分,為運(yùn)行維護(hù)人員提供應(yīng)用層,以使得運(yùn)行維護(hù)人員只需要關(guān)注業(yè)務(wù)邏輯,而不需要關(guān)注如何實(shí)現(xiàn)數(shù)據(jù)的存儲和訪問,實(shí)現(xiàn)了自動化運(yùn)營,提高了各種業(yè)務(wù)實(shí)現(xiàn)的便捷性,進(jìn)而有效降低運(yùn)行和維護(hù)的成本。
[0114]通過應(yīng)用層、控制層和存儲層所實(shí)現(xiàn)的數(shù)據(jù)分布式存儲將用于實(shí)現(xiàn)若干個業(yè)務(wù)的運(yùn)行,因此,若需要實(shí)現(xiàn)數(shù)據(jù)的插入,則應(yīng)當(dāng)在應(yīng)用層所提供的操作界面中針對相應(yīng)的業(yè)務(wù)觸發(fā)數(shù)據(jù)插入操作,此時,數(shù)據(jù)插入操作獲取模塊110根據(jù)該業(yè)務(wù)的數(shù)據(jù)插入操作可獲知該業(yè)務(wù)所對應(yīng)的業(yè)務(wù)標(biāo)識、待插入數(shù)據(jù)以及待插入數(shù)據(jù)所對應(yīng)的關(guān)鍵值,并將該業(yè)務(wù)所對應(yīng)的業(yè)務(wù)標(biāo)識、待插入數(shù)據(jù)以及待插入數(shù)據(jù)所對應(yīng)的關(guān)鍵值由應(yīng)用層傳入控制層。
[0115]地址獲取模塊130,用于根據(jù)業(yè)務(wù)的數(shù)據(jù)插入操作由存儲資源占用信息得到業(yè)務(wù)所在存儲服務(wù)器的網(wǎng)絡(luò)地址。
[0116]本實(shí)施例中,所述存儲服務(wù)器與業(yè)務(wù)將是一對多的對應(yīng)關(guān)系,即任一業(yè)務(wù)的數(shù)據(jù)均存儲于同一存儲服務(wù)器,并且該存儲服務(wù)器將用于存儲多個業(yè)務(wù)的數(shù)據(jù)。地址獲取模塊130通過控制層根據(jù)業(yè)務(wù)標(biāo)識查詢存儲資源占用信息為待插入數(shù)據(jù)分配存儲層中的存儲服務(wù)器,進(jìn)而將待插入數(shù)據(jù)存儲于分配的存儲服務(wù)器中。
[0117]進(jìn)一步的,地址獲取模塊130由控制層依據(jù)存儲資源占用信息所做的分配,使得同一業(yè)務(wù)的數(shù)據(jù)分布于同一存儲服務(wù)器中,以使得后續(xù)的數(shù)據(jù)訪問不需要對不同的存儲服務(wù)器進(jìn)行訪問,進(jìn)而不會受到網(wǎng)絡(luò)延時的影響,特別是對于數(shù)據(jù)的批量操作而言,將避免了訪問不同存儲服務(wù)器來獲取數(shù)據(jù)而造成的批量操作性能瓶頸。
[0118]控制層的存儲資源占用信息用于將通過數(shù)據(jù)庫的形式實(shí)現(xiàn),將記錄了業(yè)務(wù)以及存儲服務(wù)器之間的對應(yīng)關(guān)系,進(jìn)而提供存儲服務(wù)器的占用情況。
[0119]在一個實(shí)施例中,上述地址獲取模塊130還用于獲取業(yè)務(wù)對應(yīng)的業(yè)務(wù)標(biāo)識,根據(jù)業(yè)務(wù)標(biāo)識查詢控制層的存儲資源占用信息以得到業(yè)務(wù)所在存儲服務(wù)器的網(wǎng)絡(luò)地址。
[0120]本實(shí)施例中,存儲資源占用信息被存儲于控制層中,將被控制層用于控制存儲資源的分配,因此,存儲資源占用信息將記錄了業(yè)務(wù)所在的存儲服務(wù)器,即業(yè)務(wù)所在存儲服務(wù)器的網(wǎng)絡(luò)地址、存儲層中存儲服務(wù)器的內(nèi)存分配情況以及存業(yè)務(wù)數(shù)量等信息,因此,地址獲取模塊130根據(jù)觸發(fā)數(shù)據(jù)插入操作的業(yè)務(wù)所對應(yīng)的業(yè)務(wù)標(biāo)識,可在存儲資源占用信息中查詢得到該業(yè)務(wù)標(biāo)識所對應(yīng)的存儲服務(wù)器的網(wǎng)絡(luò)地址。[0121 ] 存儲模塊150,用于由網(wǎng)絡(luò)地址所在存儲服務(wù)器得存入待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識,并按照數(shù)據(jù)內(nèi)存塊標(biāo)識將待插入數(shù)據(jù)存入相應(yīng)數(shù)據(jù)內(nèi)存塊。
[0122]本實(shí)施例中,存儲服務(wù)器將采用共享內(nèi)存的形式來實(shí)現(xiàn)數(shù)據(jù)的存儲和訪問,存儲服務(wù)器的共享內(nèi)存將包括控制內(nèi)存塊(控制cache)和數(shù)據(jù)內(nèi)存塊(數(shù)據(jù)cache),其中,控制內(nèi)存塊用于存儲所在存儲服務(wù)器的控制信息和統(tǒng)計信息,例如,存儲模式、業(yè)務(wù)的路由信息、所在存儲服務(wù)器中的業(yè)務(wù)數(shù)目、數(shù)據(jù)內(nèi)存塊的狀態(tài)等,數(shù)據(jù)內(nèi)存塊用于實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)的存儲。存儲服務(wù)器中通過控制內(nèi)存塊控制數(shù)據(jù)內(nèi)存塊中的數(shù)據(jù)存儲和數(shù)據(jù)訪問。
[0123]在優(yōu)選的實(shí)施例中,每一存儲服務(wù)器將部署了一個控制內(nèi)存塊和多個數(shù)據(jù)內(nèi)存塊。數(shù)據(jù)內(nèi)存塊的大小可為512k,控制內(nèi)存塊的大小可為512M。
[0124]存儲服務(wù)器中業(yè)務(wù)所對應(yīng)的數(shù)據(jù)將被存儲于若干個數(shù)據(jù)內(nèi)存塊中,因此,存儲模塊150根據(jù)業(yè)務(wù)標(biāo)識在存儲服務(wù)器中的控制內(nèi)存塊查詢得到觸發(fā)了數(shù)據(jù)插入操作的業(yè)務(wù)所在的數(shù)據(jù)內(nèi)存塊標(biāo)識,進(jìn)而根據(jù)該數(shù)據(jù)內(nèi)存塊標(biāo)識實(shí)現(xiàn)待插入數(shù)據(jù)的存儲。
[0125]由于存儲服務(wù)器的數(shù)據(jù)內(nèi)存塊中每一數(shù)據(jù)節(jié)點(diǎn)中除了用于存儲業(yè)務(wù)數(shù)據(jù)之外的其它控制字段的空間占用較少,進(jìn)而在保證控制性能的前提下提高了存儲資源的使用效率。
[0126]進(jìn)一步的,存儲服務(wù)器所應(yīng)用的存儲模式可以是索引存儲模式或全量存儲模式,在優(yōu)選的實(shí)施例中,該存儲模式將為索引存儲模式,以保證存儲資源的高使用效率。
[0127]例如,若存儲服務(wù)器中的數(shù)據(jù)量還未達(dá)到一定規(guī)模,則優(yōu)先選用索引存儲模式,由于在索引存儲模式之下,其控制字段只有12字節(jié),數(shù)據(jù)內(nèi)存塊中數(shù)據(jù)條數(shù)可能有幾億,控制字節(jié)的精簡會節(jié)省很多的存儲空間,進(jìn)而大為提高了存儲資源的使用效率。相應(yīng)的,由于控制內(nèi)存塊中存儲了業(yè)務(wù)的路由信息,進(jìn)而使得對存儲服務(wù)器所進(jìn)行的數(shù)據(jù)訪問可直接通過控制內(nèi)存塊中的路由信息實(shí)現(xiàn),從而實(shí)現(xiàn)了海量用戶對數(shù)據(jù)的快速訪問。
[0128]如圖14所示,在一個實(shí)施例中,存儲模塊150包括模式查詢單元151和尋址單元152。
[0129]模式查詢單元151,用于于網(wǎng)絡(luò)地址對應(yīng)的存儲服務(wù)器查詢控制內(nèi)存塊以得到業(yè)務(wù)的存儲模式。
[0130]本實(shí)施例中,存儲服務(wù)器中的控制內(nèi)存塊將記錄了存儲服務(wù)器屬性、存儲模式、用于存儲數(shù)據(jù)的內(nèi)存大小,例如,該內(nèi)存大小可為物理內(nèi)存*4/3、存儲服務(wù)器中的數(shù)據(jù)內(nèi)存塊數(shù)目、分配到存儲服務(wù)器的業(yè)務(wù)數(shù)目、數(shù)據(jù)內(nèi)存塊的狀態(tài)業(yè)務(wù)的路由信息和存儲服務(wù)器的訪問成功率、時延率統(tǒng)計信息等,在此不一一進(jìn)行列舉??刂苾?nèi)存塊中的存儲模式可為索引存儲模式或全量存儲模式,模式查詢單元151通過查詢控制內(nèi)存塊中記錄的信息即可得到。
[0131]尋址單元152,用于按照存儲模式從控制內(nèi)存塊中的路由信息查詢得到存入待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識。
[0132]本實(shí)施例中,存儲模式的不同將使得數(shù)據(jù)內(nèi)存塊中的內(nèi)存結(jié)構(gòu)也各不相同,因此,尋址單元152需要根據(jù)當(dāng)前的存儲模式由控制內(nèi)存塊中的路由信息查詢得到存入待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識。
[0133]在一個實(shí)施例中,上述存儲模式為索引存儲模式,該尋址單元152還用于從待插入數(shù)據(jù)中提取關(guān)鍵值,將關(guān)鍵值對存儲服務(wù)器中的虛擬節(jié)點(diǎn)數(shù)目取模得到余數(shù),根據(jù)余數(shù)在控制內(nèi)存塊中的路由信息查詢得到存儲和待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識。
[0134]本實(shí)施例中,索引存儲模式之下數(shù)據(jù)內(nèi)存塊中的每條數(shù)據(jù)均是通過建立索引來實(shí)現(xiàn)數(shù)據(jù)尋址的。待插入數(shù)據(jù)將是〈bid, key, value)的形式,其中,bid為業(yè)務(wù)標(biāo)識,key為關(guān)鍵值,例如,該關(guān)鍵值可為使用該業(yè)務(wù)的用戶標(biāo)識,value為待插入數(shù)據(jù)。
[0135]尋址單元152從待插入數(shù)據(jù)中提取得到關(guān)鍵值key,將關(guān)鍵值key對存儲服務(wù)器中的虛擬節(jié)點(diǎn)數(shù)目VN0DE_NUM取模,即key%VN0DE_NUM,進(jìn)而根據(jù)所得到的余數(shù)在控制內(nèi)存塊的路由信息中查詢得到數(shù)據(jù)內(nèi)存塊標(biāo)識,該數(shù)據(jù)內(nèi)存塊標(biāo)識所對應(yīng)的數(shù)據(jù)內(nèi)存塊將用于對關(guān)鍵值所對應(yīng)的數(shù)據(jù)進(jìn)行存儲。
[0136]如圖15所示,上述存儲模塊150還包括索引節(jié)點(diǎn)位置獲取單元153a、有效性判斷單元154a、第一數(shù)據(jù)存入單元155a、鏈表獲取單元156a和鏈表查詢單元157a。
[0137]索引節(jié)點(diǎn)位置獲取單元153a,用于獲取數(shù)據(jù)內(nèi)存塊標(biāo)識對應(yīng)的數(shù)據(jù)內(nèi)存塊中的索引節(jié)點(diǎn)數(shù)量,將關(guān)鍵值對索引節(jié)點(diǎn)數(shù)量取模得到業(yè)務(wù)在數(shù)據(jù)內(nèi)存塊的索引節(jié)點(diǎn)位置。
[0138]本實(shí)施例中,在定位得到關(guān)鍵值所對應(yīng)的數(shù)據(jù)內(nèi)存塊之后,將獲取該數(shù)據(jù)內(nèi)存塊中的索引節(jié)點(diǎn)數(shù)量NodeNum,進(jìn)而將關(guān)鍵值key對索引節(jié)點(diǎn)數(shù)量NodeNum取模,即key%N0deNUm,即可得到該業(yè)務(wù)在數(shù)據(jù)內(nèi)存塊的索引節(jié)點(diǎn)位置。
[0139]在一個實(shí)施例中,索引存儲模式下數(shù)據(jù)內(nèi)存塊的內(nèi)存實(shí)現(xiàn)結(jié)構(gòu)是以hash沖突鏈的方式實(shí)現(xiàn)的,數(shù)據(jù)內(nèi)存塊被劃分成N個索引節(jié)點(diǎn)和N個數(shù)據(jù)節(jié)點(diǎn),其中,N即為數(shù)據(jù)內(nèi)存塊中存儲的業(yè)務(wù)數(shù)據(jù)條數(shù)。
[0140]索引節(jié)點(diǎn)用于存儲數(shù)據(jù)節(jié)點(diǎn)的位置值,以將該索引節(jié)點(diǎn)作為數(shù)據(jù)節(jié)點(diǎn)的索引;數(shù)據(jù)節(jié)點(diǎn)用于存儲業(yè)務(wù)的單條數(shù)據(jù)、對應(yīng)的關(guān)鍵值以及下一個數(shù)據(jù)節(jié)點(diǎn)的位置值,即該數(shù)據(jù)節(jié)點(diǎn)指向下一數(shù)據(jù)節(jié)點(diǎn)的指針。
[0141]此外,數(shù)據(jù)內(nèi)存塊中還將設(shè)置了空閑鏈表,該空閑鏈表包括了若干個處于空閑狀態(tài)的數(shù)據(jù)節(jié)點(diǎn),以便于在數(shù)據(jù)內(nèi)存塊中存入新的數(shù)據(jù)。
[0142]有效性判斷單元154a,用于判斷索引節(jié)點(diǎn)位置對應(yīng)的索引節(jié)點(diǎn)中的位置值是否為有效值,若否,則通知第一數(shù)據(jù)存入單元155a,若是,則通知鏈表獲取單元156a。
[0143]本實(shí)施例中,有效性判斷單元154a根據(jù)索引節(jié)點(diǎn)位置定位索引節(jié)點(diǎn),讀取索引節(jié)點(diǎn)中存儲的位置值,判斷該位置值是否有效,即判斷該位置值是否為有效值,若否,則說明該數(shù)據(jù)內(nèi)存塊中未存儲與該業(yè)務(wù)相關(guān)的數(shù)據(jù),因此,通知第一數(shù)據(jù)存入單元155a直接插入數(shù)據(jù)即可,若是,則需要通知鏈表獲取單元156a進(jìn)一步查看數(shù)據(jù)內(nèi)存塊中存儲的與該業(yè)務(wù)相關(guān)的數(shù)據(jù)中是否存在當(dāng)前插入的數(shù)據(jù)。
[0144]第一數(shù)據(jù)存入單元155a,用于獲取空閑的數(shù)據(jù)節(jié)點(diǎn),將空閑的數(shù)據(jù)節(jié)點(diǎn)至索引節(jié)點(diǎn),并存入待插入數(shù)據(jù)。
[0145]本實(shí)施例中,在判斷到索引節(jié)點(diǎn)中的位置值是無效值時,說明該索引節(jié)點(diǎn)為空,并未與任一用于進(jìn)行業(yè)務(wù)數(shù)據(jù)存儲的數(shù)據(jù)節(jié)點(diǎn)進(jìn)行鏈接,此時,第一數(shù)據(jù)存入單元155a將由空間鏈接中獲取一空閑的數(shù)據(jù)節(jié)點(diǎn),將空閑的數(shù)據(jù)節(jié)點(diǎn)鏈接至索引節(jié)點(diǎn),索引節(jié)點(diǎn)中的位置值將是與鏈接的數(shù)據(jù)節(jié)點(diǎn)所對應(yīng)的,以使得索引節(jié)點(diǎn)指向該數(shù)據(jù)節(jié)點(diǎn),并存入待插入數(shù)據(jù)。
[0146]鏈表獲取單元156a,用于根據(jù)位置值得到索引節(jié)點(diǎn)關(guān)聯(lián)的沖突鏈表。
[0147]本實(shí)施例中,判斷到索引節(jié)點(diǎn)中的位置值是有效值時,說明該索引節(jié)點(diǎn)為某一沖突鏈表的關(guān)索引,鏈表獲取單元156a將根據(jù)該位置值得到鏈接的沖突鏈表。
[0148]鏈表查詢單元157a,用于查詢沖突鏈表中是否存在所述關(guān)鍵值對應(yīng)的數(shù)據(jù)節(jié)點(diǎn),若否,則查詢所述沖突鏈表中是否存在所述關(guān)鍵值對應(yīng)的數(shù)據(jù)節(jié)點(diǎn),若否,則通知第一數(shù)據(jù)存入單元155a。
[0149]本實(shí)施例中,在沖突鏈表中遍歷查詢關(guān)鍵值,判鏈表查詢單元157a斷沖突鏈表中是否存在關(guān)鍵值所對應(yīng)的節(jié)點(diǎn),若是,則說明待插入數(shù)據(jù)已經(jīng)存在于沖突鏈表中,不需要進(jìn)行存儲,若否,則通知第一數(shù)據(jù)存入單元155a將索引節(jié)點(diǎn)指向某一空閑的數(shù)據(jù)節(jié)點(diǎn),以便于將待插入數(shù)據(jù)存入空閑的數(shù)據(jù)節(jié)點(diǎn)中。
[0150]進(jìn)一步的,在索引存儲模式之下,在對存儲的數(shù)據(jù)進(jìn)行訪問的過程中,可以根據(jù)如上過程實(shí)現(xiàn)數(shù)據(jù)的查找,即,若查詢沖突鏈表中存在著關(guān)鍵值所對應(yīng)的數(shù)據(jù)節(jié)點(diǎn),將從該關(guān)鍵值所對應(yīng)的數(shù)據(jù)節(jié)點(diǎn)得到存儲的數(shù)據(jù),該數(shù)據(jù)即為查找的數(shù)據(jù)。
[0151]相應(yīng)的,在進(jìn)行數(shù)據(jù)內(nèi)存塊的分配之前,需要對數(shù)據(jù)內(nèi)存塊初始化,即對Node_Head部分、0bj_Head部分、Node_Array和0bj_Data進(jìn)行初始化,其中,UsedObjNum初始化為0,Node_Array中的內(nèi)容初始化為無效值,例如,將其初始化為全F,Ob j_Data初始化為一個大鏈表,其中的Uin和ObjData初始化為O。
[0152]如圖16所示,在一個實(shí)施例中,該存儲模式為全量存儲模式,上述尋址單元152包括提取單元1521和運(yùn)算單元1523。
[0153]提取單元1521,用于從待插入數(shù)據(jù)中提取關(guān)鍵值,并從網(wǎng)絡(luò)地址對應(yīng)的存儲服務(wù)器提取控制內(nèi)存塊中的數(shù)據(jù)條數(shù)和業(yè)務(wù)的起始數(shù)據(jù)內(nèi)存塊標(biāo)識。
[0154]本實(shí)施例中,控制內(nèi)存塊中還將記錄了存儲服務(wù)器中存儲的數(shù)據(jù)條數(shù)以及觸發(fā)數(shù)據(jù)插入操作的業(yè)務(wù)所對應(yīng)的起始數(shù)據(jù)內(nèi)存塊標(biāo)識。因此,提取單元1521將從控制內(nèi)存塊中提取得到數(shù)據(jù)條數(shù)和業(yè)務(wù)的起始數(shù)據(jù)內(nèi)存塊標(biāo)識。全量存儲模式中,數(shù)據(jù)內(nèi)存塊是以一個數(shù)組的形式存在的。
[0155]運(yùn)算單元1523,用于根據(jù)關(guān)鍵值、數(shù)據(jù)條數(shù)和起始數(shù)據(jù)內(nèi)存塊標(biāo)識計算得到存儲插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存標(biāo)識。
[0156]本實(shí)施例中,運(yùn)算單元1523將根據(jù)關(guān)鍵值、數(shù)據(jù)條數(shù)和起始數(shù)據(jù)內(nèi)存塊標(biāo)識實(shí)現(xiàn)全量存儲模式之下的尋址。運(yùn)算單元1523對關(guān)鍵值key、數(shù)據(jù)條數(shù)RecordNum和起始數(shù)據(jù)內(nèi)存塊標(biāo)識StartCacheID進(jìn)行計算,即key/RecordNum+StartCachelD,進(jìn)而根據(jù)計算得到的數(shù)值在控制內(nèi)存塊中的路由信息進(jìn)行查詢,以得到用于存儲待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識。
[0157]如圖17所示,在一個實(shí)施例中,上述存儲模塊150還包括偏移量計算單元153b和第二數(shù)據(jù)存入單元154b。
[0158]偏移量計算單元153b,用于從數(shù)據(jù)內(nèi)存標(biāo)識對應(yīng)的數(shù)據(jù)內(nèi)存塊中獲取存儲的起始關(guān)鍵值,根據(jù)存儲的起始關(guān)鍵值和關(guān)鍵值計算得到所述待插入數(shù)據(jù)對應(yīng)的偏移量。
[0159]本實(shí)施例中,由于數(shù)據(jù)內(nèi)存塊中每一關(guān)鍵值所對應(yīng)的數(shù)據(jù)是連續(xù)存儲的,且關(guān)鍵值之間也是連續(xù)的,因此,偏移量計算單元153b獲取數(shù)據(jù)內(nèi)存塊中的起始關(guān)鍵值,待插入數(shù)據(jù)所對應(yīng)的關(guān)鍵值和起始關(guān)鍵值之間的差值即為待插入數(shù)據(jù)所對應(yīng)的偏移量。
[0160]第二數(shù)據(jù)存入單元154b,用于按照偏移量將待插入數(shù)據(jù)存入數(shù)據(jù)內(nèi)存塊。
[0161]進(jìn)一步的,在全量存儲模式之下,在對存儲的數(shù)據(jù)進(jìn)行訪問的過程中,可以根據(jù)如上過程實(shí)現(xiàn)數(shù)據(jù)的查找,即,通過控制內(nèi)存塊得到相應(yīng)的偏移量,進(jìn)而通過得到的偏移量即可查找得到所需要的數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)的快速訪問。
[0162]如圖18所示,在一個實(shí)施例中,上述系統(tǒng)還包括業(yè)務(wù)上線操作獲取模塊210、存儲服務(wù)器分配模塊230、內(nèi)存塊分配模塊250和占用信息更新模塊270。
[0163]業(yè)務(wù)上線操作獲取模塊210,用于獲取觸發(fā)的業(yè)務(wù)上線操作得到相應(yīng)的業(yè)務(wù)上線信息。
[0164]本實(shí)施例中,通過一定的操作界面輸入存儲服務(wù)器標(biāo)識、存儲模式、業(yè)務(wù)名稱、業(yè)務(wù)數(shù)據(jù)量估值等業(yè)務(wù)上線信息之后,將觸發(fā)業(yè)務(wù)上線操作,此時,業(yè)務(wù)上線操作獲取模塊210通過應(yīng)用層將得到的業(yè)務(wù)上線信息傳送至控制層。
[0165]存儲服務(wù)器分配模塊230,用于根據(jù)業(yè)務(wù)上線信息查詢存儲資源占用信息為業(yè)務(wù)分配存儲服務(wù)器,生成業(yè)務(wù)在存儲服務(wù)器中的路由信息,并下發(fā)至存儲服務(wù)器。
[0166]本實(shí)施例中,存儲服務(wù)器分配模塊230根據(jù)輸入的業(yè)務(wù)上線信息分配存儲服務(wù)器,將查詢存儲資源占用信息以得到存儲服務(wù)器標(biāo)識所對應(yīng)的存儲服務(wù)器的數(shù)據(jù)內(nèi)存塊占用情況,以根據(jù)業(yè)務(wù)上線信息中的業(yè)務(wù)數(shù)據(jù)量估值、存儲模式進(jìn)行內(nèi)數(shù)據(jù)內(nèi)存塊的分配,以生成該業(yè)務(wù)的路由信息,并下發(fā)。
[0167]內(nèi)存塊分配模塊250,用于按照路由信息在分配的存儲服務(wù)器中分配數(shù)據(jù)內(nèi)存塊,并將路由信息更新至存儲服務(wù)器中的控制內(nèi)存塊。
[0168]本實(shí)施例中,內(nèi)存塊分配模塊250通過存儲層將接收到控制層所下發(fā)的路由信息,進(jìn)而按照路由信息進(jìn)行數(shù)據(jù)內(nèi)存塊的分配,以在分配的數(shù)據(jù)內(nèi)存塊中存儲業(yè)務(wù)數(shù)據(jù),根據(jù)該業(yè)務(wù)數(shù)據(jù)的格式化數(shù)據(jù)內(nèi)存塊,并將路由信息和數(shù)據(jù)內(nèi)存塊的態(tài)度更新至控制內(nèi)存塊。
[0169]占用信息更新模塊270,用于根據(jù)存儲服務(wù)器和存儲服務(wù)器中數(shù)據(jù)內(nèi)存塊的占用更新控制層中的存儲資源占用信息。
[0170]本實(shí)施例中,存儲層完成數(shù)據(jù)內(nèi)存塊的分配之后,將向控制層返回響應(yīng)消息,此時,占用信息更新模塊270接收到響應(yīng)消息的控制層將更新資源占用信息。
[0171]上述數(shù)據(jù)分布式存儲的實(shí)現(xiàn)系統(tǒng),使得業(yè)務(wù)上線的運(yùn)營和維護(hù)成本大大降低,運(yùn)行維護(hù)人員可通過一鍵操作即可完成業(yè)務(wù)上線,提高了業(yè)務(wù)上線的便捷性。
[0172]如圖19所示,在一個實(shí)施例中,上述系統(tǒng)還包括下線操作獲取模塊310、服務(wù)器查詢模塊330、內(nèi)存塊刪除模塊350和刪除更新模塊370。
[0173]下線操作獲取模塊310,用于獲取業(yè)務(wù)觸發(fā)的下線操作。
[0174]本實(shí)施例中,通過一定的操作界面輸入待下線的業(yè)務(wù)標(biāo)識即可觸發(fā)業(yè)務(wù)的下線操作。
[0175]服務(wù)器查詢模塊330,用于查詢存儲資源占用信息得到業(yè)務(wù)所在的存儲服務(wù)器,并向存儲服務(wù)器傳送業(yè)務(wù)刪除命令。
[0176]本實(shí)施例中,服務(wù)器查詢模塊330通過控制層根據(jù)下線操作得到待下線的業(yè)務(wù)標(biāo)識,根據(jù)業(yè)務(wù)標(biāo)識在存儲資源占用信息中進(jìn)行查詢即可得到待下線的業(yè)務(wù)所在的存儲服務(wù)器,進(jìn)而向該存儲服務(wù)器傳送業(yè)務(wù)刪除命令。
[0177]內(nèi)存塊刪除模塊350,用于根據(jù)業(yè)務(wù)刪除命令刪除存儲服務(wù)器中業(yè)務(wù)在控制內(nèi)存塊的信息,并相應(yīng)刪除業(yè)務(wù)在數(shù)據(jù)內(nèi)存塊中存入的數(shù)據(jù)。
[0178]本實(shí)施例中,內(nèi)存塊刪除模塊350根據(jù)業(yè)務(wù)刪除命令刷新控制內(nèi)存塊中數(shù)據(jù)內(nèi)存塊的狀態(tài)和路由信息,以將存儲了下線業(yè)務(wù)數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊的狀態(tài)由已使用刷新為空閑,并清除該業(yè)務(wù)的路由信息。
[0179]刪除更新模塊370,用于根據(jù)存儲服務(wù)器中控制內(nèi)存塊和數(shù)據(jù)內(nèi)存塊的刪除更新控制層中的存儲資源占用信息。
[0180]本實(shí)施例中,由于存儲層中的存儲服務(wù)器和存儲服務(wù)器中的數(shù)據(jù)內(nèi)存塊發(fā)生了業(yè)務(wù)數(shù)據(jù)的刪除,因此,刪除更新模塊370也將相應(yīng)更新控制層中的存儲資源占用信息,以保證控制層的存儲資源占用信息的準(zhǔn)確性。
[0181]通過內(nèi)存共享以及運(yùn)行維護(hù)人員的快捷操作,使得各種業(yè)務(wù)能夠快速上線,為新上線的業(yè)務(wù)分配存儲資源,也能夠?qū)磳⑾戮€的業(yè)務(wù)快速回收為其分配的存儲資源,運(yùn)行維護(hù)人員只需要關(guān)注業(yè)務(wù)邏輯,而不需要關(guān)注數(shù)據(jù)的存儲,提高了業(yè)務(wù)實(shí)現(xiàn)和穩(wěn)定運(yùn)行的可能性,進(jìn)而保證了業(yè)務(wù)運(yùn)行的可靠性。
[0182]上述數(shù)據(jù)分布式存儲的實(shí)現(xiàn)方法和系統(tǒng),獲取應(yīng)用層中業(yè)務(wù)觸發(fā)的數(shù)據(jù)插入操作,根據(jù)業(yè)務(wù)的數(shù)據(jù)插入操作由存儲資源占用信息得到業(yè)務(wù)所在存儲服務(wù)器的網(wǎng)絡(luò)地址,該存儲服務(wù)器與業(yè)務(wù)將是一對多的對應(yīng)關(guān)系,由該存儲服務(wù)器得到存入待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識,并按照數(shù)據(jù)內(nèi)存塊標(biāo)識將待插入數(shù)據(jù)存入相應(yīng)的數(shù)據(jù)內(nèi)存塊,以使得業(yè)務(wù)的數(shù)據(jù)存儲于同一存儲服務(wù)器的若干個數(shù)據(jù)內(nèi)存塊中,提高了數(shù)據(jù)存儲的訪問性能,存儲服務(wù)器中空閑的數(shù)據(jù)內(nèi)存塊可用于其它業(yè)務(wù)的數(shù)據(jù)存儲,有效提高了存儲資源的使用效率。
[0183]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過計算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory, ROM)或隨機(jī)存儲記憶體(Random AccessMemory, RAM)等。
[0184]以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
【權(quán)利要求】
1.一種數(shù)據(jù)分布式存儲的實(shí)現(xiàn)方法,包括如下步驟: 獲取業(yè)務(wù)觸發(fā)的數(shù)據(jù)插入操作; 根據(jù)所述業(yè)務(wù)的數(shù)據(jù)插入操作由存儲資源占用信息得到所述業(yè)務(wù)所在存儲服務(wù)器的網(wǎng)絡(luò)地址,所述存儲服務(wù)器與業(yè)務(wù)將是一對多的對應(yīng)關(guān)系; 由所述網(wǎng)絡(luò)地址所在存儲服務(wù)器得到存入所述待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識,并按照所述數(shù)據(jù)內(nèi)存塊標(biāo)識將待插入數(shù)據(jù)存入相應(yīng)的數(shù)據(jù)內(nèi)存塊。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述獲取業(yè)務(wù)觸發(fā)的數(shù)據(jù)插入操作的步驟之前,所述方法還包括: 獲取觸發(fā)的業(yè)務(wù)上線操作得到相應(yīng)的業(yè)務(wù)上線信息; 根據(jù)所述業(yè)務(wù)上線信息查詢所述存儲資源占用信息為所述業(yè)務(wù)分配存儲服務(wù)器,生成所述業(yè)務(wù)在所述存儲服務(wù)器中的路由信息,并下發(fā)至存儲服務(wù)器; 按照所述路由信息在所述分配的存儲服務(wù)器中分配數(shù)據(jù)內(nèi)存塊,并將所述路由信息更新至所述存儲服務(wù)器中的控制內(nèi)存塊; 根據(jù)所述存儲服務(wù)器和所述存儲服務(wù)器中數(shù)據(jù)內(nèi)存塊的占用更新所述控制層中的存儲資源占用信息。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述根據(jù)所述存儲服務(wù)器和所述存儲服務(wù)器中數(shù)據(jù)內(nèi)存塊的占用更新所述控制層中的存儲資源占用信息之后,所述方法還包括: 獲取業(yè)務(wù)觸發(fā)的下線操作; 查詢所述存儲資源占用信息得到所述業(yè)務(wù)所在的存儲服務(wù)器,并向所述存儲服務(wù)器傳送業(yè)務(wù)刪除命令; 根據(jù)所述業(yè)務(wù)刪除命令刪除存儲服務(wù)器中所述業(yè)務(wù)在控制內(nèi)存塊的信息,并相應(yīng)刪除所述業(yè)務(wù)在數(shù)據(jù)內(nèi)存塊中存入的數(shù)據(jù); 根據(jù)所述存儲服務(wù)器中控制內(nèi)存塊和數(shù)據(jù)內(nèi)存塊的刪除更新所述存儲資源占用信息。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述業(yè)務(wù)的插入操作由所述存儲資源占用信息得到所述業(yè)務(wù)所在存儲服務(wù)器的網(wǎng)絡(luò)地址的步驟包括: 獲取所述業(yè)務(wù)對應(yīng)的業(yè)務(wù)標(biāo)識,根據(jù)所述業(yè)務(wù)標(biāo)識查詢所述存儲資源占用信息以得到所述業(yè)務(wù)所在存儲服務(wù)器的網(wǎng)絡(luò)地址。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述由所述網(wǎng)絡(luò)地址所在存儲服務(wù)器得到存入所述待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識的步驟包括: 于所述網(wǎng)絡(luò)地址對應(yīng)的存儲服務(wù)器查詢控制內(nèi)存塊以得到所述業(yè)務(wù)的存儲模式; 按照所述存儲模式從所述控制內(nèi)存塊中的路由信息查詢得到存入所述待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述存儲模式為索引存儲模式,所述按照所述存儲模式從所述控制內(nèi)存塊中的路由信息查詢得到存入所述待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識的步驟包括: 從所述待插入數(shù)據(jù)中提取關(guān)鍵值,將所述關(guān)鍵值對所述存儲服務(wù)器中的虛擬節(jié)點(diǎn)數(shù)目取模得到余數(shù),根據(jù)所述余數(shù)在所述控制內(nèi)存塊中的路由信息查詢得到存儲所述待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述按照所述數(shù)據(jù)內(nèi)存塊標(biāo)識將待插入數(shù)據(jù)存入相應(yīng)的數(shù)據(jù)內(nèi)存塊的步驟包括: 獲取所述數(shù)據(jù)內(nèi)存塊標(biāo)識對應(yīng)的數(shù)據(jù)內(nèi)存塊中的索引節(jié)點(diǎn)數(shù)量,將所述關(guān)鍵值對所述索引節(jié)點(diǎn)數(shù)量取模得到所述業(yè)務(wù)在所述數(shù)據(jù)內(nèi)存塊的索引節(jié)點(diǎn)位置; 判斷索引節(jié)點(diǎn)位置對應(yīng)的索引節(jié)點(diǎn)中的位置值是否為有效值,若否,則獲取空閑的數(shù)據(jù)節(jié)點(diǎn),將所述空閑的數(shù)據(jù)節(jié)點(diǎn)鏈接至所述索引節(jié)點(diǎn),并存入所述待插入數(shù)據(jù)。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述按照所述數(shù)據(jù)內(nèi)存塊標(biāo)識將待插入數(shù)據(jù)存入相應(yīng)的數(shù)據(jù)內(nèi)存塊的步驟還包括: 判斷到索引節(jié)點(diǎn)位置對應(yīng)的索引節(jié)點(diǎn)中的位置值為有效值,則根據(jù)所述位置值得到所述索引節(jié)點(diǎn)關(guān)聯(lián)的沖突鏈表; 查詢所述沖突鏈表中是否存在所述關(guān)鍵值對應(yīng)的數(shù)據(jù)節(jié)點(diǎn),若否,則進(jìn)入所述獲取空閑的數(shù)據(jù)節(jié)點(diǎn),將所述空閑的數(shù)據(jù)節(jié)點(diǎn)至所述索引節(jié)點(diǎn),并存入所述待插入數(shù)據(jù)的步驟。
9.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述存儲模式為全量存儲模式,所述按照所述存儲模式從所述控制內(nèi)存塊中的路由信息查詢得到存入所述待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識的步驟包括: 從所述待插入數(shù)據(jù)中提取關(guān)鍵值,并從所述網(wǎng)絡(luò)地址對應(yīng)的存儲服務(wù)器提取控制內(nèi)存塊中的數(shù)據(jù)條數(shù)和所述業(yè)務(wù)的起始數(shù)據(jù)內(nèi)存塊標(biāo)識; 根據(jù)所述關(guān)鍵值、數(shù)據(jù)條數(shù)和起始數(shù)據(jù)內(nèi)存塊標(biāo)識計算得到存儲所述插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存標(biāo)識。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,所述按照所述數(shù)據(jù)內(nèi)存塊標(biāo)識將待插入數(shù)據(jù)存入相應(yīng)的數(shù)據(jù)內(nèi)存塊的步驟包括: 從所述數(shù)據(jù)內(nèi)存標(biāo)識對應(yīng)的數(shù)據(jù)內(nèi)存塊中獲取存儲的起始關(guān)鍵值,根據(jù)所述存儲的起始關(guān)鍵值和所述關(guān)鍵值計算得到所述待插入數(shù)據(jù)對應(yīng)的偏移量; 按照所述偏移量將所述待插入數(shù)據(jù)存入所述數(shù)據(jù)內(nèi)存塊。
11.一種數(shù)據(jù)分布式存儲的實(shí)現(xiàn)系統(tǒng),其特征在于,包括: 數(shù)據(jù)插入操作獲取模塊,用于獲取業(yè)務(wù)觸發(fā)的數(shù)據(jù)插入操作; 地址獲取模塊,用于根據(jù)所述業(yè)務(wù)的數(shù)據(jù)插入操作由存儲資源占用信息得到所述業(yè)務(wù)所在存儲服務(wù)器的網(wǎng)絡(luò)地址,所述存儲服務(wù)器與業(yè)務(wù)將是一對多的對應(yīng)關(guān)系; 存儲模塊,用于由所述網(wǎng)絡(luò)地址所在存儲服務(wù)器得存入所述待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識,并按照所述數(shù)據(jù)內(nèi)存塊標(biāo)識將待插入數(shù)據(jù)存入相應(yīng)數(shù)據(jù)內(nèi)存塊。
12.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括: 業(yè)務(wù)上線操作獲取模塊,用于獲取觸發(fā)的業(yè)務(wù)上線操作得到相應(yīng)的業(yè)務(wù)上線信息;存儲服務(wù)器分配模塊,用于根據(jù)所述業(yè)務(wù)上線信息查詢所述存儲資源占用信息為所述業(yè)務(wù)分配存儲服務(wù)器,生成所述業(yè)務(wù)在所述存儲服務(wù)器中的路由信息,并下發(fā)至存儲服務(wù)器; 內(nèi)存塊分配模塊,用于按照所述路由信息在所述分配的存儲服務(wù)器中分配數(shù)據(jù)內(nèi)存塊,并將所述路由信息更新至所述存儲服務(wù)器中的控制內(nèi)存塊; 占用信息更新模塊,用于根據(jù)所述存儲服務(wù)器和所述存儲服務(wù)器中數(shù)據(jù)內(nèi)存塊的占用更新所述控制層中的存儲資源占用信息。
13.根據(jù)權(quán)利要求12所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括: 下線操作獲取模塊,用于獲取業(yè)務(wù)觸發(fā)的下線操作; 服務(wù)器查詢模塊,用于查詢所述存儲資源占用信息得到所述業(yè)務(wù)所在的存儲服務(wù)器,并向所述存儲服務(wù)器傳送業(yè)務(wù)刪除命令; 內(nèi)存塊刪除模塊,用于根據(jù)所述業(yè)務(wù)刪除命令刪除存儲服務(wù)器中所述業(yè)務(wù)在控制內(nèi)存塊的信息,并相應(yīng)刪除所述業(yè)務(wù)在數(shù)據(jù)內(nèi)存塊中存入的數(shù)據(jù); 刪除更新模塊,用于根據(jù)所述存儲服務(wù)器中控制內(nèi)存塊和數(shù)據(jù)內(nèi)存塊的刪除更新所述存儲資源占用信息。
14.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,所述地址獲取模塊還用于獲取所述業(yè)務(wù)對應(yīng)的業(yè)務(wù)標(biāo)識,根據(jù)所述業(yè)務(wù)標(biāo)識查詢所述存儲資源占用信息以得到所述業(yè)務(wù)所在存儲服務(wù)器的網(wǎng)絡(luò)地址。
15.根據(jù)權(quán)利要求14所述的系統(tǒng),其特征在于,所述存儲模塊包括 模式查詢單元,用于于所述網(wǎng)絡(luò)地址對應(yīng)的存儲服務(wù)器查詢控制內(nèi)存塊以得到所述業(yè)務(wù)的存儲模式; 尋址單元,用于按照所述存儲模式從所述控制內(nèi)存塊中的路由信息查詢得到存入所述待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識。
16.根據(jù)權(quán)利要求15所述的系統(tǒng),其特征在于,所述存儲模式為索引存儲模式,所述尋址單元還用于從所述待插入數(shù)據(jù)中提取關(guān)鍵值,將所述關(guān)鍵值對所述存儲服務(wù)器中的虛擬節(jié)點(diǎn)數(shù)目取模得到余數(shù),根據(jù)所述余數(shù)在所述控制內(nèi)存塊中的路由信息查詢得到存儲和所述待插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存塊標(biāo)識。
17.根據(jù)權(quán)利要求16所述的系統(tǒng),其特征在于,所述存儲模塊還包括: 索引節(jié)點(diǎn)位置獲取單元,用于獲取所述數(shù)據(jù)內(nèi)存塊標(biāo)識對應(yīng)的數(shù)據(jù)內(nèi)存塊中的索引節(jié)點(diǎn)數(shù)量,將所述關(guān)鍵值對所述索引節(jié)點(diǎn)數(shù)量取模得到所述業(yè)務(wù)在所述數(shù)據(jù)內(nèi)存塊的索引節(jié)點(diǎn)位置; 有效性判斷單元,用于判斷索引節(jié)點(diǎn)位置對應(yīng)的索引節(jié)點(diǎn)中的位置值是否為有效值,若否,則通知第一數(shù)據(jù)存入單元; 所述第一數(shù)據(jù)存入單元用于獲取空閑的數(shù)據(jù)節(jié)點(diǎn),將所述空閑的數(shù)據(jù)節(jié)點(diǎn)鏈接至所述索引節(jié)點(diǎn),并存入所述待插入數(shù)據(jù)。
18.根據(jù)權(quán)利要求17所述的系統(tǒng),其特征在于,所述存儲模塊還包括: 鏈表獲取單元,用于判斷到索引節(jié)點(diǎn)位置對應(yīng)的索引節(jié)點(diǎn)中的位置值為有效值,則根據(jù)所述位置值得到所述索引節(jié)點(diǎn)關(guān)聯(lián)的沖突鏈表; 鏈表查詢單元,用于查詢所述沖突鏈表中是否存在所述關(guān)鍵值對應(yīng)的數(shù)據(jù)節(jié)點(diǎn),若否,則查詢所述沖突鏈表中是否存在所述關(guān)鍵值對應(yīng)的數(shù)據(jù)節(jié)點(diǎn),若否,則通知所述第一數(shù)據(jù)存入單元。
19.根據(jù)權(quán)利要求15所述的系統(tǒng),其特征在于,所述存儲模式為全量存儲模式,所述尋址單元包括: 提取單元,用于從所述待插入數(shù)據(jù)中提取關(guān)鍵值,并從所述網(wǎng)絡(luò)地址對應(yīng)的存儲服務(wù)器提取控制內(nèi)存塊中的數(shù)據(jù)條數(shù)和所述業(yè)務(wù)的起始數(shù)據(jù)內(nèi)存塊標(biāo)識; 運(yùn)算單元,用于根據(jù)所述關(guān)鍵值、數(shù)據(jù)條數(shù)和起始數(shù)據(jù)內(nèi)存塊標(biāo)識計算得到存儲所述插入數(shù)據(jù)的數(shù)據(jù)內(nèi)存標(biāo)識。
20.根據(jù)權(quán)利要求19所述的系統(tǒng),其特征在于,所述存儲模塊還包括: 偏移量計算單元,用于從所述數(shù)據(jù)內(nèi)存標(biāo)識對應(yīng)的數(shù)據(jù)內(nèi)存塊中獲取存儲的起始關(guān)鍵值,根據(jù)所述存儲的起始關(guān)鍵值和所述關(guān)鍵值計算得到所述待插入數(shù)據(jù)對應(yīng)的偏移量;第二數(shù)據(jù)存入單元,用于按照所述偏移量將所述待插入數(shù)據(jù)存入所述數(shù)據(jù)內(nèi)存塊。
【文檔編號】H04L29/08GK104468665SQ201310430886
【公開日】2015年3月25日 申請日期:2013年9月18日 優(yōu)先權(quán)日:2013年9月18日
【發(fā)明者】馬海賓 申請人:騰訊科技(深圳)有限公司