亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

數(shù)據(jù)存取方法和裝置的制作方法

文檔序號(hào):6578141閱讀:202來源:國知局
專利名稱:數(shù)據(jù)存取方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明是關(guān)于存儲(chǔ)領(lǐng)域的文件管理,特別是關(guān)于一種數(shù)據(jù)存取方法和裝置。
背景技術(shù)
目前,隨著存儲(chǔ)領(lǐng)域直連式存儲(chǔ)(Direct-Attached Storage, DAS)、 網(wǎng)絡(luò)接入存儲(chǔ)(Network-Attached Storage, NAS)、存儲(chǔ)區(qū)域網(wǎng)絡(luò)(Storag e Area Network, SAN)的高速發(fā)展,存儲(chǔ)新技術(shù)不斷涌現(xiàn)出來。其中,分布 式文件系統(tǒng)得到大力發(fā)展,開始廣泛地應(yīng)用于存儲(chǔ)解決方案中。
分布式文件系統(tǒng)的設(shè)計(jì)基于客戶機(jī)/服務(wù)器模式,其分為三個(gè)部分客戶 端Client、元數(shù)據(jù)服務(wù)器(Metadata Server, MDS)和存儲(chǔ)節(jié)點(diǎn)(Storage Node, SN)。分布式文件系統(tǒng)在存儲(chǔ)文件時(shí)需要將文件切分成數(shù)據(jù)塊,然后對(duì) 各個(gè)數(shù)據(jù)塊進(jìn)行哈希計(jì)算,最后根據(jù)哈希值進(jìn)行分配存儲(chǔ)節(jié)點(diǎn)。傳統(tǒng)技術(shù)中, 元數(shù)據(jù)服務(wù)器在給數(shù)據(jù)塊分配存儲(chǔ)節(jié)點(diǎn)時(shí),采用的是根據(jù)哈希值進(jìn)行隨機(jī)分 配,然后記錄存儲(chǔ)節(jié)點(diǎn)和數(shù)據(jù)塊之間的對(duì)應(yīng)關(guān)系。哈希算法可以將任意長度 的二進(jìn)制值映射為固定長度的較小二進(jìn)制值,這個(gè)小的二進(jìn)制值即稱為哈希 值。哈希值是一段數(shù)據(jù)唯一且極其緊湊的數(shù)值表示形式,要找到同一個(gè)哈希 值的兩個(gè)不同的輸入,在計(jì)算上是不可能的,所以以哈希值為依據(jù)進(jìn)行分布 式存儲(chǔ)可以保證數(shù)據(jù)的唯一性和完整性。
在實(shí)現(xiàn)本發(fā)明過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問題,現(xiàn)有 技術(shù)査找數(shù)據(jù)塊和存儲(chǔ)節(jié)點(diǎn)的對(duì)應(yīng)關(guān)系時(shí)很不方便,從而也極大地影響了對(duì) 數(shù)據(jù)塊的讀取速度。

發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種數(shù)據(jù)存取方法和裝置,用于提高文件的査找及讀 取速度。
本發(fā)明實(shí)施例提出了一種數(shù)據(jù)存儲(chǔ)方法,該方法包括:獲得數(shù)據(jù)塊的哈希 值前綴或后綴;根據(jù)所述數(shù)據(jù)塊的哈希值前綴或后綴建立路由表,以使哈希 值前綴或后綴相同的數(shù)據(jù)塊在所述路由表中指向同一個(gè)存儲(chǔ)節(jié)點(diǎn);根據(jù)所述 路由表將所述數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn)。
本發(fā)明實(shí)施例還提出了一種數(shù)據(jù)讀取方法,該方法包括獲得待讀取數(shù) 據(jù)塊的哈希值前綴或后綴和路由表;根據(jù)所述哈希值前綴或后綴從所述路由 表中獲得所述數(shù)據(jù)塊所在的存儲(chǔ)節(jié)點(diǎn);向所述存儲(chǔ)節(jié)點(diǎn)發(fā)送請(qǐng)求以讀取所述 待讀取數(shù)據(jù)塊。
本發(fā)明實(shí)施例還提出了一種元數(shù)據(jù)服務(wù)器,包括獲取單元,用于獲得數(shù) 據(jù)塊的哈希值前綴或后綴;路由單元,用于根據(jù)所述數(shù)據(jù)塊的哈希值前綴或 后綴建立路由表,以使哈希值前綴或后綴相同的數(shù)據(jù)塊在所述路由表中指向 同一個(gè)存儲(chǔ)節(jié)點(diǎn);數(shù)據(jù)存儲(chǔ)單元,用于根據(jù)所述路由表將所述數(shù)據(jù)塊存儲(chǔ)于 相應(yīng)的存儲(chǔ)節(jié)點(diǎn)。
本發(fā)明實(shí)施例還提出了一種客戶端,包括獲取單元,用于獲得待讀取數(shù) 據(jù)塊的哈希值前綴或后綴和路由表;數(shù)據(jù)讀取單元,用于根據(jù)所述哈希值前 綴或后綴從所述路由表中獲得所述待讀取數(shù)據(jù)塊所在的存儲(chǔ)節(jié)點(diǎn),并向所述 存儲(chǔ)節(jié)點(diǎn)發(fā)送請(qǐng)求以讀取所述待讀取數(shù)據(jù)塊。
本發(fā)明實(shí)施例提供的技術(shù)方案通過數(shù)據(jù)塊的哈希值前綴或后綴來建立路 由表,并以路由表為依據(jù)將數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn),這種有序的存儲(chǔ) 方式可以在很大程度上提高文件的査找及讀取速度。


