《后端存储实战课》课程学习笔记(三)

news2024/11/25 10:51:55

流量大、数据多的商品详情页系统该如何设计?

  • 电商的商品系统主要功能就是增删改查商品信息,没有很复杂的业务逻辑,支撑的主要页面就是商品详情页。设计这个系统的存储,你仍然需要着重考虑两个方面的问题。
    • 第一,要考虑高并发的问题。
      • 不管是什么电商系统,商品详情页一定是整个系统中 DAU(日均访问次数)最高的页面之一。
      • 如果说,在设计存储的时候,没有考虑到高并发的问题,大促的时候,支撑商品详情页的商品系统必然是第一个被流量冲垮的系统。
    • 第二,要考虑的是商品数据规模的问题。
      • 商品详情页的数据规模,数量多,重量大。

商品系统需要保存哪些数据?

在这里插入图片描述

  • 这么多内容怎么存?
    • 不能用数据库,那应该选择哪种存储系统来保存这么复杂的商品数据呢?
    • 任何一种存储都是没办法满足的,解决的思路是分而治之,我们可以把商品系统需要存储的数据按照特点,分成商品基本信息、商品参数、图片视频和商品介绍几个部分来分别存储。

商品基本信息该如何存储?

  • 我们先来分析商品的基本信息,它包括商品的主副标题、价格、颜色等一些商品最基本、主要的属性。
    • 这些属性都是固定的,不太可能会因为需求或者不同的商品而变化,而且,这部分数据也不会太大。
    • 所以,还是建议你在数据库中建一张表来保存商品的基本信息。
    • 然后,还需要在数据库前面,加一个缓存,帮助数据抵挡绝大部分的读请求。
  • 设计商品基本信息表的时候,一定要记得保留商品数据的每一个历史版本。
    • 因为商品数据是随时变化的,但是订单中关联的商品数据,必须是下单那个时刻的商品数据,这一点很重要。
    • 你可以为每一个历史版本的商品数据保存一个快照,可以创建一个历史表保存到 MySQL 中,也可以保存到一些 KV 存储中。

使用 MongoDB 保存商品参数

  • 我们再来分析商品参数,参数就是商品的特征。
    • 比如说,电脑的内存大小、手机的屏幕尺寸、酒的度数、口红的色号等等。
    • 和商品的基本属性一样,都是结构化的数据。
    • 但麻烦的是,不同类型的商品,它的参数是完全不一样的。
  • 大多数数据库,都要求数据表要有一个固定的结构。但有一种数据库,没有这个要求。特别适合保存像“商品参数”这种,属性不固定的数据,这个数据库就是 MongoDB。
    • MongoDB 是一个面向文档存储的 NoSQL 数据库,在 MongoDB 中,表、行、列对应的概念分别是:collection、document、field,其实都是一回事儿。
    • MongoDB 最大的特点就是,它的“表结构”是不需要事先定义的,其实,在 MongoDB 中根本没有表结构。
    • 由于没有表结构,它支持你把任意数据都放在同一张表里,你甚至可以在一张表里保存商品数据、订单数据、物流信息等这些结构完全不同的数据。
    • 并且,还能支持按照数据的某个字段进行查询。
    • 当然,这样的灵活性也是有代价的,MongoDB 不支持 SQL,多表联查和复杂事务比较孱弱,不太适合存储一般的数据。
    • 但是,对于商品参数信息,数据量大、数据结构不统一,这些 MongoDB 都可以很好的满足。
    • 我们也不需要事务和多表联查,MongoDB 简直就是为了保存商品参数量身定制的一样。

使用对象存储保存图片和视频

  • 图片和视频由于占用存储空间比较大,一般的存储方式都是,在数据库中只保存图片视频的 ID 或者 URL,实际的图片视频以文件的方式单独存储。
  • 现在图片和视频存储技术已经非常成熟了,首选的方式就是保存在对象存储(Object Storage)中。
    • 各大云厂商都提供对象存储服务,比如国内的七牛云、AWS 的 S3 等等,也有开源的对象存储产品,比如 MinIO,可以私有化部署。
    • 虽然每个产品的 API 都不一样,但功能大同小异。
  • 对象存储可以简单理解为一个无限容量的大文件 KV 存储,它的存储单位是对象,其实就是文件,可以是一张图片,一个视频,也可以是其他任何文件。
    • 每个对象都有一个唯一的 key,利用这个 key 就可以随时访问对应的对象。
    • 基本的功能就是写入、访问和删除对象。

