V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
turan12
V2EX  ›  问与答

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

  •  
  •   turan12 · 196 天前 · 938 次点击
    这是一个创建于 196 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近正在开发的系统里有使用到账户资金交易和余额的内容。

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

    我的问题是,如果去掉 balance 表,需要读取余额的时候直接从 record 表里使用 sql sum()计算得出,是否可行?
    10 条回复    2024-05-13 09:38:53 +08:00
    ttvv123
        1
    ttvv123  
       196 天前
    那就要看你的数据量了
    turan12
        2
    turan12  
    OP
       196 天前
    数据量不大,用户 5w 左右,每天交易大概 2-3k 笔。
    LeeReamond
        3
    LeeReamond  
       196 天前
    @ttvv123 除非是个人使用的管理后台,就算是企业内部后台也没法用这种方式的,复杂度从 O(1)转成 O(2^n)了
    shoaly
        4
    shoaly  
       196 天前
    我的建议是做日结, 然后 任意时候的余额 = 头一天的余额汇总 + 今天的 交易 sum()
    crysislinux
        5
    crysislinux  
       196 天前 via Android
    肯定不行的,数据量一上来性能太差了。event sourcing 就是你这种思路,但是性能也要靠 projection 来保证。
    512357301
        6
    512357301  
       196 天前 via Android
    record 记录流水和每笔交易的余额不就行了,直接省了 balance 表
    turan12
        7
    turan12  
    OP
       196 天前
    @shoaly 这个办法好
    laminux29
        8
    laminux29  
       196 天前
    @turan12 运营商也是这个办理,只是结账周期会短一些,以及根据算力余量会动态一些。
    ma836323493
        9
    ma836323493  
       195 天前
    record 表你不记录上次余额吗, 这样你就不用 sum 了
    yefee
        10
    yefee  
       195 天前
    @512357301 这个办法在交易高峰期可能会出现问题,需要加锁
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2821 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 00:05 · PVG 08:05 · LAX 16:05 · JFK 19:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.