一、商品详情页技术
技术需求分析
存储数据维度:固定结构数据 、非固定结果数据 、富媒体数据
读取流量维度:经常变化数据、非经常变化数据
存储数据维度
固定结构数据:商品主标题、副标题、价格等属性,存储到MySQL
非固定结构数据:商品参数(例如电脑内存大小、手机的屏幕尺寸、酒的度数、口红的色号等),KV存储(MySQL Json列,MongoDB)
富媒体数据:对象存储,分布式文件
读取流量维度
- 存储到mysql的数据,设计加一层缓存,应对高并发读
- 非经常变化的数据,静态化上CDN
- 经常变化的数据,例如价格,ajax接口获取,读取价格调整的副本记录
- 富媒体数据,对象存储为CDN源站,用户通过CDN访问
二、购物车存储设计
购物车系统的主要功能包括:加购、购物车列表页和结算下单。核心的实体就只有一个“购物车”实体,它至少要包括:SKUID、数量、加购时间和勾选状态这几个属性。
在给购物车设计存储时,为了确保购物车内的数据在多端保持一致,以及用户登录前后购物车内商品能无缝衔接,除了每个用户的“用户购物车”之外还要实现一个“暂存购物车”保存用户未登录时加购的商品,并在用户登录后自动合并“暂存购物车”和“用户购物车”。
暂存购物车存储在客户端浏览器或者 App 中,可以选择存放到 Cookie 或者 LocalStorage 中。用户购物车保存在服务端,可以选择使用 Redis 或者是 MySQL 存储,使用 Redis 存储会有更高的性能,可以支撑更多的并发请求,使用 MySQL 是更常规通用的方式,便于应对变化,系统的扩展性更好。
MySQL存储方案
Redis存储方案
KEY:用户ID FIELD:商户ID
方案名 | 可靠性 | 性能 | 方案选择 |
MySQL存储 | 高 支持丰富查询和事务机制,业务变更需支持统计今天加购的商品总数等,MySQL容易实现 | 中 | 推荐 |
Redis存储 | 中 可靠性要求不用那么苛刻,购物车丢了几件商品,问题也不大
| 高 高出1个量级 | |