电商快照系统解析- 历史实体设计

最近在看自己之前的博客,广告系统下的历史物料 ,文章背景啥的都忘记了,但是联想到一个淘宝快照是怎么做的.

两个问题,版本怎么来设计,历史快照和原物料是同一个id么?

方案1: 一开始还想过不同一个id,同一个表.相当于历史对象和当前对象同一个空间,即实体是不可变的.  这个就很扯蛋了. 一订单关联的当前外键内容id要每次变动后都变. 一个商家的当前的订单查询就比较麻烦. 需要通过gmt_modified来识别最新. 所有的历史表没有统一的归属,只有上一个不可变实体.

  

orderId(唯一索引)producterIdlastOrderId
   
   

 缺点: 历史和实体之间的相关性不明确. 不符合逻辑.

  方案2: 另外一种是 空间分开. 历史表专门的表(含最新的id), id非唯一键. 所有的历史表归属于同一个实体id. 

orderIdproducterId    
  
  

 

historyId(唯一索引)orderIdlastHistoryIdupdateTime
    
    

 

基于方案2来设计快照就简单多了.

每个订单下面有物料,每个位置的物料(或者物料的子字段)都有自己的历史数据,加上时间戳.

通过时间戳来查询 快照订单的物料信息. 

记住通过数字version是不可能实现的. 用户记录orderId的一个version. 如果order有很多物料(属性) 每次变动都要改动version么.

version适用于 端上和服务端同步, 判断自己是否是最新的数据,如果不是最新,那么就查询下.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值