在Web应用程序中存储用户的余额 - 单个字段还是即时生成?

时间:2012-06-17 17:09:30

标签: database django web-applications

我正在构建一个Web应用程序(在Django中,虽然这不是特定于Django的问题)。我将拥有一些用户,他们每个人都有一个帐户余额,每次与我存款(通过PayPal)时都会增加,并且每次使用我的应用程序API时都会减少。

我正在尝试确定哪种方法更合适:

  1. 将余额与用户一起存储为单个整数字段。当钱进来时,这个字段被添加到。当它熄灭时,它会从中减去。简单,但容易出错。
  2. 即时生成余额(可能是缓存),累计用户所做的所有付款和费用。触摸更复杂,更慢,但不容易出错。
  3. 那么,哪种方式最好还是有另一种方法呢?

1 个答案:

答案 0 :(得分:0)

我的观点是第一种选择比第二种选择更不容易出错。当您开始依赖缓存来获得非常重要的值时,您必须处理缓存同步。显然,每次用户平衡更改时,您都需要使缓存无效并确保任何读取请求都是100%准确的。如果你确实去了缓存路线,你只需要确保额外的层得到很好的协调。

我建议您存储交易历史记录和余额总额。进行交易的行为需要是原子的,以便在其他任何东西都可以读取之前,进行交易历史记录并执行余额总额的更新。然后,您可以选择将余额与历史记录进行对帐,或直接从历史记录中读取和添加。