專利名稱:分布式哈希表dht存儲(chǔ)系統(tǒng)的數(shù)據(jù)預(yù)取方法、節(jié)點(diǎn)和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息技術(shù)領(lǐng)域,特別涉及一種分布式哈希表DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)預(yù)取 方法、節(jié)點(diǎn)和系統(tǒng)。
背景技術(shù):
隨著網(wǎng)絡(luò)的發(fā)展,信息呈現(xiàn)爆炸性增長(zhǎng),基于分布式哈希表(DistributedHash Table ;DHT)技術(shù)的點(diǎn)對(duì)點(diǎn)(Pear to Pear ;P2P)等類型的存儲(chǔ)系統(tǒng)擁有很高的擴(kuò)展性,能 夠支持大規(guī)模的數(shù)據(jù)存儲(chǔ)。然而,在P2P等類型的存儲(chǔ)系統(tǒng)中,一段連續(xù)的數(shù)據(jù)被分割成若 干塊,存放在系統(tǒng)的若干節(jié)點(diǎn)中,從而導(dǎo)致客戶端從系統(tǒng)中讀取數(shù)據(jù)時(shí)無(wú)法連續(xù)讀取,進(jìn)而 導(dǎo)致數(shù)據(jù)讀取效率低下?,F(xiàn)有的DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)預(yù)取方法,客戶端根據(jù)應(yīng)用程序的訪問(wèn)規(guī)則判斷下一 次需要用到的數(shù)據(jù)內(nèi)容和存儲(chǔ)位置,由客戶端依次向各個(gè)相關(guān)存儲(chǔ)單元讀取數(shù)據(jù)存儲(chǔ)在客 戶端,以便上層應(yīng)用需要時(shí),不必再經(jīng)過(guò)網(wǎng)絡(luò)傳輸,而是直接從客戶端獲取數(shù)據(jù)來(lái)提高讀取 效率。然而,DHT存儲(chǔ)系統(tǒng)執(zhí)行數(shù)據(jù)預(yù)取操作必須依賴于客戶端,該預(yù)取方法只是提高了客 戶端到各個(gè)節(jié)點(diǎn)的通信效率,而系統(tǒng)讀取數(shù)據(jù)的效率沒(méi)有改變,即系統(tǒng)讀取數(shù)據(jù)的效率依 然低下。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供了一種分布式哈希表DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)預(yù)取方法、節(jié)點(diǎn)和系 統(tǒng),以解決現(xiàn)有技術(shù)DHT存儲(chǔ)系統(tǒng)的讀取效率低的問(wèn)題。本發(fā)明實(shí)施例提供一種分布式哈希表DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)預(yù)取方法,包括第一存儲(chǔ)節(jié)點(diǎn)接收客戶端發(fā)送的讀取請(qǐng)求,根據(jù)讀取的數(shù)據(jù)塊以及設(shè)定的預(yù)取數(shù) 據(jù)塊閾值,確定預(yù)取數(shù)據(jù)塊及其所在的第二存儲(chǔ)節(jié)點(diǎn),并向所述第二存儲(chǔ)節(jié)點(diǎn)發(fā)送預(yù)取請(qǐng) 求,所述第一存儲(chǔ)節(jié)點(diǎn)與所述第二存儲(chǔ)節(jié)點(diǎn)為相同或不同的存儲(chǔ)節(jié)點(diǎn),所述預(yù)取請(qǐng)求中包 括所述預(yù)取數(shù)據(jù)塊的標(biāo)識(shí)信息,所述標(biāo)識(shí)信息用于唯一標(biāo)識(shí)所述預(yù)取數(shù)據(jù)塊;所述第二存儲(chǔ)節(jié)點(diǎn)根據(jù)所述預(yù)取請(qǐng)求從磁盤(pán)中讀取所述預(yù)取數(shù)據(jù)塊,并將所述預(yù) 取數(shù)據(jù)塊存儲(chǔ)至本地緩存,以使客戶端從所述第二存儲(chǔ)節(jié)點(diǎn)的本地緩存中讀取所述預(yù)取數(shù) 據(jù)塊。本發(fā)明實(shí)施例還提供一種分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn),包括分析模塊,用于接收客戶端發(fā)送的讀取請(qǐng)求,根據(jù)讀取的數(shù)據(jù)塊以及設(shè)定的預(yù)取 數(shù)據(jù)塊閾值,確定預(yù)取數(shù)據(jù)塊及其所在的存儲(chǔ)節(jié)點(diǎn);通知模塊,用于向所述存儲(chǔ)節(jié)點(diǎn)發(fā)送預(yù)取請(qǐng)求,所述預(yù)取請(qǐng)求中包括所述預(yù)取數(shù) 據(jù)塊的標(biāo)識(shí)信息,所述標(biāo)識(shí)信息用于唯一標(biāo)識(shí)所述預(yù)取數(shù)據(jù)塊;預(yù)取模塊,用于根據(jù)所述預(yù)取請(qǐng)求從磁盤(pán)中讀取所述分析模塊確定的所述預(yù)取數(shù) 據(jù)塊,并將所述預(yù)取數(shù)據(jù)塊存儲(chǔ)至本地緩存,以使客戶端從所述本地緩存中讀取所述預(yù)取 數(shù)據(jù)塊。
本發(fā)明還提供一種分布式哈希表DHT存儲(chǔ)系統(tǒng),包括多個(gè)本發(fā)明實(shí)施例提供的存 儲(chǔ)節(jié)點(diǎn)。本發(fā)明還提供一種分布式哈希表DHT存儲(chǔ)系統(tǒng),包括第一存儲(chǔ)節(jié)點(diǎn)和第二存儲(chǔ) 節(jié)點(diǎn)。所述第一存儲(chǔ)節(jié)點(diǎn),用于接收客戶端發(fā)送的讀取請(qǐng)求,根據(jù)讀取的數(shù)據(jù)塊以及設(shè) 定的預(yù)取數(shù)據(jù)塊閾值,確定預(yù)取數(shù)據(jù)塊及其所在的第二存儲(chǔ)節(jié)點(diǎn),并向所述第二存儲(chǔ)節(jié)點(diǎn) 發(fā)送預(yù)取請(qǐng)求,所述第一存儲(chǔ)節(jié)點(diǎn)與所述第二存儲(chǔ)節(jié)點(diǎn)為相同或不同的存儲(chǔ)節(jié)點(diǎn),所述預(yù) 取請(qǐng)求中包括所述預(yù)取數(shù)據(jù)塊的標(biāo)識(shí)信息,所述標(biāo)識(shí)信息用于唯一標(biāo)識(shí)所述預(yù)取數(shù)據(jù)塊;所述第二存儲(chǔ)節(jié)點(diǎn),用于根據(jù)所述第一存儲(chǔ)節(jié)點(diǎn)發(fā)送的預(yù)取請(qǐng)求從磁盤(pán)中讀取所 述預(yù)取數(shù)據(jù)塊,并將所述預(yù)取數(shù)據(jù)塊存儲(chǔ)至本地緩存,以使客戶端從所述第二存儲(chǔ)節(jié)點(diǎn)的 本地緩存中讀取所述預(yù)取數(shù)據(jù)塊。本發(fā)明實(shí)施例提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)預(yù)取方法、節(jié)點(diǎn)和系統(tǒng), 可以根據(jù)讀取的數(shù)據(jù)塊以及設(shè)定的預(yù)取數(shù)據(jù)塊閾值確定預(yù)取數(shù)據(jù)塊,然后將磁盤(pán)中的預(yù)取 數(shù)據(jù)塊加載到緩存中,當(dāng)接收到客戶端的讀取請(qǐng)求后,可以直接緩存中讀取預(yù)取數(shù)據(jù)塊,從 而提高系統(tǒng)中各存儲(chǔ)節(jié)點(diǎn)的數(shù)據(jù)訪問(wèn)效率,節(jié)約系統(tǒng)資源。
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā) 明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)預(yù)取方法第一實(shí)施例的流 程圖;圖2為分布式哈希表DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)示意圖;圖3為圖1所示分布式哈希表DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)預(yù)取方法各存儲(chǔ)節(jié)點(diǎn)在執(zhí)行預(yù) 取方法的交互流程圖;圖4為本發(fā)明提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)預(yù)取方法第二實(shí)施例的流 程圖;圖5為本發(fā)明提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn)第一實(shí)施例的結(jié)構(gòu)示 意圖;圖6為本發(fā)明提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn)第二實(shí)施例的結(jié)構(gòu)示 意圖;圖7為本發(fā)明實(shí)施例提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn)處理讀取請(qǐng)求 的主要處理過(guò)程;圖8為本發(fā)明實(shí)施例提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn)接收到預(yù)取請(qǐng) 求后進(jìn)行的主要處理過(guò)程。
具體實(shí)施例方式為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是 本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員 在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。圖1為本發(fā)明提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)預(yù)取方法第一實(shí)施例的流 程圖,如圖1所示,該方法包括S101、第一存儲(chǔ)節(jié)點(diǎn)接收客戶端發(fā)送的讀取請(qǐng)求;S102、第一存儲(chǔ)節(jié)點(diǎn)根據(jù)讀取的數(shù)據(jù)塊以及設(shè)定的預(yù)取數(shù)據(jù)塊閾值,確定預(yù)取數(shù) 據(jù)塊及其所在的第二存儲(chǔ)節(jié)點(diǎn),并向所述第二存儲(chǔ)節(jié)點(diǎn)發(fā)送預(yù)取請(qǐng)求,所述第一存儲(chǔ)節(jié)點(diǎn) 與所述第二存儲(chǔ)節(jié)點(diǎn)為相同或不同的存儲(chǔ)節(jié)點(diǎn),所述預(yù)取請(qǐng)求中包括所述預(yù)取數(shù)據(jù)塊的標(biāo) 識(shí)信息,所述標(biāo)識(shí)信息用于唯一標(biāo)識(shí)所述預(yù)取數(shù)據(jù)塊;S103、所述第二存儲(chǔ)節(jié)點(diǎn)根據(jù)所述預(yù)取請(qǐng)求從磁盤(pán)中讀取所述預(yù)取數(shù)據(jù)塊,并將 所述預(yù)取數(shù)據(jù)塊存儲(chǔ)至本地緩存,以使客戶端從所述第二存儲(chǔ)節(jié)點(diǎn)的本地緩存中讀取所述 預(yù)取數(shù)據(jù)塊。本發(fā)明提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)預(yù)取方法,適用于分布式哈希表 DHT存儲(chǔ)系統(tǒng),這類存儲(chǔ)系統(tǒng)以DHT方式進(jìn)行數(shù)據(jù)存儲(chǔ),該存儲(chǔ)系統(tǒng)在存儲(chǔ)數(shù)據(jù)時(shí),通常將 一段連續(xù)的數(shù)據(jù)(即原始數(shù)據(jù)),分割成若干塊,存放在系統(tǒng)的若干存儲(chǔ)節(jié)點(diǎn)中。例如圖
2所示的DHT存儲(chǔ)系統(tǒng)中,分割成的數(shù)據(jù)塊D1、D2......D8對(duì)應(yīng)一段連續(xù)的原始數(shù)據(jù),該原
始數(shù)據(jù)分散存儲(chǔ)在存儲(chǔ)節(jié)點(diǎn)m、N2、N3和N4的磁盤(pán)上。每個(gè)數(shù)據(jù)塊在存儲(chǔ)系統(tǒng)中的數(shù)據(jù)訪 問(wèn)形式通常可以為get (key,&valUe),其中,key為數(shù)據(jù)塊在存儲(chǔ)系統(tǒng)中的唯一標(biāo)識(shí),value 為數(shù)據(jù)塊的數(shù)據(jù)內(nèi)容。存儲(chǔ)數(shù)據(jù)的磁盤(pán)可以是普通的電子集成驅(qū)動(dòng)器antegrated Drive Electronics ;IDE) 5 ^ Φ Τι^^Ι ^Ρ ^ (SerialAdvanced Technology Attachment ; SATA)硬盤(pán)或固態(tài)硬盤(pán)等。SlOl和S102的執(zhí)行主體第一存儲(chǔ)節(jié)點(diǎn),可以是DHT存儲(chǔ)系統(tǒng)中的任一存儲(chǔ)節(jié)點(diǎn), 該第一存儲(chǔ)節(jié)點(diǎn)在接收到客戶端發(fā)出的讀取某數(shù)據(jù)塊Dl的讀取請(qǐng)求后,便可以進(jìn)行預(yù)取 操作。具體的,由于原始數(shù)據(jù)中的數(shù)據(jù)塊是順序編號(hào)的,具體能夠從數(shù)據(jù)塊的key值上體現(xiàn) 出來(lái),因此,第一存儲(chǔ)節(jié)點(diǎn)可以根據(jù)讀取的數(shù)據(jù)塊Dl的key值來(lái)確定Dl后面需要讀取的數(shù) 據(jù)塊的key值,還可以進(jìn)一步對(duì)需要讀取的數(shù)據(jù)塊的key值進(jìn)行DHT運(yùn)算,獲取這些數(shù)據(jù)塊 所在的第二存儲(chǔ)節(jié)點(diǎn),并向第二存儲(chǔ)節(jié)點(diǎn)發(fā)出預(yù)取請(qǐng)求,該預(yù)取請(qǐng)求中包括預(yù)取數(shù)據(jù)塊的 標(biāo)識(shí)信息(key值),以使第二存儲(chǔ)節(jié)點(diǎn)根據(jù)該標(biāo)識(shí)信息對(duì)Dl后面需要讀取的數(shù)據(jù)塊進(jìn)行預(yù) 取操作。需要說(shuō)明的是,第二存儲(chǔ)節(jié)點(diǎn)并不是指系統(tǒng)中的某一個(gè)節(jié)點(diǎn),而可能是系統(tǒng)中的 多個(gè)存儲(chǔ)節(jié)點(diǎn)。這是由于確定的預(yù)取數(shù)據(jù)塊可能為多個(gè),而這些預(yù)取數(shù)據(jù)塊可能分散存儲(chǔ) 在不同的第二存儲(chǔ)節(jié)點(diǎn)上,因此,在確定預(yù)取數(shù)據(jù)塊后,每個(gè)第二存儲(chǔ)節(jié)點(diǎn)可以將需要預(yù)取 的數(shù)據(jù)塊從磁盤(pán)中讀取,然后存儲(chǔ)至本地緩存中,即將磁盤(pán)中的預(yù)取數(shù)據(jù)塊加載到本地緩 存中,以便于客戶端直接從本地緩存中讀取數(shù)據(jù)塊。另外,第二存儲(chǔ)節(jié)點(diǎn)和第一存儲(chǔ)節(jié)點(diǎn)可 能是同一存儲(chǔ)節(jié)點(diǎn),即第一存儲(chǔ)節(jié)點(diǎn)確定的至少一個(gè)預(yù)取數(shù)據(jù)塊可能位于本地存儲(chǔ)單元, 這種情況下,第一存儲(chǔ)節(jié)點(diǎn)根據(jù)預(yù)取請(qǐng)求中的預(yù)取數(shù)據(jù)塊標(biāo)識(shí)信息,從本地磁盤(pán)中讀取預(yù) 取數(shù)據(jù)塊存儲(chǔ)至本地緩存。由于進(jìn)行預(yù)取操作實(shí)際上節(jié)省的是每個(gè)數(shù)據(jù)塊的網(wǎng)絡(luò)傳輸時(shí)間,并且由于各存儲(chǔ)節(jié)點(diǎn)中的緩存容量的限制,以及考慮到如果緩存中存儲(chǔ)過(guò)多的預(yù)取數(shù)據(jù)塊,則會(huì)導(dǎo)致讀取 速度降低等因素,因此,通常要設(shè)定一個(gè)預(yù)取數(shù)據(jù)塊閾值,通過(guò)該預(yù)取數(shù)據(jù)塊閾值限定預(yù)取 數(shù)據(jù)塊的個(gè)數(shù)。該預(yù)取數(shù)據(jù)塊閾值通??梢源笥诘扔趩蝹€(gè)數(shù)據(jù)塊的讀取時(shí)間與單個(gè)數(shù)據(jù) 塊的網(wǎng)絡(luò)傳輸時(shí)間的比值。另外,該預(yù)取數(shù)據(jù)塊閾值還可以根據(jù)前述的存儲(chǔ)節(jié)點(diǎn)中的緩存 容量,以及各存儲(chǔ)節(jié)點(diǎn)中其他硬件,例如磁盤(pán)、中央處理器(Central Processing Unit ; CPU)、主板以及網(wǎng)卡等硬件設(shè)備的情況來(lái)確定。當(dāng)系統(tǒng)中的各存儲(chǔ)節(jié)點(diǎn)接收到客戶端發(fā)出的讀取請(qǐng)求后,首先從緩存中查找是否 存在該需要讀取的數(shù)據(jù)塊,即需要讀取的數(shù)據(jù)塊是否已經(jīng)預(yù)取。如果緩存中存在需要讀取 的數(shù)據(jù)塊,則存儲(chǔ)節(jié)點(diǎn)可以直接從緩存中讀取該數(shù)據(jù)塊,并向客戶端返回該數(shù)據(jù)塊;如果緩 存中不存在需要讀取的數(shù)據(jù)塊,則說(shuō)明該數(shù)據(jù)塊還沒(méi)有預(yù)取,則存儲(chǔ)節(jié)點(diǎn)可以從磁盤(pán)中讀 取該數(shù)據(jù)塊。讀取該數(shù)據(jù)塊的同時(shí),或讀取該數(shù)據(jù)塊之后,各存儲(chǔ)節(jié)點(diǎn)又可以觸發(fā)新的預(yù)取 過(guò)程,如前所述,不再贅述。本實(shí)施例提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)預(yù)取方法,可以根據(jù)讀取的數(shù) 據(jù)塊以及設(shè)定的預(yù)取數(shù)據(jù)塊閾值確定預(yù)取數(shù)據(jù)塊,然后將磁盤(pán)中的預(yù)取數(shù)據(jù)塊加載到緩存 中,當(dāng)接收到客戶端的讀取請(qǐng)求后,可以直接緩存中讀取預(yù)取數(shù)據(jù)塊,從而提高系統(tǒng)中各存 儲(chǔ)節(jié)點(diǎn)的數(shù)據(jù)訪問(wèn)效率。為了更清楚的都對(duì)本發(fā)明提供的數(shù)據(jù)預(yù)取方法第一實(shí)施例進(jìn)行說(shuō)明,圖3提供了 存儲(chǔ)系統(tǒng)中各存儲(chǔ)節(jié)點(diǎn)在執(zhí)行預(yù)取方法的交互流程圖,如圖3所示,本實(shí)施例以客戶端向 存儲(chǔ)節(jié)點(diǎn)A發(fā)送讀取數(shù)據(jù)塊Dn的讀取請(qǐng)求,存儲(chǔ)節(jié)點(diǎn)A觸發(fā)預(yù)取操作為例進(jìn)行說(shuō)明,該方 法包括S201、客戶端根據(jù)Dn的key找到Dn的存儲(chǔ)節(jié)點(diǎn)A,向存儲(chǔ)節(jié)點(diǎn)A發(fā)出讀取請(qǐng)求;其中,客戶端根據(jù)數(shù)據(jù)塊的Key找到存儲(chǔ)節(jié)點(diǎn)節(jié)點(diǎn)的方法可以采用通用的DHT算 法,這里不詳細(xì)描述。客戶端向存儲(chǔ)節(jié)點(diǎn)A發(fā)起數(shù)據(jù)塊讀取操作可以采取多種方式,例如客戶端可以 使用DHT存儲(chǔ)系統(tǒng)提供的存儲(chǔ)接口 get (key,&value)向節(jié)點(diǎn)A發(fā)起進(jìn)行數(shù)據(jù)讀取的操作; 還可以根據(jù)key的范圍等其他方式發(fā)起數(shù)據(jù)讀取操作,這里不一一列舉。S202、存儲(chǔ)節(jié)點(diǎn)A在緩存中查找數(shù)據(jù)塊Dn,如果緩存中存在,則直接存儲(chǔ)節(jié)點(diǎn)A直 接從緩存中提取Dn返回給客戶端;S203、如果緩存中不存在Dn,則從磁盤(pán)中讀取Dn返回給客戶端。S204、存儲(chǔ)節(jié)點(diǎn)A啟動(dòng)預(yù)取操作過(guò)程,為了便于描述,本實(shí)施例中假設(shè)存儲(chǔ)節(jié)點(diǎn)A 根據(jù)Dn和設(shè)定的預(yù)取數(shù)據(jù)塊閾值確定需要預(yù)取兩個(gè)數(shù)據(jù)塊,分別為Dn+1和Dn+2 (即為原始數(shù) 據(jù)中與Dn編號(hào)連續(xù)的后兩個(gè)數(shù)據(jù)塊),根據(jù)DHT算法獲知Dn+1和Dn+2分別保存于存儲(chǔ)節(jié)點(diǎn)X 和存儲(chǔ)節(jié)點(diǎn)Y,則執(zhí)行S205和S206 ;S205、存儲(chǔ)節(jié)點(diǎn)A向存儲(chǔ)節(jié)點(diǎn)X發(fā)出數(shù)據(jù)塊Dn+1的預(yù)取請(qǐng)求。S206、存儲(chǔ)節(jié)點(diǎn)A向存儲(chǔ)節(jié)點(diǎn)Y發(fā)出數(shù)據(jù)塊Dn+2的預(yù)取請(qǐng)求。其中,S205和S206不分先后,可以同步執(zhí)行,也可以異步執(zhí)行。S207、存儲(chǔ)節(jié)點(diǎn)X接收到數(shù)據(jù)塊Dn+1的預(yù)取請(qǐng)求后進(jìn)行處理,將該數(shù)據(jù)塊從磁盤(pán)加 載到緩存中。S208、存儲(chǔ)節(jié)點(diǎn)Y接收到數(shù)據(jù)塊Dn+2的預(yù)取請(qǐng)求后進(jìn)行處理,將該數(shù)據(jù)塊從磁盤(pán)加載到緩存中。S207和S208中,存儲(chǔ)節(jié)點(diǎn)X和存儲(chǔ)節(jié)點(diǎn)Y在接收到存儲(chǔ)節(jié)點(diǎn)A發(fā)送的預(yù)取請(qǐng)求 后,可以直接從磁盤(pán)中加載對(duì)應(yīng)數(shù)據(jù)塊到緩存中。但為了提高系統(tǒng)的預(yù)取準(zhǔn)確率,接收到預(yù)取請(qǐng)求的存儲(chǔ)節(jié)點(diǎn)還可以進(jìn)一步判斷是 否需要進(jìn)行預(yù)取,判斷是否進(jìn)行預(yù)取的操作將在下面的實(shí)施例中描述。S209、客戶端需要讀取數(shù)據(jù)塊Dn+1時(shí),其根據(jù)Dn+1的key找到存儲(chǔ)節(jié)點(diǎn)X,并使用 DHT存儲(chǔ)系統(tǒng)提供的存儲(chǔ)接口 get(key,&valUe)向存儲(chǔ)節(jié)點(diǎn)X發(fā)起進(jìn)行數(shù)據(jù)塊讀取的操作。S210、存儲(chǔ)節(jié)點(diǎn)X接收到讀取數(shù)據(jù)塊Dn+1的請(qǐng)求后,查找到緩存中已存在Dn+1,則直 接將緩存的Dlri返回給客戶端。S211、客戶端需要讀取數(shù)據(jù)塊Dn+2時(shí),其根據(jù)Dn+2的key找到存儲(chǔ)節(jié)點(diǎn)Y,并使用 DHT存儲(chǔ)系統(tǒng)提供的存儲(chǔ)接口 get(key,&valUe)向存儲(chǔ)節(jié)點(diǎn)Y發(fā)起進(jìn)行數(shù)據(jù)塊讀取的操作。S212、存儲(chǔ)節(jié)點(diǎn)Y接收到讀取數(shù)據(jù)塊Dn+2的請(qǐng)求后,查找到緩存中已存在Dn+2,則直 接將緩存的Dm返回給客戶端。圖4為本發(fā)明提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)預(yù)取方法第二實(shí)施例的流 程圖,如圖4所示,本實(shí)施例提供的DHT系統(tǒng)的數(shù)據(jù)預(yù)取方法,存儲(chǔ)節(jié)點(diǎn)在接收到預(yù)取請(qǐng)求 時(shí),需要進(jìn)一步判斷是否需要進(jìn)行預(yù)取操作,以提高系統(tǒng)的預(yù)取準(zhǔn)確率。具體是,每個(gè)存儲(chǔ) 節(jié)點(diǎn)在進(jìn)行數(shù)據(jù)塊讀取操作后,將讀取的數(shù)據(jù)塊以及對(duì)應(yīng)的時(shí)間戳在讀取記錄表中進(jìn)行記 錄,該時(shí)間戳用于標(biāo)識(shí)數(shù)據(jù)塊的讀取時(shí)間。當(dāng)存儲(chǔ)節(jié)點(diǎn)接收到預(yù)取請(qǐng)求時(shí),根據(jù)讀取記錄表 中已讀取的數(shù)據(jù)塊個(gè)數(shù)以讀取時(shí)間最近的時(shí)間戳判斷是否進(jìn)行預(yù)取操作。如果已讀取的數(shù) 據(jù)塊個(gè)數(shù)大于或等于設(shè)定的已讀取數(shù)據(jù)塊閾值,且本次預(yù)讀時(shí)間與所述時(shí)間戳顯示的最近 的讀取時(shí)間之差小于等于設(shè)定時(shí)間,則進(jìn)行預(yù)取操作。設(shè)置讀取記錄中的已讀取數(shù)據(jù)塊閾值是因?yàn)?,如果客戶端僅讀取了很少的幾個(gè)數(shù) 據(jù)塊,并不能說(shuō)明客戶端一定是順序讀取原始數(shù)據(jù)中的數(shù)據(jù)塊,則可能會(huì)導(dǎo)致順序讀判斷 不準(zhǔn)確,導(dǎo)致不必要的預(yù)取;但已讀取數(shù)據(jù)塊閾值亦不能設(shè)置的過(guò)大,這樣可能導(dǎo)致前期預(yù) 取效率的低下,并且增加了讀取記錄傳遞與保存的系統(tǒng)損耗。因此,已讀取數(shù)據(jù)塊閾值可以 根據(jù)原始數(shù)據(jù)中的數(shù)據(jù)塊量以及系統(tǒng)硬件配置等情況來(lái)設(shè)置。進(jìn)一步的,本次預(yù)讀時(shí)間與時(shí)間戳顯示的最近的讀取時(shí)間之差需要小于等于一定 的時(shí)間,才能表示預(yù)取數(shù)據(jù)塊與已讀取數(shù)據(jù)塊對(duì)應(yīng)的都是客戶端的本次原始數(shù)據(jù)讀取操 作,而不是客戶端之前的原始數(shù)據(jù)讀取操作。本實(shí)施例給出了客戶端觸發(fā)D1-D4的讀取過(guò)程,假設(shè)設(shè)定的讀取記錄中的已讀取 數(shù)據(jù)塊閾值為3時(shí)進(jìn)行預(yù)取操作,該方法具體包括S301、客戶端向存儲(chǔ)節(jié)點(diǎn)A請(qǐng)求讀取數(shù)據(jù)塊D1 ;S302、假設(shè)D1為客戶端讀取的第一個(gè)數(shù)據(jù)塊,存儲(chǔ)節(jié)點(diǎn)A從磁盤(pán)中讀取數(shù)據(jù)塊D1 并返回給客戶端;S303、存儲(chǔ)節(jié)點(diǎn)A在讀取記錄中記錄〈DA (包括D1的時(shí)間戳),該讀取記錄表對(duì)應(yīng) 同一段原始數(shù)據(jù);S304、存儲(chǔ)節(jié)點(diǎn)A分析出數(shù)據(jù)塊D1的后繼為D2,并計(jì)算出存儲(chǔ)D2的存儲(chǔ)節(jié)點(diǎn)B,向 存儲(chǔ)節(jié)點(diǎn)B發(fā)出預(yù)取A的請(qǐng)求,并攜帶塊讀取記錄<Di> ;其中,存儲(chǔ)節(jié)點(diǎn)A分析&的過(guò)程可以為根據(jù)設(shè)定的預(yù)取數(shù)據(jù)塊閾值,確定預(yù)取數(shù)據(jù)塊的個(gè)數(shù);由于讀取的數(shù)據(jù)塊與預(yù)取數(shù)據(jù)塊所屬同一原始數(shù)據(jù),因此具有相同前綴,且讀 取的數(shù)據(jù)塊與預(yù)取數(shù)據(jù)塊在原始數(shù)據(jù)中為順序編號(hào),其中,前綴為數(shù)據(jù)塊所屬原始數(shù)據(jù)的 唯一標(biāo)識(shí),編號(hào)標(biāo)識(shí)數(shù)據(jù)在原始數(shù)據(jù)中的位置。因此,存儲(chǔ)節(jié)點(diǎn)A可以根據(jù)讀取的數(shù)據(jù)塊D1 的前綴和編號(hào)確定預(yù)取數(shù)據(jù)塊的前綴和編號(hào),再根據(jù)預(yù)取數(shù)據(jù)塊的前綴和編號(hào)對(duì)預(yù)取數(shù)據(jù) 塊進(jìn)行哈希運(yùn)算,確定預(yù)取數(shù)據(jù)塊的存儲(chǔ)節(jié)點(diǎn)。S305、存儲(chǔ)節(jié)點(diǎn)B接收到存儲(chǔ)節(jié)點(diǎn)A的預(yù)取請(qǐng)求后,查看讀取記錄中的已讀取數(shù)據(jù) 塊僅為D1,則存儲(chǔ)節(jié)點(diǎn)B僅保存該讀取記錄,但不執(zhí)行預(yù)取操作;S306、客戶端向存儲(chǔ)節(jié)點(diǎn)B請(qǐng)求讀取數(shù)據(jù)塊D2 ;S307、由于存儲(chǔ)節(jié)點(diǎn)B并沒(méi)有對(duì)仏進(jìn)行預(yù)取,因此,存儲(chǔ)節(jié)點(diǎn)B從磁盤(pán)中讀取數(shù)據(jù) 塊込并返回給客戶端;S308、存儲(chǔ)節(jié)點(diǎn)B更新讀取記錄為<D1; D2> (包括D2的時(shí)間戳);S309、存儲(chǔ)節(jié)點(diǎn)B分析出數(shù)據(jù)塊D2的后繼為D3,并計(jì)算出D3的位置,向D3所在存 儲(chǔ)節(jié)點(diǎn)C發(fā)出預(yù)取D3的請(qǐng)求,并攜帶塊歷史記錄<D1; D2> ;S310、存儲(chǔ)節(jié)點(diǎn)C接收到存儲(chǔ)節(jié)點(diǎn)B的預(yù)取請(qǐng)求后,查看讀取記錄中包括2個(gè)已讀 取數(shù)據(jù)塊,小于的已讀取數(shù)據(jù)塊閾值3,則存儲(chǔ)節(jié)點(diǎn)C僅保存該讀取記錄,不執(zhí)行預(yù)取操作;S311、客戶端向存儲(chǔ)節(jié)點(diǎn)C請(qǐng)求讀取數(shù)據(jù)塊D3 ;S312、由于存儲(chǔ)節(jié)點(diǎn)C并沒(méi)有對(duì)D3進(jìn)行預(yù)取,因此,存儲(chǔ)節(jié)點(diǎn)C從磁盤(pán)中讀取數(shù)據(jù) 塊1)3并返回給客戶端;S313、存儲(chǔ)節(jié)點(diǎn)C更新讀取記錄為<D1; D2, D3> (包括D3的時(shí)間戳);S314、存儲(chǔ)節(jié)點(diǎn)C分析出數(shù)據(jù)塊D3的后繼為D4,并計(jì)算出D4的位置,向D4所在節(jié) 點(diǎn)存儲(chǔ)D發(fā)出預(yù)取D4的請(qǐng)求,并攜帶塊讀取記錄<D1; D2, D3> ;S315、存儲(chǔ)節(jié)點(diǎn)D接收到存儲(chǔ)節(jié)點(diǎn)C的預(yù)取請(qǐng)求后,查看讀取記錄中包括3個(gè)已讀 取數(shù)據(jù)塊,等于的已讀取數(shù)據(jù)塊閾值3,則存儲(chǔ)節(jié)點(diǎn)D進(jìn)一步判斷本次預(yù)讀時(shí)間與時(shí)間戳顯 示的最近的讀取時(shí)間之差是否小于等于設(shè)定時(shí)間,這里假定小于等于設(shè)定時(shí)間,則存儲(chǔ)節(jié) 點(diǎn)保存該讀取記錄,并從磁盤(pán)讀取D4存入緩存;S316、客戶端向存儲(chǔ)節(jié)點(diǎn)D請(qǐng)求讀取數(shù)據(jù)塊D4 ;S317、由于存儲(chǔ)節(jié)點(diǎn)D已經(jīng)對(duì)D4進(jìn)行預(yù)取,因此,存儲(chǔ)節(jié)點(diǎn)D直接從緩存中讀取數(shù) 據(jù)塊D4并返回給客戶端。之后,存儲(chǔ)節(jié)點(diǎn)D仍進(jìn)行數(shù)據(jù)塊預(yù)取的操作,不再贅述。另外,由于只要讀取記錄中的讀取數(shù)據(jù)塊的個(gè)數(shù)等于設(shè)定的已讀取數(shù)據(jù)塊閾值則 可能進(jìn)行預(yù)取,因此,為了提高各存儲(chǔ)節(jié)點(diǎn)進(jìn)行預(yù)取判斷的時(shí)間,并且節(jié)約讀取記錄表的存 儲(chǔ)空間,如果讀取記錄表中的數(shù)據(jù)塊個(gè)數(shù)大于設(shè)定的已讀取數(shù)據(jù)塊閾值,則根據(jù)時(shí)間戳刪 除在先讀取的數(shù)據(jù)塊,以使記錄表中的數(shù)據(jù)塊個(gè)數(shù)等于設(shè)定的已讀取數(shù)據(jù)塊閾值。需要說(shuō)明的是,為了保證預(yù)取內(nèi)容與磁盤(pán)數(shù)據(jù)塊的一致性,如果對(duì)緩存中的預(yù)取 數(shù)據(jù)塊進(jìn)行改寫(xiě),則需要對(duì)磁盤(pán)中的相同數(shù)據(jù)塊進(jìn)行同步改寫(xiě);同樣,如果對(duì)磁盤(pán)中的數(shù)據(jù) 塊進(jìn)行改寫(xiě),則需要對(duì)緩存中相同的預(yù)取數(shù)據(jù)塊進(jìn)行同步改寫(xiě)。還可以通過(guò)使用某種數(shù)據(jù) 結(jié)構(gòu)記錄磁盤(pán)數(shù)據(jù)塊與緩存中的預(yù)取數(shù)據(jù)塊之間的關(guān)系,以便磁盤(pán)數(shù)據(jù)塊發(fā)生改變時(shí)可以 同步修改預(yù)取數(shù)據(jù)塊。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以
10通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì) 中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁 碟、光盤(pán)、只讀存儲(chǔ)記憶體(Read-Only Memory, ROM)或隨機(jī)存儲(chǔ)記憶體(Random Access Memory, RAM)等。圖5為本發(fā)明提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn)第一實(shí)施例的結(jié)構(gòu)示 意圖,如圖5所示,該裝置包括分析模塊11、通知模塊12和預(yù)取模塊13 ;分析模塊11,用于接收客戶端發(fā)送的讀取請(qǐng)求,根據(jù)讀取的數(shù)據(jù)塊以及設(shè)定的預(yù) 取數(shù)據(jù)塊閾值,確定預(yù)取數(shù)據(jù)塊及其所在的存儲(chǔ)節(jié)點(diǎn);通知模塊12,用于向所述存儲(chǔ)節(jié)點(diǎn)發(fā)送預(yù)取請(qǐng)求,所述預(yù)取請(qǐng)求中包括所述預(yù)取 數(shù)據(jù)塊的標(biāo)識(shí)信息,所述標(biāo)識(shí)信息用于唯一標(biāo)識(shí)所述預(yù)取數(shù)據(jù)塊,至少一個(gè)數(shù)據(jù)塊為所述 預(yù)取數(shù)據(jù)塊;預(yù)取模塊13,用于根據(jù)所述預(yù)取請(qǐng)求從磁盤(pán)中讀取分析模塊11確定的預(yù)取數(shù)據(jù) 塊,并將預(yù)取數(shù)據(jù)塊存儲(chǔ)至本地緩存,以使客戶端從本地緩存中讀取預(yù)取數(shù)據(jù)塊。本實(shí)施例提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn),可以根據(jù)讀取的數(shù)據(jù)塊 以及設(shè)定的預(yù)取數(shù)據(jù)塊閾值確定預(yù)取數(shù)據(jù)塊,然后將磁盤(pán)中的預(yù)取數(shù)據(jù)塊加載到緩存中, 當(dāng)接收到客戶端的讀取請(qǐng)求后,可以直接緩存中讀取預(yù)取數(shù)據(jù)塊,從而提高系統(tǒng)中各存儲(chǔ) 節(jié)點(diǎn)的數(shù)據(jù)塊訪問(wèn)效率。圖6為本發(fā)明提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn)第二實(shí)施例的結(jié)構(gòu)示 意圖,如圖6所示,該裝置包括分析模塊11、通知模塊12和預(yù)取模塊13 ;在前一實(shí)施例的基礎(chǔ)上,該存儲(chǔ)節(jié)點(diǎn)還可以包括記錄模塊14,用于將所述讀取的數(shù)據(jù)塊及其時(shí)間戳在讀取記錄表中記錄,所述時(shí) 間戳用于標(biāo)識(shí)數(shù)據(jù)塊的讀取時(shí)間;所述通知模塊12發(fā)送的所述預(yù)取請(qǐng)求中海包括所述讀取記錄表。進(jìn)一步的,該存儲(chǔ)節(jié)點(diǎn)還可以包括判斷模塊15,用于根據(jù)記錄模塊14記錄的讀取記錄表中已讀取的數(shù)據(jù)塊個(gè)數(shù)以 及讀取時(shí)間最近的所述時(shí)間戳判斷預(yù)取數(shù)據(jù)塊是否需要預(yù)??;若判斷模塊15判斷出所述已讀取的數(shù)據(jù)塊個(gè)數(shù)大于或等于設(shè)定的已讀取數(shù)據(jù)塊 閾值,且本次預(yù)讀時(shí)間與所述時(shí)間戳顯示的最近的讀取時(shí)間之差小于等于設(shè)定時(shí)間,則預(yù) 取模塊13從磁盤(pán)中讀取預(yù)取數(shù)據(jù)塊,并將預(yù)取數(shù)據(jù)塊存儲(chǔ)至所述本地緩存。進(jìn)一步的,該存儲(chǔ)節(jié)點(diǎn)還可以包括更新模塊16,用于若所述記錄模塊14在讀取記錄表中記錄的數(shù)據(jù)塊個(gè)數(shù)大于所 述設(shè)定的已讀取數(shù)據(jù)塊閾值,則根據(jù)所述時(shí)間戳刪除在先讀取的數(shù)據(jù)塊,以使所述記錄表 中的數(shù)據(jù)塊個(gè)數(shù)等于所述設(shè)定的已讀取數(shù)據(jù)塊閾值。進(jìn)一步的,分析模塊11可以具體用于根據(jù)設(shè)定的預(yù)取數(shù)據(jù)塊閾值,確定預(yù)取數(shù)據(jù)塊的個(gè)數(shù);根據(jù)讀取的數(shù)據(jù)塊的標(biāo)識(shí)信息確定預(yù)取數(shù)據(jù)塊的標(biāo)識(shí)信息,所述標(biāo)識(shí)信息為前綴 和編號(hào),前綴為數(shù)據(jù)塊所屬原始數(shù)據(jù)的唯一標(biāo)識(shí),編號(hào)標(biāo)識(shí)數(shù)據(jù)塊在原始數(shù)據(jù)中的位置;根據(jù)預(yù)取數(shù)據(jù)塊的前綴和編號(hào)對(duì)預(yù)取數(shù)據(jù)塊進(jìn)行哈希運(yùn)算,確定預(yù)取數(shù)據(jù)塊的存 儲(chǔ)節(jié)點(diǎn)。
另外,預(yù)取模塊13還可具體用于根據(jù)所述標(biāo)識(shí)信息判斷本地緩存中是否存在預(yù)取數(shù)據(jù)塊;若本地緩存中不存在預(yù)取數(shù)據(jù)塊,則根據(jù)所述標(biāo)識(shí)信息從磁盤(pán)中讀取所述預(yù)取數(shù) 據(jù)塊,并將預(yù)取數(shù)據(jù)塊存儲(chǔ)至本地緩存,以使客戶端從本地緩存中讀取預(yù)取數(shù)據(jù)塊。該裝置還包括改寫(xiě)模塊17,用于對(duì)本地緩存中的預(yù)取數(shù)據(jù)塊進(jìn)行改寫(xiě),則對(duì)磁盤(pán)中的相同數(shù)據(jù) 塊進(jìn)行同步改寫(xiě);還用于對(duì)磁盤(pán)中的數(shù)據(jù)塊進(jìn)行改寫(xiě),則對(duì)本地緩存中相同的預(yù)取數(shù)據(jù)塊 進(jìn)行同步改寫(xiě)。圖5和圖6提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn)可以為DHT存儲(chǔ)系統(tǒng)中 的任一存儲(chǔ)節(jié)點(diǎn)中,圖5和圖6中所示的存儲(chǔ)硬件中包括緩存、磁盤(pán)、CPU、主板以及網(wǎng)卡等 硬件。該存儲(chǔ)節(jié)點(diǎn)執(zhí)行分布式哈希表DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)預(yù)取方法所進(jìn)行的具體操作可以 參考前面實(shí)施例中的描述,圖7為本發(fā)明實(shí)施例提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ) 節(jié)點(diǎn)處理讀取請(qǐng)求的主要處理過(guò)程,因此,圖7中并未給出存儲(chǔ)節(jié)點(diǎn)中的所有模塊以及所 有相關(guān)操作,而存儲(chǔ)節(jié)點(diǎn)執(zhí)行預(yù)取操作的詳細(xì)過(guò)程可參見(jiàn)前述的方法實(shí)施例。參見(jiàn)圖7,具 體包括S401、客戶端向存儲(chǔ)節(jié)點(diǎn)請(qǐng)求讀取數(shù)據(jù)塊D1 ;需要說(shuō)明的是,由于本發(fā)明提供的是DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)塊預(yù)取方法,因此,本發(fā) 明提供的DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn)實(shí)施例中主要描述了執(zhí)行預(yù)取操作的相關(guān)功能模塊,而 對(duì)于執(zhí)行讀取操作的相關(guān)功能模塊并沒(méi)有特別進(jìn)行說(shuō)明,而實(shí)際上執(zhí)行預(yù)取操作的模塊和 執(zhí)行讀取操作的模塊可以是存儲(chǔ)節(jié)點(diǎn)中的同一功能單元,為了便于描述,本發(fā)明實(shí)施例提 供的預(yù)取模塊13可同時(shí)作為執(zhí)行預(yù)取操作和讀取操作的執(zhí)行模塊。因此,S401中,接收到客戶端發(fā)送的讀取數(shù)據(jù)塊D1請(qǐng)求的模塊為預(yù)取模塊13。S402、存儲(chǔ)節(jié)點(diǎn)的預(yù)取模塊13從緩存中查找D1,判斷數(shù)據(jù)塊D1是否已預(yù)取;S403、如果數(shù)據(jù)塊D1已預(yù)取,則預(yù)取模塊13直接從緩存中取數(shù)據(jù)塊D1返回給客戶 端;S404、如果數(shù)據(jù)塊D1未預(yù)取,則預(yù)取模塊13從磁盤(pán)中讀取數(shù)據(jù)塊D1 ;S405、將數(shù)據(jù)塊D1S回給客戶端;S406、記錄模塊14在讀取記錄中記錄^1M包括時(shí)間戳信息);S407、預(yù)取模塊13將讀取的數(shù)據(jù)塊通知分析模塊11 ;S408、分析模塊11分析后續(xù)需要預(yù)取的數(shù)據(jù)塊個(gè)數(shù)及存儲(chǔ)節(jié)點(diǎn);如果預(yù)取數(shù)據(jù) 塊位于本地存儲(chǔ)節(jié)點(diǎn),則執(zhí)行S407和S408 ;如果預(yù)取數(shù)據(jù)塊位于其他存儲(chǔ)節(jié)點(diǎn),則執(zhí)行 S409 ;S409、通知模塊12向本地預(yù)取模塊13發(fā)出預(yù)取請(qǐng)求;S410、判斷模塊15判斷是否對(duì)預(yù)取數(shù)據(jù)塊進(jìn)行預(yù)取;是則執(zhí)行S411 ;S411、預(yù)取模塊13從本地磁盤(pán)中讀取數(shù)據(jù)塊并存入緩存;S412、則通知模塊12可以向其他存儲(chǔ)節(jié)點(diǎn)發(fā)送預(yù)取請(qǐng)求。本實(shí)施例中僅給出了 DHT存儲(chǔ)系統(tǒng)中的任一存儲(chǔ)節(jié)點(diǎn)接收到客戶端發(fā)出的讀取 請(qǐng)求后進(jìn)行的讀取操作,以及觸發(fā)預(yù)取操作的主要流程,而存儲(chǔ)節(jié)點(diǎn)進(jìn)行預(yù)取操作的詳細(xì) 過(guò)程可參見(jiàn)前面的方法實(shí)施例,在此不再贅述。
圖8為本發(fā)明實(shí)施例提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn)接收到預(yù)取請(qǐng) 求后進(jìn)行的主要處理過(guò)程,因此,圖8中并未給出存儲(chǔ)節(jié)點(diǎn)中的所有模塊以及所有相關(guān)操 作,而存儲(chǔ)節(jié)點(diǎn)執(zhí)行預(yù)取操作的詳細(xì)過(guò)程可參見(jiàn)前述的方法實(shí)施例。如圖8所示,具體包 括S501、存儲(chǔ)節(jié)點(diǎn)的預(yù)取模塊13接收到其他存儲(chǔ)節(jié)點(diǎn)發(fā)送的預(yù)讀取Dn的請(qǐng)求,該請(qǐng) 求中攜帶原始數(shù)據(jù)的讀取記錄;S502、預(yù)取模塊13判斷數(shù)據(jù)塊Dn是否位于緩存中,如果位于緩存中,則標(biāo)識(shí)該數(shù) 據(jù)塊已進(jìn)行預(yù)取操作,不再執(zhí)行預(yù)取操作;否則,執(zhí)行S503 ;S503、預(yù)取模塊13將原始數(shù)據(jù)的讀取記錄下發(fā)至判斷模塊15 ;S504、判斷模塊15判斷是否需要從本地磁盤(pán)中將Dn加載到緩存;若需要?jiǎng)t執(zhí)行 S505 ;S505、判斷模塊15向預(yù)取模塊13下發(fā)執(zhí)行預(yù)取指令;S506、預(yù)取模塊13從本地磁盤(pán)中讀取Dn ;S507、預(yù)取模塊13將讀取的Dn存入本地緩存中。本發(fā)明還提供了分布式哈希表DHT存儲(chǔ)系統(tǒng)的實(shí)施例,該系統(tǒng)包括多個(gè)本發(fā)明實(shí) 施例提供的存儲(chǔ)節(jié)點(diǎn),該系統(tǒng)的結(jié)構(gòu)圖可參見(jiàn)圖5和圖6。作為一個(gè)較佳的實(shí)施例,該DHT存儲(chǔ)系統(tǒng)可以包括第一存儲(chǔ)節(jié)點(diǎn)和第二存儲(chǔ)節(jié)占.
^ \\\ 其中,第一存儲(chǔ)節(jié)點(diǎn),用于接收客戶端發(fā)送的讀取請(qǐng)求,根據(jù)讀取的數(shù)據(jù)塊以及設(shè) 定的預(yù)取數(shù)據(jù)塊閾值,確定預(yù)取數(shù)據(jù)塊及其所在的第二存儲(chǔ)節(jié)點(diǎn),并向所述第二存儲(chǔ)節(jié)點(diǎn) 發(fā)送預(yù)取請(qǐng)求,所述第一存儲(chǔ)節(jié)點(diǎn)與所述第二存儲(chǔ)節(jié)點(diǎn)為相同或不同的存儲(chǔ)節(jié)點(diǎn),所述預(yù) 取請(qǐng)求中包括所述預(yù)取數(shù)據(jù)塊的標(biāo)識(shí)信息,所述標(biāo)識(shí)信息用于唯一標(biāo)識(shí)所述預(yù)取數(shù)據(jù)塊;第二存儲(chǔ)節(jié)點(diǎn),用于根據(jù)所述第一存儲(chǔ)節(jié)點(diǎn)發(fā)送的預(yù)取請(qǐng)求從磁盤(pán)中讀取所述預(yù) 取數(shù)據(jù)塊,并將所述預(yù)取數(shù)據(jù)塊存儲(chǔ)至本地緩存,以使客戶端從所述第二存儲(chǔ)節(jié)點(diǎn)的本地 緩存中讀取所述預(yù)取數(shù)據(jù)塊。進(jìn)一步的,第一存儲(chǔ)節(jié)點(diǎn)還可以用于將所述讀取的數(shù)據(jù)塊及其時(shí)間戳在讀取記 錄表中記錄,所述時(shí)間戳用于標(biāo)識(shí)數(shù)據(jù)塊的讀取時(shí)間,所述讀取記錄表對(duì)應(yīng)同一段原始數(shù) 據(jù);第一存儲(chǔ)節(jié)點(diǎn)向所述第二存儲(chǔ)節(jié)點(diǎn)發(fā)送的所述預(yù)取請(qǐng)求中還包括所述讀取記錄表。進(jìn)一步的,所述第二存儲(chǔ)節(jié)點(diǎn)還可以用于根據(jù)所述讀取記錄表中已讀取的數(shù)據(jù) 塊個(gè)數(shù)以及讀取時(shí)間最近的所述時(shí)間戳判斷所述預(yù)取數(shù)據(jù)塊是否需要預(yù)??;若所述已讀取的數(shù)據(jù)塊個(gè)數(shù)大于或等于設(shè)定的已讀取數(shù)據(jù)塊閾值,且本次預(yù)讀時(shí) 間與所述時(shí)間戳顯示的最近的讀取時(shí)間之差小于等于設(shè)定時(shí)間,則從磁盤(pán)中讀取所述預(yù)取 數(shù)據(jù)塊,并將所述預(yù)取數(shù)據(jù)塊存儲(chǔ)至所述本地緩存。進(jìn)一步的,第一存儲(chǔ)節(jié)點(diǎn)可以具體用于根據(jù)所述設(shè)定的預(yù)取數(shù)據(jù)塊閾值,確定所 述預(yù)取數(shù)據(jù)塊的個(gè)數(shù);根據(jù)所述讀取的數(shù)據(jù)塊的標(biāo)識(shí)信息確定所述預(yù)取數(shù)據(jù)塊的標(biāo)識(shí)信息,所述標(biāo)識(shí)信 息為前綴和編號(hào),所述前綴為數(shù)據(jù)塊所屬原始數(shù)據(jù)的唯一標(biāo)識(shí),所述編號(hào)標(biāo)識(shí)數(shù)據(jù)塊在所述原始數(shù)據(jù)中的位置;根據(jù)所述預(yù)取數(shù)據(jù)塊的前綴和編號(hào)對(duì)所述預(yù)取數(shù)據(jù)塊進(jìn)行哈希運(yùn)算,確定所述預(yù) 取數(shù)據(jù)塊及其所在的第二存儲(chǔ)節(jié)點(diǎn),并向所述第二存儲(chǔ)節(jié)點(diǎn)發(fā)送預(yù)取請(qǐng)求。本實(shí)施例提供的分布式哈希表DHT存儲(chǔ)系統(tǒng)中,各存儲(chǔ)節(jié)點(diǎn)相互交互執(zhí)行數(shù)據(jù)預(yù) 取操作的過(guò)程,可以參見(jiàn)本發(fā)明提供的分布式哈希表DHT的數(shù)據(jù)預(yù)取方法實(shí)施例,不再贅 述。最后應(yīng)說(shuō)明的是以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡 管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解其依然 可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替 換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精 神和范圍。
權(quán)利要求
1.一種分布式哈希表DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)預(yù)取方法,其特征在于,包括第一存儲(chǔ)節(jié)點(diǎn)接收客戶端發(fā)送的讀取請(qǐng)求,根據(jù)讀取的數(shù)據(jù)塊以及設(shè)定的預(yù)取數(shù)據(jù)塊 閾值,確定預(yù)取數(shù)據(jù)塊及其所在的第二存儲(chǔ)節(jié)點(diǎn),并向所述第二存儲(chǔ)節(jié)點(diǎn)發(fā)送預(yù)取請(qǐng)求,所 述第一存儲(chǔ)節(jié)點(diǎn)與所述第二存儲(chǔ)節(jié)點(diǎn)為相同或不同的存儲(chǔ)節(jié)點(diǎn),所述預(yù)取請(qǐng)求中包括所述 預(yù)取數(shù)據(jù)塊的標(biāo)識(shí)信息,所述標(biāo)識(shí)信息用于唯一標(biāo)識(shí)所述預(yù)取數(shù)據(jù)塊;所述第二存儲(chǔ)節(jié)點(diǎn)根據(jù)所述預(yù)取請(qǐng)求從磁盤(pán)中讀取所述預(yù)取數(shù)據(jù)塊,并將所述預(yù)取 數(shù)據(jù)塊存儲(chǔ)至本地緩存,以使客戶端從所述第二存儲(chǔ)節(jié)點(diǎn)的本地緩存中讀取所述預(yù)取數(shù)據(jù) 塊。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括所述第一存儲(chǔ)節(jié)點(diǎn)將所述讀取的數(shù)據(jù)塊及其時(shí)間戳在讀取記錄表中記錄,所述時(shí)間戳 用于標(biāo)識(shí)數(shù)據(jù)塊的讀取時(shí)間,所述讀取記錄表對(duì)應(yīng)同一段原始數(shù)據(jù);所述第一存儲(chǔ)節(jié)點(diǎn)向所述第二存儲(chǔ)節(jié)點(diǎn)發(fā)送的所述預(yù)取請(qǐng)求中還包括所述讀取記錄表。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述第二存儲(chǔ)節(jié)點(diǎn)根據(jù)所述預(yù)取請(qǐng)求從 磁盤(pán)中讀取所述預(yù)取數(shù)據(jù)塊,并將所述預(yù)取數(shù)據(jù)塊存儲(chǔ)至本地緩存之前,還包括所述第二存儲(chǔ)節(jié)點(diǎn)根據(jù)所述讀取記錄表中已讀取的數(shù)據(jù)塊個(gè)數(shù)以及讀取時(shí)間最近的 所述時(shí)間戳判斷所述預(yù)取數(shù)據(jù)塊是否需要預(yù)??;若所述已讀取的數(shù)據(jù)塊個(gè)數(shù)大于或等于設(shè)定的已讀取數(shù)據(jù)塊閾值,且本次預(yù)讀時(shí)間與 所述時(shí)間戳顯示的最近的讀取時(shí)間之差小于等于設(shè)定時(shí)間,則所述第二存儲(chǔ)節(jié)點(diǎn)從磁盤(pán)中 讀取所述預(yù)取數(shù)據(jù)塊,并將所述預(yù)取數(shù)據(jù)塊存儲(chǔ)至所述本地緩存。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,還包括若所述讀取記錄表中的數(shù)據(jù)塊個(gè)數(shù)大于所述設(shè)定的已讀取數(shù)據(jù)塊閾值,則根據(jù)所述時(shí) 間戳刪除在先讀取的數(shù)據(jù)塊,以使所述記錄表中的數(shù)據(jù)塊個(gè)數(shù)等于所述設(shè)定的已讀取數(shù)據(jù) 塊閾值。
5.根據(jù)權(quán)利要求1-4任一項(xiàng)所述的方法,其特征在于,所述第一存儲(chǔ)節(jié)點(diǎn)根據(jù)讀取的 數(shù)據(jù)塊以及設(shè)定的預(yù)取數(shù)據(jù)塊閾值,確定預(yù)取數(shù)據(jù)塊及其所在的第二存儲(chǔ)節(jié)點(diǎn),并向所述 第二存儲(chǔ)節(jié)點(diǎn)發(fā)送預(yù)取請(qǐng)求,包括所述第一存儲(chǔ)節(jié)點(diǎn)根據(jù)所述設(shè)定的預(yù)取數(shù)據(jù)塊閾值,確定所述預(yù)取數(shù)據(jù)塊的個(gè)數(shù);所述第一存儲(chǔ)節(jié)點(diǎn)根據(jù)所述讀取的數(shù)據(jù)塊的標(biāo)識(shí)信息確定所述預(yù)取數(shù)據(jù)塊的標(biāo)識(shí)信 息,所述標(biāo)識(shí)信息為前綴和編號(hào),所述前綴為數(shù)據(jù)塊所屬原始數(shù)據(jù)的唯一標(biāo)識(shí),所述編號(hào)標(biāo) 識(shí)數(shù)據(jù)塊在所述原始數(shù)據(jù)中的位置;根據(jù)所述預(yù)取數(shù)據(jù)塊的前綴和編號(hào)對(duì)所述預(yù)取數(shù)據(jù)塊進(jìn)行哈希運(yùn)算,確定所述預(yù)取數(shù) 據(jù)塊及其所在的第二存儲(chǔ)節(jié)點(diǎn),并向所述第二存儲(chǔ)節(jié)點(diǎn)發(fā)送預(yù)取請(qǐng)求。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述第二存儲(chǔ)節(jié)點(diǎn)根據(jù)所述預(yù)取請(qǐng)求從 磁盤(pán)中讀取所述預(yù)取數(shù)據(jù)塊,并將所述預(yù)取數(shù)據(jù)塊存儲(chǔ)至本地緩存,具體為所述第二存儲(chǔ)節(jié)點(diǎn)根據(jù)所述標(biāo)識(shí)信息判斷所述本地緩存中是否存在所述預(yù)取數(shù)據(jù)塊;若所述本地緩存中不存在所述預(yù)取數(shù)據(jù)塊,則所述第二存儲(chǔ)節(jié)點(diǎn)根據(jù)所述標(biāo)識(shí)信息從 所述磁盤(pán)中讀取所述預(yù)取數(shù)據(jù)塊,并將所述預(yù)取數(shù)據(jù)塊存儲(chǔ)至所述本地緩存。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,還包括如果所述第二存儲(chǔ)節(jié)點(diǎn)對(duì)所述本地緩存中的所述預(yù)取數(shù)據(jù)塊進(jìn)行改寫(xiě),則所述第二存 儲(chǔ)節(jié)點(diǎn)對(duì)所述磁盤(pán)中的相同數(shù)據(jù)塊進(jìn)行同步改寫(xiě);或者,如果所述第二存儲(chǔ)節(jié)點(diǎn)對(duì)所述磁盤(pán)中的數(shù)據(jù)塊進(jìn)行改寫(xiě),則所述第二存儲(chǔ)節(jié)點(diǎn) 對(duì)所述本地緩存中相同的所述預(yù)取數(shù)據(jù)塊進(jìn)行同步改寫(xiě)。
8.一種分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn),其特征在于,包括分析模塊,用于接收客戶端發(fā)送的讀取請(qǐng)求,根據(jù)讀取的數(shù)據(jù)塊以及設(shè)定的預(yù)取數(shù)據(jù) 塊閾值,確定預(yù)取數(shù)據(jù)塊及其所在的存儲(chǔ)節(jié)點(diǎn);通知模塊,用于向所述存儲(chǔ)節(jié)點(diǎn)發(fā)送預(yù)取請(qǐng)求,所述預(yù)取請(qǐng)求中包括所述預(yù)取數(shù)據(jù)塊 的標(biāo)識(shí)信息,所述標(biāo)識(shí)信息用于唯一標(biāo)識(shí)所述預(yù)取數(shù)據(jù)塊;預(yù)取模塊,用于根據(jù)所述預(yù)取請(qǐng)求從磁盤(pán)中讀取所述分析模塊確定的所述預(yù)取數(shù)據(jù) 塊,并將所述預(yù)取數(shù)據(jù)塊存儲(chǔ)至本地緩存,以使客戶端從所述本地緩存中讀取所述預(yù)取數(shù) 據(jù)塊。
9.根據(jù)權(quán)利要求8所述的分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn),其特征在于,還包括記錄模塊,用于將所述讀取的數(shù)據(jù)塊及其時(shí)間戳在讀取記錄表中記錄,所述時(shí)間戳用 于標(biāo)識(shí)數(shù)據(jù)塊的讀取時(shí)間,所述讀取記錄表對(duì)應(yīng)同一段原始數(shù)據(jù); 所述通知模塊發(fā)送的所述預(yù)取請(qǐng)求中還包括所述讀取記錄表。
10.根據(jù)權(quán)利要求9所述的分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn),其特征在于,還包括判斷模塊,用于根據(jù)所述記錄模塊記錄的讀取記錄表中已讀取的數(shù)據(jù)塊個(gè)數(shù)以及讀取 時(shí)間最近的所述時(shí)間戳判斷所述預(yù)取數(shù)據(jù)塊是否需要預(yù)??;若所述判斷模塊判斷出所述已讀取的數(shù)據(jù)塊個(gè)數(shù)大于或等于設(shè)定的已讀取數(shù)據(jù)塊閾 值,且本次預(yù)讀時(shí)間與所述時(shí)間戳顯示的最近的讀取時(shí)間之差小于等于設(shè)定時(shí)間,則所述 預(yù)取模塊從磁盤(pán)中讀取所述預(yù)取數(shù)據(jù)塊,并將所述預(yù)取數(shù)據(jù)塊存儲(chǔ)至所述本地緩存。
11.根據(jù)權(quán)利要求10所述的分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn),其特征在于,還包括更新模塊,用于若所述記錄模塊在讀取記錄表中記錄的數(shù)據(jù)塊個(gè)數(shù)大于所述設(shè)定的已 讀取數(shù)據(jù)塊閾值,則根據(jù)所述時(shí)間戳刪除在先讀取的數(shù)據(jù)塊,以使所述記錄表中的數(shù)據(jù)塊 個(gè)數(shù)等于所述設(shè)定的已讀取數(shù)據(jù)塊閾值。
12.根據(jù)權(quán)利要求8-11所述的分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn),其特征在于,所 述分析模塊具體用于根據(jù)所述設(shè)定的預(yù)取數(shù)據(jù)塊閾值,確定所述預(yù)取數(shù)據(jù)塊的個(gè)數(shù); 根據(jù)所述讀取的數(shù)據(jù)塊的標(biāo)識(shí)信息確定所述預(yù)取數(shù)據(jù)塊的標(biāo)識(shí)信息,所述標(biāo)識(shí)信息為 前綴和編號(hào),所述前綴為數(shù)據(jù)塊所屬原始數(shù)據(jù)的唯一標(biāo)識(shí),所述編號(hào)標(biāo)識(shí)數(shù)據(jù)塊在所述原 始數(shù)據(jù)中的位置;根據(jù)所述預(yù)取數(shù)據(jù)塊的前綴和編號(hào)對(duì)所述預(yù)取數(shù)據(jù)塊進(jìn)行哈希運(yùn)算,確定所述預(yù)取數(shù) 據(jù)塊的存儲(chǔ)節(jié)點(diǎn)。
13.根據(jù)權(quán)利要求12所述的分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn),其特征在于,所述預(yù)取模塊具體用于根據(jù)所述標(biāo)識(shí)信息判斷所述本地緩存中是否存在所述預(yù)取數(shù)據(jù)塊; 若所述本地緩存中不存在所述預(yù)取數(shù)據(jù)塊,則根據(jù)所述標(biāo)識(shí)信息從所述磁盤(pán)中讀取所 述預(yù)取數(shù)據(jù)塊,并將所述預(yù)取數(shù)據(jù)塊存儲(chǔ)至所述本地緩存,以使所述客戶端從所述本地緩 存中讀取所述預(yù)取數(shù)據(jù)塊。
14.根據(jù)權(quán)利要求13所述的分布式哈希表DHT存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn),其特征在于,還包括改寫(xiě)模塊,用于對(duì)所述本地緩存中的所述預(yù)取數(shù)據(jù)塊進(jìn)行改寫(xiě),則對(duì)所述磁盤(pán)中的相 同數(shù)據(jù)塊進(jìn)行同步改寫(xiě);還用于對(duì)所述磁盤(pán)中的數(shù)據(jù)塊進(jìn)行改寫(xiě),則對(duì)所述本地緩存中相 同的所述預(yù)取數(shù)據(jù)塊進(jìn)行同步改寫(xiě)。
15.一種分布式哈希表DHT存儲(chǔ)系統(tǒng),其特征在于,包括多個(gè)如權(quán)利要求8-14任一項(xiàng)所 述的存儲(chǔ)節(jié)點(diǎn)。
16.一種分布式哈希表DHT存儲(chǔ)系統(tǒng),其特征在于,包括第一存儲(chǔ)節(jié)點(diǎn)和第二存儲(chǔ)節(jié)點(diǎn);所述第一存儲(chǔ)節(jié)點(diǎn),用于接收客戶端發(fā)送的讀取請(qǐng)求,根據(jù)讀取的數(shù)據(jù)塊以及設(shè)定的 預(yù)取數(shù)據(jù)塊閾值,確定預(yù)取數(shù)據(jù)塊及其所在的第二存儲(chǔ)節(jié)點(diǎn),并向所述第二存儲(chǔ)節(jié)點(diǎn)發(fā)送 預(yù)取請(qǐng)求,所述第一存儲(chǔ)節(jié)點(diǎn)與所述第二存儲(chǔ)節(jié)點(diǎn)為相同或不同的存儲(chǔ)節(jié)點(diǎn),所述預(yù)取請(qǐng) 求中包括所述預(yù)取數(shù)據(jù)塊的標(biāo)識(shí)信息,所述標(biāo)識(shí)信息用于唯一標(biāo)識(shí)所述預(yù)取數(shù)據(jù)塊;所述第二存儲(chǔ)節(jié)點(diǎn),用于根據(jù)所述第一存儲(chǔ)節(jié)點(diǎn)發(fā)送的預(yù)取請(qǐng)求從磁盤(pán)中讀取所述預(yù) 取數(shù)據(jù)塊,并將所述預(yù)取數(shù)據(jù)塊存儲(chǔ)至本地緩存,以使客戶端從所述第二存儲(chǔ)節(jié)點(diǎn)的本地 緩存中讀取所述預(yù)取數(shù)據(jù)塊。
17.根據(jù)權(quán)利要求16所述的分布式哈希表DHT存儲(chǔ)系統(tǒng),其特征在于,所述第一存儲(chǔ)節(jié) 點(diǎn)還用于將所述讀取的數(shù)據(jù)塊及其時(shí)間戳在讀取記錄表中記錄,所述時(shí)間戳用于標(biāo)識(shí)數(shù) 據(jù)塊的讀取時(shí)間,所述讀取記錄表對(duì)應(yīng)同一段原始數(shù)據(jù);所述第一存儲(chǔ)節(jié)點(diǎn)向所述第二存儲(chǔ)節(jié)點(diǎn)發(fā)送的所述預(yù)取請(qǐng)求中還包括所述讀取記錄表。
18.根據(jù)權(quán)利要求17所述的分布式哈希表DHT存儲(chǔ)系統(tǒng),其特征在于,所述第二存儲(chǔ)節(jié) 點(diǎn)還用于根據(jù)所述讀取記錄表中已讀取的數(shù)據(jù)塊個(gè)數(shù)以及讀取時(shí)間最近的所述時(shí)間戳判 斷所述預(yù)取數(shù)據(jù)塊是否需要預(yù)?。蝗羲鲆炎x取的數(shù)據(jù)塊個(gè)數(shù)大于或等于設(shè)定的已讀取數(shù)據(jù)塊閾值,且本次預(yù)讀時(shí)間與 所述時(shí)間戳顯示的最近的讀取時(shí)間之差小于等于設(shè)定時(shí)間,則從磁盤(pán)中讀取所述預(yù)取數(shù)據(jù) 塊,并將所述預(yù)取數(shù)據(jù)塊存儲(chǔ)至所述本地緩存。
19.根據(jù)權(quán)利要求16-18任一項(xiàng)所述的分布式哈希表DHT存儲(chǔ)系統(tǒng),其特征在于,所述 第一存儲(chǔ)節(jié)點(diǎn)具體用于根據(jù)所述設(shè)定的預(yù)取數(shù)據(jù)塊閾值,確定所述預(yù)取數(shù)據(jù)塊的個(gè)數(shù);根據(jù)所述讀取的數(shù)據(jù)塊的標(biāo)識(shí)信息確定所述預(yù)取數(shù)據(jù)塊的標(biāo)識(shí)信息,所述標(biāo)識(shí)信息為 前綴和編號(hào),所述前綴為數(shù)據(jù)塊所屬原始數(shù)據(jù)的唯一標(biāo)識(shí),所述編號(hào)標(biāo)識(shí)數(shù)據(jù)塊在所述原 始數(shù)據(jù)中的位置;根據(jù)所述預(yù)取數(shù)據(jù)塊的前綴和編號(hào)對(duì)所述預(yù)取數(shù)據(jù)塊進(jìn)行哈希運(yùn)算,確定所述預(yù)取數(shù) 據(jù)塊及其所在的第二存儲(chǔ)節(jié)點(diǎn),并向所述第二存儲(chǔ)節(jié)點(diǎn)發(fā)送預(yù)取請(qǐng)求。
全文摘要
本發(fā)明實(shí)施例提供一種分布式哈希表DHT存儲(chǔ)系統(tǒng)的數(shù)據(jù)預(yù)取方法、節(jié)點(diǎn)和系統(tǒng)。方法包括第一存儲(chǔ)節(jié)點(diǎn)接收客戶端發(fā)送的讀取請(qǐng)求,根據(jù)讀取的數(shù)據(jù)塊以及設(shè)定的預(yù)取數(shù)據(jù)塊閾值,確定預(yù)取數(shù)據(jù)塊及其所在的第二存儲(chǔ)節(jié)點(diǎn),并向第二存儲(chǔ)節(jié)點(diǎn)發(fā)送預(yù)取請(qǐng)求,第一存儲(chǔ)節(jié)點(diǎn)與第二存儲(chǔ)節(jié)點(diǎn)為相同或不同的存儲(chǔ)節(jié)點(diǎn),預(yù)取請(qǐng)求中包括預(yù)取數(shù)據(jù)塊的標(biāo)識(shí)信息,標(biāo)識(shí)信息用于唯一標(biāo)識(shí)預(yù)取數(shù)據(jù)塊;第二存儲(chǔ)節(jié)點(diǎn)根據(jù)預(yù)取請(qǐng)求從磁盤(pán)中讀取預(yù)取數(shù)據(jù)塊,并將預(yù)取數(shù)據(jù)塊存儲(chǔ)至本地緩存,以使客戶端從所述第二存儲(chǔ)節(jié)點(diǎn)的本地緩存中讀取預(yù)取數(shù)據(jù)塊。本發(fā)明實(shí)施例能夠直接從緩存中讀取預(yù)取數(shù)據(jù)塊,從而提高系統(tǒng)中各存儲(chǔ)節(jié)點(diǎn)的數(shù)據(jù)訪問(wèn)效率。
文檔編號(hào)H04L29/08GK102111448SQ20111000681
公開(kāi)日2011年6月29日 申請(qǐng)日期2011年1月13日 優(yōu)先權(quán)日2011年1月13日
發(fā)明者楊德平, 鮑棟 申請(qǐng)人:華為技術(shù)有限公司