冰河技术
导读
♻学习路线
  • 面试必问系列

    • 面试必问
  • 架构与模式

    • Java极简设计模式
    • 实战高并发设计模式
  • Java核心技术

    • Java8新特性
    • IOC核心技术
    • JVM调优技术
  • 容器化核心技术

    • Dockek核心技术
  • 分布式存储

    • Mycat核心技术
  • 数据库核心技术

    • MySQL基础篇
  • 服务器核心技术

    • Nginx核心技术
  • 渗透核心技术

    • 渗透实战技术
  • 底层技术
  • 源码分析
  • 基础案例
  • 实战案例
  • 面试
  • 系统架构
  • Spring6核心技术
  • 分布式事务

    • 分布式事务系列视频
  • SpringBoot
  • SpringCloudAlibaba
  • 🔥AI大模型项目

    • 一站式AI智能平台
    • AI智能客服系统
    • AI智能问答系统
    • 实战AI大模型
  • 中间件项目

    • 手写高性能Redis组件
    • 手写高性能脱敏组件
    • 手写线程池项目
    • 手写高性能SQL引擎
    • 手写高性能Polaris网关
    • 手写高性能RPC项目
  • 高并发项目

    • 分布式IM即时通讯系统(新)
    • 分布式Seckill秒杀系统
    • 实战高并发设计模式
  • 微服务项目

    • 简易电商脚手架项目
  • 手撕源码

    • 手撕Spring6源码
🌍知识星球
  • 总览

    • 《书籍汇总》
  • 出版图书

    • 《深入理解高并发编程:核心原理与案例实战》
    • 《深入理解高并发编程:JDK核心技术》
    • 《深入高平行開發:深度原理&專案實戰》
    • 《深入理解分布式事务:原理与实战》
    • 《MySQL技术大全:开发、优化与运维实战》
    • 《海量数据处理与大数据技术实战》
  • 电子书籍

    • 《实战高并发设计模式》
    • 《深入理解高并发编程(第2版)》
    • 《深入理解高并发编程(第1版)》
    • 《从零开始手写RPC框架(基础篇)》
    • 《SpringCloud Alibaba实战》
    • 《冰河的渗透实战笔记》
    • 《MySQL核心知识手册》
    • 《Spring IOC核心技术》
  • 关于自己
  • 关于学习
  • 关于职场
B站
Github
导读
♻学习路线
  • 面试必问系列

    • 面试必问
  • 架构与模式

    • Java极简设计模式
    • 实战高并发设计模式
  • Java核心技术

    • Java8新特性
    • IOC核心技术
    • JVM调优技术
  • 容器化核心技术

    • Dockek核心技术
  • 分布式存储

    • Mycat核心技术
  • 数据库核心技术

    • MySQL基础篇
  • 服务器核心技术

    • Nginx核心技术
  • 渗透核心技术

    • 渗透实战技术
  • 底层技术
  • 源码分析
  • 基础案例
  • 实战案例
  • 面试
  • 系统架构
  • Spring6核心技术
  • 分布式事务

    • 分布式事务系列视频
  • SpringBoot
  • SpringCloudAlibaba
  • 🔥AI大模型项目

    • 一站式AI智能平台
    • AI智能客服系统
    • AI智能问答系统
    • 实战AI大模型
  • 中间件项目

    • 手写高性能Redis组件
    • 手写高性能脱敏组件
    • 手写线程池项目
    • 手写高性能SQL引擎
    • 手写高性能Polaris网关
    • 手写高性能RPC项目
  • 高并发项目

    • 分布式IM即时通讯系统(新)
    • 分布式Seckill秒杀系统
    • 实战高并发设计模式
  • 微服务项目

    • 简易电商脚手架项目
  • 手撕源码

    • 手撕Spring6源码
