数据库为什么要分库?
业务发展,当单个数据库中的表越来越多,数据量越来越大的时候。数据的增删改查所消耗的资源就会增加。而单台服务器的资源,如CPU、磁盘、内存、IO等都是有限的。最终数据库所承载的数据量和处理数据的能力就会遇到瓶颈。因此,要对数据库分库。
数据库压力大时,有哪些解决方案?
-
纵向拓展
纵向扩展就是增加单台服务器的性能,如升级cpu,内存,磁盘换ssd等,这是最简单的方案,但是这经济开销大,而且没有解决根本性问题。 -
横向拓展
横向扩展就是对数据进行拆分,放置到多台服务器上。对数据进行拆分,一般是对数据进行合理的分库,再对分离出来的库进行调优。即将单台服务器上的压力分布到多台机器中。
为什么要进行分表?
当MySQL的单表的数据达到一定量级的时候(如一千万)的时候,执行性能就会下降。
从两方面考虑:
- 锁机制:不同的数据库引擎的锁机制不同,如果在读写数据时对表进行加锁,而表数据又太多,那这一次事务执行的时间就太长,其他事务等待,影响效率。
- 索引更新:对表数据删除或者增加操作会导致更新索引,表数据太多,更新索引也会变慢。
分表方式有哪些?
- 垂直拆分
垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表或者将表按模块划分到不同数据库表中。 - 水平拆分
水平拆分是指数据表行的拆分,比如表的行数超过200万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放