系统刚开始的时候,因为系统刚上线,用户不多,那个时候,所有的数据都放在了同一个数据库中,这个时候因为用户少压力小,一个数据库完全可以应付的了,但是随着用户数量变多了,随之而来的是数据库压力增大了,这个时候我们会配置一个server为master节点,然后配几个salve节点,这样以来通过读写分离,使得读取数据的压力分摊到了不同的salve节点上面,有一天我们发现master负载太高了,随时都有挂库的风险,这个时候就需要垂直分库,比如现有的产品库,用户库,MISC库,日志库,还有未来的市场库,同时还可以针对产品库和用户库采用master,salve模式,通过分库以后,各个按照功能拆分的数据库写压力被分担到了不同的server上面,这样数据库的压力终于有恢复到正常状态。随着用户量的不断增加,你会发现系统中的某些表会变的异常庞大,比如现在的抵用券表,这个时候无论是写入还是读取这些表的数据,对数据库来说都是一个很耗费精力的事情,因此此时就需要我们进行水平拆表了。将一张大表拆分成若干个小表,每次查询通过给定的条件动态找表,这张针对小表的查询就会快很多。
一个大型的互联网应用必然会经过一个从单一DB server,到Master/salve,再到垂直分库,然后再到水平分区(分表)的过程。