🌍知识星球
  • 总览

    • 《书籍汇总》
  • 出版图书

    • 《深入理解高并发编程:核心原理与案例实战》
    • 《深入理解高并发编程:JDK核心技术》
    • 《深入高平行開發:深度原理&專案實戰》
    • 《深入理解分布式事务:原理与实战》
    • 《MySQL技术大全:开发、优化与运维实战》
    • 《海量数据处理与大数据技术实战》
  • 电子书籍

    • 《实战高并发设计模式》
    • 《深入理解高并发编程(第2版)》
    • 《深入理解高并发编程(第1版)》
    • 《从零开始手写RPC框架(基础篇)》
    • 《SpringCloud Alibaba实战》
    • 《冰河的渗透实战笔记》
    • 《MySQL核心知识手册》
    • 《Spring IOC核心技术》
  • 关于自己
  • 关于学习
  • 关于职场
B站
Github
  • 专栏介绍

    • 我要手把手教你搭建并研发一套抗瞬时百万流量的秒杀系统
  • 研发背景

    • 第01章:从多个角度聊聊为何要学习秒杀系统
  • 目标与挑战

    • 第02章:秒杀系统的目标与挑战
    • 第03章:秒杀系统高并发大流量的应对之道
  • 用户故事

    • 第04章:秒杀系统需求与流程梳理
    • 第05章:秒杀系统技术流程梳理
  • 架构设计

    • 第06章:秒杀系统总体方案目标与架构设计
    • 第09章:秒杀系统数据模型设计
  • 环境搭建

    • 第07章:秒杀系统基础环境搭建
    • 第08章:秒杀系统研发环境搭建
    • 第10章:基于DDD快速搭建秒杀系统项目并测试
  • 用户服务设计与实现

    • 第11章:用户登录授权认证流程的设计与实现
    • 第12章:访问登录授权限制接口的流程设计与实现
  • 秒杀活动设计与实现

    • 第13章:秒杀活动业务流程与接口设计
    • 第14章:秒杀活动后端业务与接口开发
    • 第15章:秒杀活动运营端业务开发
    • 第16章:秒杀活动用户端业务开发
  • 秒杀商品设计与实现

    • 第17章:秒杀商品业务流程与接口设计
    • 第18章:秒杀商品后端业务与接口开发
    • 第19章:秒杀商品运营端业务开发
    • 第20章:秒杀商品用户端业务开发
  • 秒杀订单设计与实现

    • 第21章:秒杀订单业务流程与接口设计
    • 第22章:秒杀订单后端业务与接口开发
    • 第23章:秒杀订单用户端业务开发
    • 第24章:秒杀订单运营端业务开发
  • 经典问题重现

    • 第25章:重现刷单流量问题
    • 第26章:重现库存超卖问题
  • 极致缓存设计

    • 第27章:混合型缓存设计场景与原则
    • 第28章:混合型缓存架构设计与技术选型
    • 第29章:混合型缓存通用代码设计与实现
    • 第30章:分布式锁通用代码设计与实现
    • 第31章:混合型缓存通用模型设计与实现
  • 整合极致缓存

    • 第32章:秒杀活动列表混合型缓存设计与实现
    • 第33章:秒杀活动详情混合型缓存设计与实现
    • 第34章:秒杀商品列表混合型缓存设计与实现
    • 第35章:秒杀商品详情混合型缓存设计与实现
  • 缓存领域事件

    • 第36章:领域事件通用缓存模型设计
    • 第37章:秒杀活动监听缓存领域事件的设计与实现
    • 第38章:秒杀活动发送缓存领域事件的设计与实现
    • 第39章:秒杀商品监听缓存领域事件的设计与实现
    • 第40章:秒杀商品发送缓存领域事件的设计与实现
  • 订单领域事件

    • 第41章:秒杀订单监听领域事件的设计与实现
    • 第42章:秒杀订单发送领域事件的设计与实现
  • 库存扣减防超卖设计

    • 第43章:秒杀扣减库存设计
    • 第44章:基于数据库设计并实现库存防超卖
    • 第45章:基于分布式锁设计并实现库存防超卖
    • 第46章:基于Lua脚本设计并实现库存防超卖
  • 单体到微服务

    • 第47章:从单体到微服务重构项目
    • 第48章:重现分布式事务问题
    • 第49章:基于TCC模型解决分布式事务问题
    • 第50章:基于AT模型解决分布式事务问题
    • 第51章:基于可靠消息最终一致性模型解决分布式事务问题
  • 缓存数据一致性

    • 第52章:零侵入重构秒杀活动异步事件后置处理器
    • 第53章:零侵入重构秒杀商品异步事件后置处理器
    • 第54章:零侵入重构秒杀订单异步事件后置处理器
  • 异步化设计

    • 第55章:异步化下单流程设计
    • 第56章:异步化下单编码实现
    • 第57章:异步化扣减商品库存流程设计
    • 第58章:异步化扣减商品库存编码实现
  • 库存分库分表与分桶设计

    • 第59章:商品库存分库分表与分桶设计
    • 第60章:商品库存分库分表与分桶编码实现
    • 第61章:下单流程整合商品库存分桶
  • 订单分库分表设计

    • 第62章:订单分库分表设计
    • 第63章:订单分库分表编码实现
    • 第64章:下单流程整合订单分库分表
  • 隔离与限制策略

    • 第65章:秒杀系统流量隔离策略
    • 第66章:秒杀系统规模限制策略
  • 预约系统设计与实现(含缓存)

    • 第67章:预约系统需求梳理与架构设计
    • 第68章:预约系统数据模型设计
    • 第69章:预约系统业务流程与接口设计
    • 第70章:预约系统运营端业务与接口开发
    • 第71章:预约系统用户端业务与接口开发
    • 第72章:下单流程整合预约系统
  • 预约系统优化

    • 第73章:预约系统分库分表设计
    • 第74章:预约系统分库分表编码实现
    • 第75章:预约系统整合分库分表
  • 秒杀系统削峰策略

    • 第76章:秒杀系统削峰总体概述
    • 第77章:打散客户端流量削峰
    • 第78章:消息队列削峰
    • 第79章:限流削峰
  • 分布式流控

    • 第80章:Sentinel概述与本地搭建环境
    • 第81章:秒杀系统整合Sentinel实现流控
    • 第82章:Sentinel核心技术与配置规则(加餐)
  • 单机限流

    • 第83章:基于QPS实现单机API限流
    • 第84章:基于线程池实现单机并发数限流
  • 业务网关

    • 第85章:业务网关概述与核心架构
    • 第86章:秒杀系统整合业务网关
    • 第87章:业务网关整合Nacos配置
    • 第88章:业务网关整合Sentinel流控
    • 第89章:业务网关整合Guava流控
    • 第90章:业务网关使用自带流控
  • 流量网关

    • 第91章:流量网关环境初步搭建
    • 第92章:流量网关项目搭建
    • 第93章:流量网关实现限流
  • 服务容错

    • 第94章:服务雪崩与容错方案
    • 第95章:服务降级核心原理与落地方案
    • 第96章:热点数据问题与解决方案
    • 第97章:秒杀系统实现服务容错
  • 服务配置

    • 第98章:凌乱的服务配置与解决方案
    • 第99章:秒杀系统整合Nacos配置中心
    • 第100章:实现配置动态刷新
    • 第101章:实现配置动态共享
  • 链路追踪

    • 第102章:链路追踪核心原理与解决方案
    • 第103章:秒杀系统实现链路追踪
    • 第104章:扩展Dubbo源码实现链路追踪
    • 第105章:秒杀系统链路追踪可视化
  • 日志治理

    • 第106章:日志治理概述、原则与架构
    • 第107章:快速搭建ELK环境并导入配置
    • 第108章:秒杀系统整合日志治理
  • 防刷方案

    • 第109章:实现基于条件限流机制防刷
    • 第110章:实现基于Token编排机制防刷
    • 第111章:实现基于黑名单机制防刷
  • 风控模型

    • 第112章:黑灰产与风控基础知识介绍
    • 第113章:风控模型架构与落地方案
    • 第114章:秒杀系统风控模型设计
    • 第115章:秒杀系统风控模型实现
  • 容器化集群部署

    • 第116章:容器化集群部署架构设计
    • 第117章:容器化集群部署落地实现
    • 第118章:容灾架构设计与落地方案
  • 全链路压测

    • 第119章:全链路压测场景与核心流程
    • 第120章:全链路压测核心原则与策略
    • 第121章:全链路压测落地方案实施
  • 极致优化

    • 第122章:服务器物理机极致优化
    • 第123章:单机服务性能极致优化
    • 第124章:秒杀系统流程极致优化
  • 专栏总结

    • 结尾:秒杀系统整体专栏总结
  • 番外篇

    • 第01章:互联网大厂是如何设计和使用缓存的

