2013-08-07 69 views
1

作爲構建Web爬網程序的一部分,我提取了由爬蟲訪問的鏈接。用於唯一存儲鏈接的數據結構

什麼樣的數據結構將適用於存儲具有唯一標識符的每個URL,所以我在訪問頁面之前可以測試以查看頁面是否已被訪問。

+0

怎麼樣一個列表,或隔日結構你可以搜索。它不像你將有數百萬個訪問過的網站 –

+0

那麼這是不需要的 –

+1

一個'Hashtable'或者你可以創建自己的 –

回答

0

可能HashSet是要走的路。在這種情況下,每個url(或字符串)都是唯一的標識符。您還可以實施一個IEqualityComparer進行自定義比較。

1

的一種方法:考慮唯一標識符是頁/ URL標題或url計算值一些獨特的哈希值,例如:

網址: http://stackoverflow.com /問題/ 18102087 /數據結構,換uniqurly儲存鏈路

編號: 18102087或唯一散列(MD5等)

根:http://stackoverflow.com

其它網址:根/問題/標記/ JAVA,根/問題/ 18102124/MySQL的數據庫-使用-MATLAB

數據結構:

Map [ROOT-URL, Map[ID, URL]] 

讀取/閱讀:

  • 給定的URL,提取ROOT和ID(字符串解析/正則表達式的功能)
  • 查找根源,在返回地圖

LOOKUP ID獲取一鍵ROOT的所有URL:

  • 給定的URL,提取ROOT和ID
  • 查找ROOT

益處:

  • 分組上根或基本URL,可以(比方說修復深結構)用於各種目的
  • 減少哈希colisions

缺點:

  • 內存,保持額外的ROOT字符串(比如說數百萬次)。一個Map方法將只有ID和URL

  • 兩個查找,而不是一個在比較單一的地圖的做法,但應該是罰款,因爲它是HashMap

+0

只是一個想法 - 主要的地圖可以被修改,而不是一個帶有id-url對的地圖可以存儲一個保存這個id-url地圖的對象,但也可以像這個(根)url的出現次數。因此地圖的大小可能會受到限制,並且最稀少的訪問根可以從地圖中刪除,並由新地圖取代。這是爲了防止地圖的大小受到限制;) – stan0