2012-05-22 118 views
2

Okey,所以我想在Java中实现一个Collaborative Filter算法,类似于Netflix或StumbleUpon的推荐算法,但我不确定是否应该进行所有计算(Pearson Correlation,Prediction Computation等)。 )在数据库上,还是我应该加载所有必要的数据并在Java中执行算法。实现推荐算法

我认为在java中执行它的主要缺点是我必须加载所有数据,相反,我认为在数据库中执行它会导致非常复杂的容易出错的查询。

每种可能性有哪些其他优缺点?

我正在执行的算法可以找到here

回答

2

虽然我没有读过算法的所有细节,但我会倾向于在代码中执行实际的算法实现,原因有很多。首先,您可以充分利用经过良好测试的这些算法的现有实现(或至少部分实现)。正如你所提到的那样,将这个逻辑添加到数据库可能很复杂,也更难以测试。另外,如果您更改存储引擎或格式,则代码可能与数据库紧密耦合,使其难以重用。

如果您正在使用java中的算法,您将不得不从数据库中读取数据,这可能会导致内存中的大量数据。但是,您需要确保这不会成为一个限制因素 - 您是否需要一次读取所有数据(这意味着在某些时候RAM将成为一个限制),或者您可以将数据分块并且并行化操作?如果您可以并行化算法的某些部分,那么使用Java编写代码(或者您选择的任何语言)将使分割数据变得更加容易(如果问题适合该框架,您甚至可以考虑使用Map/Reduce框架 - 这里我也是没有通读算法细节)。

一般来说,我会尽量保持业务逻辑不在数据库中。