MySQL 热点数据更新的秒杀级性能优化

100 阅读2分钟

MySQL 热点数据更新的秒杀级性能优化

回答

  1. 库存拆分:将大库存拆分为多个小库存,使扣减动作分散到不同库和表,降低锁粒度提升并发。

    • 优点:实现相对简单。
    • 缺点:存在数据碎片化问题,库存统一调控难度增加。

image-20250401175422605

  1. 请求合并:把多个库存扣减请求,合并为一个进行批量更新。

    • 优点:操作简单。
    • 缺点:适用于允许一定延迟的异步场景,或经分析可合并的场景 。
  2. update 转换为 insert:直接插入占用记录,通过异步统计或 SQL 统计流水方式计算剩余库存。

    • 优点:避免 update 带来的锁冲突问题。
    • 缺点:插入时若控制不当易超卖,插入后剩余库存统计较复杂 。
  3. 改造 MySQL:开启热点更新自动探测,若探测到单行热点更新,让大量并发的update排队执行,减少行锁导致的并发性能下降。

MySQL 批量更新的具体实现

1. 方案原理
  • 将实时并发操作转变为批量处理,减少数据库压力,提高处理效率。
2. 实现步骤及代码示例
  1. 收集和汇总积分
    • 创建临时表
    • image-20250222094024218
    • 每当有积分变更,向该表插入记录
    • image-20250222094045652
  2. 定期更新用户积分表
    • 每隔一定时间(如 10 分钟,可缩短),通过 SQL 脚本或计划任务(如 xxl-job)汇总pending_points表积分并更新到users表,同时清空已处理记录。
    • image-20250222094209491
  3. 注意事项
    • 此方案需考虑任务失败后的补偿等问题