有位小伙伴在阿里的面试中,被问到,说只要数据量大了,就一定要分库分表吗?如果你直接回答,是 的话,这大概率就会被 了。
因为分库和分表不能一概而论。分库和分表各自的应用场景,以及它们要解决的问题也都不一样。下面我从三个方面来分析,分别是只分库不分表、只分表不分库、既分库又分表这三种应用场景。
1、只分库不分表
先来分析只分库不分表的情况。那我们在什么时应该候选择分库呢?当数据库的读写访问量过高,还有可能会出现数据库连接不够用的情况。这个时候我们就需要考虑分库,通过增加数据库实例的方式来获得更多的数据库连接,从而提升系统的并发性能。
2、只分表不分库
那什么时候需要进行分表呢?当单表存储的数据量非常大的情况下,并且并发量也不高,数据库的连接也还够用。但是数据写入和查询的性能出现了瓶颈,这个时候就需要考虑分表了。将数据拆分到多张表中来减少单表存储的数据量,从而提升读写的效率。
3、既分库又分表
那什么时候既要分库又要分表呢?小伙伴们应该能够想到了,结合前面的两种情况,如果同时满足前面的两个条件,也就是数据连接也不够用,并且单表的数据量也很大,从而导致数据库读写速度变慢的情况,这个时候就要考虑既分库又分表。
4、总结
当然,我上面所述的只是每种情况的使用场景,并不是绝对的。有些小伙伴可能会说,很多系统在开发之出就已经完成分库分表了,那是不是过度设计呢?
要不要提前设计分库分表,还要根据业务的发展来考虑。在《阿里开发手册》中建议,单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表,如果预计三年后数据量根本达不到这个级别,就不必要在创建表时就分库分表。
那我再问小伙伴们一个问题,什么时候要进行读写分离呢?欲知详情如何,请听下回分解。