数据库设计--库的拆分与表的分割
2017-07-15 09:41
127 查看
数据库水平拆分和垂直拆分
案例:简单购物系统暂设涉及如下表: 1. 产品表(数据量10w,稳定) 2. 订单表(数据量200w,且有增长趋势) 3. 用户表 (数据量100w,且有增长趋势 以mysql为例讲述下水平拆分和垂直拆分, mysql能容忍的数量级在百万静态数据可以到千万
垂直拆分:
解决问题: 表与表之间的io竞争 不解决问题: 单表中数据量增长出现的压力 方案: 把产品表和用户表放到一个server上 订单表单独放到一个server上
水平拆分:
解决问题: 单表中数据量增长出现的压力 不解决问题: 表与表之间的io争夺 方案: 1.用户表通过性别拆分为男用户表和女用户表 2.订单表通过已完成和完成中拆分为已完成订单和未完成订单 3.产品表 未完成订单放一个server上 4.已完成订单表盒男用户表放一个server上 5.女用户表放一个server上
表的水平分割和垂直分割
水平分割:例:QQ的登录表。 假设QQ的用户有100亿,如果只有一张表, 每个用户登录的时候数据库都要从这100亿中查找,会很慢很慢。 如果将这一张表分成100份,每张表有1亿条,就小了很多, 比如qq0,qq1,qq1...qq99表。 用户登录的时候,可以将用户的id0,那么会得到0-99的数, 查询表的时候,将表名qq跟取模的数连接起来,就构建了表名。 比如123456789用户,取模的89, 那么就到qq89表查询,查询的时间将会大大缩短。
垂直分割:
垂直分割指的是:表的记录并不多,但是字段却很长,表占用空间很大, 检索表的时候需要执行大量的IO,严重降低了性能。 这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。 例如学生答题表tt:有如下字段: Id name 分数 题目 回答 其中题目和回答是比较大的字段,id name 分数比较小。 如果我们只想查询id为8的学生的分数: select 分数 from tt where id =8; 虽然知识查询分数,但是题目和回答这两个大字段也是要被扫描的,很消耗性能。 但是我们只关心分数,并不想查询题目和回答。这就可以使用垂直分割。 我们可以把题目单独放到一张表中,通过id与tt表建立一对一的关系, 同样将回答单独放到一张表中。 这样我们插叙tt中的分数的时候就不会扫描题目和回答了。
相关文章推荐
- 数据库大表的设计(表的拆分)
- 网站设计--数据库集群和数据库垂直分割,水平分割,库表散列
- 提高系统性能数据库设计的横向分割和纵向分割技术 .
- 数据库设计之拆分与数据类型选择
- 网站设计--数据库集群和数据库垂直分割,水平分割,库表散列
- 关于数据库设计中的数据复合与数据拆分
- 数据库设计--数据的垂直拆分
- 网站设计--数据库集群和数据库垂直分割,水平分割,库表散列
- mysql的优化(表的设计,优化步骤,四种索引,分析慢查询,使用索引的深入解析,存储引擎分析,表的分割,数据库配置)
- 数据库水平分割中的ID生成器设计
- 数据库设计--数据的垂直拆分
- 数据库设计中,多对多关系使用使用逗号分割关联讨论
- 数据库设计--垂直拆分数据
- 提高系统性能数据库设计的横向分割和纵向分割技术
- 网站设计--数据库集群和数据库垂直分割,水平分割,库表散列
- [转]数据库设计经验谈
- 数据库表的设计查询心得
- 学习笔记——数据库设计
- 数据库设计5
- 数据库设计思维导图