Okey所以我想在Java中实现一个Collaborative Filter算法,类似于Netflix或StumbleUpon的推荐算法,但是我不确定我是否应该对数据库进行所有计算(Pearson Correlation,Prediction Computation等) ,或者如果我应该加载所有必要的数据并在Java中执行算法。
我认为在java中执行此操作的主要缺点是我必须加载所有数据,相反我认为在数据库中执行此操作会导致非常复杂,容易出错的查询。
每种可能性有哪些其他优点或缺点?
我正在实施的算法here。
答案 0 :(得分:2)
虽然我还没有阅读算法的所有细节,但我会倾向于在代码中进行实际的算法实现,原因有几个。首先,您可以利用经过充分测试的这些算法(或至少部分实现)的现有实现。如您所述,将此逻辑添加到数据库可能很复杂且难以测试。此外,如果您更改存储引擎或格式,代码可能会与数据库紧密耦合,从而难以重复使用。
如果您在java中执行算法,则必须从数据库中读取数据,这可能会导致内存中的大量数据。您需要确保这不会成为限制因素 - 您是否需要一次读取所有数据(这意味着在某些时候RAM将成为限制),或者您可以将数据块化并并行化运作?如果你可以并行化部分算法,用Java(或你选择的任何语言)编写代码将使分割数据变得更容易(如果问题符合该框架,你甚至可以考虑使用Map / Reduce框架 - 再次在这里我没看过算法细节。)
一般情况下,我会尝试将业务逻辑保留在数据库之外。