p2p系統的應用越來越廣泛,在檔案共享、流**服務、即時通訊交流、計算和儲存能力共享以及協同處理與服務等方面都能看到p2p的存在,一些p2p應用如napster、emule、bittorrent等早已是家喻戶曉了。效果可以看下具體51搜尋展示結合xunsearch全文檢索技術,可以達到毫秒級的資料搜尋
p2p按其拓撲關係大致可以分為兩類四種形式:
1.非結構化拓撲。包括中心化拓撲、分布式拓撲、半分布式拓撲,其分別對應著napster、bittorrent、kazaa這三種知名的應用。
2.結構化拓撲。主要形式為分布式結構化拓撲,也就是所謂的dht網路。
dht——distributed hash table 分布式雜湊表:
1.雜湊表被分割成不連續的塊,每個節點被分配給乙個屬於自己的雜湊塊,並成為這個雜湊塊的管理者。
dht網路的基本思想如下:
1.每乙份資源都由一組關鍵字進行標識。
2.系統對其中的每乙個關鍵字進行hash,根據hash的結果決定此關鍵字對應的那條資訊(即資源索引中的一項)由哪個使用者負責儲存。
3.使用者搜尋的時候,用同樣的演算法計算每個關鍵字的hash,從而獲得該關鍵字對應的資訊儲存位置,並迅速定位資源。
dht關鍵字定位:
1.dht通過分布式雜湊函式,將輸入的關鍵字唯一對映到某個節點上,然後通過某些路由演算法同該節點建立連線。
2.每個節點並不需要儲存整個系統的節點檢視資訊,只在節點中儲存其鄰近的幾個後繼節點資訊,當乙個節點收到乙個查詢操作時,如果它發現所查詢的標識不在自己關聯的區間內,那麼該節點將會把該查詢傳送給其儲存節點資訊表中它認為最靠近目標的鄰居。
3.每次**都能更進一步地接近資料來源。因此較少的路由資訊就可以有效地實現到達目標節點。
dht的具體演算法實現過程:
(1)對每個節點的一定特徵(如ip位址)進行hash,使得到的每個節點的節點值唯一。將節點按照節點值的從小到大構成乙個環(chord環)。(此處節點值可以看作是新環中的ip位址)
(2)通過節點值,獲取每個節點與下乙個臨近節點之間的距離,從而獲得每個節點所需負責的值區間。(此過程類似於建立路由表)
(3)對每個節點上的資源提取關鍵字,並對關鍵字進行hash,得到的hash值按照(2)中的每個節點負責的區間進行分配,從而使每一項資源的儲存資訊都被儲存在乙個節點上。(此步驟獲得了資源的索引列表)
(4)當搜尋一項資源時,對其關鍵字進行hash,得到的值與當前節點的值區間表相比較,從而獲得資源的索引資訊最有可能存在的節點。查詢該節點,獲取資源的索引,根據索引,即可找到資源所在的節點,並建立通訊。
現在公開乙個DHT網路爬蟲
p2p系統的應用越來越廣泛,在檔案共享 流 服務 即時通訊交流 計算和儲存能力共享以及協同處理與服務等方面都能看到p2p的存在,一些p2p應用如napster emule bittorrent等早已是家喻戶曉了。效果可以看下具體51搜尋展示結合xunsearch全文檢索技術,可以達到毫秒級的資料搜尋...
現在公開乙個DHT網路爬蟲
dhtcrawler最早的版本有很多問題,修復過的最大的乙個問題是關於erlang定時器的,在dht實現中,需要對每個節點每個peer做超時處理,在erlang中的做法直接是針對每個節點註冊了乙個定時器。這不是問題,問題在於定時器資源就像沒有gc的記憶體資源一樣,是會由於程式設計師的 問題而出現資源...
現在公開乙個DHT網路爬蟲
我最開始在選用資料庫時,為了不使用第三方庫,打算使用erlang自帶的mnesia。但是因為涉及到字串匹配搜尋,mnesia的查詢語句在我看來太不友好,在經過一些資料查閱後就直接放棄了。關於這個網路的工作原理,參看 p2p中dht網路爬蟲以及寫了個 磁力搜尋的網頁。然後我打算使用couchdb,因為...