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

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

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

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

  

orderId(唯一索引) producterId lastOrderId
     
     

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

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

orderId producterId    
   
   
historyId(唯一索引) orderId lastHistoryId updateTime
       
       

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/fei33423/article/details/105725802