大型电商项目数据库设计时应该注意的点

一、 id的设计

  1. int(int)类型: 性能高 , 但是分布式数据库时 , id易重复
  2. long(bigint)类型:性能高 , 比int类型容纳的数据更多 , 但是还是会重复
  3. String(varchar) : 使用UUID , 几乎不会重复 , 但是性能略低
  4. 大型电商的数据库是分布式的么?
    1. 究其原因 , 数据库分布式设计就是为了提高数据库的性能 , 能抗住更大的访问量 , 但是仅仅靠增加数据库服务器台数 , 来应对高并发, 似乎成本过高, 而且效果并不显著 , 所以 , 大型电商项目的数据库一般采用中央集中式 , 后再引入缓存数据库 , 此时大量重复的查询操作交给缓存数据库 , 大大的减小了数据库的压力 , 而且缓存存在于内存中 , 用户获得数据的时间也更短 。

二、 价格的设计

  1. 一般价格使用double表示 , 但是double类型的数据对降低数据库的执行效率 ,而电商项目以性能最高为目的来设计整个架构 。 所以价格采用int存储
  2. 在前台提交数据时 , 先乘100 , 的到一个整数 , 进行存储 , 在查询时 , 前台在通过js将介个除以100 , 得到真实的价格 。 这儿样就把数据库的压力分散到所有的客户机中 。

三 、 图片上传存储的设计

  1. 在前台页面将图片进行上传 , 然后将图片保存在服务器本地 。
  2. 电商项目中以性能为核心, 肯定不能把图片存在数据库中(这样会破坏索引)
  3. 把图片上传到服务器中后
    1. 判断是否是图片
    2. 判断是否是病毒
    3. 重新生成唯一的名字
    4. 生成实际存储路径(需要考虑 , 同一文件夹下同名文件的问题 , 同一文件夹下问价过多导致目录访问时间过长 , 或不能访问的问题)
    5. 生成虚拟访问路径
    6. 创建实际路径对应的文件目录 , 并存储
    7. 把虚拟访问路径存在数据库中
    8. 然后把虚拟访问路径返回客户端 , 供图片回显使用 。
  4. 索引介绍:
    1. 索引存在的目的就是为了减少磁盘IO的次数
    2. 如 : 生活中查字典 , 会用到字典索引:
      1. 查“李”
      2. 找L
      3. 找Li
      4. 找李
      5. 还有一些 笔画法, 偏旁法 , , 都惩治为索引 。
    3. B-Tree无论数据量多大, 三次IO即可查出数据
      1. 索引的特点是有序的
  5. 所以 , 像:图片 、 商品描述这样的大字段尽量不要存在数据库中 , 破坏数据库索引之后 , 查询将从索引查找变为遍历查找 , 非常慢

四、 尽量使用单表设计

  1. 在能使用单表设计的情况下尽量使用单表设计 , 避免外键关联
  2. 外键关联性能问题:
    1. 数据库需要内部维护外键关联(本身是if语句) , 在主从不锁表的情况下我们在代码中维护他
    2. 在数据库中设计到增 、 删、 该 ,的操作都会触发相关的操作去检查外键 , 从而不得不小号额外的资源 。
    3. 最主要的问题: 外键的存在很容易导致数据库的死锁 。

四、 商品描述的设计

  1. 商品描述属于大字段 , 而在数据库中大字段的存在会破坏表的索引 , 导致查询操作十分的慢 ,所以要分表存储

