单机数据库瓶颈:
1.磁盘空间上限
2.服务器性能上限
3.单点故障
数据库性能瓶颈 :
1.单表性能瓶颈
2.单库性能瓶颈
3.读写性能瓶颈
解决方案1:读写分离
1.MySQL读写分离能提高系统性能的原因在于:
2.物理服务器增加,机器处理能力提升。拿硬件换性能。
3.主从只负责各自的读和写,极大程度缓解X锁和S锁争用。
4.slave可以配置myisam引擎,提升查询性能以及节约系统开销。
5.master直接写是并发的,slave通过主库发送来的binlog恢复数据是异步。
6.slave可以单独设置一些参数来提升其读的性能。
7.增加冗余,提高可用性。
解决方案2:分库分表
在我们的业务(web应用)中,关系型数据库本身比较容易成为系统性能瓶颈,单机存储容量、连接数、处理能力等都很有限,数据库本身的“有状态性”导致了它并不像Web和应用服务器那么容易扩展。那么在我们的业务中,是否真的有必要进行分库分表,就可以从上面几个条件来考虑。
1.单机储存容量。您的数据量是否在单机储存中碰到瓶颈。
2.连接数、处理能力。在我们的用户量达到一定程度时,特定时间的并发量又成了一个大问题,在一个高并发的网站中秒级数十万的并发量都是很正常的。在普通的单机数据库中秒级千次的操作问题都很大。
3.所以在我们进行分库分表之前我们最好考虑一下,我们的数据量是不是够大,并发量是不是够大。
分库分表之垂直分表:
垂直分表在日常开发和设计中比较常见,通俗的说法叫做“大表拆小表”,拆分是基于关系型数据库中的“列”(字段)进行的。通常情况,某个表中的字段比较多,可以新建立一张“扩展表”,将不经常使用或者长度较大的字段拆分出去放到“扩展表”中,如下图所示:
分库分表之垂直分库:
垂直分库在“微服务”盛行的今天已经非常普及了。基本的思路就是按照业务模块来划分出不同的数据库,而不是像早期一样将所有的数据表都放到同一个数据库中。如下图: