数据库常用分库分表方案

为什么需要分库分表

分库分表是因应数据库处理大规模数据时所面临的挑战而出现的解决方案.

// 提高性能
单个数据库在数据量增加时容易出现性能瓶颈。分库分表可以减轻单个数据库的负担,提高系统的读写性能和响应速度.
// 提高并发能力
大量用户同时访问数据库可能导致数据库的性能下降。通过分库分表,可以将用户请求分散到多个数据库或表上,提高并发处理能力.
// 降低单点故障风险
单个数据库出现故障可能导致整个系统不可用。分库分表可以将数据分布到多个节点上,降低单点故障对系统的影响。
// 优化数据存储和查询
针对特定的业务需求,通过分库分表可以优化数据存储结构,使得数据存储更合理、查询更高效。
// 扩展性
随着业务的增长,单个数据库可能无法满足高并发和大数据量的需求。分库分表可以水平扩展,将数据分散到多个节点上,增加系统的扩展性和容量。
// 节约成本
使用分库分表可以根据需求灵活扩展数据库,而无需立即投入大量成本购买高性能的硬件设备或数据库服务。

数据库瓶颈

不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃).

// IO瓶颈
// 磁盘IO
磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 -> 分库和垂直分表。
// 网络IO
网络IO瓶颈,请求的数据太多,网络带宽不够。-> 分库

// CPU瓶颈
// SQL问题SQL中包含join,group by,order by,非索引字段条件查询等,增加CPU运算的操作. -> SQL优化,在业务层计算,减轻数据库压力.
// 单表数据量太大
查询时扫描的行太多,SQL效率低,CPU率先出现瓶颈。-> 分库分表

分库分表

水平分库

// 原理
以某个字段为依据,按照一定策略(hash、range等),将一个库中的数据拆分到多个库中.
// 要求
1.每个库的结构都一样.
2.每个库的数据都不一样,没有交集.
3.所有库的并集是全量数据

在这里插入图片描述

水平分表

// 原理
以字段为依据,按照一定策略(hash、range等),将一个表中的数据拆分到多个表中.
// 要求
1.每个表的结构都一样.
2.每个表的数据都不一样,没有交集.
3.所有表的并集是全量数据.

在这里插入图片描述

垂直分库

// 原理
以表为依据,按照业务归属不同,将不同的表拆分到不同的库中.
// 要求
1.每个库的结构都不一样.
2.每个库的数据也不一样,没有交.
3.所有库的并集是全量数据.

在这里插入图片描述

垂直分表

// 原理
以字段为依据,按照字段的活跃性,将表中字段拆到不同的表(主表和扩展表)中
// 要求
1.每个表的结构都不一样
2.每个表的数据也不一样,一般来说,每个表的字段至少有一列交集,一般是主键,用于关联数据.
3.所有表的并集是全量数据

在这里插入图片描述

分库分表步骤

1.根据容量(当前容量和增长量)评估分库或分表个数 .
2.确定分库分表的key,尽量均匀.
3.确定分库分表的规则
4.迁移数据(一般双写)

总结

以上介绍了分库分表的一些理论知识,下一篇我会以水平分表为例,《Mybaits拦截器实现水平分表》来加深理解.

参考文章:
https://juejin.cn/post/6844903863464493064
https://www.cnblogs.com/qdhxhz/p/11608222.html

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于将数据库进行分库分表的问题,我可以给你一些基本的解释和建议。 分库分表是一种常见的数据库架构设计方式,旨在提高数据库的性能和扩展性。它通过将数据分散到多个数据库实例(分库)和多个数据表(分表)中来实现。 分库分表的优点之一是可以将负载均衡在多个数据库实例上,从而提供更好的性能和并发处理能力。它还可以减少单个数据库的存储压力,提高系统的可用性和容错性。 然而,分库分表也会带来一些挑战和复杂性。在实施分库分表之前,你需要仔细考虑以下几点: 1. 数据划分:确定如何划分数据到不同的数据库和表中。常用的划分策略包括按照业务模块、按照用户ID范围或按照时间范围等。 2. 数据一致性:当数据被拆分到不同的数据库和表中时,你需要考虑如何保持数据的一致性。这可能涉及到跨数据库的事务管理或采用一致性哈希算法来路由请求。 3. 跨库查询:当需要查询跨多个数据库和表时,你需要设计适当的查询策略,可能涉及到使用分布式查询引擎或者采用数据同步机制。 4. 数据迁移和扩展:在系统运行过程中,你可能需要进行数据迁移或者添加新的数据库实例来扩展系统的容量。这需要考虑到数据迁移的成本和对业务的影响。 总之,分库分表是一项复杂的数据库架构设计任务,需要仔细评估和规划。在实施之前,建议你详细了解你的系统需求和数据模型,并考虑使用成熟的分库分表方案或者咨询专业的数据库架构师来提供支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值