大数据互联网架构阶段 大型电商项目数据库设计时应该注意的点相关推荐

  1. 大数据实战|怎样实现大型电商热销榜?

    上次给粉丝的福利,购买极客时间课程,浪尖这里返现:球友24元,非球友10元或者8折入球.大家还记得吗,发现很多粉丝比较滞后,这两天还陆续找我要返现,,,今天看了一下,极客时间优惠还剩两天吧,过了这两天 ...

  2. 大数据 互联网架构阶段 电商项目简介

    电商项目简介 零.目录 电商项目特点 电商项目技术难点 电商项目简介 开发工具 电商项目架构 开发环境 一.电商项目特点 分布式 数十台服务器,甚至百台.千台.万台,包括:Nigix负载均衡集群.To ...

  3. 大数据互联网架构阶段 QuartZ定时任务+RabbitMQ消息队列

    QuartZ定时任务+RabbitMQ消息队列 一 .QuartZ定时任务解决订单系统遗留问题 情景分析: 在电商项目中 , 订单生成后 , 数据库商品数量-1 , 但是用户迟迟不进行支付操作 , 这 ...

  4. 大数据互联网架构阶段 前台系统架构 跨域请求

    电商项目 前台系统的架构 零.目录 前台架构设计 前台分类树 跨域请求技术 jsonp httpClient 一 .前台架构设计 不能直接访问数据库 , 需要通过后台访问数据 架构: 单通道连接资源 ...

  5. 大数据互联网架构阶段 全文检索技术

    全文检索 一. 全文检索的引出 我们生活中的数据总体分为两种:结构化数据 和非结构化数据 . 结构化数据: 指具有固定格式或有限长度的数据,如数据库,元数据等. 非结构化数据: 指不定长或无固定格式的 ...

  6. 大数据互联网架构阶段 Redis(二)

    Redis(二) 零 . 目录 将缓存引入电商项目 主从复制 哨兵模式 集群容忍度 CAP理论 十. 将缓存引入电商项目 使用Spring框架维护Jedis池对象 引入一个配置文件 applicati ...

  7. 大数据 互联网架构阶段 Nginx的使用

    Nginx 一.情景分析 如何构建一个tomcat集群 , 两种构建方式 但是此时将项目部署到tomcat集群上之后用户还是只能通过固定的ip和端口访问固定的服务器 ,并没有达到构建tomcat集群时 ...

  8. 大数据 互联网架构阶段 Redis

    Redis 零. 目录 高并发思路 电商网站中缓存数据库的设计 缓存介绍 按照redis redis常用命令 redis其他数据结构 数据分布式存储 Jedis客户端 哈希一致性 补充 一. 高并发思 ...

  9. 大数据 互联网架构阶段 Redis(三)redis集群

    Redis(三) redis集群 一. redis哨兵模式的缺点 问题一 : 横向扩展不方便 , 一旦扩展 , 无论代码结构多么简单, 都需要修改 问题二 : 散列分布式算法是hash一致性 , 无论 ...

最新文章

  1. hbuilderX的upx单位是什么鬼?
  2. 为何苹果为何苹果甘愿冒险自主研发芯片?
  3. 学会这几招,你也可以用 Redis 做实时订阅推送!
  4. 程序环境——翻译环境与执行环境
  5. 怎么获取codeforces的数据_手把手教你学会新媒体运营——如何通过数据分析来优化新媒体运营...
  6. 公共方法-完整的for循环-for else
  7. python url拼接_教你写python爬虫——用python爬原图
  8. Shell 编程:Bash空格的那点事
  9. (97)FPGA边沿检测(上升沿检测)
  10. 小明交友第五次2018.6.24
  11. gitlab releases
  12. Emacs里一些古老的术语
  13. 百度大脑 EasyDL 专业版最新上线自研超大规模视觉预训练模型
  14. img 图片加载出错时 显示默认图片
  15. [Python]_ELVE_centos7安装Python3.7.1与Python2共存
  16. java double精度丢失 0.1+0.2不等于0.3
  17. python第六章答案_python第六章
  18. Origin制图之热力图(hot-map)
  19. Win10,Win11系统安全中心提醒“找到可能不需要的应用”弹窗,如何关闭?
  20. 电影评分数据分析python_豆瓣电影简单评分模型-从收集数据到建模分析

热门文章

  1. node.js 函数定义和调用
  2. Java字节码(.class文件)格式详解(一)
  3. vs2012搭建gtest环境
  4. Freescale MC9S08AW60汇编学习笔记(五)
  5. 一步步学习微软InfoPath2010和SP2010--第四章节--处理SP列表表单(6)--列表表单的局限...
  6. oracle11g 隐藏参数_oracle隐含参数的查看与修改
  7. 计算机中心述职报告诉,计算中心述职报告
  8. 浏览器接收响应数据过大_DOM总结:数据通信(HTTP协议和Ajax)
  9. gulp 项目构建 代码压缩与混淆
  10. 文件内容批量修改工具