原因

很多时候接口性能都是数据库造成的,并发量比较大时大量的数据库请求会带来磁盘IO的性能瓶颈,素随着数据越来越多导致SQL查询数据及时走了索引也比较慢。

应用场景

分库和分表是不同的两个概念,解决的问题不同。
1.并发量很大,但是数据量比较小,可以只分库,不分表。(IO操作比较多)
2.并发量不是很大,但是数据量比较大,可以只分表,不分库。
3.并发量很大,数据量也比较多是,既要分库,也要分表。

分库分表两个方向

1.垂直
2.水平
并发分库分表顺序,先垂直分,在水平分,垂直更简单更符合实际业务。

垂直分库

分库垂直分库,针对一个系统的不同业务进行拆分,比如用户拆到user库,商品到goods库,订单order库。拆分后放到不同的服务器上。在高并发下一定程度能够解决IO,连接数,硬件资源等瓶颈。
垂直分库.png

垂直分表

垂直分表“大表拆小表”,基于表中字段拆分,将不常用的数据较大的拆分到扩展表,一般针对几百列的大表进行拆分。
垂直分表.png

特点

1.每个库/表的结构不一样。
2.每个库/表的数据量至少一列一样。
3.每个库/表的并集是全量数据。

优点

1.拆库后业务清晰。
2.数据维护简单,按照业务放到不同的服务器中。

缺点

1.但数据量大时写读压力大。
2.受业务影响热门业务压力大,冷门业务造成资源浪费。

水平拆分

水平分表

针对数据巨大的单表,按照按照某种规则拆封到多个表中,但是这些表还是在一个库中。

水平分库分表

按照某种规则把拆封的表在拆分到不同的库中去。

水平分库分表规则

1.RANGE按照范围拆分
比如0-100000一个表,100001到200000一个表。
2.HSAH取模
比如通过用户ID取模,然后分配到不同的库表中。(一致性HASH)
3.地理区域
比如按照华东,东北,西南等区域划分。
4.时间拆分
比如将6个月钱的数据拆出去放到一张表,随着时间的流逝,这些表的数据查询的几率很小,这也是冷热数据分离。

水平分库

水平分库.png

水平分表

水平分表.png

特点

1.每个库/表的结构都一样。
2.每个库/表的数据都不一样。
3.每个库/表的并集是全量数据。

优点

1.单库/表的数据量减少,有利性能。
2.库/表的机构相同,程序改动小。

缺点

数据扩容难度大,比如取模值变了,就要重新处理。一致性hash解决了问题。

最后修改:2023 年 11 月 30 日
如果觉得我的文章对你有用,请随意赞赏