我需要根据计算对排序顺序进行分页。计算类似于reddit的hotness算法,因为它依赖于自创建帖子以来的时间。
我想知道最佳做法是什么。是将这种类型作为SQL函数,还是每小时运行一次更新来计算整个表。
该表有数十万行。我正在使用nhibernate,因此这可能会导致计划完全计算出现问题。
有什么建议吗?
答案 0 :(得分:2)
很可能很大程度上取决于服务器上的负载。我的回答有几个假设:
您的计算很可能不简单,但会考虑多种因素,包括自发布以来经过的时间
您希望自己的网站至少有合理的增长,这意味着新数据会添加到您的网站中。
我建议您最好的选择是计算和存储您的排名值,并且Nuno G提到使用有序子句进行检索。如你所知,可能会有一些影响,其中两个是:
就调度而言,您可以查看一些智能重新计算价值的方法。例如,您可能能够识别何时可能更改计算(例如,如果更新了从属记录,则可能会触发触发器,将表的ID添加到队列中以进行重新计算)。您也可以在范围内进行更新,而不是在完整的表格中进行更新。
您还需要在重新计算时尽量减少对桌子的锁定。有很多方法可以做到这一点,包括设置隔离级别(使用MS SQL terminonlogy)。如果你真的担心你甚至可以在外部执行计算(例如在临时表中),然后只是将值更新到主表。
作为最后一点,我建议您查看可用的分页选项 - 如果您正在讨论数千条记录,请确保您的机制确定SQL服务器上所需的页面,这样您就不会返回数千条行到你的应用程序,因为这会减慢你的速度。
答案 1 :(得分:0)
如果您可以使用SQL执行计算,请尝试使用Hibernate通过执行SQLQuery加载已排序的集合,其中查询包含“ORDER BY”表达式。