Mysql 分库分表

使用分库分表时,主要有垂直拆分水平拆分两种拆分模式,都属于物理空间的拆分

 

分库分表方案:只分库、只分表、分库又分表。

垂直拆分:由于表数量多导致的单个库大。将表拆分到多个库中。

水平拆分:由于表记录多导致的单个库大。将表记录拆分到多个表中。

一,垂直拆分

垂直拆分又称为纵向拆分垂直拆分是将表按库进行分离或者修改表结构按照访问的差异将某些 列拆分出去。应用时有垂直分库和垂直分表两种方式,一般谈到的垂直拆分主要指的是垂直分库。 

垂直分库:

垂直分表:将一张表中不常用的字段拆分到另一张表中,从而保证第一张表中的字段较少,避免 出现数据库跨页存储的问题,从而提升查询效率。

可解决问题:一个表中字段过多,还有有些字段经常使用,有些字段不经常使用,或者还有text等字段信 息。可以考虑使用垂直分表方案。

 垂直拆分优点:

  1. 拆分后业务清晰,拆分规则明确;
  2. 易于数据的维护和扩展;
  3. 可以使得行数据变小,一个数据块 (Block) 就能存放更多的数据,在查询时就会减少 I/O 次 数;
  4. 可以达到最大化利用 Cache 的目的,具体在垂直拆分的时候可以将不常变的字段放一起,将经常改变的放一起;
  5. 便于实现冷热分离的数据表设计模式。

垂直拆分缺点:

  1. 主键出现冗余,需要管理冗余列;
  2. 会引起表连接 JOIN 操作,可以通过在业务服务器上进行 join 来减少数据库压力,提高了系统的复杂度;
  3. 依然存在单表数据量过大的问题;
  4. 事务处理复杂。 

用例: 职位基本信息表与职位详情表进行垂直拆分,从原本职位表中垂直分表

 

二,水平拆分

水平拆分又称为横向拆分。 相对于垂直拆分,它不再将数据根据业务逻辑分类,而是通过某个字 段(或某几个字段),根据某种规则将数据分散至多个库或表中,每个表仅包含数据的一部分,下面的图为使用类Hash算法去拆分的过程。

水平分表是将一张含有很多记录数的表水平切分,不同的记录可以分开保存,拆分成几张结构相同 的表。如果一张表中的记录数过多,那么会对数据库的读写性能产生较大的影响,虽然此时仍然能 够正确地读写,但读写的速度已经到了业务无法忍受的地步,此时就需要使用水平分表来解决这个 问题。

水平拆分优点:

  1. 拆分规则设计好,join 操作基本可以数据库做;
  2. 不存在单库大数据,高并发的性能瓶颈;
  3. 切分的表的结构相同,应用层改造较少,只需要增加路由规则即可;
  4. 提高了系统的稳定性和负载能力。

水平拆分缺点:

  1. 拆分规则难以抽象;
  2. 跨库Join性能较差;
  3. 分片事务的一致性难以解决;
  4. 数据扩容的难度和维护量极大。 

用例:电商中的商家的订单表 ,若在一个库中分表存储,还是存在IO瓶颈,如若数据量很大,可以将单个表拆分了分到不同的服务器中去,但是分到不同的服务器中去之后,需要考虑如何高效的进行数据获取,如果每次查询都要跨越多个节点则会影响查询的效率。

分库之后的问题:

 1,事务问题:一次投递需要插入两条记录,且分布在不同的服务器上,数据需要保障一致性。

 2,跨库联合查询的问题。

 3,额外的数据管理负担和数据运算压力:数据库扩容、维护成本变高

三,垂直拆分 & 水平拆分

水平拆分:解决表中记录过多问题。

垂直拆分:解决表过多或者是表字段过多问题


附: 参考资料《MySQL技术内幕 InnoDB存储引擎》  

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值