水平切分和垂直切分的理解

前言

做数据库分表的时候,总是能看到水平切分、垂直切分,但是并不能理解何为水平、何为垂直。仅此做个记录。

1.切分

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

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

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

1.1垂直切分

垂直拆分:原来一个表的信息,拆分到两个或者多个表中,通过主键来进行关联。(垂直拆分列,列数据拆分到不同表中)
垂直切分的优点

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


垂直切分的缺点

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

1.2水平切分

水平切分:把一个表的数据按照某种规则划分到不同表或数据库里。(水平拆分行,行数据拆分到不同表中)

水平切分的优点

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


水平切分的缺点

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

2.扩展

一般情况下说的水平扩展、垂直扩展,都是指的服务层面的。

当一个开发人员提升计算机系统负荷时,通常会考虑两种方式垂直扩展和水平扩展。选用哪种策略主要依赖于要解决的问题 以及系统资源的限制。

2.1垂直扩展

在垂直扩展模型中,想要增加系统负荷就意味着要在系统现有的部件上下工夫,即通过提高系统部件的能力来实现。

比如增加机器的内存,提高单机处理能力,拆分功能到不同的机器上部署等等。

垂直扩展旨在提高自身效率,但总会遇到自身的瓶颈。

2.2水平扩展

在水平扩展模型中,通过增加更多的系统成员来实现。也就是通常所说的加机器。

当你的大量请求并发的时候,可以通过分布式的方式,让请求均匀的分布到不同的机器上,减小压力。

总结

简而言之:

垂直扩展:拆分功能为小功能,来转移压力的发生。

水平扩展:复制相同的表、库、服务器来共同承担压力。

原文地址:https://www.cnblogs.com/selinamee/p/6873969.html