场景是一个账务系统,对外提供入账、查询和收支统计功能。收支统计指的是可以查询用户纬度指定时间窗口内的入账金额总和。
老系统入账和查询是 mysql ,有三张表,分别是明细表、账户表、统计表,每次入账行为是先 insert 明细表,然后 update 账户表和统计表,后来优化入账流程,避免长事务,重构后统计表变成了通过明细表 binlog 异步去做。具体做法是把统计信息根据用户+日期维度存一个 kv 存储,每次消费入账明细去更新 value 。这个统计行为是半幂等的,value 里面存一个数组,只保留近 10 条明细的唯一键,每次更新这个数组 fifo 用来做幂等。
现在新需求场景是希望统计个性化场景的数据,比如入账行为分为工资、转账、退款等,那么只想统计某段时间的转账总和。
按照现在的 kv 做法,那么这种个性化场景就要做成单独的 key ,每次根据规则写到不同的 key ,这存在写放大问题,可能一条明细被统计到多个 kv 上去,而且需要考虑写多个 key 的一致性问题。
数据总量每天新增百亿行,用的是大分片库。 可能的做法:
大致就是这些,大佬们帮帮忙指点一下,感激不尽
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.