專利名稱:一種基于共享內(nèi)存映射的url去重方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計算機網(wǎng)絡(luò)信息處理領(lǐng)域,涉及統(tǒng)ー資源定位符URL(UniformResource Locator)的去重方法與產(chǎn)品,具體涉及ー種基于共享內(nèi)存映射的URL去重方法及裝置。
背景技術(shù):
近年來互聯(lián)網(wǎng)技術(shù)的發(fā)展,對重復統(tǒng)一資源定位符URL(Uniform ResourceLocator)的采集過濾與去重處理,顯得越來越重要。URL去重技術(shù)廣泛應(yīng)用于網(wǎng)絡(luò)審計系統(tǒng)、搜索引擎系統(tǒng)中。如果能夠快速識別出重復URL,免去重復URL的后續(xù)處理步驟,將大大提聞性能。URL去重技術(shù),需要從兩個方面考慮URL存儲空間和URL匹配速度。URL的存儲空間是指可以處理非重復URL的最大數(shù)目和每條URL所占用的內(nèi)存空間。URL匹配速度是通過判斷一條URL記錄是否為重復URL所用的時間來衡量的。國外應(yīng)用URL去重技術(shù)的相關(guān)產(chǎn)品很多,所有的爬蟲系統(tǒng)都需要用到此功能。開源的搜索引擎Larbin使用了 Bloom Filter算法實現(xiàn)了 URL的去重過濾功能,這是ー種URL所占存儲空間低而且URL過濾速度比較快的算法。Bloom Filter算法是Burton Bloom在1970 年提出的(Burton Bloom. Bloom filter[EB/0L]. http://en. wikipedia. org/wiki/Bloom_filter, 1970)。然而,Bloom Filter算法有一個缺陷,即有一定程度的誤判,即將非重復的URL判定為重復的URL。在提高URL匹配去重速度的研究領(lǐng)域中,哈希表(Hash Table)是ー個重要的研究方向。由于哈希表在查找信息時速度非???,所以在內(nèi)存中存儲URL時一般都采用基于哈希表的存儲結(jié)構(gòu),因而在URL去重技術(shù)中針對哈希表和哈希函數(shù)的研究比較有價值。西安交通大學的鄭衛(wèi)斌等人實現(xiàn)了基于哈希表的URL去重器,使用位圖法提高了 URL過濾的性能(鄭衛(wèi)斌,張德運,丁會寧,李繼華,高磊.基于哈希表的高性能URL過濾器研究.小型微型計算機系統(tǒng).2005,26 (2) ; 17-180頁)。鄭衛(wèi)斌的URL去重器選取適用于字符串哈希的位哈希函數(shù),也實現(xiàn)了簡單的存儲優(yōu)化和高速緩存優(yōu)化,并通過實驗證明了這種基于位圖法哈希表的URL去重器的高效性。使用哈希表來進行URL匹配去重的技術(shù),保存的URL數(shù)目取決于哈希表桶的大小,到最后會受限于內(nèi)存的大小,同時哈希表方案完全存儲于內(nèi)存,并未保存上一次的結(jié)果,去重的記錄未能保存,因此完全使用哈希表的URL去重裝置在海量URL去重中不適合。除了將海量的URL存儲到硬盤上,對URL本身的存儲進行優(yōu)化,也是研究的內(nèi)容之一。Kasom等人提出了一種基于Delta Encoding的方法,并使用AVL樹來提高查找的效率,取得了大約50%的壓縮率,達到的效果非常明顯(Koht-arsa K, Sanguanpong S. In-memoryURL Compression, National Computer science and Engineering しonference,しhiangMai,Thailand,November 7-9,2001 :425-428)。Genova 等人提出了使用簽名來提高 URL 查找速度和降低存儲空間的方法(Genova Z,Christensen K. Efficient Summarization ofURLs using CRC32 for Implementing URL Switching, CONFERENCE ON LOCAL COMPUTERNETWORKS, 2002 :102_105P)。他所謂的簽名,實際上就是使用 CRC32(Cyclic RedundancyCheck 32)將URL編碼成固定長度,使用CRC32碼來代替URL字符串作為哈希表的鍵,這樣既降低的URL的存儲空間,又提高了查找和去重速度。然而,海量URL的CRC32編碼全部存儲內(nèi)存中,仍然受限于硬件條件,同時匹配速度也是個問題
發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)的上述不足,本發(fā)明的目的在于提供聞效的基于共孚內(nèi)存映射SMM(Shared Memory-Mapped)的URL去重方法,解決現(xiàn)有URL去重方法的不足。本發(fā)明的目的還在提供一種實現(xiàn)上述方法的URL去重裝置,實現(xiàn)了 URL去重的功能,提高了去重速度、降低了存儲空間(每條URL占I位),同時保存了去重結(jié)果,可以應(yīng)用于搜索引擎、網(wǎng)絡(luò)審計系統(tǒng)等。本發(fā)明的基于共享內(nèi)存映射的URL去重方法及裝置,其特征包括去重方法包括初始化、URL簽名、簽名索引、共享內(nèi)存映射和按位判重;裝置包括中央處理器、內(nèi)存儲器、外存儲器、網(wǎng)卡和輸入輸出設(shè)備,這些設(shè)備均與中央處理器連接,所述的中央處理器又包括連接在一起的URL捕獲模塊、URL簽名模塊、簽名索引模塊、共享內(nèi)存映射模塊和按位判重模塊。初始化裝置所需要相關(guān)數(shù)據(jù)的加載與共享內(nèi)存映射的初始化;本發(fā)明的目的是通過下列技術(shù)方案實現(xiàn)的本裝置所述的中央處理器用于連接控制裝置的各個模塊,完成裝置的功能;本裝置所述的網(wǎng)卡用于捕獲存儲URL信息的數(shù)據(jù)包;本裝置所述的內(nèi)存儲器是裝置運行中數(shù)據(jù)的存儲介質(zhì);本裝置所述的外存儲器是裝置保存去重結(jié)果文件的存儲介質(zhì);本裝置所述的URL捕獲模塊通過網(wǎng)卡將網(wǎng)絡(luò)數(shù)據(jù)包解析,井分析出相應(yīng)的URL,供裝置其它模塊使用;URL簽名模塊用于將不定長的URL轉(zhuǎn)換成定長的簽名,此簽名在一定范圍內(nèi)是唯ー對應(yīng)的;簽名的方法包括但不限于CRC32 (Cyclical Redundancy Check 32,共有32位ニ進制數(shù)),SHAl (Secure Hash Algorithm 1,共有 160 位ニ進制數(shù)),MD5 (Message DigestAlgorithm5,共有128位ニ進制數(shù))等算法;簽名索引模塊根據(jù)簽名的字節(jié)數(shù)X(X = Xl 1+X12),選取前XlI字節(jié)作為文件名,剩余xl2字節(jié)作為文件內(nèi)容;簽名字節(jié)數(shù)X比較大,則拆分為3級甚至更多(若3級以上,則分為多級目錄),以3級為例X = x21+x22+x23,將簽名的前x21字節(jié)作為目錄名,中間x22字節(jié)作為文件名,剰余x23字節(jié)作為文件內(nèi)容;索引的方法就是根據(jù)簽名指定的字節(jié)查找到相應(yīng)的目錄及文件;共享內(nèi)存映射模塊由于存儲為文件形式,但讀寫文件系統(tǒng)開銷很大,故采用共享內(nèi)存映射的方法,將內(nèi)存和上述簽名文件一一對應(yīng);直接對內(nèi)存操作,即由共享內(nèi)存映射模塊完成內(nèi)存與文件的冋步;按位判重模塊根據(jù)簽名索引,找到簽名文件內(nèi)容對應(yīng)共享內(nèi)存位置,讀取內(nèi)存的值,并判斷此URL是否重復。
本發(fā)明的基于共享內(nèi)存映射的URL去重方法,包括以下步驟I)初始化步驟根據(jù)預定的簽名索引方案,初始化文件到內(nèi)存,完成共享內(nèi)存映射的初始化;2) URL捕獲步驟,是從網(wǎng)卡獲取的信息中的URL識別出來供裝置去重。3) URL簽名步驟,是從獲取URL開始,將URL通過簽名算法轉(zhuǎn)換為定長的字節(jié),然后將簽名字節(jié)傳給簽名索引步驟,根據(jù)簽名算法的不同,采用不同的詳細步驟。
4)簽名索引步驟,是根據(jù)所選的目錄級別,選定的索引方案,其實現(xiàn)直接影響裝置初始化具體實現(xiàn);5)共享內(nèi)存映射步驟,使得進程之間通過映射同一個簽名文件實現(xiàn)共享內(nèi)存,簽名文件被映射到進程地址空間后,進程可以像訪問普通內(nèi)存ー樣對文件進行訪問,不必再調(diào)用read(),write()等操作;換句話說就是把一個文件的內(nèi)容在內(nèi)存里面做ー個映像,內(nèi)存操作比磁盤操作要快;6)按位判重步驟,根據(jù)簽名文件內(nèi)容字段的值,索引找到所在位,判斷此位是否為1,若為I則此URL為重復URL,若為O則將此位置I,并返回非重URL的結(jié)果。本發(fā)明的有益效果在于通過簽名,將URL最終以簽名文件中的I位來存儲,極大的壓縮了 URL所占的存儲空間;通過共享內(nèi)存映射,將對內(nèi)存的操作同步到簽名文件中,提高了 URL去重的速度^fURL對應(yīng)的位存儲于簽名文件中,長期保存了去重結(jié)果。
圖I是本發(fā)明結(jié)構(gòu)示意圖;圖2是基于共享內(nèi)存映射的URL去重方法的流程圖;圖3是共享內(nèi)存映射的處理流程;圖4是基于位圖法哈希表的URL去重流程;
具體實施例方式下面結(jié)合附圖舉例對本發(fā)明做進ー步詳細描述圖I所示為ー種基于共享內(nèi)存映射的URL去重方法的流程,包括裝置初始化模塊裝置所需要相關(guān)數(shù)據(jù)的加載與共享內(nèi)存映射的初始化;中央處理器用于連接控制裝置的各個模塊,完成裝置的功能;網(wǎng)卡用于捕獲存儲URL信息的數(shù)據(jù)包;內(nèi)存儲器裝置運行時數(shù)據(jù)的存儲介質(zhì);外存儲器裝置保存去重結(jié)果文件的存儲介質(zhì);URL捕獲模塊獲取所需要去重的URL ;URL簽名模塊用于將不定長的URL轉(zhuǎn)換成定長的簽名;簽名索引模塊根據(jù)簽名的字節(jié)分級索引到對應(yīng)的簽名文件;內(nèi)存映射模塊將簽名文件與內(nèi)存進行共享映射,使裝置對內(nèi)存的操作同步更新到簽名文件中;按位判重模塊根據(jù)簽名文件內(nèi)容中對應(yīng)位的值來判斷此URL是否重復。實施例
圖2給出了一種基于共享內(nèi)存映射的URL去重方法的流程,以簽名算法使用CRC32為例。I、總體設(shè)計基于共享內(nèi)存映射的URL去重裝置的實施例總體設(shè)計如下首先裝置初始運行時進行始化,將存儲于外存的URL簽名文件在內(nèi)存中全部打開,如果文件不存在則創(chuàng)建并將所有位置0,共享內(nèi)存映射模塊進行共享內(nèi)存映射獲取SMM指針,然后即可關(guān)閉文件。以后對SMM指針的讀寫操作,就會映射到U RL存儲文件的讀寫。將網(wǎng)卡捕獲的URL進行CRC32簽名,獲取CRC32碼。將SMM指針全部放到一個數(shù)組中管理,根據(jù)CRC32碼的前8位,從這個數(shù)組中找到相應(yīng)的SMM指針,再判斷此SMM指針對應(yīng)的內(nèi)存區(qū)的相應(yīng)位的值,如果是1,則表示為重復的URL,如果是0,就是非重復的URL,同時將此位置為I。重復如上流程,即是基于共享內(nèi)存映射的URL去重裝置的實現(xiàn)流程。2、簽名文件索引本實施例使用CRC32算法簽名。CRC32是ー個32位的值,將此信息存入文件,文件總共232位,即232/8等于512MB字節(jié),所以可以考慮將其全部存入ー個字節(jié)大小為512MB的文件中。然而此時有個問題,盡管一直讀寫的是ー個文件,但是在232大小的文件中尋址,肯定會比較慢。因此,本實施例的方案是取CRC32值前8位作為文件名,即能產(chǎn)生名為00到FF的256個文件,將其余24位存儲在ー個2MB大小的文件,單個文件尋址空間為224。3、共享內(nèi)存映射基于共享內(nèi)存映射的URL去重方法中,共享內(nèi)存映射的處理流程如圖3所示。模塊先要判斷簽名文件是否已經(jīng)被創(chuàng)建,若是則直接打開,否則需要創(chuàng)建文件,并固定文件大小且按位置O ;然后再進行共享內(nèi)存映射,同時需要SMM同步,并返回SMM指針,供調(diào)用去重裝置所用。4、實驗結(jié)果與分析I)實驗步驟實驗的測試數(shù)據(jù)來源于一次網(wǎng)絡(luò)捕包存儲的包含URL信息的文件,所含URL數(shù)目為75012,則平均每條URL長度為50. 5字節(jié)。實驗的流程是將此數(shù)據(jù)包文件中的URL進行URL去重流程,查詢此URL (若查詢不到此記錄則插入此記錄),記錄查詢時間,然后讀取下一條記錄,重復上述操作。最后在75012條記錄全部查完后,再重新讀取此文件,記錄第二次查詢一遍全部URL的時間。實驗方案本實施例的測試結(jié)果與基于位圖法哈希表的URL去重過濾器和基于Bloom Filter算法實現(xiàn)的URL去重器進行實驗對比,論證了本發(fā)明實現(xiàn)URL去重方法的高效性。另外,根據(jù)每種方法,修改相關(guān)參數(shù)來獲得相應(yīng)的實驗數(shù)據(jù)。每個方法實驗若干次,取平均值。本發(fā)明中,每個裝置的實驗次數(shù)為4或5,然后得出一平均值,來證明實驗的效果O2)對比方案描述本發(fā)明的測試方案中實現(xiàn)了西安交通大學鄭衛(wèi)斌等人提出的基于位圖法哈希表的高性能URL去重器,并與基于共享內(nèi)存映射的URL去重裝置進行了對比?;谖粓D法哈希表的URL去重流程如圖4所不?;贐loom Filter算法的URL去重方法設(shè)計Bloom Filter算法的實現(xiàn),影響其處理速度的因素在于位數(shù)組大小m值和哈希函數(shù)個數(shù)k的選擇,當然考慮誤判率吋,還要考慮元素的數(shù)量η。在本實驗實現(xiàn)的Bloom Filter算法中,對哈希函數(shù)個數(shù)k值的獲取則采用了如下的方案選擇對URL字符串進行CRC32編碼(對應(yīng)I個無符號整形值)、MD5編碼(對應(yīng)4個無符號整形值)、安全散列標準SHAl編碼(對應(yīng)5個無符號整形值),所以通過這三個算法編碼過程所得的值,可以相當于10次哈希函數(shù)的值。而且,可以選擇三個編碼值的組合,就可以生成不同的k值,k的最大值為10,來獲得不同的實驗數(shù)據(jù)。3)實驗結(jié)果 基于共享內(nèi)存映射的URL去重裝置實驗結(jié)果如表I所示。表I基于共享內(nèi)存映射的URL去重裝置的實驗結(jié)果
ΤΙ7Γ"""程序運行后第一次查詢時間(單查詢一遍后再查詢時間(單^fi
位彳敫秒)位微秒)
1203883817020575012
234217216587675012
342792516950875012
434221916581175012 平均值 t 787788.5" T 167850 j使用基于位圖法的URL去重器的實驗結(jié)果如表2所示。表2使用基于位圖法哈希表的URL去重器的實驗結(jié)果
哈希表大小"]"%一次查詢時間查詢并插入時間全部插完后再查洵時間
(桶數(shù))(單-位微秒)(單位微秒)(單位微秒)
10347425931563284634547932
100349777811163973487212 "
1000484152280649482715
10000174795252472185054基于Bloom Filter 算法的哈希函數(shù)個數(shù),kcrc32 = I, kmd5 = 4, kshal = 5,選擇三種編碼的組合,則k就是相應(yīng)kx值相加,可以組合出多種不同的k值,k的最大值為10。在本實驗中,Bloom Filter算法的m值分別80000和8000000,η = 75012,k根據(jù)不同的編碼組合,取同的值。實驗結(jié)果如表3所示。表3Bloom Filter算法的URL去重方法實驗結(jié)果
權(quán)利要求
1.基于共享內(nèi)存映射的URL去重方法,包括初始化模塊、URL簽名模塊、簽名索引模塊、共享內(nèi)存映射模塊和按位判重模塊; 其特征包括 裝置初始化模塊裝置所需要相關(guān)數(shù)據(jù)的加載與共享內(nèi)存映射的初始化; URL簽名模塊用于將不定長的URL轉(zhuǎn)換成定長的簽名,此簽名在一定范圍內(nèi)是唯一對應(yīng)的;簽名的方法包括但不限于CRC32 (Cyclical Redundancy Check 32,共有32位ニ進制數(shù)),SHAl (Secure Hash Algorithm 1,共有 160 位ニ進制數(shù)),MD5 (Message DigestAlgorithm5,共有128位ニ進制數(shù))等算法; 簽名索引模塊根據(jù)簽名的字節(jié)數(shù)X (X = Xl 1+χ12),選取前xl I字節(jié)作為文件名,剩余xl2字節(jié)作為文件內(nèi)容;簽名字節(jié)數(shù)X比較大,則拆分為3級甚至更多(若3級以上,則分為多級目錄),以3級為例:x = x21+x22+x23,將簽名的前x21字節(jié)作為目錄名,中間x22字節(jié)作為文件名,剰余x23字節(jié)作為文件內(nèi)容;索引的方法就是根據(jù)簽名指定的字節(jié)查找即可; 共享內(nèi)存映射模塊由于存儲為文件形式,但讀寫文件系統(tǒng)開銷很大,故采用共享內(nèi)存映射的方法,將內(nèi)存和上述簽名文件一一對應(yīng);直接對內(nèi)存操作,即由共享內(nèi)存映射模塊完成內(nèi)存與文件的同步; 按位判重模塊根據(jù)簽名索引,找到簽名文件內(nèi)容對應(yīng)共享內(nèi)存位置,讀取內(nèi)存的值,并判斷此URL是否重復。
2.根據(jù)權(quán)利要求I所述的基于共享內(nèi)存映射的URL去重方法,其特征在于包括以下步驟 1)初始化步驟根據(jù)預定的簽名索引方案,初始化文件到內(nèi)存,完成共享內(nèi)存映射的初始化; 2)URL捕獲步驟,是從網(wǎng)卡獲取的信息中的URL識別出來供裝置去重。
3)URL簽名步驟,是從獲取URL開始,將URL通過簽名算法轉(zhuǎn)換為定長的字節(jié),然后將簽名字節(jié)傳給簽名索引步驟,根據(jù)簽名算法的不同,采用不同的詳細步驟。
4)簽名索引步驟,是根據(jù)所選的目錄級別,選定的索引方案,其實現(xiàn)直接影響裝置初始化具體實現(xiàn); 5)共享內(nèi)存映射步驟,使得進程之間通過映射同一個簽名文件實現(xiàn)共享內(nèi)存,簽名文件被映射到進程地址空間后,進程可以像訪問普通內(nèi)存ー樣對文件進行訪問,不必再調(diào)用read O , write O等操作;換句話說就是把一個文件的內(nèi)容在內(nèi)存里面做ー個映像,內(nèi)存操作比磁盤操作要快; 6)按位判重步驟,根據(jù)簽名文件內(nèi)容字段的值,索引找到所在位,判斷此位是否為1,若 I則此URL為重復URL,若為O則將此位置1,并返回非重URL的結(jié)果。
3.根據(jù)權(quán)利要求I所述的方法制作成的URL去重裝置,其特征包括中央處理器、內(nèi)存儲器、外存儲器、網(wǎng)卡和輸入輸出設(shè)備,這些設(shè)備均與中央處理器連接,所述的中央處理器又包括連接在一起的URL捕獲模塊、URL簽名模塊、簽名索引模塊、共享內(nèi)存映射模塊和按位判重模塊。
4.根據(jù)權(quán)利要求I所述的基于共享內(nèi)存映射的URL去重方法,其特征在于總體設(shè)計如下首先裝置初始運行時進行初始化,將存儲URL的簽名文件全部打開,如果文件不存在則創(chuàng)建并將所有位置O,共享內(nèi)存映射模塊進行共享內(nèi)存映射獲取SMM指針,然后即可關(guān)閉文件;以后對SMM指針的讀寫操作,就會映射到URL存儲文件的讀寫;將SMM指針全部放到一個數(shù)組中管理,以后根據(jù)CRC32碼的前8位,從這個數(shù)組中找到相應(yīng)的SMM指針,再判斷此SMM指針對應(yīng)的內(nèi)存區(qū)的相應(yīng)位的值,如果是1,則表示為重復的URL,如果是O,就是非重復的URL,同時將此位置為I ;重復如上流程,即是基于共享內(nèi)存映射的URL去重方法的實現(xiàn)。
5.根據(jù)權(quán)利要求4所述的共享內(nèi)存映射,其特征在于先要判斷簽名文件是否已經(jīng)被創(chuàng)建,若是則直接打開,否則需要創(chuàng)建文件,并固定文件大小且按位置O ;然后再進行共享內(nèi)存映射,同時需要smm同步,并返回smm指針,供調(diào)用去重裝置所用。
6.根據(jù)權(quán)利要求I所述的基于共享內(nèi)存映射的URL去重方法,其特征在于有益效果在于通過簽名,將URL最終以簽名文件中的I位來存儲,極大的壓縮了 URL所占的存儲空間;通過共享內(nèi)存映射,將對內(nèi)存的操作同步到簽名文件中,提高了 URL去重的速度JfURL對應(yīng)的位存儲于簽名文件中,長期保存了去重結(jié)果。
全文摘要
本發(fā)明的基于共享內(nèi)存映射的URL去重方法及裝置,去重方法包括初始化、URL簽名、簽名索引、共享內(nèi)存映射和按位判重。本發(fā)明的有益效果在于通過簽名,將URL最終以簽名文件中的1位來存儲,極大的壓縮了URL所占的存儲空間;通過共享內(nèi)存映射,將對內(nèi)存的操作同步到外存簽名文件中,提高了URL去重的速度;將URL對應(yīng)的位存儲于簽名文件中,長期保存了去重結(jié)果。本發(fā)明還提供了一種實現(xiàn)上述方法的裝置,裝置包括中央處理器、內(nèi)存儲器、外存儲器、網(wǎng)卡和輸入輸出設(shè)備,這些設(shè)備均與中央處理器連接,所述的中央處理器又包括連接在一起的URL捕獲模塊、URL簽名模塊、簽名索引模塊、共享內(nèi)存映射模塊和按位判重模塊。
文檔編號G06F17/30GK102693315SQ20121017131
公開日2012年9月26日 申請日期2012年5月29日 優(yōu)先權(quán)日2012年5月29日
發(fā)明者司賀華, 孔凡兵 申請人:上海家配電子商務(wù)有限公司