為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí) 施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面 描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來^f, 在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。 圖1為本發(fā)明實(shí)施例一提供的一種數(shù)據(jù)存儲(chǔ)方法流程圖; 圖2為本發(fā)明實(shí)施例一提供的一種前綴樹的結(jié)構(gòu)示意圖; 圖3為本發(fā)明實(shí)施例二提供的一種數(shù)據(jù)存儲(chǔ)方法流程圖; 圖4為本發(fā)明實(shí)施例三提供的一種數(shù)據(jù)存儲(chǔ)方法流程圖; 圖5為本發(fā)明實(shí)施例四提供的一種分布式文件系統(tǒng)的網(wǎng)絡(luò)結(jié)構(gòu)圖; 圖6為本發(fā)明實(shí)施例四提供的前綴樹和路由表的示意圖; 圖7為本發(fā)明實(shí)施例五提供的在圖6基礎(chǔ)上經(jīng)過修改后的前綴樹和路由 表示意圖8為本發(fā)明實(shí)施例六提供的一種數(shù)據(jù)讀取方法流程圖; 圖9為本發(fā)明實(shí)施例六提供的一種數(shù)據(jù)讀取過程示意圖; 圖10為本發(fā)明實(shí)施例六提供的現(xiàn)有的數(shù)據(jù)讀取過程示意圖; 圖11為本發(fā)明實(shí)施例八提供的一種元數(shù)據(jù)服務(wù)器的結(jié)構(gòu)圖; 圖12為本發(fā)明實(shí)施例九提供的一種元數(shù)據(jù)服務(wù)器的結(jié)構(gòu)圖; 圖13為本發(fā)明實(shí)施例十提供的一種元數(shù)據(jù)服務(wù)器的結(jié)構(gòu)圖; 圖14為本發(fā)明實(shí)施例十一提供的一種元數(shù)據(jù)服務(wù)器的結(jié)構(gòu)圖; 圖15為本發(fā)明實(shí)施例十二提供的一種客戶端的結(jié)構(gòu)圖; 圖16為本發(fā)明實(shí)施例十三提供的一種客戶端的結(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ù)的范圍。 實(shí)施例一
如圖1所示為本發(fā)明實(shí)施例一提供的一種數(shù)據(jù)存儲(chǔ)方法流程圖。該方法
包括
S101:獲得數(shù)據(jù)塊的哈希值前綴,需要指出的是,本發(fā)明對(duì)于哈希值后綴 也同樣適用,其原理和方法和哈希值的前綴并無區(qū)別,因此在以下描述中將 只以哈希值前綴對(duì)本發(fā)明進(jìn)行描述。
S102:根據(jù)所述數(shù)據(jù)塊的哈希值前綴建立路由表,以使哈希值前綴相同的 數(shù)據(jù)塊在所述路由表中指向同 一個(gè)存儲(chǔ)節(jié)點(diǎn)。
S103:根據(jù)所述路由表將所述數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn)。
作為本發(fā)明的一個(gè)實(shí)施例,在步驟S101中,為了得到文件的數(shù)據(jù)塊,需 將文件按照一定的分片算法切分成多個(gè)數(shù)據(jù)塊,該分片算法為一現(xiàn)有技術(shù), 在此不多介紹,其可以包括刪除代碼算法(Erasure Code),迭代深度優(yōu)先 算法(IDA)等算法。然后,對(duì)上述切分所得到的數(shù)據(jù)塊進(jìn)行哈希運(yùn)算得到每 個(gè)數(shù)據(jù)塊的哈希值以及哈希值前綴,哈希值前綴是在哈希值的基礎(chǔ)上取得的, 其用于為數(shù)據(jù)塊有序地分配存儲(chǔ)節(jié)點(diǎn),在本實(shí)施例中,可以取哈希值的N位 前綴;而哈希值則用于將相應(yīng)的數(shù)據(jù)塊存儲(chǔ)在存儲(chǔ)節(jié)點(diǎn)內(nèi)的特定位置上,從 而方便后續(xù)的數(shù)據(jù)讀取。目前的哈希算法多種多樣,比如常用的有:MD5,SHA-1, SHA-2, SHA-256, SHA-512等等,在本發(fā)明實(shí)施例中,并不限定以何種哈希算 法對(duì)數(shù)據(jù)塊進(jìn)行哈希運(yùn)算。
元數(shù)據(jù)服務(wù)器再根據(jù)上述得到的哈希值的N位前綴建立前綴樹和路由表,
這里的前綴樹只是為了配合路由表對(duì)本發(fā)明實(shí)施例加以說明而加入的,實(shí)際 中可以只建立路由表,在路由表中我們將哈希值的N位前綴相同的數(shù)據(jù)塊指 向同一個(gè)存儲(chǔ)節(jié)點(diǎn),在本發(fā)明實(shí)施例中,N的取值是根據(jù)實(shí)際的存儲(chǔ)節(jié)點(diǎn)數(shù)量 來確定的, 一般在1一8位不等。如圖2所示為本發(fā)明實(shí)施例一提供的前綴,f的結(jié)構(gòu)示意圖,其中,實(shí)心圓代表葉子節(jié)點(diǎn),而矩形則代表數(shù)據(jù)塊,從圖2 中可見,該前綴樹上有5個(gè)葉子節(jié)點(diǎn)節(jié)點(diǎn)204、 205、 206、 207和208,該5 個(gè)葉子節(jié)點(diǎn)代表了物理上的5個(gè)存儲(chǔ)節(jié)點(diǎn),另外圖2中每個(gè)父節(jié)點(diǎn)下的子節(jié) 點(diǎn)都是在父節(jié)點(diǎn)內(nèi)數(shù)據(jù)塊哈希值的基礎(chǔ)上,按照哈希值中N位前綴相同進(jìn)行 的分類,越往下,其分類越細(xì)。比如節(jié)點(diǎn)202和203是在節(jié)點(diǎn)201的基礎(chǔ)上 按照N位前綴相同進(jìn)行的數(shù)據(jù)塊分類,而節(jié)點(diǎn)204和205則是在節(jié)點(diǎn)202的 基數(shù)上按照N+2位前綴相同進(jìn)行的再分類。
作為本發(fā)明的一個(gè)實(shí)施例,步驟S102中元數(shù)據(jù)服務(wù)器在建立路由表后, 還包括利用負(fù)載均衡算法計(jì)算路由表中存儲(chǔ)節(jié)點(diǎn)的負(fù)載,如果負(fù)載均衡,則 根據(jù)路由表將所述數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn);如果負(fù)載不均衡,則調(diào)整 路由表,再次利用負(fù)載均衡算法計(jì)算存儲(chǔ)節(jié)點(diǎn)負(fù)載。
作為本發(fā)明的一個(gè)實(shí)施例,上述所說的負(fù)載均衡算法包括數(shù)據(jù)塊數(shù)量優(yōu)
先法、數(shù)據(jù)塊大小優(yōu)先法或權(quán)重法。其中,數(shù)據(jù)塊數(shù)量優(yōu)先法根據(jù)比較每個(gè) 存儲(chǔ)節(jié)點(diǎn)下的數(shù)據(jù)塊數(shù)量來確定該存儲(chǔ)節(jié)點(diǎn)負(fù)載;數(shù)據(jù)塊大小優(yōu)先法根據(jù)比 較每個(gè)存儲(chǔ)節(jié)點(diǎn)下的所有數(shù)據(jù)塊大小來確定該存儲(chǔ)節(jié)點(diǎn)負(fù)載;權(quán)重法是事先 定義好每個(gè)存儲(chǔ)節(jié)點(diǎn)下數(shù)據(jù)塊數(shù)量的權(quán)重和數(shù)據(jù)塊大小的權(quán)重,然后確定該 存儲(chǔ)節(jié)點(diǎn)負(fù)載。上述各種負(fù)載均衡算法可以根據(jù)實(shí)際情況加以選用,或者將 各種算法結(jié)合起來使用。
經(jīng)過上述負(fù)載均衡算法,如果存儲(chǔ)節(jié)點(diǎn)的負(fù)載均衡,則根據(jù)路由表中數(shù) 據(jù)塊所指向的存儲(chǔ)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)存儲(chǔ);如果發(fā)現(xiàn)存儲(chǔ)節(jié)點(diǎn)的負(fù)載不均衡,;則 找出負(fù)載較重的存儲(chǔ)節(jié)點(diǎn),增加負(fù)載較重的存儲(chǔ)節(jié)點(diǎn)內(nèi)的數(shù)據(jù)塊的哈希值前 綴或后綴的位數(shù),以形成新的哈希值前綴或后綴,使所述新的哈希值前綴或 后綴相同的數(shù)據(jù)塊在所述路由表中指向其它負(fù)載較輕的存儲(chǔ)節(jié)點(diǎn),即將該存 儲(chǔ)節(jié)點(diǎn)上的數(shù)據(jù)塊按照M位哈希值前綴進(jìn)一步進(jìn)行分類,然后將其中一部分M
位哈希值位前綴相同的數(shù)據(jù)塊分配到其他負(fù)載較輕的存儲(chǔ)節(jié)點(diǎn)之上,這里M 為大于N的整數(shù)。比如,找出負(fù)載最重的存儲(chǔ)節(jié)點(diǎn),該存儲(chǔ)節(jié)點(diǎn)上存放的是N位(例如2位)前綴相同的數(shù)據(jù)塊,然后進(jìn)一步根據(jù)M位(例如3位)前綴 相同,將上述數(shù)據(jù)塊加以分類并將其中一部分3位前綴相同的數(shù)據(jù)塊分配到 其它負(fù)載較輕的存儲(chǔ)節(jié)點(diǎn)之上。元數(shù)據(jù)服務(wù)器在完成上述負(fù)載調(diào)整后,會(huì)動(dòng) 態(tài)修改相應(yīng)的前綴樹和路由表,以記錄下相應(yīng)的改動(dòng)。
本發(fā)明實(shí)施例通過數(shù)據(jù)塊的哈希值前綴來建立前綴樹及路由表,并以路 由表為依據(jù)將數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn),這種有序的存儲(chǔ)方式可以在很 大程度上提高文件的查找及讀取速度。另外,本發(fā)明實(shí)施例在進(jìn)行數(shù)據(jù)存儲(chǔ) 的同時(shí)還會(huì)對(duì)存儲(chǔ)節(jié)點(diǎn)的負(fù)載情況進(jìn)行分析,并動(dòng)態(tài)修改路由表以均衡存儲(chǔ) 節(jié)點(diǎn)的負(fù)載。
實(shí)施例二
如圖3所示為本發(fā)明實(shí)施例二提供的一種數(shù)據(jù)存儲(chǔ)方法流程圖。
S301:元數(shù)據(jù)服務(wù)器根據(jù)分片算法將所述文件切分成多個(gè)數(shù)據(jù)塊,并計(jì)
算出全部數(shù)據(jù)塊的哈希值以及哈希值的N位前綴。
S302:元數(shù)據(jù)服務(wù)器根據(jù)哈希值前綴建立路由表,以使哈希值中N位前
綴相同的數(shù)據(jù)塊在路由表中指向同一個(gè)存儲(chǔ)節(jié)點(diǎn)。
S303:元數(shù)據(jù)服務(wù)器根據(jù)路由表將數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn)。 S304:元數(shù)據(jù)服務(wù)器將數(shù)據(jù)塊的哈希值、哈希值的N位前綴以及路由表
同步至客戶端。
在本實(shí)施例中步驟S301中完成文件切分以及計(jì)算數(shù)據(jù)塊的哈希值、哈希 值前綴的是元數(shù)據(jù)服務(wù)器,且在步驟S303之后,還增加了元數(shù)據(jù)服務(wù)器將數(shù) 據(jù)塊的哈希值、哈希值的N位前綴以及路由表同步至客戶端這一步驟,該步 驟是為了讓客戶端擁有一份哈希值、哈希值的N位前綴以及路由表的本地副 本,以方便后續(xù)的數(shù)據(jù)査找和讀取,另外當(dāng)客戶端擁有哈希值、哈希值的N 位前綴以及路由表的本地副本后,可以為元數(shù)據(jù)服務(wù)器分擔(dān)數(shù)據(jù)査找的負(fù)荷, 從而大大降低了元數(shù)據(jù)服務(wù)器的負(fù)荷。
作為本發(fā)明的一個(gè)實(shí)施例,步驟S302中元數(shù)據(jù)服務(wù)器在建立路由表后,還包括利用負(fù)載均衡算法計(jì)算路由表中存儲(chǔ)節(jié)點(diǎn)的負(fù)載,如果負(fù)載均衡,則
根據(jù)路由表將所述數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn);如果負(fù)載不均衡,則調(diào)整 路由表,再次利用負(fù)載均衡算法計(jì)算存儲(chǔ)節(jié)點(diǎn)負(fù)載。 實(shí)施例三
如圖4所示為本發(fā)明實(shí)施例三提供的一種數(shù)據(jù)存儲(chǔ)方法流程圖。 S401:客戶端根據(jù)分片算法將所述文件切分成多個(gè)數(shù)據(jù)塊,并計(jì)算出全 部數(shù)據(jù)塊的哈希值以及哈希值的N位前綴,然后將哈希值及哈希值的N位前 綴上傳至元數(shù)據(jù)服務(wù)器。某些實(shí)施方式中,也可以是元數(shù)據(jù)服務(wù)器從客戶端 提取哈希值及哈希值的N位前綴。
S402:元數(shù)據(jù)服務(wù)器根據(jù)哈希值的N位前綴建立路由表,在路由表中將 哈希值中N位前綴相同的數(shù)據(jù)塊指向同一個(gè)存儲(chǔ)節(jié)點(diǎn)。
S403:元數(shù)據(jù)服務(wù)器根據(jù)路由表將數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn)。 S404:元數(shù)據(jù)服務(wù)器將數(shù)據(jù)塊的路由表同步至客戶端。 在本實(shí)施例中步驟S402和步驟S403和實(shí)施例二中步驟S302及步驟S30 3相同,所不同的是,在本實(shí)施例步驟S401中完成文件切分以及計(jì)算數(shù)據(jù)塊 的哈希值以及哈希值前綴的是客戶端,客戶端在完成了切分和哈希計(jì)算后還 將哈希值及哈希值的N位前綴上傳至元數(shù)據(jù)服務(wù)器,作為本發(fā)明的一個(gè)實(shí)施 例,也可以是客戶端完成切分及哈希計(jì)算后通知元數(shù)據(jù)服務(wù)器來提取哈希值 及哈希值的N位前綴。另外在步驟S403之后,元數(shù)據(jù)服務(wù)器只是將路由表同 步至客戶端,這是由于客戶端在步驟S401中已經(jīng)保存了一份哈希值及哈希值 前綴的本地副本。
作為本發(fā)明的一個(gè)實(shí)施例,步驟S402中元數(shù)據(jù)服務(wù)器在建立路由表后, 還包括利用負(fù)載均衡算法計(jì)算路由表中存儲(chǔ)節(jié)點(diǎn)的負(fù)載,如果負(fù)載均衡,則 根據(jù)路由表將所述數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn);如果負(fù)載不均衡,則調(diào)整 路由表,再次利用負(fù)載均衡算法計(jì)算存儲(chǔ)節(jié)點(diǎn)負(fù)載。
實(shí)施例四本實(shí)施例是以一具體實(shí)例對(duì)上述實(shí)施例的存儲(chǔ)操作做進(jìn)一步說明,具體
的說是對(duì)實(shí)施例二的存儲(chǔ)操作做進(jìn)一步說明。如圖5所示為本發(fā)明實(shí)施例四 提供的一種分布式文件系統(tǒng)的網(wǎng)絡(luò)結(jié)構(gòu)圖。該系統(tǒng)中包括客戶端501、元數(shù)據(jù) 服務(wù)器502、第一存儲(chǔ)節(jié)點(diǎn)503、第二存儲(chǔ)節(jié)點(diǎn)504和第三存儲(chǔ)節(jié)點(diǎn)505。其 中,客戶端501和元數(shù)據(jù)服務(wù)器502相連,而第一存儲(chǔ)節(jié)點(diǎn)503、第二存儲(chǔ)節(jié) 點(diǎn)504和第三存儲(chǔ)節(jié)點(diǎn)505都分別和客戶端501和元數(shù)據(jù)服務(wù)器502相連。
客戶端501首先在本地完成一寫操作,創(chuàng)建一個(gè)完整的文件,假設(shè)該文 件的文件名為"Mazy.doc",其文件內(nèi)容為:"Mary had a little lamb lit tie lamb.."。然后客戶端501將該文件上傳至元數(shù)據(jù)服務(wù)器502以進(jìn)行數(shù) 據(jù)存儲(chǔ)。
元數(shù)據(jù)服務(wù)器502接收客戶端501上傳的文件,并對(duì)該文件按照分片算 法切分成若干數(shù)據(jù)塊,如圖6所示,上述文件被切分成九個(gè)數(shù)據(jù)塊"Mary", "had" , " a 1" , "ittl" , "e la" , "mb 1" , "ittl" , "e la", "mb..",該切分是以四個(gè)字符為一組進(jìn)行的切分(包括空格)。
然后,元數(shù)據(jù)服務(wù)器502對(duì)上述9個(gè)數(shù)據(jù)塊按照哈希算法計(jì)算出它們各 自的哈希值,假設(shè)上述9個(gè)數(shù)據(jù)塊的哈希值分別為1427, 3273, 7122, 148 3, 3218, 7152, 1483, 3218, 1422,其中,哈希值1483及3218為重復(fù)出現(xiàn) 的值,這表示它們所代表的數(shù)據(jù)塊也重復(fù)出現(xiàn)了。元數(shù)據(jù)服務(wù)器502再根據(jù) 上述哈希值取N位前綴來建立前綴樹和路由表,在本實(shí)施例中,我們N取2, 因而建立的前綴樹及路由表如圖6所示。其中,前綴樹包含了一個(gè)父節(jié)點(diǎn)和 三個(gè)子節(jié)點(diǎn),該三個(gè)子節(jié)點(diǎn)即分別代表第一存儲(chǔ)節(jié)點(diǎn)503、第二存儲(chǔ)節(jié)點(diǎn)504 和第三存儲(chǔ)節(jié)點(diǎn)505。從路由表中可以看出,本實(shí)施例中哈希值前綴為32的 數(shù)據(jù)塊指向了第三存儲(chǔ)節(jié)點(diǎn)505,哈希值前綴為71的數(shù)據(jù)塊指向了第二存儲(chǔ) 節(jié)點(diǎn)504,而哈希值前綴為14的數(shù)據(jù)塊則指向了第一存儲(chǔ)節(jié)點(diǎn)503。
當(dāng)元數(shù)據(jù)服務(wù)器502建立起上述前綴樹和路由表之后,啟動(dòng)負(fù)載均衡算 法計(jì)算每個(gè)存儲(chǔ)節(jié)點(diǎn)中的負(fù)載是否均衡,在本實(shí)施例中,負(fù)載均衡算法采用數(shù)據(jù)塊數(shù)量優(yōu)先法,通過計(jì)算可以看出,第一存儲(chǔ)節(jié)點(diǎn)503、第二存儲(chǔ)節(jié)點(diǎn)5 04和第三存儲(chǔ)節(jié)點(diǎn)505內(nèi)所存放的數(shù)據(jù)塊數(shù)量分別是3、 2、 2,因此此時(shí)各 個(gè)存儲(chǔ)節(jié)點(diǎn)的負(fù)載都是均衡的,此時(shí)元數(shù)據(jù)服務(wù)器502即可根據(jù)路由表將各 個(gè)數(shù)據(jù)塊按照它們的指向存入各個(gè)存儲(chǔ)節(jié)點(diǎn)之內(nèi),其數(shù)據(jù)存放結(jié)果如圖6所
當(dāng)然,假設(shè)上述第一存儲(chǔ)節(jié)點(diǎn)503、第二存儲(chǔ)節(jié)點(diǎn)504和第三存儲(chǔ)節(jié)點(diǎn)5 05內(nèi)存放的數(shù)據(jù)塊數(shù)量為4、 2、 1,即以前綴為14的數(shù)據(jù)塊有4個(gè),而前綴 為32的數(shù)據(jù)塊只有1個(gè)的時(shí)候,則元數(shù)據(jù)服務(wù)器502會(huì)對(duì)第一存儲(chǔ)節(jié)點(diǎn)503 內(nèi)的數(shù)據(jù)塊按照N=3或者N=4進(jìn)行再分類,并將分出的一部分?jǐn)?shù)據(jù)指向第三 存儲(chǔ)節(jié)點(diǎn)505,然后再相應(yīng)的修改前綴樹及路由表。
元數(shù)據(jù)服務(wù)器502在將上述數(shù)據(jù)存入存儲(chǔ)節(jié)點(diǎn)后,即將數(shù)據(jù)塊的哈希值、 哈希值的N位前綴及路由表同步至客戶端501。
實(shí)施例五
本實(shí)施例是在實(shí)施例四的基礎(chǔ)上,闡述當(dāng)分布式文件系統(tǒng)存儲(chǔ)節(jié)點(diǎn)發(fā)生 改變時(shí),本發(fā)明實(shí)施例如何做到使各個(gè)存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡。這里所說的存儲(chǔ) 節(jié)點(diǎn)發(fā)生改變包括新增、刪除存儲(chǔ)節(jié)點(diǎn)以及存儲(chǔ)節(jié)點(diǎn)發(fā)生故障。本實(shí)施例中 分布式文件系統(tǒng)的架構(gòu)和實(shí)施例四中相同,在此不再贅述。
在本實(shí)施例中,當(dāng)該分布式文件系統(tǒng)新增一第四存儲(chǔ)節(jié)點(diǎn)506時(shí),此時(shí) 系統(tǒng)內(nèi)的負(fù)載必然是不均衡的。元數(shù)據(jù)服務(wù)器502檢測(cè)到新增存儲(chǔ)節(jié)點(diǎn)后即 啟動(dòng)負(fù)載均衡算法(數(shù)據(jù)塊數(shù)量優(yōu)先法),發(fā)現(xiàn)系統(tǒng)內(nèi)負(fù)載并不均衡。元數(shù) 據(jù)服務(wù)器502査找出負(fù)載最高的第一存儲(chǔ)節(jié)點(diǎn)503,并對(duì)其內(nèi)的數(shù)據(jù)按照前綴 3位相同進(jìn)行再分類(即M取3),此時(shí),第一存儲(chǔ)節(jié)點(diǎn)503內(nèi)的數(shù)據(jù)塊被分 為兩類148*和142*,元數(shù)據(jù)服務(wù)器502將前綴為148指向了第一存儲(chǔ)節(jié)點(diǎn) 503,而將前綴為142的數(shù)塊指向了第四存儲(chǔ)節(jié)點(diǎn)506,并修改相應(yīng)的前綴樹 和路由表,修改后的前綴樹和路由表可以如圖7所示。
當(dāng)然,上述元數(shù)據(jù)服務(wù)器502也可以將前綴為142指向第一存儲(chǔ)節(jié)點(diǎn)503,而將前綴為148的數(shù)塊指向第四存儲(chǔ)節(jié)點(diǎn)506,這種指向的不同只是依附
于不同的軟件編程來完成的。
同樣的,當(dāng)本實(shí)施例中的分布式文件系統(tǒng)刪除第三存儲(chǔ)節(jié)點(diǎn)505、或者第 三存儲(chǔ)節(jié)點(diǎn)505發(fā)生故障時(shí),元數(shù)據(jù)服務(wù)器502也會(huì)啟動(dòng)負(fù)載均衡算法,在 本實(shí)施例中,元數(shù)據(jù)服務(wù)器會(huì)找出剩余存儲(chǔ)節(jié)點(diǎn)中負(fù)載最小的第二存儲(chǔ)節(jié)點(diǎn)5 04,并將原第三存儲(chǔ)節(jié)點(diǎn)505內(nèi)的數(shù)據(jù)塊(即前綴為32的數(shù)據(jù)塊)指向該第 二存儲(chǔ)節(jié)點(diǎn)504,然后修改相應(yīng)的前綴樹和路由表。
作為本發(fā)明的一個(gè)實(shí)施例,元數(shù)據(jù)服務(wù)器502在因增加、刪除存儲(chǔ)節(jié)點(diǎn) 或者存儲(chǔ)節(jié)點(diǎn)故障后修改的路由表,均會(huì)被實(shí)時(shí)地同步到客戶端501內(nèi)。
本發(fā)明實(shí)施例在分布式文件系統(tǒng)存儲(chǔ)節(jié)點(diǎn)發(fā)生改變時(shí),以負(fù)載均衡算法 動(dòng)態(tài)修改路由表,重新分配數(shù)據(jù)塊的存儲(chǔ),從而使得本發(fā)明實(shí)施例可以在分 布式文件系統(tǒng)結(jié)構(gòu)變動(dòng)時(shí)仍然保持存儲(chǔ)節(jié)點(diǎn)的負(fù)載均衡。
實(shí)施例六
如圖8所示為本發(fā)明實(shí)施例六提供的一種數(shù)據(jù)讀取方法流程圖。該方法 包括
S801:客戶端獲得待讀取數(shù)據(jù)塊的哈希值前綴和路由表。 S802'.根據(jù)所述哈希值前綴從所述路由表中獲得所述數(shù)據(jù)塊所在的存儲(chǔ)節(jié)點(diǎn)。
S803:向所述存儲(chǔ)節(jié)點(diǎn)發(fā)送請(qǐng)求以讀取所述待讀取數(shù)據(jù)塊。 獲得待讀取數(shù)據(jù)塊的哈希值前綴或后綴包括
將文件切分成多個(gè)數(shù)據(jù)塊,并計(jì)算出全部數(shù)據(jù)塊的哈希值前綴或后綴, 或者接收由元數(shù)據(jù)服務(wù)器將文件切分成多個(gè)數(shù)據(jù)塊并計(jì)算出的全部數(shù)據(jù)塊的 哈希值前綴或后綴;
獲得所述路由表包括接收由元數(shù)據(jù)服務(wù)器發(fā)送的所述路由表。 作為本發(fā)明的一個(gè)實(shí)施例,步驟S801中客戶端獲得待讀取數(shù)據(jù)塊的哈希 值前綴的途徑有兩種:一種是客戶端在本地將文件切分成多個(gè)數(shù)據(jù)塊,并計(jì)算出全部數(shù)據(jù)塊的哈希值前綴,而后保存的哈希值前綴的本地副本;另一種是 元數(shù)據(jù)服務(wù)器將文件切分成多個(gè)數(shù)據(jù)塊并計(jì)算出的全部數(shù)據(jù)塊的哈希值前 綴,而客戶端接收該哈希值前綴,在此,客戶端接收哈希值前綴又可以包括 客戶端主動(dòng)獲取和元數(shù)據(jù)服務(wù)器主動(dòng)同步給客戶端兩種方式。
作為本發(fā)明的一個(gè)實(shí)施例,客戶端查找存儲(chǔ)節(jié)點(diǎn)所需的路由表是由元數(shù) 據(jù)服務(wù)器完成存儲(chǔ)后同步至客戶端的,這樣可以節(jié)省査找所需的時(shí)間,當(dāng)然 本發(fā)明實(shí)施例也不排除客戶端在需要讀取文件的時(shí)候向元數(shù)據(jù)服務(wù)器請(qǐng)求返 回路由表的情況。
作為本發(fā)明的一個(gè)實(shí)施例,我們將上述數(shù)據(jù)讀取方法進(jìn)一步加以細(xì)分, 如圖9所示,該方法包括
S901:在客戶端輸入要査找的文件。
S902:客戶端在本地査找上述文件切分后的所有數(shù)據(jù)塊的哈希值和哈希 值的N位前綴。
S903:客戶端根據(jù)哈希值前綴在路由表中快速查找到數(shù)據(jù)塊存放的存儲(chǔ) 節(jié)點(diǎn)位置。
S904:客戶端向步驟S903中的存儲(chǔ)節(jié)點(diǎn)發(fā)送讀取數(shù)據(jù)塊的請(qǐng)求。 S905:存儲(chǔ)節(jié)點(diǎn)收到數(shù)據(jù)塊讀取請(qǐng)求后,根據(jù)和數(shù)據(jù)塊對(duì)應(yīng)的哈希值查 找出相應(yīng)的數(shù)據(jù)塊。
S906:存儲(chǔ)節(jié)點(diǎn)將查找到的數(shù)據(jù)塊反饋給客戶端。
為了更好的理解本發(fā)明實(shí)施例,以及更好地體現(xiàn)本發(fā)明實(shí)施例相對(duì)于現(xiàn) 有技術(shù)的優(yōu)勢(shì),下面我們對(duì)現(xiàn)有技術(shù)中文件的讀取過程予以介紹(如圖10所 示),該讀取過程包括
S1001:在客戶端輸入要査找的文件。
S1002:客戶端向元數(shù)據(jù)服務(wù)器發(fā)送查找上述文件的請(qǐng)求。
S1003:元數(shù)據(jù)服務(wù)器根據(jù)文件切分情況和數(shù)據(jù)塊的布局信息,在B+樹上 查找到數(shù)據(jù)塊所在的存儲(chǔ)節(jié)點(diǎn)。S1004:元數(shù)據(jù)服務(wù)器將布局信息發(fā)送給客戶端。 S1005:客戶端向指定的存儲(chǔ)節(jié)點(diǎn)發(fā)送査詢數(shù)據(jù)塊的請(qǐng)求。 S1006:存儲(chǔ)節(jié)點(diǎn)根據(jù)請(qǐng)求,査找數(shù)據(jù)塊。 S1007:存儲(chǔ)節(jié)點(diǎn)將査找的數(shù)據(jù)塊反饋給客戶端。
由上述可知,本發(fā)明實(shí)施例在數(shù)據(jù)讀取方面不但應(yīng)用了根據(jù)哈希值前綴 查找路由表的讀取方式,而且其讀取與數(shù)據(jù)塊相對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn)信息的過程 都是在客戶端完成的,該讀取過程完全和元數(shù)據(jù)服務(wù)器無關(guān),因此本發(fā)明實(shí) 施例在讀取速度上比現(xiàn)有技術(shù)有了大幅提高。另外,元數(shù)據(jù)服務(wù)器的査找速 度將決定著整個(gè)系統(tǒng)的査找速度,本發(fā)明實(shí)施例讀取數(shù)據(jù)的過程由于和元數(shù) 據(jù)服務(wù)器無關(guān),因此大大降低了元數(shù)據(jù)服務(wù)器的負(fù)荷。
實(shí)施例七
本實(shí)施例是以一具體實(shí)例對(duì)上述實(shí)施例六的數(shù)據(jù)讀取操作做進(jìn)一步說 明,在此我們以實(shí)施例二為基礎(chǔ)對(duì)本實(shí)施例加以說明。
我們?cè)诳蛻舳?01輸入需要査找的文件名Mary. doc。
客戶端501首先査找該文件對(duì)應(yīng)數(shù)據(jù)塊的全部哈希值及哈希值的2位前 綴,然后根據(jù)圖6所示的路由表查找到該文件的數(shù)據(jù)塊分別位于第一存儲(chǔ)節(jié) 點(diǎn)503、第二存儲(chǔ)節(jié)點(diǎn)504和第三存儲(chǔ)節(jié)點(diǎn)505內(nèi)。
客戶端501向第一存儲(chǔ)節(jié)點(diǎn)503、第二存儲(chǔ)節(jié)點(diǎn)504和第三存儲(chǔ)節(jié)點(diǎn)505 分別發(fā)送讀取相應(yīng)數(shù)據(jù)塊的請(qǐng)求。上述存儲(chǔ)節(jié)點(diǎn)在收到客戶端的讀取請(qǐng)求后, 根據(jù)哈希值和存儲(chǔ)節(jié)點(diǎn)中存儲(chǔ)地址的對(duì)應(yīng)關(guān)系,讀取出相應(yīng)的數(shù)據(jù)塊"Mary", "had" , " a 1" , "ittl" , "e la" , "mb 1" , "ittl" , "e la", "mb..",并將該些數(shù)據(jù)塊反饋給客戶端501。
客戶端501收到上述數(shù)據(jù)塊后,按照一定規(guī)則予以重組便完成了一次數(shù) 據(jù)讀取操作。
實(shí)施例八
如圖11所示為本發(fā)明實(shí)施例八提供的一種元數(shù)據(jù)服務(wù)器的結(jié)構(gòu)圖。該元數(shù)據(jù)服務(wù)器1100包括獲取單元1101、路由單元1102和數(shù)據(jù)存儲(chǔ)單 元1103,獲取單元1101、路由單元1102和數(shù)據(jù)存儲(chǔ)單元1103之間依次相連。
其中,獲取單元1101用于獲得數(shù)據(jù)塊的哈希值前綴。首先,為了得到文
件的數(shù)據(jù)塊,需將文件按照一定的分片算法切分成多個(gè)數(shù)據(jù)塊,然后再對(duì)全
部數(shù)據(jù)塊進(jìn)行哈希運(yùn)算以得到全部數(shù)據(jù)塊的哈希值和哈希值前綴。該文件切 分以及哈希運(yùn)算過程既可以是由元數(shù)據(jù)服務(wù)器1100自己完成的,也可以是由
客戶端完成后傳給元數(shù)據(jù)服務(wù)器1100的
當(dāng)文件切分以及哈希運(yùn)算過程是由元數(shù)據(jù)服務(wù)器1100自己完成的,在本 實(shí)施例中獲取單元1101還具有將將文件切分成多個(gè)數(shù)據(jù)塊,并計(jì)算出全部數(shù) 據(jù)塊哈希值前綴的功能。
當(dāng)文件切分以及哈希運(yùn)算過程是由戶端完成的,在本實(shí)施例中獲取單元1 101則只需具備和客戶端進(jìn)行通信的功能以接收客戶端上傳的哈希值和哈希 值前綴,或者主動(dòng)向客戶端調(diào)用該哈希值和哈希值前綴。
獲取單元1101將獲取到的數(shù)據(jù)塊的哈希值前綴傳給路由單元1102,路由 單元1102即根據(jù)數(shù)據(jù)塊的哈希值前綴建立路由表,以使哈希值前綴相同的數(shù) 據(jù)塊在路由表中指向同一個(gè)存儲(chǔ)節(jié)點(diǎn),該路由表的具體建立過程和方法可以 參見實(shí)施例一。
數(shù)據(jù)存儲(chǔ)單元1103用于根據(jù)路由表將數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn)。數(shù)
據(jù)塊存儲(chǔ)于存儲(chǔ)節(jié)點(diǎn)后,其哈希值和存儲(chǔ)節(jié)點(diǎn)內(nèi)的存儲(chǔ)地址存在一個(gè)對(duì)應(yīng)關(guān) 系,這為后續(xù)的數(shù)據(jù)讀取奠定了基礎(chǔ)。
本發(fā)明實(shí)施例的元數(shù)據(jù)服務(wù)器通過數(shù)據(jù)塊的哈希值前綴來建立路由表, 并在路由表中將哈希值前綴相同的數(shù)據(jù)塊指向了同一個(gè)存儲(chǔ)節(jié)點(diǎn),這種有序 的分配方式可以在很大程度上提高文件的査找及讀取速度。
實(shí)施例九
如圖12所示為本發(fā)明實(shí)施例九提供的一種元數(shù)據(jù)服務(wù)器的結(jié)構(gòu)圖。該元 數(shù)據(jù)服務(wù)器1200包括哈希運(yùn)算單元1201、獲取單元1202、路由單元1203、數(shù)據(jù)存儲(chǔ)單元1204和同步單元1205,其中,哈希運(yùn)算單元1201、獲取單元l 202、路由單元1203和數(shù)據(jù)存儲(chǔ)單元1204依次相連,而同步單元1205則分 別和哈希運(yùn)算單元1201及路由單元1203相連。
哈希運(yùn)算單元1201用于將文件切分成多個(gè)數(shù)據(jù)塊,并計(jì)算出全部數(shù)據(jù)塊 的哈希值和哈希值前綴。這里,哈希運(yùn)算單元1201切分的文件來自客戶端, 其可以是客戶端主動(dòng)上傳的,也可以是客戶端通知元數(shù)據(jù)服務(wù)器1200,告知 其需要存儲(chǔ),要求元數(shù)據(jù)服務(wù)器1200來主動(dòng)提取。
獲取單元1202用于獲得數(shù)據(jù)塊的哈希值和哈希值前綴,在本實(shí)施例中, 其獲得的哈希值和哈希值前綴即來自于哈希運(yùn)算單元1201,其再將獲得的哈 希值和哈希值前綴傳給路由單元1203。
路由單元1203即根據(jù)數(shù)據(jù)塊的哈希值前綴建立路由表,以使哈希值前綴 相同的數(shù)據(jù)塊在路由表中指向同一個(gè)存儲(chǔ)節(jié)點(diǎn)。
數(shù)據(jù)存儲(chǔ)單元1204用于根據(jù)路由表將數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn)。
同步單元1205用于根據(jù)路由表將數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn)后,將哈 希值、哈希值前綴以及路由表同步至客戶端。該步驟是為了讓客戶端擁有一 份哈希值、哈希值的前綴以及路由表的本地副本,以方便后續(xù)的數(shù)據(jù)査找和 讀取,另外當(dāng)客戶端擁有哈希值、哈希值前綴以及路由表的本地副本后,可 以為元數(shù)據(jù)服務(wù)器分擔(dān)數(shù)據(jù)査找的負(fù)荷,從而大大降低了元數(shù)據(jù)服務(wù)器的負(fù) 荷。
實(shí)施例十
如圖13所示為本發(fā)明實(shí)施例十提供的一種元數(shù)據(jù)服務(wù)器的結(jié)構(gòu)圖。該元 數(shù)據(jù)服務(wù)器1300包括獲取單元1301、路由單元1302、數(shù)據(jù)存儲(chǔ)單元1303和 同步單元1304,其中,獲取單元1301、路由單元1302和數(shù)據(jù)存儲(chǔ)單元1303 依次相連,而同步單元1304則和路由單元1302相連。
在本實(shí)施例中路由單元1302和數(shù)據(jù)存儲(chǔ)單元1303的作用和實(shí)施例八及 實(shí)施例九相類似,在此不再贅述。在本實(shí)施例中,獲取單元1301用于獲取由客戶端計(jì)算得到的數(shù)據(jù)塊的哈 希值和哈希值前綴,這就是說,本實(shí)施例文件的切分和計(jì)算是在客戶端完成 的。
和實(shí)施例九所不同的是,本實(shí)施中同步單元1304在根據(jù)路由表將數(shù)據(jù)塊 存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn)后,僅將路由表同步至客戶端,這是由于客戶端在將 文件切分和進(jìn)行哈希計(jì)算的時(shí)候已經(jīng)保存了一份哈希值及哈希值前綴的本地 副本,因此不再需要元數(shù)據(jù)服務(wù)器1300再反饋哈希值及哈希值前綴了 。
實(shí)施例十一
如圖14所示為本發(fā)明實(shí)施例十一提供的一種元數(shù)據(jù)服務(wù)器的結(jié)構(gòu)圖。該 元數(shù)據(jù)服務(wù)器1400包括獲取單元1401、路由單元1402、負(fù)載均衡單元1403、 數(shù)據(jù)存儲(chǔ)單元1404和同步單元1405,其中,獲取單元1401、路由單元1402、 負(fù)載均衡單元1403和數(shù)據(jù)存儲(chǔ)單元1404依次相連,而同步單元1405則和路 由單元1402相連。
在本實(shí)施例中獲取單元1401、路由單元1402、數(shù)據(jù)存儲(chǔ)單元1404和同 步單元1405的作用和實(shí)施例十中相類似,在此不再贅述。
和實(shí)施例十所不同的是,本實(shí)施例還包括負(fù)載均衡單元1403,其用于確 定路由表中各存儲(chǔ)節(jié)點(diǎn)的負(fù)載,若負(fù)載均衡,則根據(jù)路由表將數(shù)據(jù)塊存儲(chǔ)于 相應(yīng)的存儲(chǔ)節(jié)點(diǎn)若負(fù)載不均衡,則調(diào)整路由表。
確定各存儲(chǔ)節(jié)點(diǎn)負(fù)載時(shí),可以采用負(fù)載均衡算法,在本實(shí)施例中,負(fù)載 均衡算法包括數(shù)據(jù)塊數(shù)量優(yōu)先法、數(shù)據(jù)塊大小優(yōu)先法或權(quán)重法。其中,數(shù)據(jù) 塊數(shù)量優(yōu)先法根據(jù)比較每個(gè)存儲(chǔ)節(jié)點(diǎn)下的數(shù)據(jù)塊數(shù)量來確定該存儲(chǔ)節(jié)點(diǎn)負(fù) 載;數(shù)據(jù)塊大小優(yōu)先法根據(jù)比較每個(gè)存儲(chǔ)節(jié)點(diǎn)下的所有數(shù)據(jù)塊大小來確定該 存儲(chǔ)節(jié)點(diǎn)負(fù)載;權(quán)重法是事先定義好每個(gè)存儲(chǔ)節(jié)點(diǎn)下數(shù)據(jù)塊數(shù)量的權(quán)重和數(shù) 據(jù)塊大小的權(quán)重,然后確定該存儲(chǔ)節(jié)點(diǎn)負(fù)載。上述各種負(fù)載均衡算法可以根 據(jù)實(shí)際情況加以選用,或者將各種算法結(jié)合起來使用。
經(jīng)過上述負(fù)載均衡算法,如果存儲(chǔ)節(jié)點(diǎn)的負(fù)載均衡,則根據(jù)路由表中數(shù)據(jù)塊所指向的存儲(chǔ)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)存儲(chǔ);如果發(fā)現(xiàn)存儲(chǔ)節(jié)點(diǎn)的負(fù)載不均衡,則 找出負(fù)載較重的存儲(chǔ)節(jié)點(diǎn)(假設(shè)該些存儲(chǔ)節(jié)點(diǎn)上原先是按數(shù)據(jù)塊哈希值N位 前綴進(jìn)行存儲(chǔ)的,N的取值是根據(jù)實(shí)際的存儲(chǔ)節(jié)點(diǎn)數(shù)量來確定的, 一般在l一 8位不等),并將該存儲(chǔ)節(jié)點(diǎn)上的數(shù)據(jù)塊按照M位哈希值前綴進(jìn)一步進(jìn)行分類, 然后將其中一部分M位哈希值前綴相同的數(shù)據(jù)塊分配到其他負(fù)載較輕的存儲(chǔ) 節(jié)點(diǎn)之上,這里M為大于N的整數(shù)。比如,找出負(fù)載最重的存儲(chǔ)節(jié)點(diǎn),該存 儲(chǔ)節(jié)點(diǎn)上存放的是2位前綴相同的數(shù)據(jù)塊,然后進(jìn)一步根據(jù)3位前綴相同, 將上述數(shù)據(jù)塊加以分類并將其中一部分3位前綴相同的數(shù)據(jù)塊分配到其它存 儲(chǔ)節(jié)點(diǎn)之上。元數(shù)據(jù)服務(wù)器在完成上述負(fù)載調(diào)整后,會(huì)動(dòng)態(tài)修改相應(yīng)的前綴 樹和路由表,以記錄下相應(yīng)的改動(dòng)。
本發(fā)明實(shí)施例的元數(shù)據(jù)服務(wù)器在進(jìn)行數(shù)據(jù)存儲(chǔ)的同時(shí)還會(huì)對(duì)存儲(chǔ)節(jié)點(diǎn)的 負(fù)載情況進(jìn)行分析,并動(dòng)態(tài)修改路由表以均衡存儲(chǔ)節(jié)點(diǎn)的負(fù)載。
實(shí)施例十二
如圖15所示為本發(fā)明實(shí)施例十二提供的一種客戶端的結(jié)構(gòu)圖。該客戶端 1500包括獲取單元1501、數(shù)據(jù)讀取單元1502,它們之間相互連接。
獲取單元1501用于獲得待讀取數(shù)據(jù)塊的哈希值前綴和路由表。獲取單元 1501獲得待讀取數(shù)據(jù)塊的哈希值前綴的途徑有兩種
當(dāng)文件切分成數(shù)據(jù)塊,以及數(shù)據(jù)塊的哈希運(yùn)算是在客戶端1500本地完成 時(shí),客戶端1500會(huì)保留一份數(shù)據(jù)塊的哈希值和哈希值前綴的本地副本,獲取 單元1501從該本地副本中即可獲得待讀取數(shù)據(jù)塊的哈希值前綴。
當(dāng)文件切分成數(shù)據(jù)塊,以及數(shù)據(jù)塊的哈希運(yùn)算是在元數(shù)據(jù)服務(wù)器上完成 時(shí),獲取單元1501則接收元數(shù)據(jù)服務(wù)器傳來的待讀取數(shù)據(jù)塊的哈希值前綴。
數(shù)據(jù)讀取單元1502用于根據(jù)哈希值前綴從所述路由表中獲得待讀取數(shù)據(jù) 塊所在的存儲(chǔ)節(jié)點(diǎn),并向該存儲(chǔ)節(jié)點(diǎn)發(fā)送請(qǐng)求以讀取待讀取數(shù)據(jù)塊。由于路 由表中記錄著數(shù)據(jù)塊和存儲(chǔ)節(jié)點(diǎn)的對(duì)應(yīng)關(guān)系,所以可以很容易地獲取到存儲(chǔ) 節(jié)點(diǎn)。數(shù)據(jù)讀取單元1502發(fā)送的請(qǐng)求中包括待讀取數(shù)據(jù)塊的哈希值,哈希值的獲取方式可以采用上述哈希值前綴的獲取方式,此處不再贅述。當(dāng)存儲(chǔ)節(jié)
點(diǎn)收到數(shù)據(jù)讀取單元1502發(fā)送的請(qǐng)求后,會(huì)根據(jù)數(shù)據(jù)塊的哈希值和存儲(chǔ)節(jié)點(diǎn) 中存儲(chǔ)地址的對(duì)應(yīng)關(guān)系,提取出相應(yīng)的數(shù)據(jù)塊反饋給客戶端1500。
本發(fā)明實(shí)施例的客戶端可以根據(jù)數(shù)據(jù)塊的哈希值前綴在路由表中路由表 快速查找到存儲(chǔ)節(jié)點(diǎn)位置,因而大大提高了文件的査找和讀取速度。
實(shí)施例十三
如圖16所示為本發(fā)明實(shí)施例十三提供的一種客戶端的結(jié)構(gòu)圖。該客戶端 1600包括哈希運(yùn)算單元1601、獲取單元1602和數(shù)據(jù)讀取單元1603,獲取單 元1602分別和哈希運(yùn)算單元1601及數(shù)據(jù)讀取單元1603相連。
哈希運(yùn)算單元1601用于將文件切分成多個(gè)數(shù)據(jù)塊,并計(jì)算出全部數(shù)據(jù)塊 的哈希值和哈希值前綴。
獲取單元1602用于獲得待讀取數(shù)據(jù)塊的哈希值、哈希值前綴和路由表。 在本實(shí)施例中,其所獲得的待讀取數(shù)據(jù)塊的哈希值和哈希值前綴是哈希運(yùn)算 單元1601傳來的,而路由表則是元數(shù)據(jù)服務(wù)器傳來的。
數(shù)據(jù)讀取單元1603用于根據(jù)哈希值前綴從所述路由表中獲得待讀取數(shù)據(jù) 塊所在的存儲(chǔ)節(jié)點(diǎn),并向該存儲(chǔ)節(jié)點(diǎn)發(fā)送請(qǐng)求以讀取待讀取數(shù)據(jù)塊。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流 程,可以通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲(chǔ)于一 計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例 的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(Read-On ly Memory, ROM)或隨機(jī)存儲(chǔ)記憶體(Random Access Memory,畫)等。
以上所述的具體實(shí)施方式
,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行 了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施方式
而 己,并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi),所做 的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種數(shù)據(jù)存儲(chǔ)方法,其特征在于所述方法包括獲得數(shù)據(jù)塊的哈希值前綴或后綴;根據(jù)所述數(shù)據(jù)塊的哈希值前綴或后綴建立路由表,以使哈希值前綴或后綴相同的數(shù)據(jù)塊在所述路由表中指向同一個(gè)存儲(chǔ)節(jié)點(diǎn);根據(jù)所述路由表將所述數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn)。
2. 如權(quán)利要求l所述的數(shù)據(jù)存儲(chǔ)方法,其特征在于,根據(jù)所述數(shù)據(jù)塊的哈 希值前綴或后綴建立路由表后,所述方法還包括-確定所述路由表中各存儲(chǔ)節(jié)點(diǎn)的負(fù)載,若負(fù)載均衡,則根據(jù)所述路由表 將所述數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn);若負(fù)載不均衡,則調(diào)整路由表。
3. 如權(quán)利要求2所述的數(shù)據(jù)存儲(chǔ)方法,其特征在于,所述確定所述路由表 中各存儲(chǔ)節(jié)點(diǎn)的負(fù)載包括根據(jù)比較每個(gè)存儲(chǔ)節(jié)點(diǎn)下的數(shù)據(jù)塊數(shù)量來確定該存儲(chǔ)節(jié)點(diǎn)負(fù)載; 或者根據(jù)比較每個(gè)存儲(chǔ)節(jié)點(diǎn)下的所有數(shù)據(jù)塊大小來確定該存儲(chǔ)節(jié)點(diǎn)負(fù)載;或者事先定義好每個(gè)存儲(chǔ)節(jié)點(diǎn)下數(shù)據(jù)塊數(shù)量的權(quán)重和數(shù)據(jù)塊大小的權(quán) 重,然后確定該存儲(chǔ)節(jié)點(diǎn)負(fù)載。
4. 如權(quán)利要求2所述的數(shù)據(jù)存儲(chǔ)方法,其特征在于,所述調(diào)整路由表包括增加負(fù)載較重的存儲(chǔ)節(jié)點(diǎn)內(nèi)的數(shù)據(jù)塊的哈希值前綴或后綴的位數(shù),以形 成新的哈希值前綴或后綴,使所述新的哈希值前綴或后綴相同的數(shù)據(jù)塊在所 述路由表中指向其它負(fù)載較輕的存儲(chǔ)節(jié)點(diǎn)。
5. 如權(quán)利要求l所述的數(shù)據(jù)存儲(chǔ)方法,其特征在于,獲得數(shù)據(jù)塊的哈希值 前綴或后綴包括將文件切分成多個(gè)數(shù)據(jù)塊,并計(jì)算出全部數(shù)據(jù)塊的哈希值前綴或后綴; 或,獲得由客戶端將文件切分成多個(gè)數(shù)據(jù)塊后計(jì)算出的全部數(shù)據(jù)塊的哈希值 前綴或后綴。
6. 如權(quán)利要求l所述的數(shù)據(jù)存儲(chǔ)方法,其特征在于,所述根據(jù)所述路由表 將所述數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn)后,所述方法還包括將所述哈希值前綴或后綴以及路由表同步至客戶端;或?qū)⑺雎酚杀硗?步至客戶端。
7. 如權(quán)利要求1至6任一項(xiàng)所述的數(shù)據(jù)存儲(chǔ)方法,其特征在于,所述方法 還包括當(dāng)存儲(chǔ)節(jié)點(diǎn)發(fā)生改變時(shí),元數(shù)據(jù)服務(wù)器根據(jù)存儲(chǔ)節(jié)點(diǎn)的負(fù)載情況,對(duì)所 述路由表進(jìn)行動(dòng)態(tài)修改,重新根據(jù)所述路由表將所述數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存 儲(chǔ)節(jié)點(diǎn);所述改變包括新增、刪除或存儲(chǔ)節(jié)點(diǎn)故障。
8. —種數(shù)據(jù)讀取方法,其特征在于所述方法包括 獲得待讀取數(shù)據(jù)塊的哈希值前綴或后綴和路由表;根據(jù)所述哈希值前綴或后綴從所述路由表中獲得所述待讀取數(shù)據(jù)塊所在 的存儲(chǔ)節(jié)點(diǎn);向所述存儲(chǔ)節(jié)點(diǎn)發(fā)送請(qǐng)求以讀取所述待讀取數(shù)據(jù)塊。
9. 如權(quán)利要求8所述的數(shù)據(jù)讀取方法,其特征在于,獲得待讀取數(shù)據(jù)塊的 哈希值前綴或后綴包括將文件切分成多個(gè)數(shù)據(jù)塊,并計(jì)算出全部數(shù)據(jù)塊的哈希值前綴或后綴, 或者接收由元數(shù)據(jù)服務(wù)器將文件切分成多個(gè)數(shù)據(jù)塊后計(jì)算出的全部數(shù)據(jù)塊的 哈希值前綴或后綴;獲得所述路由表包括接收元數(shù)據(jù)服務(wù)器的所述路由表。
10. —種元數(shù)據(jù)服務(wù)器,其特征在于,所述元數(shù)據(jù)服務(wù)器包括 獲取單元,用于獲得數(shù)據(jù)塊的哈希值前綴或后綴;路由單元,用于根據(jù)所述數(shù)據(jù)塊的哈希值前綴或后綴建立路由表,以使 哈希值前綴或后綴相同的數(shù)據(jù)塊在所述路由表中指向同一個(gè)存儲(chǔ)節(jié)點(diǎn);數(shù)據(jù)存儲(chǔ)單元,用于根據(jù)所述路由表將所述數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn)。
11. 如權(quán)利要求10所述的元數(shù)據(jù)服務(wù)器,其特征在于,還包括哈希運(yùn)算單元,用于將文件切分成多個(gè)數(shù)據(jù)塊,并計(jì)算出全部數(shù)據(jù)塊哈希值前綴或后綴;同步單元,用于根據(jù)所述路由表將所述數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn)后, 將所述哈希值前綴或后綴以及路由表同步至客戶端。
12. 如權(quán)利要求10或11所述的元數(shù)據(jù)服務(wù)器,其特征在于,還包括負(fù)載均衡單元,用于確定所述路由表中各存儲(chǔ)節(jié)點(diǎn)的負(fù)載,若負(fù)載均衡, 則根據(jù)所述路由表將所述數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn);若負(fù)載不均衡,則 調(diào)整路由表。
13. —種客戶端,其特征在于,所述客戶端包括獲取單元,用于獲得待讀取數(shù)據(jù)塊的哈希值前綴或后綴和路由表; 數(shù)據(jù)讀取單元,用于根據(jù)所述哈希值前綴或后綴從所述路由表中獲得所述待讀取數(shù)據(jù)塊所在的存儲(chǔ)節(jié)點(diǎn),并向所述存儲(chǔ)節(jié)點(diǎn)發(fā)送請(qǐng)求以讀取所述待讀取數(shù)據(jù)塊。
14. 如權(quán)利要求13所述的客戶端,其特征在于,還包括哈希運(yùn)算單元,用于將文件切分成多個(gè)數(shù)據(jù)塊,并計(jì)算出全部數(shù)據(jù)塊的 哈希值前綴或后綴。
全文摘要
本發(fā)明實(shí)施例提供了一種數(shù)據(jù)存取方法和裝置。該存儲(chǔ)方法包括獲得數(shù)據(jù)塊的哈希值前綴或后綴;根據(jù)所述數(shù)據(jù)塊的哈希值前綴或后綴建立路由表,以使哈希值前綴或后綴相同的數(shù)據(jù)塊在所述路由表中指向同一個(gè)存儲(chǔ)節(jié)點(diǎn);根據(jù)所述路由表將所述數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn)。本發(fā)明實(shí)施例通過文件數(shù)據(jù)塊的哈希值前綴或后綴來建立路由表,并以路由表為依據(jù)將數(shù)據(jù)塊存儲(chǔ)于相應(yīng)的存儲(chǔ)節(jié)點(diǎn),這種有序的存儲(chǔ)方式可以在很大程度上提高文件的查找及讀取速度。
文檔編號(hào)G06F17/30GK101539950SQ200910138580
公開日2009年9月23日 申請(qǐng)日期2009年5月8日 優(yōu)先權(quán)日2009年5月8日
發(fā)明者海 文, 程菊生, 遠(yuǎn) 袁 申請(qǐng)人:成都市華為賽門鐵克科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1