尝试设计数据库。我有User
表,该表应该具有balance
字段。每当我需要余额时,都可以根据以下4个表进行计算:
因此,我需要做一些数学运算,例如所有存款的总和,减去提款的总和,减去下注金额+利润以及奖金金额。每个相关表中的每个用户可以有数千条记录。
或者,只要相关表之一被更改,我就可以从应用程序代码中更新balance
字段。
但是,随着数据库的增长,第一种方法往往越来越慢。第二种方法很容易出错,以防我的应用程序无法更新字段并且实际余额与余额字段不同步。
我想知道是否有任何设计模式或技术来处理这种情况?网上银行或类似服务如何计算余额?他们每次要求结帐时都要进行每笔银行交易吗?
答案 0 :(得分:0)
对于第一种方法,为了防止加载所有交易以计算帐户余额,我们可以定期制作帐户余额的快照值(例如,在日/月末或完成一定数量的交易时)这样,在计算最新的帐户余额时,我们只需要加载最新的快照帐户余额和仅在该最新快照时间之后的交易,而不是加载所有交易记录。
您还可以在event-sourcing
中找到类似的快照模式