将商品介绍静态化

  • 商品介绍在商品详情页中占得比重是最大的,包含了大量的带格式文字、图片和视频。
    • 其中图片和视频自然要存放在对象存储里面;
    • 商品介绍的文本,一般都是随着商品详情页一起静态化,保存在 HTML 文件中。
  • 商品详情页静态化之后,不仅仅是可以节省服务器资源,还可以利用 CDN 加速,把商品详情页放到离用户最近的 CDN 服务器上,让商品详情页访问更快。
  • 至于商品价格、促销信息等这些需要频繁变动的信息,不能静态化到页面中,可以在前端页面使用 AJAX 请求商品系统动态获取。
  • 这样就兼顾了静态化带来的优势,也能解决商品价格等信息需要实时更新的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/666973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

First De-Trend then Attentd: Rethinking Attention for Time-Series Forecasting

论文题目:重新思考注意力在时间序列预测任务中应用 作者单位:亚马逊 访问学者、亚马逊云科技 摘要: 基于Transformer的一系列方法在长时间序列预测任务中很有效,除了在时域部分学习注意力外,最近的工作也在频域中探…

心中的TOP4编程语言❤

编程语言心动值排名: java:❤❤❤❤❤ python:❤❤❤❤ C:❤❤❤ C:❤❤❤❤ 一:关于编程语言优劣的评选标准 个人认为一门语言的优劣势标准评判主要是这门语言解决了哪一类问题,为人类创造了多…

Linux0.11内核源码解析-pipe.c

目录 什么是PIPE? PIPE注意事项 有名和匿名管道 内核管道通信 管道读函数 管道写函数 管道创建 什么是PIPE? 进程间通信(IPC,Inter-Process Communication)是指在不同进程间进行数据通信和交换的过程。管道&am…

生成式AI数据中心网络来了,NVIDIA抢占加速计算高端市场

在大模型和生成式AI的大风口下,NVIDIA大力倡导并率先进军传统数据中心的高端市场——加速计算数据中心。自进入AI和大数据时代,业界就开始出现“加速计算”的概念。简单理解,加速计算即使用GPU、FPGA以及各种DPU等加速芯片以及相关的软件技术…

【Java】POJO类的属性不要命名为isXXX的问题描述,复现,解决方法

