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

请教一个每天自动账户余额扣费功能的实现方法

  •  
  •   baobaoyinshen · 49 天前 · 1155 次点击
    这是一个创建于 49 天前的主题,其中的信息可能已经有所发展或是发生改变。

    每天会扣前一天租客产生的水电费用。有一个账户余额表,需要每天进行扣除。

    因为每位租客产生的水电都是不一样的,假如有一千万位租客,那就是一千万条账户余额扣费的 UPDATE 语句,请问有什么办法进行优化这段处理逻辑吗,还是必须只能用要产生一千万条 SQL 的 UPDATE 语句方法

    17 条回复    2022-08-08 18:09:18 +08:00
    chotow
        1
    chotow  
       49 天前
    我会考虑改为插入一千万条费用记录,每个用户查看自己余额的时候再实时计算一下
    Fuor
        2
    Fuor  
       49 天前
    有记录每天产生水电费的客户记录的话,扔到队列一个个单独计算?
    08110920
        3
    08110920  
       49 天前
    队列处理
    baobaoyinshen
        4
    baobaoyinshen  
    OP
       49 天前
    @chotow 这个方法不太行,因为有时候运营人员需要导出账户欠费人员,不能导出的时候再来实时计算把
    jackma0571
        5
    jackma0571  
       49 天前
    没错,0 点过后一个一个计算
    lakehylia
        6
    lakehylia  
       49 天前
    半夜跑批处理
    eason1874
        7
    eason1874  
       49 天前
    都有一千万租客了,难道买不起像样的服务器吗,数据库事务分批处理就行了
    fiypig
        8
    fiypig  
       49 天前
    凌晨跑就可以了

    后期可以使用预付费水电表,也蛮方便的
    reallynyn
        9
    reallynyn  
       49 天前   ❤️ 1
    无外乎业务逻辑优化,系统架构优化,数据库优化三种办法。
    业务逻辑优化,就是尽量不要做这种大规模 update 业务。
    系统架构优化,比如增加缓存层,数据先写到 redis 这种内存库里面,再慢慢 flush 。
    数据库优化,就是引入分布式数据库,或者分库分表的方式,提升数据库并发性。
    再往下,就是数据库 feature 了。比如有的数据库会利用 B+树大块读写的特性,把硬盘中一个簇的数据尽量收集起来写,减少磁头寻道次数。
    xuelu520
        10
    xuelu520  
       49 天前
    半夜跑。
    扣费+扣费日志,update+insert 少不了。
    另外扣费还得开启事务。所以只能队列跑了。
    bk201
        11
    bk201  
       49 天前
    你也不需要 update 吧,借贷记帐就行,最后要拉出来的时候借贷差值计算下就行
    Jooooooooo
        12
    Jooooooooo  
       49 天前
    一个一个算有啥问题吗, 只更新一千万次也并不多.
    james2013
        13
    james2013  
       49 天前
    凌晨定时任务跑
    批量处理,比如每次批量处理 100,甚至 1000 的租客扣费操作
    singerll
        14
    singerll  
       49 天前 via Android
    一千万租户你知道什么概念吗。
    Light3
        15
    Light3  
       49 天前   ❤️ 2
    大哥 咱估计就 500 的量 就不要想 1000w 的事了..
    imn1
        16
    imn1  
       49 天前
    每天每人一条记录,其实频度极低
    xiaochong0302
        17
    xiaochong0302  
       49 天前
    @Light3 扎心
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1170 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 22:32 · PVG 06:32 · LAX 15:32 · JFK 18:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.