【MySQL】数据切分

概念

通过某种特定的条件,将存放在同一个数据库中的数据分散存放到多个数据库上面,以达到分散单台设备负载的效果

数据切分可以提高系统的总体可用性,单台设备宕机之后,只有总体数据的某部分不可用,而不是所有的数据

垂直切分

按照不同的表(或者 Schema)来切分到不同的数据库(主机)之上

具体就是:

  1. 需要架构设计良好,功能模块对应的表之间交互点少,功能模块耦合度低

  2. 然后根据功能模块进行切分,不同模块存放于不同数据库主机中


优点

  • 数据库的拆分简单明了,拆分规则明确;
  • 应用程序模块清晰明确,整合容易;
  • 数据维护方便易行,容易定位;

缺点

  • 部分表关联无法在数据库级别完成,需要在程序中完成;
  • 对于访问极其频繁且数据量超大的表仍然存在性能瓶颈,不一定能满足要求;
  • 事务处理相对更为复杂;
  • 切分达到一定程度之后,扩展性会遇到限制;
  • 过读切分可能会带来系统过渡复杂而难以维护。

水平切分

根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面

扫描二维码关注公众号,回复: 2627944 查看本文章

水平切分主要是将某个访问极其平凡的表再按照某个字段的某种规则来分散到多个表之中,每个表中包含一部分数据


优点

  • 表关联基本能够在数据库端全部完成;
  • 不会存在某些超大型数据量和高负载的表遇到瓶颈的问题;
  • 应用程序端整体架构改动相对较少;
  • 事务处理相对简单;
  • 只要切分规则能够定义好,基本上较难遇到扩展性限制;

缺点

  • 切分规则相对更为复杂,很难抽象出一个能够满足整个数据库的切分规则;
  • 后期数据的维护难度有所增加,人为手工定位数据更困难;
  • 应用系统各模块耦合度较高,可能会对后面数据的迁移拆分造成一定的困难。

联合切分

切分过程

  1. 性能瓶颈最初时,进行数据垂直拆分,因为成本最小;
  2. 稳定一段时间后,垂直拆分的数据库集群又遇到性能瓶颈;
  3. 不能继续细分模块垂直切分,因为该问题会继续出现,而且架构复杂度加剧;
  4. 在此基础,进行水平切分,该阶段水平切分规则随着垂直切分已经变简单;

优点

  • 可以充分利用垂直切分和水平切分各自的优势而避免各自的缺陷;
  • 让系统扩展性得到最大化提升;

缺点

  • 数据库系统架构比较复杂,维护难度更大;
  • 应用程序架构也相对更复杂;

切分引发问题

  • 引入分布式事务的问题;
  • 跨节点 Join 的问题;
  • 跨节点合并排序分页问题;

小结

通过数据切分技术将一个大的 MySQL Server 切分成多个小的 MySQL Server,既解决了写入性能瓶颈问题,同时也再一次提升了整个数据库集群的扩展性。

垂直切分规则简单,实施方便,适合前期使用。在垂直切分的基础上,水平切分的规则复杂得到简化,适合后期使用。这些都可以结合具体业务场景灵活使用。

不论是通过垂直切分,还是水平切分,都能够让系统遇到瓶颈的可能性更小。

猜你喜欢

转载自blog.csdn.net/Francis123580/article/details/80826649
今日推荐