一種面向內(nèi)容網(wǎng)絡(luò)中內(nèi)容名存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)方法
【專利摘要】本發(fā)明提供一種面向內(nèi)容網(wǎng)絡(luò)中內(nèi)容名存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)方法,嵌套分段散列表的分層嵌套結(jié)構(gòu)通過相同前綴的內(nèi)容名聚合,減少存儲(chǔ)空間的開銷,作為嵌套分段散列表中的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)單元,分段散列表在散列表的基礎(chǔ)上引入分段思想,通過添加布隆濾波器和Bit-map作為索引結(jié)構(gòu),對(duì)進(jìn)入對(duì)應(yīng)子表散列計(jì)算的數(shù)據(jù)提供預(yù)處理,減少對(duì)存儲(chǔ)表的直接操作次數(shù),提高查找效率;同時(shí)使用基于內(nèi)容熱門度參數(shù)的鏈表法解決散列沖突,降低熱門內(nèi)容名的查找時(shí)間,引入分段散列表子表、嵌套分段散列表同層節(jié)點(diǎn)間的并列關(guān)系,在實(shí)現(xiàn)中有效利用多核CPU的計(jì)算能力,高效的完成分段散列表中數(shù)據(jù)的插入、查找和刪除操作,提高內(nèi)容名存儲(chǔ)結(jié)構(gòu)的處理能力。
【專利說明】一種面向內(nèi)容網(wǎng)絡(luò)中內(nèi)容名存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)方法【技術(shù)領(lǐng)域】[0001]本發(fā)明屬于計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域,具體涉及面向內(nèi)容網(wǎng)絡(luò)路由器內(nèi)緩存表中內(nèi)容名存 儲(chǔ)結(jié)構(gòu)?!颈尘凹夹g(shù)】[0002]面向內(nèi)容網(wǎng)絡(luò)是未來網(wǎng)絡(luò)研究的重要內(nèi)容,是針對(duì)現(xiàn)有網(wǎng)絡(luò)體系結(jié)構(gòu)限制高效內(nèi) 容分發(fā)功能的實(shí)現(xiàn)而提出的全新的網(wǎng)絡(luò)體系結(jié)構(gòu),典型代表有命名數(shù)據(jù)網(wǎng)絡(luò)(Named Data Networking)、ICN(Information-Centric Networking)項(xiàng)目等。以網(wǎng)絡(luò)中傳播的內(nèi)容數(shù)據(jù) 為核心,以內(nèi)容互聯(lián)取代主機(jī)互聯(lián)。通過使用內(nèi)容名標(biāo)識(shí)每一個(gè)內(nèi)容,每一個(gè)內(nèi)容都有一個(gè) 可路由查找的內(nèi)容名。網(wǎng)絡(luò)中主要有兩種數(shù)據(jù)包:內(nèi)容請(qǐng)求包(Interest packet)和內(nèi)容 數(shù)據(jù)包(Data packet),請(qǐng)求數(shù)據(jù)包用于發(fā)送對(duì)內(nèi)容的請(qǐng)求,接收到該請(qǐng)求的節(jié)點(diǎn)如果能滿 足該請(qǐng)求就通過內(nèi)容數(shù)據(jù)包來發(fā)送響應(yīng)數(shù)據(jù)。[0003]以內(nèi)容名為網(wǎng)絡(luò)中查找路由的唯一地址,面臨的問題有:網(wǎng)絡(luò)中內(nèi)容海量存在,即 內(nèi)容名空間巨大;內(nèi)容名長度不一,與IP地址的固定長度作對(duì)比,該特點(diǎn)尤為明顯。目前內(nèi) 容命名方法主要有平坦命名和分層命名。分層結(jié)構(gòu)化命名允許內(nèi)容名具有任意個(gè)分層,每 一個(gè)分層可以是任意長度的字符串,解決了內(nèi)容名空間的可擴(kuò)展性。[0004]采用分層命名方式對(duì)內(nèi)容名命名,可實(shí)現(xiàn)網(wǎng)絡(luò)路由的可擴(kuò)展性:分層命名可實(shí)現(xiàn) 名字空間的聚合、實(shí)現(xiàn)內(nèi)容名與內(nèi)容資源綁定,利用內(nèi)容資源分層命名的特點(diǎn)可以設(shè)計(jì)出 可擴(kuò)展的數(shù)據(jù)結(jié)構(gòu)對(duì)內(nèi)容資源進(jìn)行緩存及快速查找。而平坦命名方式則不具有這些特點(diǎn)。[0005]面向內(nèi)容網(wǎng)絡(luò)中,如何提高路由器上內(nèi)容的有效管理以及內(nèi)容名的快速查找,路 由是提升網(wǎng)絡(luò)服務(wù)能力的關(guān)鍵點(diǎn),因此為提升網(wǎng)絡(luò)服務(wù)能力,需要在路由器內(nèi)設(shè)計(jì)內(nèi)容名 存儲(chǔ)結(jié)構(gòu)以解決在路由器上緩存的內(nèi)容的快速查找、插入、刪除等內(nèi)容名管理問題。在對(duì)路 由器上內(nèi)容名存儲(chǔ)結(jié)構(gòu)與快速查找算法研究中,國內(nèi)外主要有多種方法。例如:[0006](I)利用內(nèi)容名分層的特點(diǎn),采用基于哈希表和Trie樹混合數(shù)據(jù)結(jié)構(gòu)。通過對(duì)整 個(gè)內(nèi)容名前綴空間進(jìn)行名字關(guān)鍵字窮舉,在Trie樹結(jié)構(gòu)基礎(chǔ)上使用hash算法已取得較快 的內(nèi)容查找效率,但是由于內(nèi)容名的長度不定,Trie樹中最大搜索深度和平均搜索深度都 很大。[0007](2)基于跳表(SkipTable)對(duì)ICN中內(nèi)容名存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)方法,跳表是在線性鏈 表的基礎(chǔ)上增加多級(jí)前向指針,使用這些指針可以跳過鏈表中的若干節(jié)點(diǎn),提高查找效率。 跳表不僅能提高查找檢索的性能,并且可以同時(shí)提高插入以及刪除操作的性能。但是由于 跳表是一種已排序的快速查找,因此將內(nèi)容名數(shù)字化以及排序引入較多的時(shí)間耗費(fèi)。[0008](3)基于CBF(counting bloom filters)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行內(nèi)容名的快速查找。布 隆濾波器是進(jìn)行快速查找設(shè)計(jì)中典型的數(shù)據(jù)結(jié)構(gòu),但是僅僅支持查找而不能做刪除操作。 可計(jì)數(shù)的布隆濾波器是在布隆濾波器的基礎(chǔ)上進(jìn)行改造,使得濾波器具備計(jì)數(shù)功能,以支 持刪除。此種方法可以快速檢索一個(gè)元素是否在一個(gè)集合里,空間效率和查詢時(shí)間遠(yuǎn)遠(yuǎn)超 過一般方法,但很難消除存在一定概率的誤判。[0009](4)在面向內(nèi)容項(xiàng)目中提出了基于散列表的內(nèi)容名存儲(chǔ)結(jié)構(gòu),利用散列算法快速的查找、插入和刪除操作,為路由器上的內(nèi)容名查找提供高效的管理方案,內(nèi)容名中的前綴都是已知的,因此可以建立多層嵌套散列表(Nested Hash Tables),使用內(nèi)容名前綴的每一個(gè)分層作為關(guān)鍵字進(jìn)行散列查找。但由于較高散列沖突會(huì)導(dǎo)致查找效率低。
【發(fā)明內(nèi)容】
[0010]本發(fā)明的目的在于提供一種面向內(nèi)容網(wǎng)絡(luò)中內(nèi)容名存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)方法。
[0011]為達(dá)到上述目的,本發(fā)明采用了以下技術(shù)方案。
[0012]構(gòu)建嵌套散列表,將嵌套散列表中各散列表替換為分段散列表得到嵌套分段散列表,所述分段散列表內(nèi)各子表以布隆濾波器和位數(shù)組作為索引結(jié)構(gòu),嵌套分段散列表總體上是一個(gè)前綴樹結(jié)構(gòu),不同的是每個(gè)節(jié)點(diǎn)由一個(gè)分段散列表組成,內(nèi)容名的每個(gè)前綴分層對(duì)應(yīng)前綴樹結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn),節(jié)點(diǎn)內(nèi)使用分段散列表完成對(duì)內(nèi)容名前綴分層的存儲(chǔ),內(nèi)容名是采用分層結(jié)構(gòu)化的命名方法對(duì)網(wǎng)絡(luò)中的內(nèi)容進(jìn)行命名而確定的。
[0013]所述分層結(jié)構(gòu)化的命名方法中,內(nèi)容名總體結(jié)構(gòu)上分為全域可路由域名、自組織域名和內(nèi)容屬性標(biāo)示符三級(jí)。
[0014]完整內(nèi)容名在嵌套分段散列表中的插入包括以下步驟:
[0015]I)對(duì)待插入的內(nèi)容名第一分層使用嵌套分段散列表第一層分段散列表中的所有子表對(duì)應(yīng)的散列函數(shù)進(jìn)行散列尋址計(jì)算;
[0016]2)在每個(gè)子表中的位數(shù)組中對(duì)比對(duì)應(yīng)地址是否沖突,并選擇出無沖突的子表,在所述無沖突的子表中選擇對(duì)應(yīng)布隆濾波器中非零位最少的子表對(duì)所述內(nèi)容名第一分層進(jìn)行存儲(chǔ);
[0017]3)在存儲(chǔ)內(nèi)容名第一分層的子表索引結(jié)構(gòu)中完成對(duì)存儲(chǔ)位和校驗(yàn)信息的標(biāo)記;
[0018]4)參照步驟I)-3),使用內(nèi)容名的其余分層在各自對(duì)應(yīng)的嵌套分段散列表分層上依次進(jìn)行散列尋址插入操作,直至插入完整內(nèi)容名。
[0019]當(dāng)所有子表中位數(shù)組對(duì)應(yīng)的地址均發(fā)生沖突,則使用熱門度參數(shù)對(duì)內(nèi)容名在線性鏈表中進(jìn)行排序,將熱門度較高的內(nèi)容名放置到線性鏈表靠前的位置,熱門度指內(nèi)容被請(qǐng)求次數(shù)。
[0020]完整內(nèi)容名在嵌套分段散列表中的查找包括以下步驟:
[0021]I)使用內(nèi)容名第一分層在嵌套分段散列表第一層分段散列表上進(jìn)行散列尋址查找匹配,具體步驟如下:在分段散列表的各個(gè)子表對(duì)應(yīng)的布隆濾波器中進(jìn)行內(nèi)容名第一分層存在性判斷,若內(nèi)容名第一分層不存在,則判定內(nèi)容名第一分層未存儲(chǔ),跳過后續(xù)匹配,結(jié)束對(duì)本子表查找;反之,則對(duì)內(nèi)容名第一分層用對(duì)應(yīng)子表的散列函數(shù)進(jìn)行散列,在子表的位數(shù)組中進(jìn)行對(duì)應(yīng)地址位檢驗(yàn),檢驗(yàn)子表對(duì)應(yīng)散列地址上是否有鍵值存儲(chǔ),若對(duì)應(yīng)位為0,表明此散列地址無數(shù)據(jù)存儲(chǔ),則查找結(jié)束;若對(duì)應(yīng)位為1,表明此散列地址有數(shù)據(jù)存儲(chǔ),則在對(duì)應(yīng)子表內(nèi)完成散列查找,保證查找的準(zhǔn)確性。
[0022]2)參照步驟1),使用內(nèi)容名的其余分層在各自對(duì)應(yīng)的嵌套分段散列表分層上依次進(jìn)行散列尋址查找匹配,直至完成完整內(nèi)容名的查找。
[0023]進(jìn)行內(nèi)容名刪除時(shí),分為完整內(nèi)容名刪除和部分內(nèi)容名刪除。對(duì)于多個(gè)有相同前綴內(nèi)容名中的一個(gè)內(nèi)容名進(jìn)行刪除時(shí),只需要在查找匹配的基礎(chǔ)上,將內(nèi)容名樹結(jié)構(gòu)上存儲(chǔ)該內(nèi)容名的最后若干個(gè)分層鍵值刪除即可;對(duì)于一條前綴路徑上只有一個(gè)內(nèi)容名存儲(chǔ)的情況,將整條路徑上的鍵值都刪除。
[0024]本發(fā)明的有益效果體現(xiàn)在:本發(fā)明中嵌套分段散列表的分層嵌套結(jié)構(gòu)通過相同前綴的內(nèi)容名聚合,減少存儲(chǔ)空間的開銷。作為嵌套分段散列表中的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)單元,分段散列表在散列表的基礎(chǔ)上引入分段思想,通過添加布隆濾波器和Bit-map (位數(shù)組)作為索引結(jié)構(gòu),對(duì)進(jìn)入對(duì)應(yīng)子表散列計(jì)算的數(shù)據(jù)提供預(yù)處理,減少對(duì)存儲(chǔ)表的直接操作次數(shù),提高查找效率;同時(shí)引入分段散列表子表、嵌套分段散列表同層節(jié)點(diǎn)間的并列關(guān)系,在實(shí)現(xiàn)中有效利用多核CPU的計(jì)算能力,高效的完成分段散列表中數(shù)據(jù)的插入、查找和刪除操作,提高內(nèi)容名存儲(chǔ)結(jié)構(gòu)的處理能力。
【專利附圖】
【附圖說明】
[0025]圖1為分層內(nèi)容名示意圖;
[0026]圖2為內(nèi)容名存儲(chǔ)結(jié)構(gòu)組成圖;
[0027]圖3為分段散列表組成圖;
[0028]圖4為分段數(shù)對(duì)查找性能的影響;
[0029]圖5為內(nèi)容名長度對(duì)查找性能的影響;
[0030]圖6為查找性能對(duì)比。
【具體實(shí)施方式】
[0031]下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明。
[0032]本發(fā)明針對(duì)面向內(nèi)容網(wǎng)絡(luò)的特點(diǎn)(面向內(nèi)容網(wǎng)絡(luò)中路由節(jié)點(diǎn)緩存大量前綴差別大、名字長短不同的內(nèi)容名的查找效率問題),為路由器上的內(nèi)容名提供高效的管理方案,設(shè)計(jì)了一種基于嵌套分段散列表的內(nèi)容名存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)方法。
[0033]首先,本方法中是以分層結(jié)構(gòu)化方案對(duì)內(nèi)容進(jìn)行命名為基礎(chǔ)。內(nèi)容名總體結(jié)構(gòu)上分為全域可路由域名、自組織域名和內(nèi)容屬性標(biāo)示符三級(jí),其中第一級(jí)加若干層第二級(jí)域名,構(gòu)成緩存內(nèi)容在網(wǎng)絡(luò)中路由節(jié)點(diǎn)上的可路由前綴域名,內(nèi)容名中必須包含第一級(jí)和第三級(jí)域名,可以包括任意層第二級(jí)域名。如圖1所示,該內(nèi)容名由內(nèi)容源節(jié)點(diǎn)“pare,com” 向網(wǎng)絡(luò)中提供,內(nèi)容名為 “pare, com/video/ffidgetA.mpg/_v<timestamp>/_s3/_p<foundtimes>”。在網(wǎng)絡(luò)中多個(gè)路由節(jié)點(diǎn)緩存后,此時(shí)該內(nèi)容的前綴路由域名可以是“pare.com/video/WidgetA.mpg”、“parc.com/video”、或“pare, com”,前兩個(gè)表不網(wǎng)絡(luò)中緩存節(jié)點(diǎn)的可路由域名,第三個(gè)表示源節(jié)點(diǎn)域名(此時(shí),按照該前綴進(jìn)行路由,等同于IP網(wǎng)絡(luò)中對(duì)主機(jī)路由)。
[0034]嵌套分段散列表的結(jié)構(gòu)如圖2所示。該部分的具體內(nèi)容如下:
[0035]首先構(gòu)建分段散列表。完整的分段散列表數(shù)據(jù)結(jié)構(gòu)包括S個(gè)子表,每一個(gè)子表維護(hù)各自的布隆濾波器和Bit-map作為索引結(jié)構(gòu),如圖3所示。結(jié)構(gòu)中S個(gè)子表之間是相互并行的關(guān)系,插入一個(gè)數(shù)據(jù)時(shí),該數(shù)據(jù)可能被插入到任意一個(gè)子表。完成插入后,在對(duì)應(yīng)的子表的索引結(jié)構(gòu)布隆濾波器和Bit-map上進(jìn)行標(biāo)記。對(duì)內(nèi)容名進(jìn)行查找時(shí),對(duì)S個(gè)子表索引位進(jìn)行并行計(jì)算,確定內(nèi)容名存儲(chǔ)的子表。在子表內(nèi)使用散列完成對(duì)內(nèi)容名的完整匹配。
[0036]普通散列表使用一個(gè)一維數(shù)組結(jié)構(gòu)作為散列表的存儲(chǔ)結(jié)構(gòu),進(jìn)行鍵值插入時(shí),輸入鍵值會(huì)在數(shù)組中散列存儲(chǔ),分段散列表將一個(gè)散列表分成S個(gè)較小的子表,進(jìn)行鍵值插入時(shí),存在S個(gè)潛在的存儲(chǔ)位置,選擇其中一個(gè)不發(fā)生沖突的子表完成輸入鍵值在子表內(nèi)散列存儲(chǔ)。采用對(duì)散列表的分段設(shè)計(jì),對(duì)數(shù)據(jù)存儲(chǔ)區(qū)進(jìn)行多個(gè)劃分,可以將鍵值更均勻的插入到表中,降低沖突發(fā)生的概率,提高查找的效率。
[0037]Bit-map作為一種位數(shù)組數(shù)據(jù)結(jié)構(gòu),使用散列算法直接尋址訪問快且存儲(chǔ)空間小。通過使用Bit-map作為數(shù)據(jù)存在性索引位的使用,可以直接跳過不必要的入表匹配校驗(yàn)的過程,減少對(duì)散列表的直接操作耗費(fèi)的時(shí)間代價(jià)。布隆濾波器(Bloom Filter)是一種由一個(gè)很長的數(shù)組和一系列隨機(jī)映射函數(shù)組成的數(shù)據(jù)結(jié)構(gòu),布隆濾波器可以用于快速檢索一個(gè)兀素是否在一個(gè)集合中。
[0038]盡管使用分段散列表可以降低沖突出現(xiàn)的概率,使用Bit-map和布隆濾波器可以降低沖突后直接查找消耗的計(jì)算代價(jià),但是當(dāng)插入的內(nèi)容名過多時(shí),仍然無法避免沖突,出現(xiàn)沖突后,使用鏈表法解決沖突。由于不同時(shí)期、不同區(qū)域、不同用戶群對(duì)內(nèi)容的需求度不同,網(wǎng)絡(luò)中不同的內(nèi)容的受關(guān)注度也不盡相同,內(nèi)容熱門度參數(shù)將不同需求度的內(nèi)容在內(nèi)容名中進(jìn)行區(qū)分。本方法中當(dāng)散列表出現(xiàn)沖突時(shí),將出現(xiàn)沖突的內(nèi)容按照內(nèi)容熱門度參數(shù)由大到小排序后,依次放置在線性鏈表中減少對(duì)熱門度高的內(nèi)容查找使用的時(shí)間,提高查找效率。
[0039]本方法對(duì)散列表進(jìn)行分段處理,可以用于解決沖突而引入的額外計(jì)算;為減少分段散列表對(duì)數(shù)據(jù)的插入、查找和刪除過程中對(duì)所有分段表進(jìn)行直接訪問產(chǎn)生的代價(jià),在每一個(gè)分段表子表中添加存儲(chǔ)空間小、查找速度塊的索引結(jié)構(gòu)Bit-map和計(jì)數(shù)型布隆濾波器,減少插入、查找過程中的直接入表操作,提高數(shù)據(jù)結(jié)構(gòu)操作效率;使用鏈表法解決沖突,通過對(duì)內(nèi)容熱門度進(jìn)行排序,降低熱門度高的內(nèi)容名查找的時(shí)間,降低對(duì)熱門內(nèi)容名多次重復(fù)查找引入的計(jì)算代價(jià)。
[0040]在完成分段散列表的基礎(chǔ)上對(duì)嵌套分段散列表進(jìn)行設(shè)計(jì),實(shí)現(xiàn)對(duì)多個(gè)前綴分層內(nèi)容名的存儲(chǔ)處理。嵌套分段散列表的分層嵌套結(jié)構(gòu)使得可以通過相同前綴的聚合,減少內(nèi)存儲(chǔ)空間的開銷。嵌套分段散列表從總體結(jié)構(gòu)而言是一個(gè)前綴樹結(jié)構(gòu),不同的是每個(gè)節(jié)點(diǎn)上由一個(gè)分段散列表組成,內(nèi)容名的每一個(gè)前綴分層對(duì)應(yīng)樹結(jié)構(gòu)的一個(gè)節(jié)點(diǎn)。
[0041]完整內(nèi)容名在〃嵌套分段散列表〃中存儲(chǔ)時(shí),內(nèi)容名第一分層存儲(chǔ)到第一層分段散列表的一個(gè)散列地址,根據(jù)該存儲(chǔ)位的鏈表指針指向第二分層的某分段散列表,在該表中存儲(chǔ)內(nèi)容名第二分層,以此類推,直到內(nèi)容名所有分層存儲(chǔ)完畢。
[0042]使用內(nèi)容名前綴的每一個(gè)分層作為關(guān)鍵字在嵌套分段散列表中進(jìn)行散列操作時(shí),關(guān)鍵的處理在分段散列表中。分段散列表中包含內(nèi)容名插入、查找和刪除三種內(nèi)容名操作方式。具體分析如下:
[0043]在分段散列表的基礎(chǔ)上,針對(duì)一個(gè)鍵值存在多個(gè)潛在對(duì)應(yīng)存儲(chǔ)空間的缺陷,為每個(gè)子表設(shè)計(jì)布隆濾波器和位數(shù)組作為子表的索引結(jié)構(gòu),確保鍵值在分段散列表中只有一個(gè)存儲(chǔ)位與之相對(duì)應(yīng)。在分段散列表中進(jìn)行鍵值查找時(shí),首先探測(cè)布隆濾波器中該鍵值是否存儲(chǔ),由于Bloom Filter本身存在查找假陽性,所以在經(jīng)過Bloom Filter查找后,再使用位數(shù)組進(jìn)行鍵值查找,確定鍵值在子表中確定的存儲(chǔ)位置,在確定子表后,子表內(nèi)直接使用鍵值散列尋址訪問查找。下面從插入、查找和刪除三個(gè)操作進(jìn)行描述。
[0044]插入操作[0045]I)對(duì)待插入的鍵值使用多個(gè)子表分別對(duì)應(yīng)的散列函數(shù)進(jìn)行散列尋址計(jì)算;
[0046]2)在每個(gè)子表中的Bit-map索引結(jié)構(gòu)中對(duì)比對(duì)應(yīng)地址是否沖突,并選擇出無沖突的子表,在所述無沖突的子表中選擇對(duì)應(yīng)布隆濾波器中非零位最少的子表對(duì)鍵值進(jìn)行存儲(chǔ);
[0047]3)在子表的索引結(jié)構(gòu)中完成對(duì)存儲(chǔ)位和校驗(yàn)信息的標(biāo)記。
[0048]查找操作
[0049]I)對(duì)待查找的鍵值使用多個(gè)子表分別對(duì)應(yīng)的散列函數(shù)進(jìn)行散列尋址計(jì)算,在各自對(duì)應(yīng)的布隆濾波器中進(jìn)行鍵值存在性判斷,對(duì)于沒有經(jīng)過布隆濾波器匹配的數(shù)據(jù),可以判定其一定不在結(jié)構(gòu)內(nèi)存儲(chǔ),可以跳 過后續(xù)匹配,結(jié)束查找;
[0050]2)在完成子表布隆濾波器內(nèi)鍵值匹配,確定子表后,在子表的位數(shù)組中進(jìn)行對(duì)應(yīng)地址位檢驗(yàn),檢驗(yàn)子表對(duì)應(yīng)散列地址上是否有鍵值存儲(chǔ),對(duì)于為空的位數(shù)組表明沒有鍵值存儲(chǔ),查找結(jié)束;
[0051]3)經(jīng)過位數(shù)組校驗(yàn)后,進(jìn)入子表完成鍵值的散列查找,保證查找的準(zhǔn)確性。
[0052]刪除操作
[0053]I)對(duì)鍵值進(jìn)行查找操作,如果查找到鍵值在表結(jié)構(gòu)中存儲(chǔ),則進(jìn)入刪除操作,否則退出刪除操作;
[0054]2)在查找到鍵值存儲(chǔ)的子表中的存儲(chǔ)空間內(nèi)將鍵值刪除;
[0055]3)在子表對(duì)應(yīng)的索引結(jié)構(gòu)一布隆濾波器和位數(shù)組中將鍵值占用的存儲(chǔ)位清零,完成鍵值刪除。
[0056]在本實(shí)施例中,由于引入分段散列表子表、嵌套分段散列表同層節(jié)點(diǎn)間的并列關(guān)系,通過使用支持多核并行進(jìn)程運(yùn)算的Go語言,充分使用多核計(jì)算機(jī)的計(jì)算能力進(jìn)行試驗(yàn)仿真來驗(yàn)證本發(fā)明的可行性和有效性。
[0057]由于使用Go語言進(jìn)行并行程序設(shè)計(jì)跟計(jì)算機(jī)硬件相關(guān),因此將實(shí)驗(yàn)仿真所用計(jì)算機(jī)的參數(shù)說明如下:
[0058]表1實(shí)驗(yàn)環(huán)境
[0059]
_操作系統(tǒng)_Ubimtu 12.10_
CPUIntel(R) Core(TM) ?3-2330Μ CPU @ 2.20GHz
雙核、四線程
內(nèi)存2G
Go 語 g 版本go I.0.3
[0060]本發(fā)明在對(duì)內(nèi)容名存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)中,對(duì)散列表采用了分段的思想,減少在一個(gè)大表中插入過多數(shù)據(jù)后引起沖突發(fā)生的概率,分段數(shù)越多,表結(jié)構(gòu)中出現(xiàn)沖突的概率越小,單次操作的復(fù)雜度接近理想散列表的算法復(fù)雜度O (1),但是隨著分段數(shù)的增加,由于多個(gè)子表上的匹配查找,引入了額外的計(jì)算,因此需要對(duì)分段散列表使用的分段數(shù)進(jìn)行約束,使得在保證接近理想散列表的查找效率的同時(shí),減少因?yàn)榉侄我氲挠?jì)算量。
[0061]通過對(duì)圖4的觀察可以看到在裝載因子小于0.8時(shí),使用8個(gè)分段(seg)可以達(dá)到理想O (I)的查找效率。分段數(shù)為I時(shí),分段散列表退化為普通散列表,通過圖4中對(duì)比可以明顯看得到,采用分段方法,可以使得存儲(chǔ)結(jié)構(gòu)的查找效率接近于理想散列表。
[0062]由于對(duì)于嵌套分段散列表的查找效率的影響包括:內(nèi)容名長度和節(jié)點(diǎn)上內(nèi)容名查找效率。首先使用不同長度內(nèi)容名的在嵌套分段散列表中進(jìn)行查找。對(duì)于嵌套分段散列表中的基礎(chǔ)結(jié)構(gòu)散列表采用裝載因子取典型值a=0.75,實(shí)現(xiàn)查找性能和表空間利用率的平衡。圖5中可以看出,當(dāng)使用長度(L)較長的內(nèi)容名在內(nèi)容名存儲(chǔ)結(jié)構(gòu)中進(jìn)行查找時(shí),查找效率會(huì)隨著內(nèi)容名長度的增加而降低。
[0063]為了保證試驗(yàn)的科學(xué)性,對(duì)比試驗(yàn)中,采用的內(nèi)容名前綴分層長度在1-10內(nèi)完全隨機(jī),最后統(tǒng)計(jì)得到試驗(yàn)中使用的內(nèi)容名前綴長度平均值為4。散列表和分段散列表的裝載因子都選擇為a=0.75。其中嵌套分段散列表中對(duì)分段散列表采用8段分層結(jié)構(gòu)。
[0064]兩個(gè)內(nèi)容名存儲(chǔ)結(jié)構(gòu)中分別存儲(chǔ)7500個(gè)任意前綴的內(nèi)容名,進(jìn)行內(nèi)容請(qǐng)求(符合Zipf定律)時(shí),前7500次是對(duì)內(nèi)容名存儲(chǔ)結(jié)構(gòu)中存儲(chǔ)的內(nèi)容名的查找,從圖6中可以明顯看出兩種內(nèi)容名存儲(chǔ)結(jié)構(gòu)在對(duì)內(nèi)容名查找過程中產(chǎn)生的次數(shù)差;內(nèi)容請(qǐng)求的后7500次是內(nèi)容名存儲(chǔ)結(jié)構(gòu)無法滿足的內(nèi)容請(qǐng)求,對(duì)于嵌套分段散列表而言,由于添加了查找索引結(jié)構(gòu),避免了直接入表匹配查找,減少不必要的查找,因此保持曲線基本不變。
[0065]至此,面向內(nèi)容網(wǎng)絡(luò)中基于嵌套分段散列表的內(nèi)容名存儲(chǔ)結(jié)構(gòu)和內(nèi)容名管理完成。使用分段散列表作為內(nèi)容名存儲(chǔ)結(jié)構(gòu)中基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)單元,分段散列表減少了沖突發(fā)生的概率,保留了散列算法高效的操作性能。同時(shí)在子表中維護(hù)Bit-map作為存在索引位,為進(jìn)入子表散列計(jì)算的數(shù)據(jù)處理提供預(yù)處理,減少對(duì)存儲(chǔ)表的直接操作,提高查找效率。利用布隆濾波器空間效率高、查詢時(shí)間短的特點(diǎn),快速判斷被查找的數(shù)據(jù)是否存在存儲(chǔ)表中,減少分段散列表中不必要的查找操作。嵌套分段散列表的分層嵌套結(jié)構(gòu)實(shí)現(xiàn)相同前綴的內(nèi)容名聚合,減少內(nèi)存儲(chǔ)空間的開銷,采用分段散列表對(duì)內(nèi)容名前綴分層散列存儲(chǔ),降低節(jié)點(diǎn)上查找的時(shí)間消耗,提高內(nèi)容名在存儲(chǔ)結(jié)構(gòu)中的查找效率,確保了內(nèi)容名存儲(chǔ)結(jié)構(gòu)查找性能的優(yōu)異。
【權(quán)利要求】
1.一種面向內(nèi)容網(wǎng)絡(luò)中內(nèi)容名存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)方法,其特征在于:包括以下步驟:構(gòu)建嵌套散列表,將嵌套散列表中各散列表替換為分段散列表得到嵌套分段散列表,所述分段散列表內(nèi)各子表以布隆濾波器和位數(shù)組作為索引結(jié)構(gòu),嵌套分段散列表總體上是 一個(gè)前綴樹結(jié)構(gòu),每個(gè)節(jié)點(diǎn)由一個(gè)分段散列表組成,內(nèi)容名的每個(gè)前綴分層對(duì)應(yīng)前綴樹結(jié) 構(gòu)中的一個(gè)節(jié)點(diǎn),節(jié)點(diǎn)內(nèi)使用分段散列表完成對(duì)內(nèi)容名前綴分層的存儲(chǔ)。
2.根據(jù)權(quán)利要求1所述一種面向內(nèi)容網(wǎng)絡(luò)中內(nèi)容名存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)方法,其特征在 于:內(nèi)容名總體結(jié)構(gòu)上分為全域可路由域名、自組織域名和內(nèi)容屬性標(biāo)示符三級(jí)。
3.根據(jù)權(quán)利要求1所述一種面向內(nèi)容網(wǎng)絡(luò)中內(nèi)容名存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)方法,其特征在 于:完整內(nèi)容名在嵌套分段散列表中的插入包括以下步驟:1)對(duì)待插入的內(nèi)容名第一分層使用嵌套分段散列表第一層分段散列表中的所有子表 對(duì)應(yīng)的散列函數(shù)進(jìn)行散列尋址計(jì)算;2)在每個(gè)子表中的位數(shù)組中對(duì)比對(duì)應(yīng)地址是否沖突,并選擇出無沖突的子表,在所述 無沖突的子表中選擇對(duì)應(yīng)布隆濾波器中非零位最少的子表對(duì)所述內(nèi)容名第一分層進(jìn)行存 儲(chǔ);3)在存儲(chǔ)內(nèi)容名第一分層的子表索引結(jié)構(gòu)中完成對(duì)存儲(chǔ)位和校驗(yàn)信息的標(biāo)記;4)參照步驟I)_3),使用內(nèi)容名的其余分層在各自對(duì)應(yīng)的嵌套分段散列表分層上依次 進(jìn)行散列尋址插入操作,直至插入完整內(nèi)容名。
4.根據(jù)權(quán)利要求3所述一種面向內(nèi)容網(wǎng)絡(luò)中內(nèi)容名存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)方法,其特征在 于:當(dāng)所有子表中位數(shù)組對(duì)應(yīng)的地址均發(fā)生沖突,則使用熱門度參數(shù)對(duì)內(nèi)容名在線性鏈表 中進(jìn)行排序,將熱門度較高的內(nèi)容名放置到線性鏈表靠前的位置,熱門度指內(nèi)容被請(qǐng)求次 數(shù)。
5.根據(jù)權(quán)利要求1所述一種面向內(nèi)容網(wǎng)絡(luò)中內(nèi)容名存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)方法,其特征在 于:完整內(nèi)容名在嵌套分段散列表中的查找包括以下步驟:1)使用內(nèi)容名第一分層在嵌套分段散列表第一層分段散列表上進(jìn)行散列尋址查找匹 配,具體步驟如下:在分段散列表的各個(gè)子表對(duì)應(yīng)的布隆濾波器中進(jìn)行內(nèi)容名第一分層存 在性判斷,若內(nèi)容名第一分層不存在,則判定內(nèi)容名第一分層未存儲(chǔ),跳過后續(xù)匹配,結(jié)束 對(duì)本子表查找;反之,則對(duì)內(nèi)容名第一分層用對(duì)應(yīng)子表的散列函數(shù)進(jìn)行散列,在子表的位數(shù) 組中進(jìn)行對(duì)應(yīng)地址位檢驗(yàn),檢驗(yàn)子表對(duì)應(yīng)散列地址上是否有鍵值存儲(chǔ),若對(duì)應(yīng)位為O,表明 此散列地址無數(shù)據(jù)存儲(chǔ),則查找結(jié)束;若對(duì)應(yīng)位為1,表明此散列地址有數(shù)據(jù)存儲(chǔ),則在對(duì) 應(yīng)子表內(nèi)完成散列查找;2)參照步驟I),使用內(nèi)容名的其余分層在各自對(duì)應(yīng)的嵌套分段散列表分層上依次進(jìn)行 散列尋址查找匹配,直至完成完整內(nèi)容名的查找。
6.根據(jù)權(quán)利要求1所述一種面向內(nèi)容網(wǎng)絡(luò)中內(nèi)容名存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)方法,其特征在 于:進(jìn)行內(nèi)容名刪除時(shí),對(duì)于多個(gè)有相同前綴內(nèi)容名中的一個(gè)內(nèi)容名進(jìn)行刪除時(shí),只需要在 查找匹配的基礎(chǔ)上,將內(nèi)容名樹結(jié)構(gòu)上存儲(chǔ)該內(nèi)容名的最后若干個(gè)分層鍵值刪除即可;對(duì) 于一條前綴路徑上只有一個(gè)內(nèi)容名存儲(chǔ)的情況,將整條路徑上的鍵值都刪除。
【文檔編號(hào)】G06F17/30GK103559215SQ201310478933
【公開日】2014年2月5日 申請(qǐng)日期:2013年10月14日 優(yōu)先權(quán)日:2013年10月14日
【發(fā)明者】曲樺, 趙季紅, 曹超, 王偉萍 申請(qǐng)人:西安交通大學(xué), 蘇州彩云網(wǎng)絡(luò)科技有限公司