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