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