06小节:优惠券分发失败记录深分页优化
作者:程序员马丁
note
热门项目实战社群,收获国内众多知名公司面试青睐,近千名同学面试成功!助力你在校招或社招上拿个offer。
优惠券分发失败记录深分页优化,元数据信息:
- 什么是牛券oneCoupon:https://t.zsxq.com/pAWgS
- 代码仓库:https://gitcode.net/nageoffer/onecoupon —— 申请项目权限参考上述牛券项目链接
- 章节难度:★★★☆☆ - 较难
- 视频地址:文档先行视频次之
©版权所有 - 拿个offer-开源&项目实战星球专属学习项目,依据《中华人民共和国著作权法实施条例》和《知识星球产权保护》,严禁未经本项目原作者明确书面授权擅自分享至 GitHub、Gitee 等任何开放平台。违者将面临法律追究。
内容摘要:介绍了深分页的业务场景,同时呢介绍三种深分页的解决方案,其中书签记录的方式在应对深分页场景下性能最高,在模拟的 4000 万行记录中依然能够保持微秒查询性能。最后将分发失败的用户领券记录保存到了 Excel 中,并赋值到优惠券模板分发记录任务中。
课程目录如下所示:
- 业务背景
- 什么是深分页?
- Git 分支
- 生成测试数据复现深分页
- 如何解决深分页?
- 分发失败记录生成 Excel
- 文末总结
业务背景
在执行优惠券分发时,对于因库存不足或用户已领取过优惠券而导致的分发失败情况,我们会记录这些失败的分发记录。从企业的实际业务需求来看,这些记录可以通过后台分页查询,或者在分发完成后将失败记录写入 Excel 供运营人员查看。显然,后者更为优越,因为这些失败记录存储在数据库中价值不大,将其保存到 Excel 文件中不仅方便查看,还能节省数据库的存储空间。
我们还需要考虑一个问题:错误分 发的情况会很多吗?实际上,这种情况并不常见。但只要是人为操作,总可能出现漏洞,例如未检查优惠券模板的库存,或者提取的用户数据有误(用户已领取过优惠券)。在这种极端情况下,我们需要通过分页的情况 limit offset, count 的形式进行按批次读取,例如下述 SQL:
select * from t_coupon_task_fail where batch_id = 'xxxxxx' limit 0, 1000;
然而,许多人常常忽视一个问题:当 MySQL 在处理分页很深的数据时,尤其是读取大数据量中的靠后部分时,会遇到深度分页问题。