《Seckill秒杀系统》第73章:预约系统分库分表设计

作者:冰河
星球:http://m6z.cn/6aeFbs
博客:https://binghe.site
文章汇总:https://binghe.site/md/all/all.html
源码获取地址:https://t.zsxq.com/0dhvFs5oR

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:对预约系统中的商品预约配置信息,用户预约商品的记录信息进行分库分表设计,重点理解分库分表的设计思想,并能够将其灵活应用到实际项目中。

大家好,我是冰河~~

在前面的文章中,我们已经梳理了预约系统的业务流程,设计了最简化的接口交互逻辑,也实现了运营端和用户端的业务逻辑,并且下单流程也完成了对预约系统的整合。

一、前言

对于互联网项目来说,无论是秒杀系统还是其他项目,从一定程度上来说,流量大小最终还是取决于使用系统的人数,使用系统的人数多,流量就大,使用系统的人数少,流量就少。为了从根本上限制进入秒杀系统的流量,我们设计了预约系统。

如果秒杀商品在预约系统中配置了预约信息,也就是秒杀商品开通了预约通道,此时用户只有成功预约了开通预约通道的商品后,才能抢购当前商品。这就在一定程度上限制了参与抢购秒杀商品的用户人数,从而在一定程度上限制了进入秒杀商品的流量。

