如何设计一个快速的存储架构支撑商品系统
商品系统有两个特点:1,高并发;2:数量多,重量大。
1,商品的基本信息保存在 MySQL,用 Redis 作为前置缓存
商品的基本信息,包括商品的主副标题、价格、颜色等一些商品最基本的属性。这些属性不怎么变化,而且,这部分数据也不会太大。建议在数据库中建一张表来保存商品的基本信息。
然后加一个缓存,帮助抵挡绝大部分的读请求。可以使用 Redis或Memcached。更新商品信息的时候,在更新数据库的同时,也要把缓存中的数据给删除掉,这种缓存更新的策略,称为 Cache Aside,是适用范围也最广泛的更新策略。
2,商品参数保存在 MongoDB 中,用 Redis 作为前置缓存
商品参数字段特别多并且会变化,大多数数据库,都要求数据表要有一个固定的结构。但有一种数据库,没有这个要求,特别适合保存像“商品参数”这种,属性不固定的数据,这个数据库就是 MongoDB。
MongoDB 是一个面向文档存储的 NoSQL 数据库,在 MongoDB 中,表、行、列对应的概念分别是:collection、document、field。
MongoDB 最大的特点就是,它的“表结构”是不需要事先定义的(其实,在 MongoDB 中根本没有表结构)。甚至可以在一张表里保存商品数据、订单数据、物流信息等这些结构完全不同的数据。并且,还能支持按照数据的某个字段进行查询。
MongoDB 中的每一行数据,在存储层就是简单地被转化成 BSON 格式后存起来,这个 BSON 就是一种更紧凑的 JSON。即使在同一张表里面,它每一行数据的结构都可以是不一样的。
但MongoDB 不支持 SQL,多表联查和复杂事务比较孱弱,不太适合存储一般的数据。
3,图片和视频存放在对象存储中
现在图片和视频存储技术已经非常成熟了,首选的方式就是保存在对象存储(Object Storage)中。各大云厂商都提供对象存储服务,比如国内的七牛云、AWS 的 S3 等等。而且,几乎所有的对象存储云服务都自带 CDN(Content Delivery Network)加速服务。
对象存储可以简单理解为一个无限容量的大文件 KV 存储,它的存储单位是对象,其实就是文件,可以是一张图片,一个视频,也可以是其他任何文件。
4,商品介绍随着商详页一起静态化到商详静态页中
商详页的绝大部分内容都是商品介绍,是不怎么变的。把这个页面事先生成好,保存成一个静态的 HTML,访问商详页的时候,直接返回这个 HTML,这就是静态化。
商详页静态化之后,不仅仅是可以节省服务器资源,还可以利用 CDN 加速,把商详页放到离用户最近的 CDN 服务器上,让商详页访问更快。
网友评论