2011-11-17 27 views
0

我必須抓取200萬個URL並收穫他們的元關鍵字。 然後,我需要存儲每個唯一關鍵字並通過數據庫,跟蹤哪些關鍵字與/與其他關鍵字相關聯。需要關於映射關鍵字關係的數據庫技術和方法建議

我正在努力使用什麼樣的數據庫 - 標準的RDBM似乎對這項任務非常敏感 - 我的直覺告訴我,MongoDB解決方案可能是最佳選擇......但我對此很陌生。

對所有有經驗的建議都開放。

回答

2

這幾乎是Cassandra的理想用例。

通過哪些關鍵字在其中出現的索引URL與Cassandra最初爲Facebook設計的收件箱搜索非常相似。使用行鍵爲關鍵字且每列均爲URL的寬行格式對於將關鍵字映射到URL時非常有效。要獲取URL到關鍵字的反向映射,請將URL用作行鍵和每個關鍵字一列。

要跟蹤關鍵字之間的一階關係,您可以對每個關鍵字使用一行,並且該行中的每一列可以是在同一個URL中找到的另一個關鍵字。如果要存儲更多信息(例如兩個關鍵字一起出現的次數),請爲每個列值使用Cassandra's built-in distributed counters之一。它們旨在處理大量的增量,並能夠擁有數百萬個活動的不同計數器。

聽起來這個數據集可能會變得非常大。如果是這樣,你應該認真考慮使用Cassandra來代替MongoDB。 Mongo根本不處理大於內存的數據集(由於它依賴於mmap),而Cassandra的設計着重於高效地寫入和讀取大於內存的數據集。

+0

對於MongoDB,您需要擔心INDEX SIZE而不是DATASET SIZE。它處理比可用RAM大得多的數據集。 http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ#IndexingAdviceandFAQ-MakesureyourindexescancaninRAM –

+1

當然,如果你的索引不適合內存,你肯定死在水中(和對於這個特定的用例,索引本身將會非常大)。但是,擁有大於內存的活動數據集將快速讓您受到I/O約束,無論您是在討論寫入還是讀取;將會有很多頁面交換。 –

1

這可以在MongoDB中運行良好。您可以爲每個網址創建一個文檔。在文檔中有一個列出所用關鍵字的數組對象。該數組的索引,以便您可以快速找到任何提及任何特定關鍵字的URL。

使用的map-reduce總結:使用地圖發射所使用的關鍵字(按字母順序進行排序)爲每個URL的每2克(或正克),然後減少計數的獨特組合。將結果轉儲到一個新的集合中並按頻率排序。