基于nhibernate计算的排序 - 最佳实践

时间:2009-02-12 23:19:19

标签: nhibernate calculated-columns

我需要根据计算对排序顺序进行分页。计算类似于reddit的hotness算法,因为它依赖于自创建帖子以来的时间。

我想知道最佳做法是什么。是将这种类型作为SQL函数,还是每小时运行一次更新来计算整个表。

该表有数十万行。我正在使用nhibernate,因此这可能会导致计划完全计算出现问题。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

很可能很大程度上取决于服务器上的负载。我的回答有几个假设:

  1. 您的计算很可能不简单,但会考虑多种因素,包括自发布以来经过的时间

  2. 您希望自己的网站至少有合理的增长,这意味着新数据会添加到您的网站中。

  3. 我建议您最好的选择是计算和存储您的排名值,并且Nuno G提到使用有序子句进行检索。如你所知,可能会有一些影响,其中两个是:

    1. 安排更新
    2. 确保访问表格
    3. 就调度而言,您可以查看一些智能重新计算价值的方法。例如,您可能能够识别何时可能更改计算(例如,如果更新了从属记录,则可能会触发触发器,将表的ID添加到队列中以进行重新计算)。您也可以在范围内进行更新,而不是在完整的表格中进行更新。

      您还需要在重新计算时尽量减少对桌子的锁定。有很多方法可以做到这一点,包括设置隔离级别(使用MS SQL terminonlogy)。如果你真的担心你甚至可以在外部执行计算(例如在临时表中),然后只是将值更新到主表。

      作为最后一点,我建议您查看可用的分页选项 - 如果您正在讨论数千条记录,请确保您的机制确定SQL服务器上所需的页面,这样您就不会返回数千条行到你的应用程序,因为这会减慢你的速度。

答案 1 :(得分:0)

如果您可以使用SQL执行计算,请尝试使用Hibernate通过执行SQLQuery加载已排序的集合,其中查询包含“ORDER BY”表达式。