水平拆分垂直拆分分表什么意思

更新时间:2023-05-06 21:10:17 阅读: 评论:0

⽔平拆分垂直拆分分表什么意思
1,⽔平分割:
⾸先 :表的记录很多  根据⼀列或多列数据的值把数据⾏放到两个独⽴的表中。
例:QQ的登录表。假设QQ的⽤户有100亿,如果只有⼀张表,每个⽤户登录的时候数据库都要从这100亿中查找,会很慢很慢。如果将这⼀张表分成100份,每张表有1亿条,就⼩了很多,⽐如qq0,qq99表。
⽤户登录的时候,可以将⽤户的id%100,那么会得到0-99的数,查询表的时候,将表名qq跟取模的数连接起来,就构建了表名。⽐如123456789⽤户,取模的89,那么就到qq89表查询,查询的时间将会⼤⼤缩短。
这就是⽔平分割。
2,垂直分割:
垂直分割指的是:表的记录并不多,但是字段却很长,表占⽤空间很⼤,检索表的时候需要执⾏⼤量的IO,严重降低了性能。这时需要把⼤的字段拆分到另⼀个表,并且该表与原表是⼀对⼀的关系。
例如学⽣答题表tt:有如下字段:
Id name 分数 题⽬ 回答
其中题⽬和回答是⽐较⼤的字段,id name 分数⽐较⼩。
如果我们只想查询id为8的学⽣的分数:lect 分数 from tt where id = 8;
虽然知识查询分数,但是题⽬和回答这两个⼤字段也是要被扫描的,很消耗性能。但是我们只关⼼分数,并不想查询题⽬和回答。这就可以使⽤垂直分割。
我们可以把题⽬单独放到⼀张表中,通过id与tt表建⽴⼀对⼀的关系,同样将回答单独放到⼀张表中。
这样我们插叙tt中的分数的时候就不会扫描题⽬和回答了。
3,其他要点:
1)存放图⽚、⽂件等⼤⽂件⽤⽂件系统存储。数据库只存储路径,图⽚和⽂件存放在⽂件系统,甚⾄单独存放在⼀台服务器(图床)。
2)数据参数配置。
最重要的参数就是内存,我们主要⽤的innodb引擎,所以下⾯两个参数调的很⼤:
innodb_additional_mem_pool_size=64M
innodb_buffer_pool_size=1G
对于MyISAM,需要调整key_buffer_size,当然调整参数还是要看状态,⽤show status语句可以看到当前状态,以决定该调整哪些参数。
4,合理的硬件资源和操作系统
如果机器的内存超过4G,那么应当采⽤64位操作系统和64位MySQL。
案例:
简单购物系统暂设涉及如下表:
1.产品表(数据量10w,稳定)
2.订单表(数据量200w,且有增长趋势)
3.⽤户表 (数据量100w,且有增长趋势)
以为例讲述下⽔平拆分和垂直拆分,mysql能容忍的数量级在百万静态数据可以到千万垂直拆分:
解决问题:
表与表之间的io竞争
不解决问题:
单表中数据量增长出现的压⼒
⽅案:
把产品表和⽤户表放到⼀个rver上
订单表单独放到⼀个rver上
⽔平拆分:
解决问题:
单表中数据量增长出现的压⼒
不解决问题:
表与表之间的io争夺
⽅案:
⽤户表通过性别拆分为男⽤户表和⼥⽤户表
订单表通过已完成和完成中拆分为已完成订单和未完成订单
产品表 未完成订单放⼀个rver上
已完成订单表盒男⽤户表放⼀个rver上
⼥⽤户表放⼀个rver上
转载⾃:

本文发布于:2023-05-06 21:10:17,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/542905.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:时候   拆分   查询   分数
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图