0

我认为标题中的问题说明了一切并且很笼统。

我也可以举一个具体的例子:

我已经标记了文章,并希望找到similar带有与之关联的标签的文章。
score 函数将查看两篇文章并计算共同标签的数量。

由于分数没有存储在任何地方,每次我需要在给定文章的情况下查找类似文章时,我都必须计算分数。
But this is too expensive.

  1. 一般来说,这类问题的常见解决方法是什么?
  2. tag对于我的具体问题有更好的方法吗?(例如solr 的 moreLikeThis

编辑
我正在使用 postgres,如果这很重要。
我正在寻找人们成功使用的通用解决方案,例如you should batch calculate the score and save it somewhere等等......

4

1 回答 1

0
  1. 答案因数据库产品和版本而异。例如,在某些数据库产品中,视图或索引视图可能比更常见的解决方案更快......
  2. 通常处理这种情况的方法是预先计算结果。您可以通过以下几种方式做到这一点:

    一个。您可以使用触发器(在 SQL 99 标准中添加)之类的东西,在从源表中添加、更新或删除行时更新计数。在此解决方案中,您在源表的插入、更新和删除方面做出了(大概)很小的牺牲,以便在检索信息时获得显着收益。

    湾。您可以使用数据仓库,您可以在其中接受实时数据对报告数据的某种程度的延迟。这意味着您接受从数据仓库中查询的数据将在某个可接受的分钟、小时、天或周数内过时。数据仓库通过定期查询实时 OLTP(在线事务处理)数据并更新包含预先计算结果的 OLAP(在线分析处理)数据库来工作。然后,您可以根据 OLAP 数据或 OLTP 和 OLAP 数据的组合运行报表。不需要正式的数据库仓库来获得相同的结果。您可以编写一个在计时器上执行的过程,该计时器使用更新的结果定期更新表。

于 2013-06-04T04:09:41.557 回答