2012-07-19 84 views
0

我想構建一個推薦引擎來支持在Rails上運行的Web應用程序,並將其數據存儲在MySQL中。 。沿着用戶點擊事物和他們的反饋更新數據庫的路線,然後以某種實時類型的方式進行處理。數量級我在想所有用戶在一秒之內可能有10秒的互動;每天1M數據點。構建webapp(Rails + MySQL +?)的推薦引擎 - 從哪裏開始

我的問題是如何構建和處理分析,以便可以快速處理事情。利用我已經知道的,我可以使用Ruby和R(RServe,RSRuby)的一些風格在現有數據集上運行SVD /聚類/集成/任意模型,並通過經常採樣更新模型/公式,但是這似乎是一種非常笨重的做事方式。什麼是更好的方式來做到這一點?在MySQL中直接運行數學?使用一些很酷的Ruby庫,有很好的數學功能?使用現成的推薦引擎包?

(我在那裏有什麼明顯缺乏認識,儘管看着所有的「類似的問題」鏈接建議甜諷刺:(。)

PS:我的背景:數人用了幾年的R,而是完全用於靜態/離線數據。在Python中,導軌等新手程序員,但我可以在這一方面的工作。

回答

2

你真的需要實時?

我發現,大多數的這些「實時「的情況通常不需要真正的實時,但可以在後臺完成。 假設一個網店,你w螞蟻給你的客戶關於他過去銷售的建議,或許在當前選定的項目上(其他人用這個項目購買的相關項目),你可以簡單地按照設定的時間間隔預先計算這些數據。

對於上面描述的情況,我建議您使用Rake任務來完成繁重的工作(過去的銷售建議並不是真正在會話期間發生變化的東西 - 對相關項目的建議也相當靜態) 。

所以我會計算那些在Cron作業期間或其他一些與您的Web應用程序異步的重複性任務,同時將生成的(預先計算的)數據提供給活動用戶。 通過這種方式,您可以在計算的複雜性方面獲得更多的靈活性,因爲您可以運行比Web請求最長的時間更長的時間。

樣本rake任務應該是這樣的:

task :calculate_recommendations => :environment do 
    // do your calculation 
    // you have full access to ActiveRecord here 
end 

(請務必包括:environment否則耙不會加載你的數據庫連接

你怎麼做的計算起來。但是我建議你看一下寶石像Recommendify來看看他們用什麼庫來計算推薦。也許這對你有幫助。

也在RubyToolbox有一個Recommender-Engine category列出了幾個相似的寶石,可能會給你指向正確的方向。

+0

是的,我一直在考慮在另一臺服務器上每隔一段時間就經常做一次實時瓦特/權衡(可能通過採樣時間權重的方法)與克倫作業。我需要閱讀Rails來解決這個問題。 至於推薦引擎的東西...如果性能不可怕,我可能會尋找一些R的Ruby shell的味道;引擎寶石似乎並沒有涵蓋我想要做的所有事情,但我需要仔細研究一切。 – binarysolo 2012-07-19 20:41:44

+0

接受你的答案;我發現的Ruby推薦庫非常糟糕(與R中的類似產品相比)。我現在可能會使用RRuby,看看有沒有更好的。 – binarysolo 2012-07-31 00:37:00

+0

對不起,我不能再有任何幫助.. – Tigraine 2012-07-31 08:33:35