@boothsun
2018-02-18T18:03:09.000000Z
字数 981
阅读 1528
MySQL
一般情况下说的水平切分、垂直切分,都是指的数据库层面。
随着业务量的增加,数据量肯定快速增长,拿MySQL来说,单表数据量在百万级内存读取效率还是可以的,可以一旦达到千万级,性能会有较大的降低。如果是复杂的查询操作,那么组合索引对于内存来说也是一笔很大的开销。这个时候就需要从数据库层面来进行优化了。
普遍采用的方式就是数据库 垂直拆分 + 水平拆分的方式来进行改造。
数据库的垂直拆分: 对业务表进行分类,不同的业务表划分到不同的数据库里。这种形式的拆分往往是便随着服务化改造,按功能模块将原来强耦合的系统拆分为多个弱耦合的服务,此时往往就会进行数据库的垂直拆分。
数据表的垂直拆分: 是针对于数据表列的拆分,把一张列比较多的表拆分为多张表。比如可以将
垂直拆分的优点:
+ 数据库的拆分简单明了,拆分规则明确。
+ 应用程序模块清晰明确,整合容易。
+ 数据维护方便易行,容易定位。
垂直拆分的缺点:
+ 部分表关联无法在数据库级别完成,需要在程序中完成。
+ 单表大数据量仍然存在性能瓶颈。
+ 事务处理相对更为复杂。
+ 拆分达到一定程度之后,扩展性会遇到限制。
水平拆分:分库分表,把一个表的数据按照某种规则化分到不同表或数据库里。(水平拆分 是按照行数据拆分)。 拆分规则:取模、年份等。
水平拆分的优点:
水平拆分缺点:
总而言之:
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