2014-12-13 55 views
1

我期待構建一個分佈式洪流搜索引擎。構建分佈式數據庫對等搜索引擎的算法

我知道分佈式哈希表尋址對等網絡中的節點。我不完全瞭解每個節點如何獲取全球唯一的ID。

雖然我需要構建分佈式數據庫的算法和數據結構,但我不確定。它顯然需要高度的冗餘,並儘可能高效地搜索。

我真正需要的是指向某些資源的方向,最好是一些代碼示例。

+0

哪個DHT?Bittorrent主線DHT aka [bep_0005](http://www.bittorrent.org/beps/bep_0005.html)? Azureus有它自己的DHT。他們都不能通過infohash以外的其他任何方式「搜索」。 – harold 2014-12-13 18:17:20

+0

分佈式搜索算法是一個非常複雜的正在進行的研究課題,獲取唯一ID是最簡單的,只需使用UUID - 對於問題的其餘部分,首先閱讀關於該主題的一些論文。 – peter 2014-12-13 18:17:40

+0

謝謝,我希望有人能夠指出我的一些研究論文的方向。 – 2014-12-13 19:13:52

回答

3

雖然我不完全理解每個節點如何獲取全局唯一標識。

我想說,這與您的問題和特定實現的標題無關。 但通常它要麼隨機完成,要麼基於其公有IP的哈希值+某些隨機子部分對子網進行一些調整。例如,看看bittorrent的secure node ID generation algorithm

雖然我需要構建分佈式數據庫的算法和數據結構,但我不確定。

這是一個不平凡的話題,我不認爲可以在幾個段落內回答。 DHT在其基地不允許枚舉存儲值或由多個節點協調的任何複雜操作,直接鍵值查找就是他們所做的。 要實現關鍵字搜索,您必須完成一些算法和語言處理體操操作,併爲基本DHT協議添加擴展以適應這些要求。

這裏的幾個問題的一個不完整的列表來解決:

  • 不均勻的字分佈放置在DHT鍵空間比其它的一些部分更負載 - 這可以減輕由節點一定程度上移動自己,目標地址故障轉移或拓寬負責目標密鑰的節點集。並簡單地刪除極其複雜的詞
  • 對多個搜索項執行聯合或交集操作 - 這可以在一定程度上使用布隆過濾器來完成
  • 將沒有空格的腳本切片到搜索項中 - 由非分佈式索引引擎(如lucene)來解決。 afaik使用N-grams
  • 防止包含特定單詞的流行內容淹沒掉共享該單詞的所有其他結果
  • trust。即防止關鍵字垃圾郵件攻擊

我不確定在這裏DHT是否是正確的做法。我隱約記得基於語言/關鍵字本身的其他指標,其中節點在密鑰空間中移動自己,使其傾向於正在使用的單詞,從而提供必要的網絡容量。

我建議打穀歌學者尋找關鍵字搜索相關的修改或替代疊加到DHTs。

+0

這對我來說非常有用。我會給你打個勾。 – 2015-01-08 21:21:21