场景是一个账务系统,对外提供入账、查询和收支统计功能。收支统计指的是可以查询用户纬度指定时间窗口内的入账金额总和。
老系统入账和查询是 mysql ,有三张表,分别是明细表、账户表、统计表,每次入账行为是先 insert 明细表,然后 update 账户表和统计表,后来优化入账流程,避免长事务,重构后统计表变成了通过明细表 binlog 异步去做。具体做法是把统计信息根据用户+日期维度存一个 kv 存储,每次消费入账明细去更新 value 。这个统计行为是半幂等的,value 里面存一个数组,只保留近 10 条明细的唯一键,每次更新这个数组 fifo 用来做幂等。
现在新需求场景是希望统计个性化场景的数据,比如入账行为分为工资、转账、退款等,那么只想统计某段时间的转账总和。
按照现在的 kv 做法,那么这种个性化场景就要做成单独的 key ,每次根据规则写到不同的 key ,这存在写放大问题,可能一条明细被统计到多个 kv 上去,而且需要考虑写多个 key 的一致性问题。
数据总量每天新增百亿行,用的是大分片库。 可能的做法:
大致就是这些,大佬们帮帮忙指点一下,感激不尽
1
Alias4ck 2023-04-02 13:39:21 +08:00
why not ask gpt-4? https://gpt.best/J2pwM2Yw
|
2
totoro52 2023-04-02 19:27:36 +08:00 via iPhone
es: 那我走?
|
3
Red998 2023-04-03 09:38:14 +08:00
这个应该同步到大数据比较好吧 、查询也只是冷数据。大数据统计比较好
|
4
house600 2023-04-03 10:14:49 +08:00
这个统计行为是半幂等的,value 里面存一个数组,只保留近 10 条明细的唯一键,每次更新这个数组 fifo 用来做幂等。
请问下,这个是怎么做幂等的 |
5
WLYsYs 2023-04-03 13:26:49 +08:00
体量这么大,指定时间,还是得用大数据
|