分库分表概述
原创大约 2 分钟
不管是一个从头搭建的微服务项目,还是一个仍在运行中的遗留项目,当它发展到一定规模的时候,就需要对它执行各种性能优化措施了。
这些优化措施包括但不限于:引入索引
、分析执行计划(Excute Explain)
、慢查询
优化、表结构优化、字段类型(包括长度)优化、业务关系优化、业务流程优化、引入NoSQL、主从分离
、冷热分离、动静分离等。
然而事物的发展总有一个极限,当上述所有的手段都不管用或效果不明显的时候,就可以考虑分库分表
措施了。不过,总体原则仍然是尽量不要去尝试分库分表
,因为它的改动太大,搞不好整个业务层代码都得跟着改。
另外,分库
和分表
是两种不同的操作。
分库
:是将同一个数据库中的多张不同的表拆分到另一个或多个不同的新数据库中,属于纵向拆分。

分表
:则是将同一张数据表拆分成多张大小不同的表,属于横向拆分,也可以在现有的数据库中对数据表进行拆分。

这两种操作并没有先后关系
或者递进关系
,而是需要根据实际的业务开展情况和系统运行状态来决定采取哪一种,或者两种同时采取。
由于
分库
会将数据分布到多个不同的MySQL数据库,导致它的并发连接数、CPU
数量、磁盘数量都物理增加了,所以也就可以处理更多的数据,缩短操作时间。但另一方面,网络I/O
增加了,发生网络故障的可能性大大增加了,数据同步的压力也增加了,而且之前简单的多表关联现在需要跨库查询
才能实现。而
分表
虽然解决了单表的数据存储量问题,但也带来了分布式事务
问题、查询结果的聚合
问题(排序、分组、分页等)、主键重复
问题、以及导致二次扩容困难
等。
这些问题,不管哪一个解决不好,对业务造成的影响都是致命的,可以直接决定业务是否能够正常进行下去。
关注公众号后回复 分库分表
即可获得MySQL分库分表实践
栏目剩余文章的访问密码。