对于预约系统来说,如果同一时间有大量用户预约商品,则预约系统可能会出现类似秒杀的场景,具备了秒杀系统的某些特点。所以,需要对预约系统进行对应的优化。

二、本章诉求

对预约系统中的商品预约品牌数据和用户预约秒杀商品的数据进行分库分表设计,将单个数据库和单张数据表的读写压力,按照一定的规则分摊到多个数据库下的多张数据表中。以此来进一步提升预约系统中数据的读写性能。

三、预约系统优化目标

对预约系统中的数据进行分库分表设计,在分库分表设计上,会存在多种策略,比较常见的策略:比如按照时间进行库存分表,以某个字段为分片键进行分库分表等。

预约系统作为整个秒杀交易链路中的一环,如果秒杀商品开通了预约通道,则用户需要提前成功预约商品后,才能正常抢购下单,如果某个时刻,有大量用户预约秒杀商品,则预约系统可能会出现类似秒杀的场景,具备秒杀系统的某些特点。所以,对于预约系统来说,按照时间进行分库分表同样是不太合适的。所以,我们在预约系统中采用的分库分表策略,是以数据表中某个字段为分片键进行分库分表。

四、分库分表设计

对于预约系统来说,会对商品的预约配置信息、用户预约秒杀商品的记录数据进行分库分表。由于预约系统需要同时支持基于用户和基于商品来查询预约记录信息,所以,对用户预约秒杀商品的记录数据来说,需要基于用户和商品进行分库分表。

4.1 预约配置分库分表设计

对于预约系统中商品的预约配置信息来说,一条商品数据可以对应着一条商品的预约配置信息。此时,可以使用商品的id作为分片键进行分库分表。

这里,我们依然使用了三个库来实现(实际场景可以根据具体需要灵活配置分库和分表的数量),也就是将原来的一个预约数据库从商品维度分成三个库,并且每个数据库中有三张数据表。其中,每个数据库和数据表都会分摊一部分数据的读写压力。

这里需要注意的是:在我们实现的预约系统中,使用了三个数据库和三张数据表来对秒杀商品的预约配置数据进行分库分表设计,在实际场景下,大家可以根据实际的业务需要,灵活配置分库分表的数量。

对于秒杀商品预约配置的分库分表如图73-1所示。

查看完整文章

加入冰河技术知识星球,解锁完整技术文章与完整代码

在 GitHub 上编辑此页
上次更新: 2026/4/29 16:18
Contributors: binghe001
Next
第74章:预约系统分库分表编码实现
阅读全文
×

扫码或搜索:冰河技术
发送:290992
即可立即永久解锁本站全部文章

星球会员
跳转链接