订单系统核心功能
- 创建订单
- 更新订单
- 查询订单
需要的表:
- 订单表:保存订单基本信息
- 商品表:保存商品信息
- 支付表:保存支付信息
- 优惠表:保存优惠信息
关系如下:
如何避免重复下单
下单服务需要具有幂等性,对于创建订单,同一个请求无论请求多少次都只会创建一条订单记录。 具体的做法是这样的,使用数据库主键唯一约束实现。我们给订单系统增加一个“生成订单号”的服务,这个服务没有参数,返回值就是一个新的、全局唯一的订单号。在用户进入创建订单的页面时,前端页面先调用这个生成订单号服务得到一个订单号,在用户提交订单的时候,在创建订单的请求中带着这个订单号,订单号生成尽量保证单调递增,比如:snowflake。在数据库中把订单号作为主键,插入已存在的订单号数据时会失败。
时序图:
如何解决ABA问题
问题时序图:
解决方法:在订单表上加一个version字段,每次更新时需要带上version来更新数据,比较数据库中版本和传入版本一致时采取更新。
此文章为3月Day1学习笔记,内容来源于极客时间《后端存储实战课》