拉平商品相关联的所有表字段到一张大而全的mongodb中
拉平商品数据
- 由于商品关联的表太多,mysql join多表查询时会很慢。相关缺点参考此人写的join缺点。
- 释放商品mysql的查询压力,mysql只负责商品的增删改的事务类操作,更多使用mongodb来做列表查询操作,redis(hash结构)缓存商品详情。
- mongo存储商品数据维度为商品级别
- redis存储商品数据维度为sku级别
定时同步商品数据
- 定时任务记录上次更新时间到当前时间的商品信息同步到mongo和redis中,并用redis的key来记录
- 查询上次同步时间,如果没有就查询整个的商品编辑时间到当前时间的数据同步到mongo和redis
- 如果有上次同步时间,就执行sql语句lastAt<=update_at AND update_at<=now()得到同步商品
- 记录当前时间,并放入redis中变为lastAt
- 定时把redis中的商品sku库存,销量同步到mysql的eb_goods_sku中
- 编辑商品时如果把sku删除了就要马上执行同步把redis的sku库存销量等信息同步到mysql,不然会丢失数据
展示商品数据
- 查询列表直接到mongo查询,查出后库存要到对应的redis中查找
- 查询某一个商品时去redis中查找该商品下面的所有已启用的skuId后对应单个查找redis详情
扣减库存
- 利用redis的increment保证了线程安全,每次扣减变为负数时要补偿回滚库存。