好吧,所以我想用 Java 实现一个协作过滤算法,类似于 Netflix 或 StumbleUpon 的推荐算法,但是我不确定是否应该在数据库上进行所有计算( PIL 逊相关、预测计算等) ,或者我是否应该加载所有必要的数据并在 Java 中执行算法。
我认为在 java 中执行此操作的主要缺点是我必须加载所有数据,相反,我认为在数据库中执行此操作会导致非常复杂且容易出错的查询。
每种可能性还有哪些其他优点或缺点?
我正在实现的算法可以找到here .
最佳答案
虽然我还没有阅读该算法的所有细节,但出于多种原因,我倾向于在代码中实现实际的算法。首先,您可以利用这些经过充分测试的算法的现有实现(或至少部分实现)。正如您所提到的,将此逻辑添加到数据库可能很复杂并且更难以测试。此外,如果您更改存储引擎或格式,代码可能会与数据库紧密耦合,从而难以重用。
如果你用java做算法,你将不得不从数据库中读取数据,这可能会导致内存中存在大量数据。不过,您需要确保这不会成为限制因素 - 您是否需要一次读取所有数据(这意味着在某些时候 RAM 将成为限制),或者您可以对数据进行分块并并行化操作?如果您可以并行化算法的某些部分,那么用 Java(或您选择的任何语言)编写代码将使分割数据变得更容易(如果问题适合该框架,您甚至可以考虑使用 Map/Reduce 框架 - 再次在这里,我尚未阅读算法详细信息)。
一般来说,我会尝试将业务逻辑排除在数据库之外。
关于java - 实现推荐算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10711660/