2011-11-21 53 views
4

我正在評估Mahout作爲協作過濾推薦引擎。到目前爲止它看起來很棒。 我們有來自12M不同用戶的近20M布爾推薦。 根據Mahout's wikiSean Owen的一些線程,在這種情況下,一臺機器應該足夠了。因此,我決定使用MySql作爲數據模型,並跳過現在使用Hadoop的開銷。使用Mahout進行連續協作過濾

但有一件事情讓我想起了什麼,在不從頭讀取整個數據的情況下不斷更新建議的最佳實踐是什麼?我們每天都有數以萬計的新建議。雖然我不希望它實時處理,但我希望每隔15分鐘左右處理一次。

請詳細說明基於Mysql和Hadoop的部署方法。 謝謝!

回答

3

任何數據庫實時查詢速度都太慢,所以任何方法都需要將數據集緩存到內存中,這正是我假設您已經在使用ReloadFromJDBCDataModel所做的。只需使用refresh()即可在任何時間間隔重新加載。它應該在後臺進行。問題在於,它需要大量的內存來加載新模型,而從舊模型中提供。您可以推出自己的解決方案,例如,一次重新加載用戶。

Hadoop上沒有實時更新。一般來說,最好的辦法是使用Hadoop進行完整和適當的結果批量計算,然後根據持有和提供推薦的應用程序中的新數據在運行時(不完美)調整它們。

+0

謝謝肖恩。我對Hadoop如何適合整體情況有點困惑。據我所知,它被用來預先計算相似性,從而使應用程序本身只根據選定的推薦器進行匹配。這是真的嗎? –

+0

Hadoop不一定非要成爲其中的一部分。除非您被迫遇到規模問題,否則我不會使用Hadoop。是的,您可以將其用於部分流程,並脫機計算相似度。 –

+0

肖恩,你是什麼意思「一次重新加載用戶」?我正在使用ReloadFromJDBCDataModel,但是當我調用reload()時,整個數據集都會重新加載。我知道重新加載我們要求推薦的用戶是有道理的,我怎麼能實現這一點? – arielcamus