问题描述 POJO的属性是布尔类型的时候,采用is_xxx的命名方式,出现参数无法找到的情况 问题复现 Boolean 的属性命名为isA,但是它的getter和setter自动取消了is public class Person { Boolean isA; public Boolean getA() { return is…

locust学习教程(4) - 命令行参数

前言 一句话总结:命令行参数、环境变量、配置文件 1、所有命令行参数 1.1、常用场景参数解读 1.1.1、无web界面,定时运行,数据存储在csv中: locust -f per_01_test.py --headless -u 10 -r 1 -t 1m -s 120 --csvexample --head…

locust学习教程(1)- 概念相关

前言 一句话总结:本文是基于2.4.1的版本去学习locust,如果你想完全搞懂它,那么就从最新的产品文档从头到尾去研读一遍吧。 1、locust是什么? 1.1、相关资料 官网:www.locust.io/产品文档:docs.locust.io…

光伏电站并网雷电防护措施探讨 安科瑞 许敏

摘要: 本文指出了雷击对并网系统光伏电站的主要危害形式及所对应的雷电防护措施。依据相关的防雷及电气接地规范,针对并网系统光伏电站提出了防雷设计方案并做了详细的阐述。在光伏电站的防雷设计中,应考虑雷电会通过何种形式对哪些设施造成损害&#xf…

玩转系统|完美替代ChatGPT!Claude注册教程及出现问题解决方案

目录 1、什么是ChatGPT? 2、什么是Claude? 3、为什么推荐Claude? 3.1、Claude特性 4、注册 slack 5、Claude添加到Slack 6、出现APP Unavailable问题 7、如何解决该问题 8、使用感受 8、1代码测试 8、2文学测试 8、3英语测试 1、什么是ChatGPT&a…

防溺水智能预警监控系统解决方案

一、方案背景 随着夏季暑期的到来,孩童、学生溺水的警钟又不断敲响。预防夏季溺水,不仅要求学校方面要加强安全宣传教育,同时相关部门也需要加强对河流、湖泊、水库、池塘等水域的监控和人员靠近预警。 目前水库、河湖、堤坝、河湖岸线、深水…

图观 智慧交通合集 | 9大行业细分应用案例 一次性看个够!

随着城市化进程的加速和交通需求的不断增长,城市交通系统的安全、高效、智能化的要求越来越高,智慧交通正成为现代城市发展的必然趋势。数字孪生技术的出现,为智慧交通领域的应用提供了更为广阔的空间。 数字冰雹深耕数字孪生行业十余载&…

【Java高级语法】(九)IO流:肝了三天三夜,我打赌没有比我这边更细的探索Java I\O流的文章了~

Java高级语法详解之IO流 :one: 概念1.1 输入流和输出流1.2 字节流和字符流 :two: 优势和缺点:three: 使用3.1 File 类3.2 RandomAccessFile 类3.3 字节流3.3.1 文件字节流3.3.2 缓冲字节流3.3.3 基本数据类型字节流3.3.4 打印流3.3.5 对象序列化流3.3.6 字节数组流 3.4 字符流3…

论文笔记 - 对话系统中的 OOD (Out of Domain出域)问题

徐阿衡 人工智能与机器学习工程师 最近看了下 2021年关于 OOD 的几篇 paper,记录一下~ 对话系统中的 domain 都是预先定义好的,而在实际应用场景中,会有很多现有系统回答不了的问题(out of the design scope)&#…

locust学习教程(3)- 编写locust脚本

前言 一句话总结:并发的用户执行了第一类测试任务、第二类测试任务,设置所有类的测试前置、测试后置,设置每一类测试任务的测试前置,测试后置。 1、概念 1.1、一个完整的脚本示例 from locust import task, HttpUser, constant…

ASEMI代理光宝光耦LTV-50L的工作原理及应用领域

编辑-Z 本文将对光耦LTV-50L进行详细的介绍,包括其工作原理、性能特点、应用领域以及注意事项。通过阅读本文,您将对光耦LTV-50L有更深入的了解,以便在实际应用中更好地发挥其作用。 1、光耦LTV-50L的工作原理 光耦LTV-50L是一种光电器件&a…

uni-table 表格的封装

文章目录 项目场景:实现效果创建表格组件文件页面中使用实现方法 项目场景: 在实际的应用场景中,表格是一个非常常见的需求,如果每一个的表格都自己去手写的话非常的浪费时间,并且当中的代码冗余量非常大,…

Python--元组

Python--元组 <font colorblue>一、创建元组<font colorblue>二、访问元组元素<font colorblue>三、元组的增、删、查、改<font colorblue>1、添加元素<font colorblue>2、删除元素<font colorblue>3、查找元素<font colorblue>4、修…

甄品进化 | 燕小千智能助手,用AIGC撬动企业知识宝藏

背景&#xff1a;2022年AIGC&#xff08;AI-Generated Content,人工智能生成内容&#xff09;这个新概念横空出世&#xff0c;不仅被消费者追捧&#xff0c;而且备受投资界的关注&#xff0c;更是被技术和产业界竞相追逐。2022年12月&#xff0c;OpenAI的大型语言生成模型ChatG…

Android 60问60答 (一篇复习整个Android)

Android 60问60答 &#xff08;一篇复习整个Android&#xff09; 有哪些移动端平台&#xff1f; 厂商开发平台&#xff1a; los 黑莓&#xff08;blackBerry&#xff09; 第三方私有平台&#xff1a;第三方开发供移动设备厂商使用 WindowsMobile 免费开源平台&#xff1…

微信小程序克隆到运行

1.git克隆 2.安装依赖 npm i 如果遇到卡在node lib/install.js 一直不进行 重新运行安装&#xff1a;(https://www.python100.com/html/3716RLP8FZM2.html) npm install --ignore-scripts理解npm install --ignore-scripts 3.安装完运行 npm run serve如果报错&#xff1a; …