销量最优解
微信公众号:molashaonian
业务背景
商品列表等场景需要展示商品销量,销量自然就跟订单关联,那么统计销量就需要统计商品订单销售的sku 数量
痛点:目前销量计算以 spu(商品) 维度,通过JOB定时查询订单商品表进行统计,以及更新销量缓存,对数据库表的全量查询消耗过大
优化方案初版(优化大多不能一步到位,请看到最后)
- 从计算入手。目前问题也知道了,全量查询计算消耗大,那就从计算销量入手。
- spu首次全量计算销量,并记录该spu最后计算销量得到的订单ID
- 存在spu最后计算的订单ID,根据该订单ID进行销量的增量计算
- 新增全量计算开关控制,用以销量校准
该优化方案解决了多次的全量查询消耗过大问题,只会有初始的一次全量计算,之后便是增量,同时为了校准销量,也保留了全量计算的功能,通过开关控制。
- 不足。虽然避免了全量计算,不过每次的Job都会对全部的 spu 进行销量计算,尽管有些 spu 在这期间并没有产生销售订单
优化方案升级版
为了解决初版无法避免对全部 spu 进行销量计算,在这一步决定把它干掉
- 找出销量有变动的 spu。订单支付成功则记为有效销量,所以在支付回调处入手
- 支付回调:对销量缓存进行更新,并对有销量新增的 spu 缓存起来
- 保留初版优化的全量计算销量Job处理方案,用以销量校准 (该Job默认不打开)
- 新增销量增量同步Job:从缓存中取销量数据(就是支付回调时存下的缓存数据)对数据库表,ES 同步
- 结合实现逻辑图理解
- 对于销量解决方案欢迎留意评论
微信公众号:molashaonian
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)