2011-11-21 56 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