2012-09-26 31 views
3

我想實現一個存儲系統來支持數據標記。這個系統的一個非常簡單的應用就像Stackoverflow上的問題一樣,它們被標記爲多個標籤。查詢可能由多個標籤組成。這也看起來像在谷歌上搜索多個關鍵詞。在大型數據集上「標籤」或基於關鍵詞的查詢的算法和數據結構?

由這個系統維護的數據集將會非常大,比如數十TB或數十億個條目。

那麼我應該在這個系統中使用哪些數據結構和算法來維護和查詢數據呢?數據可以存儲在一組機器上。

是否有任何指南或論文來描述此類問題和解決方案?

+0

爲什麼不使用一些面向文檔的數據庫,比如MongoDB或CouchDB? – Lazin

+0

@拉贊,因爲我正在實施它。 –

+0

http://cstheory.stackexchange.com/questions/6405/data-structure-that-allow-efficient-tag-based-lookups –

回答

3

您可能需要閱讀以下兩本書:

  1. 集體智慧的行動

    薩特南阿拉克(ISBN:1933988312)
    http://www.manning.com/alag/

    「Capter 3.提取智能標籤「涵蓋:

    • 三種形式的標記和使用的標記
    • 如何情報是從標籤
    • 數據庫架構中提取用於標記
    • 開發標籤雲

  2. 編程集體工作示例Intelligence

    Toby Segaran(ISBN:978-0-596-52932-1)
    http://shop.oreilly.com/product/9780596529321.do

    「第4章搜索和排行」 包括:

    • 搜索引擎索引算法的基本概念
    • 點擊跟蹤神經網絡
設計

希望它有幫助。

+0

是的,第一本書確實有幫助!謝謝! –

2

您的問題非常困難,但有大量的相關論文和書籍。 Amazon Dynamo paperyahoo PNUTS和這個hadoop paper就是一個很好的例子。因此,首先,你必須決定你的數據如何在集羣中分佈。數據必須在網絡中均勻分佈,沒有熱點。一致的哈希將是這個問題的一個很好的解決方案。而且,數據必須是冗餘的,任何條目都需要存儲在幾個地方以容忍各個節點的故障。

接下來,您必須決定如何在系統中執行寫操作。每個寫入都必須跨越包含更新數據條目的節點進行復制。你可能想了解一下CAP定理和最終一致性概念(維基百科有關這兩者的好文章)。此外,還有一致性 - 延遲折衷。您可以使用不同的寫入複製機制:某種八卦協議或state machine replication

我不知道你是什麼樣的標籤,是這個標籤是手動分配給條目還是從數據中學習。無論如何,這是一個信息檢索(IR)領域。您可能會使用某種倒排索引來按標籤或關鍵字有效搜索條目。另外,您必須使用一些查詢結果排名算法。