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

2022-08-08 13:09:56 +08:00
 baobaoyinshen

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

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

1774 次点击
所在节点    问与答
17 条回复
chotow
2022-08-08 13:16:00 +08:00
我会考虑改为插入一千万条费用记录,每个用户查看自己余额的时候再实时计算一下
Fuor
2022-08-08 13:34:04 +08:00
有记录每天产生水电费的客户记录的话,扔到队列一个个单独计算?
08110920
2022-08-08 13:35:36 +08:00
队列处理
baobaoyinshen
2022-08-08 13:36:35 +08:00
@chotow 这个方法不太行,因为有时候运营人员需要导出账户欠费人员,不能导出的时候再来实时计算把
jackma0571
2022-08-08 13:39:22 +08:00
没错,0 点过后一个一个计算
lakehylia
2022-08-08 13:43:57 +08:00
半夜跑批处理
eason1874
2022-08-08 13:54:08 +08:00
都有一千万租客了,难道买不起像样的服务器吗,数据库事务分批处理就行了
fiypig
2022-08-08 13:54:49 +08:00
凌晨跑就可以了

后期可以使用预付费水电表,也蛮方便的
reallynyn
2022-08-08 15:02:45 +08:00
无外乎业务逻辑优化,系统架构优化,数据库优化三种办法。
业务逻辑优化,就是尽量不要做这种大规模 update 业务。
系统架构优化,比如增加缓存层,数据先写到 redis 这种内存库里面,再慢慢 flush 。
数据库优化,就是引入分布式数据库,或者分库分表的方式,提升数据库并发性。
再往下,就是数据库 feature 了。比如有的数据库会利用 B+树大块读写的特性,把硬盘中一个簇的数据尽量收集起来写,减少磁头寻道次数。
xuelu520
2022-08-08 15:08:25 +08:00
半夜跑。
扣费+扣费日志,update+insert 少不了。
另外扣费还得开启事务。所以只能队列跑了。
bk201
2022-08-08 15:22:56 +08:00
你也不需要 update 吧,借贷记帐就行,最后要拉出来的时候借贷差值计算下就行
Jooooooooo
2022-08-08 15:24:38 +08:00
一个一个算有啥问题吗, 只更新一千万次也并不多.
james2013
2022-08-08 15:37:59 +08:00
凌晨定时任务跑
批量处理,比如每次批量处理 100,甚至 1000 的租客扣费操作
singerll
2022-08-08 15:46:50 +08:00
一千万租户你知道什么概念吗。
Light3
2022-08-08 16:29:35 +08:00
大哥 咱估计就 500 的量 就不要想 1000w 的事了..
imn1
2022-08-08 16:46:31 +08:00
每天每人一条记录,其实频度极低
xiaochong0302
2022-08-08 18:09:18 +08:00
@Light3 扎心

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

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

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

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

© 2021 V2EX