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

前言sql

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

1.切分

通常状况下说的水平切分、垂直切分,都是指的数据库层面的。服务器

随着业务量的增长,数据量确定快速增加,拿Mysql来讲,单表数据量在百万级内读取效率仍是能够的,但是一旦达到千万级,性能会有较大的下降。若是是复杂的搜索,那么组合索引对于内存来讲也是一笔很大的开销。这个时候就须要从数据库层面来进行优化了。架构

广泛采用的方式就是数据库 垂直切分+ 水平切分的方式来进行改进。并发

1.1垂直切分

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

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


垂直切分的缺点性能

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

1.2水平切分

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

水平切分的优势优化

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


水平切分的缺点spa

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

2.扩展

通常状况下说的水平扩展、垂直扩展,都是指的服务层面的。

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

2.1垂直扩展

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

好比增长机器的内存,提升单机处理能力,拆分功能到不一样的机器上部署等等。

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

2.2水平扩展

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

当你的大量请求并发的时候,能够经过分布式的方式,让请求均匀的分布到不一样的机器上,减少压力。

总结

简而言之:

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

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

相关文章
相关标签/搜索