如何设计一个电商系统(三) - 商品系统

商品系统

系统简介

商品系统主要就使用来维护商品的基本信息,下面列出介个主要的版块:

  • 商品管理
  • 商品分类
  • 商品类型
  • 品牌管理
  • 商品评价
商品管理
  1. 商品列表:商品数据列表的维护,商品筛选,筛选查询,批量操作(上架、下架、推荐、新品、移入回收站、转移分类)
  2. 商品审核
  3. 商品回收站:搜索及批量还原、删除操作
  4. 商品批量操作
商品分类
  1. 商品分类:商品分类的CRUD;
商品类型
  1. 商品类型:商品的规格、参数的信息维护;
  2. 图片库管理:相册搜索、相册列表
品牌管理
  1. 品牌名称搜索
  2. 品牌列表:编号、名称、品牌首字母、排序、品牌制造商、是否显示、相关(商品、评价)、操作(编辑、删除)
  3. 批量操作:显示品牌、隐藏品牌
  4. 品牌信息维护
商品评价
  1. 评价搜索:商品名、商品分类、用户昵称
  2. 评价列表:编号、昵称、商品名称、ip、时间、是否显示、查看、删除
  3. 批量操作:批量删除,显示,隐藏
  4. 查看评价

商品系统中的问题

如何应对高并发的访问

对于一个电商系统而言,访问压力最大的无疑是商品列表和商品详情页;用户在购买前都会浏览很多商品,货比三家,所以对于商品系统的而言,如何应对高并发大流量的访问时非常重要的;
这里提供两种方法来缓解并发压力:

  • 页面静态化: 我们将这些商详页做成静态页面,部署在CDN服务器上,这样用户的查询请求会先打到离用户最近的CDN服务器,不会打到系统的页面查询服务上,缓解了服务器的访问压力;
  • Redis缓存: 我们给商品系统的热数据加一级Redis缓存,数据的查询先去Redis中取,没有才选择区数据库MySQL中取;这里需要注意的两点:一是防止并发产生脏数据,可以使用Cache Aside策略(每次数据更新不刷新缓存,而是直接删除该缓存);二是防止缓存击穿和缓存雪崩(这个后期单独出一篇);

以上的两种方式说白了其实都是加缓存(CDN缓存和数据库缓存),本质都是缓解访问压力;

如何存储海量的商品信息

对于商详页的设计,我们必须要提前考虑到商品的数据规模的问题;B2C的系统可能规模小一点,但是对于C2C的商城系统,那个商品的数量是巨大的。国内一线电商,SKU的数量大约在几亿到几十亿这个量级。虽然实际上并没有这么多的商品,但是同一个商品会有不同的版本号,很多商品在促销的时候会以各种形式反复上下架;
并且商品同时包含很多文件,比如图片和视屏介绍之类的;
这里也提供几种方式来应对存储的问题:

  • 使用MongoDB保存商品参数: 对于不同商品,他们的商品属性的不一样的,我们很难使用结构化数据库进行存储;面对这种情况,使用MongoDB就是一个不错的选择;MongoDB最大的特点就是,他的"表结构"是不需要实现定义的,其实,在MongoDB中根本没有表结构。由于没有表结构,它支持你把任何信息放到同一张表里。
  • 使用对象存储保存图片和视频: 我们可以使用各个大厂的对象存储服务,如阿里云、七牛云等;或者使用开源的MinIO,可以私有化部署和水平拓展,这些都能够帮组我们存储我们的文件;
  • 数据分片: 数据分片可以帮助我们水平的拓展我们数据库的容量,我们可以使用Apache的Shardingsphere 来部署一个分布式数据库,不过这种方式会增加我们系统的复杂性,也会带来很多分布式数据库的挑战,不到万不得已还是尽量不要用;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值