垂直拆分/水平拆分,解决方案

1.垂直拆分

单个数据库最大连接数是151,可以通过 show variables like ‘max_connections’ 查看。
随着用户量越来越大,单个数据库已经无法支撑系统正常使用。这个时候我们就需要对数据库层面进行优化。假设我们现在有订单,用户,商品等功能。我们可以对其进行垂直拆分。

垂直拆分:

将不同的业务拆分到不同数据库中。降低业务对统一数据库的压力。

注意:
禁止跨库 join 查询。(非常影响性能)

在这里插入图片描述
优点:
1.拆分后业务清晰,拆分规则明确。
2.系统之间容易扩展和整合。

  • 进行系统升级,曾加功能模块并不影响原来的订单库和用户库

3.数据维护简单。
每个服务维护自己的库。

缺点:
1.业务表之间无法join联查,只能通过服务接口远程调用,提升了系统复杂度。
2.跨库事务难以处理。
3.垂直切分后,某些业务仍然数据庞大,仍然存在单体性能瓶颈。->引入水平切分。

2.水平切分。

如上数据库被垂直切分后,订单服务会有海量数据。单个数据库仍然无法支撑。
将一张表的数据按照某种规则分到不同数据库中。
需要确定分片的规则。(用户id,奇偶,)
使用分片字段查询时,可确定实体库,其他字段查询,查询所有表。
在这里插入图片描述
优点:
1.解决了单库大数据、高并发的性能瓶颈。
2.拆分规则封装好,对应用端几乎透明,开发人员无需关心拆分细节。
3.提高系统的稳定性和负载能力。

缺点:
1.拆分规则很难抽象。(如:使用用户Id拆分后,用户查询方便,商户查询订单很麻烦,可能需要查询所有的分库)
2.分片事务一致性难以解决。
3.二次扩展时,数据迁移,维护难度大。(比如当前分片为二时已经不满足需求,需要扩展到四个,需要把前两个查出来重新分到四个库中)

猜你喜欢

转载自blog.csdn.net/weixin_41725792/article/details/113739535