一種云環(huán)境下可擴展存儲索引結(jié)構(gòu)的實現(xiàn)方法
【專利摘要】本發(fā)明公開了一種云環(huán)境下可擴展存儲索引結(jié)構(gòu)的實現(xiàn)方法,利用Skiplist這種數(shù)據(jù)結(jié)構(gòu)來有針對性地構(gòu)建云環(huán)境下可擴展存儲索引結(jié)構(gòu),使得數(shù)據(jù)子集、數(shù)據(jù)都是有序存儲的,這樣知道待查詢鍵的區(qū)間上下界就可以實現(xiàn)范圍的查詢。同時,上層的全局索引結(jié)點由下層結(jié)點的元數(shù)據(jù)構(gòu)成,減輕了上層全局索引的內(nèi)存開銷,并可以存儲更多的全局索引結(jié)點,大大提高了整個云存儲系統(tǒng)的查詢速度,實時性得到提高。此外,本發(fā)明中的存儲索引結(jié)構(gòu)可以進行動態(tài)調(diào)整,具有很好的擴展性。
【專利說明】—種云環(huán)境下可擴展存儲索引結(jié)構(gòu)的實現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于云存儲【技術(shù)領(lǐng)域】,更為具體地講,涉及一種云環(huán)境下可擴展存儲索引結(jié)構(gòu)的實現(xiàn)方法。
【背景技術(shù)】
[0002]隨著計算機及網(wǎng)絡(luò)技術(shù)的發(fā)展,云計算技術(shù)作為一種高性能、低成本的實用分布式計算技術(shù),已被廣泛運用于以大數(shù)據(jù)處理為代表的各種網(wǎng)絡(luò)應(yīng)用中。高可擴展性和可靠性的云存儲系統(tǒng)逐漸成為大數(shù)據(jù)處理的首選方案之一,已有的優(yōu)秀云存儲系統(tǒng)包括:Google的GFS、MapReduce以及其開源實現(xiàn)Hadoop、亞馬遜的Dynamo和Facebook的Cassandra等。相對于傳統(tǒng)數(shù)據(jù)存儲系統(tǒng),云存儲系統(tǒng)分布更廣,支持數(shù)據(jù)更多,這就意味著云存儲時代的輔助索引系統(tǒng)必然發(fā)生大的變化。
[0003]當(dāng)前大多數(shù)的云存儲系統(tǒng)都采用健-值(Key-Value)模型,將查詢的鍵(key)和具體值(value)映射為鍵值對(kv-pair)來存取數(shù)據(jù)。該模型簡單,適合通過主鍵進行查詢。在單鍵查詢的時候有著良好的表現(xiàn),但卻不能有效支持范圍查詢。實際的應(yīng)用效果表明,這類基于Key-Value模型的云存儲系統(tǒng)還存在一些亟待提高的地方。例如,對于一個在線視頻點播系統(tǒng)來說,用戶們往往傾向于采用多于一個的鍵值來進行查詢,或需要查詢特定屬性處于某一個數(shù)據(jù)范圍之內(nèi)的視頻信息。為了滿足上述的應(yīng)用需求,當(dāng)前的解決方案主要是通過運行一個后臺批處理任務(wù)(例如運行一個MapReduce的任務(wù)),來掃描整個數(shù)據(jù)集然后得到查詢結(jié)果。然而,這類解決方案缺乏時效性,新存入的數(shù)據(jù)不能被及時的查詢至IJ,必須等到后臺的批處理任務(wù)完成了完整的掃描,數(shù)據(jù)才會可查。上述分析表明,當(dāng)前云存儲系統(tǒng)在多維度查詢和范圍查詢方面支持的都不是很理想、且時效性差,有必要構(gòu)建云環(huán)境下存儲索引結(jié)構(gòu)。
[0004]目前少數(shù)基于不同數(shù)據(jù)結(jié)構(gòu)的雙層存儲索引結(jié)構(gòu)已經(jīng)被提出。這些方案能夠很方便地實現(xiàn)云存儲系統(tǒng)的可擴展性,使云存儲系統(tǒng)能夠同時支持大規(guī)模的查詢。但是,這些方案在全局索引中大都采用了基于P2P協(xié)議的覆蓋網(wǎng)絡(luò)來實現(xiàn)并行查詢,但是P2P網(wǎng)絡(luò)本身的維護比較復(fù)雜,查詢時的網(wǎng)絡(luò)開銷也比較大,這會影響到云存儲系統(tǒng)的查詢性能。同時,由于現(xiàn)有的云存儲系統(tǒng)一般都是master-slave結(jié)構(gòu)的,要在這些節(jié)點上重新構(gòu)建一個P2P網(wǎng)絡(luò),會對原有的存儲系統(tǒng)帶來一定的負面影響。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種云環(huán)境下可擴展存儲索引結(jié)構(gòu)的實現(xiàn)方法,以解決云存儲系統(tǒng)中存儲索引結(jié)構(gòu)不支持范圍查詢以及缺乏實時性的問題。
[0006]為實現(xiàn)上述發(fā)明目的,本發(fā)明云環(huán)境下可擴展存儲索引結(jié)構(gòu)的實現(xiàn)方法,其特征在于,包括以下步驟:
[0007](I)、建立主從式的可擴展存儲索引的兩層結(jié)構(gòu)
[0008]整個存儲索引結(jié)構(gòu)分為上下兩層,上層為全局索引,由全局索引服務(wù)器負責(zé)管理,下層為多個局部索引,每個局部索引由一個局部索引服務(wù)器負責(zé)管理;
[0009]對待索引的數(shù)據(jù)集進行切分,按照平均的原則,分成包含等量數(shù)據(jù)的數(shù)據(jù)子集,劃分的數(shù)據(jù)子集的個數(shù)與局部索引服務(wù)器相等;然后,劃分好的數(shù)據(jù)子集與下層索引服務(wù)器一一對應(yīng),并在各下層索引服務(wù)器中以SkipList為基礎(chǔ)建立局部索引,下層索引服務(wù)器將數(shù)據(jù)子集的各個數(shù)據(jù)分別存放到局部索引的各個結(jié)點中,完成局部索引的建立;
[0010]在局部索引建立完成的基礎(chǔ)上,各局部索引挑選樁結(jié)點作為自己索引范圍的“代表”發(fā)布到上層的全局索引中;發(fā)布時,抽取發(fā)布的樁結(jié)點的元數(shù)據(jù)發(fā)送到上層的全局索引服務(wù)器中,元數(shù)據(jù)包括:索引的鍵,局部索引服務(wù)器IP地址,局部索引服務(wù)器磁盤物理塊號,以達到減輕上層索引的內(nèi)存開銷和存儲更多結(jié)點的目的;全局索引服務(wù)器接收到下層各局部索引發(fā)布的元數(shù)據(jù)后,通過SkipList的形式將這些元數(shù)據(jù)作為全局索引結(jié)點組織成一個全局索引,在邏輯上將下層各獨立的局部索引關(guān)聯(lián)起來,維持了索引空間的整體一致性;
[0011](2)、發(fā)布元數(shù)據(jù)結(jié)點的調(diào)整
[0012]局部索引向全局索引發(fā)布樁結(jié)點的元數(shù)據(jù)進行關(guān)聯(lián)后,各局部索引會根據(jù)預(yù)估的收益,判斷是否要繼續(xù)往局部索引的下一層級進行發(fā)布:
[0013]如果往局部索引的下一層級進行發(fā)布,云存儲系統(tǒng)的查詢速度變化率為正向,并且大于全局索引服務(wù)器的內(nèi)存占用變化率,則將局部索引的下一層級結(jié)點的元數(shù)據(jù)發(fā)布到上層的全局索引中,否則,不往下一層級進行發(fā)布;
[0014](3)、查詢
[0015]3.1)、單鍵值查詢
[0016]al、由上層的全局索引 服務(wù)器作為處理查詢的入口,首先,在全局索引中查詢到待查詢鍵的全局索引結(jié)點;a2、根據(jù)全局索引中查詢到的全局索引結(jié)點,定位到下層具體的某一個局部索引服務(wù)器上,將查詢操作轉(zhuǎn)移給該局部索引服務(wù)器繼續(xù)處理;a3、局部索引服務(wù)器執(zhí)行查詢操作,查詢本機負責(zé)的局部索引,找到待查鍵對應(yīng)的數(shù)據(jù)后,直接返回給查詢請求發(fā)起端;
[0017]3.2)、范圍查詢
[0018]bl、按照單鍵值查詢的方式,以待查詢鍵的區(qū)間的下界為鍵,找到具體某一個局部索引中對應(yīng)的結(jié)點山2、找到的結(jié)點為起點,順序向后遍歷并緩存查詢到的數(shù)據(jù),直到找到待查詢鍵的區(qū)間的上界為止,然后將所有找到的數(shù)據(jù)返回給查詢請求發(fā)起端。
[0019]本發(fā)明的發(fā)明目的是這樣實現(xiàn)的:
[0020]本發(fā)明云環(huán)境下可擴展存儲索引結(jié)構(gòu)的實現(xiàn)方法,利用Skiplist這種數(shù)據(jù)結(jié)構(gòu)來有針對性地構(gòu)建云環(huán)境下可擴展存儲索引結(jié)構(gòu),使得數(shù)據(jù)子集、數(shù)據(jù)都是有序存儲的,這樣知道待查詢鍵的區(qū)間上下界就可以實現(xiàn)范圍的查詢。同時,上層的全局索引結(jié)點由下層結(jié)點的元數(shù)據(jù)構(gòu)成,減輕了上層全局索引的內(nèi)存開銷,并可以存儲更多的全局索引結(jié)點,大大提高了整個云存儲系統(tǒng)的查詢速度,實時性得到提高。此外,本發(fā)明中的存儲索引結(jié)構(gòu)可以進行動態(tài)調(diào)整,具有很好的擴展性。
【專利附圖】
【附圖說明】
[0021]圖1是本發(fā)明中可擴展存儲索引的兩層結(jié)構(gòu)示意圖;[0022]圖2是本發(fā)明中發(fā)布元數(shù)據(jù)結(jié)點的調(diào)整示意圖;
[0023]圖3是局部索引發(fā)布到全局索引時加速系數(shù)和內(nèi)存的變化情況;
[0024]圖4是單鍵值查詢的處理過程示意圖;
[0025]圖5是局部索引分裂示意圖;
[0026]圖6是可擴展索引結(jié)構(gòu)的構(gòu)造示意圖;
[0027]圖7是范圍查詢處理流程示意圖;
[0028]圖8是局部索引分裂示意圖。
【具體實施方式】
[0029]下面結(jié)合附圖對本發(fā)明的【具體實施方式】進行描述,以便本領(lǐng)域的技術(shù)人員更好地理解本發(fā)明。需要特別提醒注意的是,在以下的描述中,當(dāng)已知功能和設(shè)計的詳細描述也許會淡化本發(fā)明的主要內(nèi)容時,這些描述在這里將被忽略。
[0030]實施例
[0031]圖1是本發(fā)明中可擴展存儲索引的兩層結(jié)構(gòu)示意圖。
[0032]在本實施例中,如圖1所示,建立主從式的可擴展存儲索引的兩層結(jié)構(gòu)的過程為:
[0033]整個存儲索引結(jié)構(gòu)分為上下兩層,下層為多個局部索引,每個局部索引由一個局部索引服務(wù)器負責(zé)管理,索引的數(shù)據(jù)存放在下層的局部索引結(jié)點中,而上層的全局索引則起到一個定位和導(dǎo)向的作用,由全局索引服務(wù)器負責(zé)管理。
[0034]在存儲索引建立的時候,首先會對待索引的數(shù)據(jù)集進行切分,按照平均的原則,分成包含等量數(shù)據(jù)的數(shù)據(jù)子集,劃分的數(shù)據(jù)子集的個數(shù)與下層的局部索引服務(wù)器相等。然后,劃分好的數(shù)據(jù)子集與下層索引服務(wù)器一一對應(yīng),在各下層索引服務(wù)器中以SkipList為基礎(chǔ)建立局部索引,下層索引服務(wù)器將數(shù)據(jù)子集的各個數(shù)據(jù)分別存放到局部索引的各個結(jié)點中,完成局部索引的建立。
[0035]在局部索引建立完成的基礎(chǔ)上,各局部索引挑選樁結(jié)點作為自己索引范圍的“代表”發(fā)布到上層的全局索引中,其中,必須包括局部索引中的樁結(jié)點,即圖1中的黑色圓圈部分。發(fā)布時,并不是直接將下層局部索引中結(jié)點原封不動的拷貝給上層全局索引作為結(jié)點,而是抽取這些被發(fā)布結(jié)點的元數(shù)據(jù),包括:索引的鍵,局部索引服務(wù)器IP地址,局部索引服務(wù)器磁盤物理塊號,僅將元數(shù)據(jù)發(fā)送到上層全局索引服務(wù)器中,可以達到減輕上層全局索引的內(nèi)存開銷和存儲更多結(jié)點的目的。全局索引服務(wù)器接收到下層各局部索引發(fā)布的元數(shù)據(jù)后,通過SkipList的形式將這些元數(shù)據(jù)作為全局索引結(jié)點組織成一個全局索引,在邏輯上將下層各獨立的局部索引關(guān)聯(lián)起來,維持了索引空間的整體一致性。
[0036]圖2是本發(fā)明中發(fā)布元數(shù)據(jù)結(jié)點的調(diào)整示意圖;
[0037]局部索引向全局索引發(fā)布樁結(jié)點的元數(shù)據(jù)進行關(guān)聯(lián)后,各局部索引會根據(jù)預(yù)估的收益,判斷是否要繼續(xù)往局部索引的下一層級進行發(fā)布:
[0038]如果往局部索引的下一層級進行發(fā)布,云存儲系統(tǒng)的查詢速度變化率為正向,并且大于全局索引服務(wù)器的內(nèi)存占用變換率,則將局部索引的下一層級結(jié)點的元數(shù)據(jù)發(fā)布到上層的全局索引中,否則,不往下一層級進行發(fā)布。
[0039]在本實施例中,如圖2所述,本發(fā)明引入動態(tài)發(fā)布調(diào)整算法,下層的局部索引根據(jù)預(yù)估的收益對下一層級即L2 (L3層級為當(dāng)前發(fā)布的層級)進行判斷,看是否需要進行發(fā)布,下一層級L2的收益即云存儲系統(tǒng)的查詢速度變化率為正向,并且大于全局索引服務(wù)器的內(nèi)存占用變化率,因此,將L2層級的結(jié)點的元數(shù)據(jù)發(fā)布到上層的全局索引中。
[0040]本發(fā)明中的索引存儲結(jié)構(gòu)采用下層的局部索引向上層的全局索引發(fā)布結(jié)點的元數(shù)據(jù),在上層的全局索引服務(wù)器中構(gòu)建全局索引,來維護索引結(jié)構(gòu)的整體性。在下層的局部索引發(fā)布向上層的全局索引發(fā)布結(jié)點的元數(shù)據(jù)時,采用的是自頂向下的方式逐步增加發(fā)布的結(jié)點的元數(shù)據(jù)。首先,每一個局部索引將最高層級(圖2中的L4層級)結(jié)點的元數(shù)據(jù)發(fā)布到全局索引中,SkipList的特性保證了最高層的結(jié)點必然包括樁結(jié)點,接著各局部索引會根據(jù)預(yù)估的收益,判斷是否要繼續(xù)往下一層級發(fā)布。
[0041]預(yù)估的策略根據(jù)的是局部索引發(fā)布之后,整體索引結(jié)構(gòu)即云存儲系統(tǒng)的查詢速度變化率和全局服務(wù)器的內(nèi)存變化率為基準。圖2給出了一個局部索引發(fā)布的結(jié)點從L3層級向L2層級延伸時,上層全局索引中結(jié)點變化的情況。因為SkipList本身的特性,下一層級的結(jié)點總是包含著上一層級的結(jié)點,所以在向下一層級擴展發(fā)布的時候,僅需要將之前沒有包含的新結(jié)點的元數(shù)據(jù)發(fā)送給上層的全局索引,即僅在全局索引中插入之前沒有的結(jié)點的元數(shù)據(jù)。
[0042]對于SkipList來說,其索引的數(shù)據(jù)是存儲于最底層的結(jié)點中,同時各結(jié)點以P的概率向上升高,升高的部分作為查詢的加速結(jié)點使用。因此,在SkipList中自頂向下結(jié)點的數(shù)量將會以冪級的形式增加。與下層局部索引發(fā)布的結(jié)點數(shù)量相對應(yīng),上層全局索引的內(nèi)存開銷也將以冪級的形式增加?;谶@個原因,下層局部索引不能不加限制的向上層發(fā)布結(jié)點的元數(shù)據(jù),應(yīng)以索引結(jié)構(gòu)即云存儲系統(tǒng)整體的查詢速度和內(nèi)存開銷的綜合值作為發(fā)布的判斷依據(jù)。
[0043]圖3是局部索引發(fā)布到全局索引后,索引結(jié)構(gòu)整體的查詢速度以及全局索引服務(wù)器內(nèi)存占用情況的示意圖。從圖3可以看出,隨著發(fā)布層數(shù)的增加,索引結(jié)構(gòu)整體的查詢速度提升趨勢逐漸變緩,而全 局索引服務(wù)器的內(nèi)存占用即開銷則明顯升高。因此,本發(fā)明在發(fā)布時會根據(jù)查詢速度和內(nèi)存占用的變化情況作為判斷,設(shè)定一個閾值,作為發(fā)布層數(shù)的最大上界。具體方法為:設(shè)Qtjld為局部索引發(fā)布下一層結(jié)點元數(shù)據(jù)之前,索引結(jié)構(gòu)整體的查詢速度。Qnrat為局部索引發(fā)布下一層結(jié)點數(shù)據(jù)之后,預(yù)估的索引結(jié)構(gòu)整體的查詢速度。假定將局部索引發(fā)布到下一層,則發(fā)布之后的索引結(jié)構(gòu)整體查詢速度變化率為:
【權(quán)利要求】
1.一種云環(huán)境下可擴展存儲索引結(jié)構(gòu)的實現(xiàn)方法,其特征在于,包括以下步驟: (1)、主從式的可擴展存儲索引的兩層結(jié)構(gòu) 整個存儲索引結(jié)構(gòu)分為上下兩層,上層為全局索引,由全局索引服務(wù)器負責(zé)管理,下層為多個局部索引,每個局部索引由一個局部索引服務(wù)器負責(zé)管理; 對待索引的數(shù)據(jù)集進行切分,按照平均的原則,分成包含等量數(shù)據(jù)的數(shù)據(jù)子集,劃分的數(shù)據(jù)子集的個數(shù)與局部索引服務(wù)器相等;然后,劃分好的數(shù)據(jù)子集與下層索引服務(wù)器一一對應(yīng),并在各下層索引服務(wù)器中以SkipList為基礎(chǔ)建立局部索引,下層索引服務(wù)器將數(shù)據(jù)子集的各個數(shù)據(jù)分別存放到局部索引的各個結(jié)點中,完成局部索引的建立; 在局部索引建立完成的基礎(chǔ)上,各局部索引挑選樁結(jié)點作為自己索引范圍的“代表”發(fā)布到上層的全局索引中;發(fā)布時,抽取發(fā)布的樁結(jié)點的元數(shù)據(jù)發(fā)送到上層的全局索引服務(wù)器中,元數(shù)據(jù)包括:索引的鍵,局部索引服務(wù)器IP地址,局部索引服務(wù)器磁盤物理塊號,以達到減輕上層索引的內(nèi)存開銷和存儲更多結(jié)點的目的;全局索引服務(wù)器接收到下層各局部索引發(fā)布的元數(shù)據(jù)后,通過SkipList的形式將這些元數(shù)據(jù)作為全局索引結(jié)點組織成一個全局索引,在邏輯上將下層各獨立的局部索引關(guān)聯(lián)起來,維持了索引空間的整體一致性; (2)、發(fā)布元數(shù)據(jù)結(jié)點的調(diào)整 局部索引向全局索引發(fā)布樁結(jié)點的元數(shù)據(jù)進行關(guān)聯(lián)后,各局部索引會根據(jù)預(yù)估的收益,判斷是否要繼續(xù)往局部索引的下一層級進行發(fā)布: 如果往局部索引的下一層級進行發(fā)布,云存儲系統(tǒng)的查詢速度變化率為正向,并且大全局索引服務(wù)器的內(nèi)存占用變化率,則將局部索引的下一層級結(jié)點的元數(shù)據(jù)發(fā)布到上層的全局索引中,否則,不往下一層級進行發(fā); (3)、查詢 3.1)、單鍵值查詢 al、由上層的全局索引服務(wù)器作為處理查詢的入口,首先,在全局索引中查詢到待查詢鍵的全局索引結(jié)點;a2、根據(jù)全局索引中查詢到的全局索引結(jié)點,定位到下層具體的某一個局部索引服務(wù)器上,將查詢操作轉(zhuǎn)移給該局部索引服務(wù)器繼續(xù)處理;a3、局部索引服務(wù)器執(zhí)行查詢操作,查詢本機負責(zé)的局部索引,找到待查鍵對應(yīng)的數(shù)據(jù)后,直接返回給查詢請求發(fā)起端; 3.2)、范圍查詢 bl、按照單鍵值查詢的方式,以待查詢鍵的區(qū)間的下界為鍵,找到具體某一個局部索引中對應(yīng)的結(jié)點山2、找到的結(jié)點為起點,順序向后遍歷并緩存查詢到的數(shù)據(jù),直到找到待查詢鍵的區(qū)間的上界為止,然后將所有找到的數(shù)據(jù)返回給查詢請求發(fā)起端。
2.根據(jù)權(quán)利要求1所述的可擴展存儲索引結(jié)構(gòu)的實現(xiàn)方法,其特征在于,還包括局部索引的分裂過程: 以欲進行分裂處理的局部索引S1的樁結(jié)點為起始結(jié)點X,從高度i開始找到右邊第一個高度等i+Ι的結(jié)點wall (x, i),i為分裂因子,是分裂位置的層高; 以結(jié)點wall (X,i)為界,將局部索引S1前半部分指向結(jié)點wall (X,i)結(jié)點的后繼指針修改為NULL,即從局部索引S1中刪除后半部分的結(jié)點; 以結(jié)點wall (X,i)為界,將后半部分的結(jié)點發(fā)送給局部索引S2,逐個插入到局部索引S2中,即S2為接收S1分裂出來的后半部分數(shù)據(jù)的局部索引。前半部分即局部索引S1繼續(xù)保留在原索引服務(wù)器中,而后半部分即局部索引S2可以選擇存儲到一臺新的局部索引服務(wù)器,或是遷移到已有的負載較輕的局部索引服務(wù)器上。
3.根據(jù)權(quán)利要求1所述的可擴展存儲索引結(jié)構(gòu)的實現(xiàn)方法,其特征在于,所述的如果往局部索引的下一層級進行發(fā)布,云存儲系統(tǒng)的查詢速度變化率為正向,并且大于全局索引服務(wù)器的內(nèi)存占用變化率,則將局部索引的下一層級結(jié)點的元數(shù)據(jù)發(fā)布到上層的全局索引中,否則,不往下一層級進行發(fā)布為: 設(shè)Qtjld為局部索引發(fā)布下一層結(jié)點元數(shù)據(jù)之前,索引結(jié)構(gòu)整體的查詢速度,Qnrat為局部索引發(fā)布下一層結(jié)點數(shù)據(jù)之后,預(yù)估的索引結(jié)構(gòu)整體的查詢速度;將局部索引發(fā)布到下一層,則發(fā)布之后的索引結(jié)構(gòu)整體查詢速度變化率為:
【文檔編號】G06F17/30GK103544300SQ201310530188
【公開日】2014年1月29日 申請日期:2013年10月31日 優(yōu)先權(quán)日:2013年10月31日
【發(fā)明者】周維, 路勁, 姚紹文, 羅靜 申請人:云南大學(xué)