水平拆分和垂直拆分理解(未完)

1. 切分

一般情况下说的水平切分、垂直切分,都是指的数据库层面。

随着业务量的增加,数据量肯定快速增长,拿MySQL来说,单表数据量在百万级内存读取效率还是可以的,可以一旦达到千万级,性能会有较大的降低。如果是复杂的查询操作,那么组合索引对于内存来说也是一笔很大的开销。这个时候就需要从数据库层面来进行优化了。

普遍采用的方式就是数据库 垂直拆分 + 水平拆分的方式来进行改造。

1.1 垂直拆分

数据库的垂直拆分: 对业务表进行分类,不同的业务表划分到不同的数据库里。这种形式的拆分往往是便随着服务化改造,按功能模块将原来强耦合的系统拆分为多个弱耦合的服务,此时往往就会进行数据库的垂直拆分。

数据表的垂直拆分: 是针对于数据表列的拆分,把一张列比较多的表拆分为多张表。比如可以将

垂直拆分的优点:

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

垂直拆分的缺点:

  • 部分表关联无法在数据库级别完成,需要在程序中完成。
  • 单表大数据量仍然存在性能瓶颈。
  • 事务处理相对更为复杂。
  • 拆分达到一定程度之后,扩展性会遇到限制。

水平拆分

水平拆分:分库分表,把一个表的数据按照某种规则化分到不同表或数据库里。(水平拆分 是按照行数据拆分)。 拆分规则:取模、年份等。

水平拆分的优点:

  • 解决单表单库大数据量和高热点访问性能遇到瓶颈的问题;
  • 应用程序端整体架构改动相对较少。
  • 事务处理相对简单。
  • 只要切分规则能够定义好,基本上较难遇到扩展性限制。

水平拆分缺点:

  • 拆分规则相对更复杂,很难抽象出一个能够满足整个数据库的切分规则。
  • 后期数据的维护难度有所增加,人为手工定位数据更困难。
  • 产品逻辑将变复杂。比如按年来进行历史数据归档拆分,这个时候在页面设计上就需要约束用户必须要先选择年,然后才能进行查询。

总而言之:

  1. 数据表垂直拆分: 单表复杂度。
  2. 数据库垂直拆分: 功能拆分。
  3. 水平拆分:分表:解决单表大数据量问题。 分库:为了解决单库性能问题。

https://www.cnblogs.com/beyondbit/p/6973199.html
https://www.cnblogs.com/happyday56/p/3862804.html
http://blog.csdn.net/mchdba/article/details/46278687

原文地址:https://www.cnblogs.com/boothsun/p/7877781.html