数据库拆分

当随着业务的增长,流量真的增加,我们的数据库的压力不断增加,这个时候我们就需要考虑读写分离,数据缓存了,因为数据库一旦达到承载的压力的时候,可能会导致服务的中断,我们采用分库分表,分解分摊单个数据库的压力从而业务变得稳定。

垂直拆分

我们将所有的数据按照不同的业务建立并存储不同的表(table),垂直拆分是按照业务将一个数据库拆分多个数据库。原来每个业务对应一张表,垂直拆分后,是一个业务对应一个数据库(当然也有坑可能是多个业务对应一个数据库)。其核心是专库专用。达到的结果是将原来一个数据库系统的压力按照业务均摊到各个拆分后的数据库中。垂直拆分也是比较推荐的一直拆分方式。

垂直分片往往需要对架构和设计进行调整。在当前微服务化的进程中,对数据库的垂直拆分是非常友好的。

数据表的垂直拆分: 单表的数据达到2GB或500万行记录就要考虑拆分数据表,垂直拆分表就将热点列和不经常使用的列表拆分开,降低单表的大小。

水平拆分

当一般垂直拆分遇到瓶颈时,会对数据表进行水平拆分。这种方式与垂直拆分不同的地方是,它不会更改表结构。水平分表是将一个表的拆分多结构相同的多个表;水平分库是将一个表拆分成多个结构相同的表,并且这些表分布在不同的数据库。

分布分表中间件有两种:

1、代理模式的分库分表中间件:MyCat;

2、客户端模式的分库分表中间件:ShardingJDBC;

3、支持事务的分布式数据库。

(当然ShardingProxy也是代理分库分表中间件)

总结:

结合着微服务体系,一般会进行垂直拆分。当微服务中的数据库出现压力时,然后进行水平拆分。