有个关于数据库交易记录和余额计算的问题,求指导

228 天前
 turan12
最近正在开发的系统里有使用到账户资金交易和余额的内容。

目前使用的方式是:
record 表:记录所有用户的交易流水
balance 表:记录用户余额
需要使用余额的时候,直接根据 userid 从 balance 表里读出。

我的问题是,如果去掉 balance 表,需要读取余额的时候直接从 record 表里使用 sql sum()计算得出,是否可行?
976 次点击
所在节点    问与答
10 条回复
ttvv123
228 天前
那就要看你的数据量了
turan12
228 天前
数据量不大,用户 5w 左右,每天交易大概 2-3k 笔。
LeeReamond
228 天前
@ttvv123 除非是个人使用的管理后台,就算是企业内部后台也没法用这种方式的,复杂度从 O(1)转成 O(2^n)了
shoaly
228 天前
我的建议是做日结, 然后 任意时候的余额 = 头一天的余额汇总 + 今天的 交易 sum()
crysislinux
228 天前
肯定不行的,数据量一上来性能太差了。event sourcing 就是你这种思路,但是性能也要靠 projection 来保证。
512357301
228 天前
record 记录流水和每笔交易的余额不就行了,直接省了 balance 表
turan12
228 天前
@shoaly 这个办法好
laminux29
228 天前
@turan12 运营商也是这个办理,只是结账周期会短一些,以及根据算力余量会动态一些。
ma836323493
228 天前
record 表你不记录上次余额吗, 这样你就不用 sum 了
yefee
228 天前
@512357301 这个办法在交易高峰期可能会出现问题,需要加锁

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1040080

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX