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

关于用户余额存储的问题,想跟大家讨论一下

  •  
  •   jenlors · 2020-07-31 17:39:05 +08:00 · 1613 次点击
    这是一个创建于 1364 天前的主题,其中的信息可能已经有所发展或是发生改变。
    观点一:用户的余额来源于所有余额变动记录的和,扣减用户余额的时候添加一条变动值为负数的记录;
    观点二:单独在用户中存一个余额字段,每次跟随余额记录进行变动。

    那么哪一种方式更好?

    我的观点是第二种好一点,理由是每次查询余额都需要执行 sum,性能更低;再是余额依赖于每一条历史记录,有风险。

    各位的观点呢?
    12 条回复    2020-07-31 19:37:04 +08:00
    finab
        1
    finab  
       2020-07-31 17:41:44 +08:00   ❤️ 1
    我全都要,一二条综合起来
    再每隔一定时间两边对账
    kidtest
        2
    kidtest  
       2020-07-31 17:45:30 +08:00
    单独余额字段,同时需要有流水记录。
    Kr98
        3
    Kr98  
       2020-07-31 17:46:34 +08:00 via Android
    全都要 +1
    mumbler
        4
    mumbler  
       2020-07-31 17:46:52 +08:00 via Android
    当然是 2,但余额字段数据只能用于不严谨场景下统计查看,任何实际扣钱的操作都需要去 SUM 一下再处理
    wushigejiajia01
        5
    wushigejiajia01  
       2020-07-31 17:47:53 +08:00 via Android
    1.增加关联表做变动记录
    2.单独用字段存这个余额,而且如果这个余额变动非常频繁的话,不建议把这个字段跟用户基本信息放一张表
    295464512
        6
    295464512  
       2020-07-31 17:48:58 +08:00
    全都要啊,不然出了问题对不了账的
    tabris17
        7
    tabris17  
       2020-07-31 17:50:35 +08:00
    CQRS 和 reporting table 的区别
    holystrike
        8
    holystrike  
       2020-07-31 18:03:58 +08:00
    照着存折上做
    gz911122
        9
    gz911122  
       2020-07-31 18:09:45 +08:00
    我全都要
    imn1
        10
    imn1  
       2020-07-31 18:31:54 +08:00
    业务流程来说,只有一个余额字段可能还不够呢
    建议理顺业务逻辑,各种可能试一遍再说
    ijustdo
        11
    ijustdo  
       2020-07-31 19:33:36 +08:00
    流水记录 + 单独字段 , 每次改动都事务 两个一起
    ijustdo
        12
    ijustdo  
       2020-07-31 19:37:04 +08:00
    事务开始

    insert 流水
    update 余额 = 余额 - 消费 where 余额-消费 > 0

    事物结束

    通过 update 的影响情况决定是否回滚
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1919 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 16:24 · PVG 00:24 · LAX 09:24 · JFK 12:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.