2012-07-19 50 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