02 | 流量大、数据多的商品详情页系统该如何设计?
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
电商商品详情页系统设计需要考虑高并发和大数据量的存储问题。文章首先强调了商详页的高访问量和大数据规模,指出了设计存储系统时需要考虑的两个关键问题。其次,文章提到了商品系统需要保存的数据内容,并介绍了如何存储商品基本信息和商品参数。对于商品基本信息,建议在数据库中建表保存,并在数据库前面加一个缓存来提高读取速度。而对于商品参数,建议使用MongoDB来存储,因为其灵活的表结构可以满足大数据量和不固定属性的存储需求。文章还介绍了如何使用前置缓存来缓存商品数据和MongoDB的特点,以及如何设计商品基本信息表和使用MongoDB保存商品参数。文章总结了电商商品详情页系统设计的关键技术特点,为读者提供了快速了解文章内容的概览。 文章还介绍了使用对象存储保存图片和视频的技术,以及将商品介绍静态化的方法。对象存储可以简单理解为一个无限容量的大文件KV存储,存储单位是对象,可以是图片、视频或其他文件。各大云厂商提供对象存储服务,可以通过客户端API直接访问,实现图片和视频的存储和访问。商品介绍的静态化可以节省服务器资源,利用CDN加速访问速度,同时解决商品价格等信息需要实时更新的问题。 总的来说,商品系统的存储需要提供商品的基本信息、商品参数、图片和视频以及商品介绍等数据。这些数据可以分别保存在MySQL、MongoDB和对象存储中,利用缓存和CDN等技术来提高访问速度和节约带宽。这样的存储架构可以有效应对高并发请求,提升系统性能和用户体验。 文章还提出了思考题,引发读者思考如何解决用户下单时商品调价的问题,为读者提供了思考和交流的空间。整体而言,本文内容丰富,涵盖了电商商品详情页系统设计的关键技术特点,对于技术人员和电商从业者具有一定的参考价值。
《后端存储实战课》,新⼈⾸单¥59
全部留言(92)
- 最新
- 精选
- 李玥置顶hi,我是李玥。跟上节课一样,我还是在留言板上同步一下上节课的思考题,大家一起来学习探讨。 上节课我们讲了两种实现幂等的方法,课后呢,我也让你思考了下,在你负责开发的业务系统中,能不能用这节课中讲到的方法来实现幂等?除了这两种方法以外,还有哪些实现服务幂等的方法? 关于这个问题,我是这么看的。 其实总结下来这些实现幂等的方法,无非是两大类,一类是通过一些精巧的设计让更新本身就是幂等的,这种需要点儿运气,不是所有业务都适用的。另外,就是利用外部的、具备一致性的存储(比如说MySQL)来做冲突检测,你在设计幂等方法的时候一般都可以顺着这两个思路来开展。2020-02-26267
- 老姜mysql支持json数据类型了,是不是可以不用mongodb了,多一个数据库,系统就会更复杂
作者回复: 是的,如果能满足业务需求的话,尽量不要用太多的技术。
2020-02-27859 - 漏脚脖老师你好,商品介绍静态化的地方不太懂想请教一下 我们公司现在的做饭是前端页面直接通过ajax请求数据,我理解的是静态化之后,商品介绍这部分就不用请求接口了,那这部分数据也需要初始化吧? 所以,我的第1个问题是,商品介绍这部分数据是怎么初始化的呢?难道是初始化到html文件里吗?我的第1个问题是,商品介绍这部分数据是怎么初始化的呢?难道是初始化到html文件里吗? 第2个问题,如果问题1成立,那是不是没个商品的介绍都要写到一个html文件里?那几亿个sku怎么做呢,要几亿个html?不太可能吧 这块老师能展开说一下吗,不太懂具体的实现
作者回复: 第一个问题,初始化的方式一般就是在商家后台修改了商详页中的商品介绍之后,重新生成一个该SKU的新的商详页HTML文件,这个HTML文件的内容直接就包含商品介绍等大段的文字。然后把这个HTML推送到CDN上,或者等CDN回源来拉取。 第二个问题,是的,每个SKU就会生成一个HTML。 对于像京东淘宝这样的超大规模电商,它们的做法又不一样了,它们的商详页会被划分得非常细,可能会被分为几十上甚至百部分内容,每一部分可能是静态化的HTML片段,也可能是走的缓存,或者是动态生成的,取决于后面支撑这一小块儿内容的系统了。
2020-02-271540 - 蹦~沙卡拉卡老师,我问下,商品每次变化都要保存一个快照。 假如商品表是table_a, 快照表是table_b, 那么订单关联的商品是关联 商品表 table_a 还是 快照表 table_b呢? 我的理解是关联快照表。
作者回复: 是的,关联快照。
2020-03-2420 - 何妨希望老师可以再展开讲讲商品介绍静态化这一块,有些意犹未尽,还是想详细了解一下,感觉看到了些门道但还是有些模糊
作者回复: 其实静态化都是“过时”的技术了。但是特定的场景还是非常有用。 现在的动态Web页面,都是用JS请求动态数据,在浏览器中填充内容。 早期的Web页都是Server端渲染,比如Java中的thymeleaf,FreeMarker 模板引擎,包括PHP本身就是个模板引擎,这些都是在服务端来填充好动态内容,再返回给浏览器的。 页面静态化就是利用这些模板引擎技术,事先就把页面中的动态内容填充好,生成一个一个静态的HTML。 这种静态化技术只适合页面内容很多,页面又不会经常变化的场景。比如我们电商的商详页,再比如很多新闻、咨询类的网站(一篇新闻发了之后很少会修改)。
2020-02-28818 - MadDog请问elasticSearch可以替换mongoDB嘛?elasticSearch也可以通过Dynamic field mappings做到类似功能
作者回复: 从动态字段这个功能上说,这俩数据库是可以互相替换的,哪个更好还是要看业务需求。 大多数场景下mongo写性能更好一些,ES更容易维护,功能也更丰富,但也有一些缺陷,比如深分页的问题,SQL支持还不是特别完善等等。 个人认为ES的前景更好一些,大家怎么看?
2020-02-271118 - 萨秋老师您好 想请问下静态化这块 如何做seo优化呢 类似于价格等信息都是爬虫主要抓取的 如果做成异步的话数据源就会有缺失 类似这样的问题
作者回复: 做SEO还是主要提供商品内容,很多电商都不希望价格被抓走,还要做各种措施来防止爬虫抓取价格。
2020-03-176 - 大秦皇朝李玥老师您好: 上传了图片和视频后,但是又没有提交数据,那么服务器上是否会出现没有用的冗余/垃圾数据?那这块怎么判断和处理呢?
作者回复: 确实可能有这种情况。 没精力的话可以不管,反正垃圾数据也不太多,存储也便宜。 等积累到一定量了,再写个任务定期清理一下就可以。
2020-03-0436 - kamida老师 商品历史版本是在建一个单独的商品历史表 然后给它对于一个时间列吗
作者回复: 一般都是用版本号对应的。
2020-03-233 - hhhh老师想请教下,在存储商品参数的场景,用mysql的json类型存储与mongo, 如何做一下简单的权衡?不胜感激。
作者回复: 存储的选择没有谁好谁不好,还是看场景和需求。 如果只是单纯的存商品参数,MongoDB这种文档数据库更专业一些。 如果从统一技术栈来考虑,使用MySQL JSON能满足需求的话,也是可以的。
2020-02-293