Asp.net 在web应用程序中存储信用余额的最佳实践

Asp.net 在web应用程序中存储信用余额的最佳实践,asp.net,web-applications,database-design,Asp.net,Web Applications,Database Design,我正在创建一个web应用程序,用户可以在其中购买信用卡(使用真金白银)并将其用于购买物品 我需要保存用户每次购买或消费信用卡的历史记录 我经常需要知道用户当前的信用余额 我通常的工作原理是,将相同的数据存储两次是不好的做法,即,由于我有信用余额的所有增加和减少的历史记录,我不应该将余额本身存储为单独的字段 然而,每次用户打开一个新页面(将显示他们当前的余额)时,计算这个余额似乎有些过分。另一方面,将其存储在数据库或Web服务器上的内存中似乎是错误的,只是为了防止系统每次都要计算它 有没有人对此有

我正在创建一个web应用程序,用户可以在其中购买信用卡(使用真金白银)并将其用于购买物品

我需要保存用户每次购买或消费信用卡的历史记录

我经常需要知道用户当前的信用余额

我通常的工作原理是,将相同的数据存储两次是不好的做法,即,由于我有信用余额的所有增加和减少的历史记录,我不应该将余额本身存储为单独的字段

然而,每次用户打开一个新页面(将显示他们当前的余额)时,计算这个余额似乎有些过分。另一方面,将其存储在数据库或Web服务器上的内存中似乎是错误的,只是为了防止系统每次都要计算它


有没有人对此有任何经验和/或知道在这种情况下推荐的最佳做法是什么?

有其地位。例如,包含论坛主题的表格也有一个
PostCount
列,而不是对每个主题进行
COUNT(posts)
。如果您担心一致性,您应该这样做,您可以安排定期检查(例如,对来自或发送给给定用户的每笔交易进行检查),测试每个用户的
余额是否与其交易总额相匹配。

我曾参与过几个具有类似要求的项目,动态计算当前余额没有什么错——它是最不容易出错的解决方案,而这种查询正是大多数数据库设计的目的;除非您在Facebook流量级别的网站上工作,否则类似于“从userID=?”的事务中选择sum(transactionValue)这样的东西应该非常快


将余额存储在其他地方——实际上是复制余额——可能会引入微妙的错误和差异,“缓存”值与底层事务不同步;获得此权限所需的工作量可能很大。

不要计算每个请求的贷方余额。
您应该维护每个用户的信用余额

将其保存在数据库中。
这样,您就不必担心并发性。
当用户使用应用程序时,使用事务增加或减少此值。

数据库会针对重复选择进行优化,所以还是让数据库来处理这个问题。

计算余额需要时间吗?如果没有,只需使用SQL实时计算即可


但是我预见到将来当你的事务日志越来越大(数百万行)时会出现问题。当事务日志中的select查询需要时间时,则是时候缓存和预计算余额并将其存储在数据库中。

是的,问题是当检查发现后计数时该怎么办!=COUNT(Posts)。@GGG当然,实际Posts表(或您的事务日志)在出现差异时处于前导位置。