我正在为我的公司构建一个原型网站,该公司拥有数千名员工,而且我正在考虑实施特定需求。
为了简化示例,我们假设每个用户都有一个感兴趣的银行帐户。每5分钟左右(可能会有所不同)利息支付。当用户点击该网站时,他们会看到一个计时器倒计时到该利息应该支付的时间。
我遇到的问题是,让Windows服务(或其他任何东西)经常访问数据库寻找需要“支付”并相应采取行动的帐户,感觉很脏。
这似乎是我现在唯一的解决方案,但我相当确定一个运行查询的服务来检索需要“支付”的帐户的排序结果集,但不会削减它。
提前感谢您的意见和建议!
答案 0 :(得分:1)
不是更新记录,而是计算累积的利息。
这种数学计算非常简单,计算很可能比连续更新快几个数量级。
如下所示:
WITH depositswithperiods AS (SELECT accountid, depositamount,
FLOOR(DATEDIFF(n, deposit_timestamp, GETDATE()) / 5) as accrualperiods, interestrate
FROM deposits)
SELECT accountid, sum(depositamount) as TotalDeposits,
sum( POWER(depositamount * (1 + interestrate), accrualperiods) ) as Balance
FROM
depositswithperiods
GROUP BY accountid
我假设上面有复利,没有退出。
添加提款需要为每个时间段创建一组存款,并将这些存款的总和用于获得每个时间段的净存款,然后 计算这些组的利息。
答案 1 :(得分:0)
我不知道利益类比是否适用于您的实际用例。如果不需要始终为所有用户保持数据库的最新状态,则可以在需要最新值时多次应用AddInterest操作。也就是说,无论何时显示值,或者帐户余额即将发生变化。
您可以为所有帐户进行一次夜间更新。
答案 2 :(得分:0)
在做这类事情时要考虑的好事是DateTime。
如果您每分钟收取10便士的电话费,那么就没有一台电脑坐在那里计算每一秒钟并计算出分钟......它只记录开始时的日期/时间,以及日期时间。端。
正如其他人所说,只需在用户尝试查看时计算它。