检索按函数排序的前100行而不评估表中的所有行?

时间:2013-06-04 03:47:56

标签: database sorting similarity

我认为标题中的问题说明了一切,并且是一般性的。

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

我已标记文章,希望找到与其关联的标记的similar文章 评分函数将查看两篇文章并统计共同的标签数量。

由于分数没有存储在任何地方,我每次需要在文章中找到类似文章时都要计算分数。
But this is too expensive.

  
      
  1. 一般来说,这类问题的常见解决方法是什么?
  2.   
  3. 对于我的特定tag问题,是否有更好的方法? (例如solr's moreLikeThis
  4.   

修改
如果重要的话,我正在使用postgres 我正在寻找人们成功使用的一般解决方案,例如you should batch calculate the score and save it somewhere等......

1 个答案:

答案 0 :(得分:0)

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

    一个。您可以使用类似触发器(在SQL 99标准中添加)来更新计数,因为在源表中添加,更新或删除行。在此解决方案中,您对源表的插入,更新和删除进行了(可能)小的牺牲,以便在检索信息方面取得重大进展。

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