美文网首页
mysql的水平分表和垂直分表的区别

mysql的水平分表和垂直分表的区别

作者: 醉于麦田 | 来源:发表于2019-05-14 22:34 被阅读0次

1,水平分割:

例:QQ的登录表。假设QQ的用户有100亿,如果只有一张表,每个用户登录的时候数据库都要从这100亿中查找,会很慢很慢。如果将这一张表分成100份,每张表有1亿条,就小了很多,比如qq0,qq1,qq1...qq99表。

用户登录的时候,可以将用户的id%100,那么会得到0-99的数,查询表的时候,将表名qq跟取模的数连接起来,就构建了表名。比如123456789用户,取模的89,那么就到qq89表查询,查询的时间将会大大缩短。

这就是水平分割。

2,垂直分割:

垂直分割指的是:表的记录并不多,但是字段却很长,表占用空间很大,检索表的时候需要执行大量的IO,严重降低了性能。这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。

例如学生答题表tt:有如下字段:

Id name 分数 题目 回答

其中题目和回答是比较大的字段,id name 分数比较小。

如果我们只想查询id为8的学生的分数:select 分数 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为例讲述下水平拆分和垂直拆分,mysql能容忍的数量级在百万静态数据可以到千万

垂直拆分:

解决问题:

表与表之间的io竞争

不解决问题:

单表中数据量增长出现的压力

方案:

把产品表和用户表放到一个server上

订单表单独放到一个server上

水平拆分:

解决问题:

单表中数据量增长出现的压力

不解决问题:

表与表之间的io争夺

方案:

用户表通过性别拆分为男用户表和女用户表

订单表通过已完成和完成中拆分为已完成订单和未完成订单

产品表 未完成订单放一个server上

已完成订单表盒男用户表放一个server上

女用户表放一个server上

相关文章

  • mysql的水平分表和垂直分表的区别

    1,水平分割: 例:QQ的登录表。假设QQ的用户有100亿,如果只有一张表,每个用户登录的时候数据库都要从这100...

  • 2018面试题分享

    深圳-aa:1,什么是水平分表和垂直分表,如何如何设计路由表,用uuid作为主键有什么问题2,MySQL 索性类型...

  • 面试官:给我讲一下分库分表方案

    一、数据库瓶颈1、IO瓶颈2、CPU瓶颈二、分库分表1、水平分库2、水平分表3、垂直分库4、垂直分表三、分库分表工...

  • mysql 优化之乱炖

    分表: 分表有水平分割,和垂直分割。 水平分割:意思就是将某张表,按某种规则,分割成多张,表结构一样,这个规则应该...

  • Mysql优化

    优化 首先,按照三范式的要求创建表,即满足数据不冗余。同时还可以对一些表进行分表操作,分表分为水平分表和垂直分表,...

  • 浅谈mysql数据库分库分表那些事-亿级数据存储方案

    一、概述 mysql分库分表一般有如下场景 垂直分表(将表分为主表和扩展表) 垂直分库(将表按业务归属到不同的库,...

  • 高性能Mysql优化方案

    分库分表 读写分离 基本上互联网公司采用的架构是 水平分库+垂直分库(专库专职)+读写分离 水平分库分表 ID 解...

  • MySQL之水平分表取模算法

    在我们业务中,在并发很高的IO下,往往是需要水平分表(分库)或者是垂直分表(分库)。本文,就详细介绍水平分表之取模...

  • 水平分库分表、垂直分库分表

    前言 现在的互联网公司基本都是分布式,多服务了,所以这给分库分表提供了更好的空间。而且随着数据量的增大,单库单表难...

  • mysql分库分表相关问题

    垂直分表与水平分库 垂直拆分的意思,就是把一个有很多字段的表给拆分成多个表,或者是多个库上去。每个库表的结构都不一...

网友评论

      本文标题:mysql的水平分表和垂直分表的区别

      本文链接:https://www.haomeiwen.com/subject/wnyyaqtx.html