什么是分库分表
分库分表是一种数据库架构设计模式,旨在处理大规模数据和高并发访问的情况。
分库分表是将一个大型数据库分割成多个小型数据库(分库),并将每个小型数据库中的表分割成多个子表(分表)。
如下图所示:
为什么要分库分表?
1.性能优化
大型数据库在查询和写入时可能会出现性能问题,分库分表可以提高查询性能和写入吞吐量。
比如:
- 一张表的查询速度已经慢到影响使用的时候,达到了亿级数据,就可以考虑分表了。
- 随着业务体量扩大,数据规模达到百万行,数据库索引树庞大,查询性能出现瓶颈。
- 当频繁插入或者联合查询时,梳速度变慢。
2.可扩展性
随着数据量的增长,单一数据库可能无法满足需求。
比如:用户并发流量规模扩大,由于单库(单服务器)物理性能限制也无法承载大流量。
通过分库分表,可以将负载均衡到多个数据库服务器上,从而实现可扩展性。
3.容错性
分库分表可以提高系统的容错性,如果一个数据库或表发生故障,其他数据库和表仍然可以正常工作。
如何分库分表
数据库分库分表,主要就分为:分库和分表两种。
如下图所示:
1.垂直划分(分库)
垂直划分是将数据库中的不同数据表按照业务逻辑,或数据特性划分到不同的数据库中。
例如:一个电子商务应用可以将用户信息、订单信息、商品信息分别存储在不同的数据库中。
每个分库都可以在独立的数据库服务器上运行,这样可以分散数据库的负载,提高性能和可用性。
分库通常根据一些划分规则,例如按照用户ID的哈希值、按照地理位置等将数据划分到不同的数据库中。
2.水平划分(分表)
水平划分是将数据库中的一个大表拆分成多个小表,每个小表存储部分数据。
通常,可以按照某种规则,如数据范围、哈希值等,将数据划分到不同的子表中。
结果:
- 每个表的结构都一样;
- 每个表的数据都不一样,没有交集;
- 所有表的并集是全量数据;
场景:系统绝对并发量并没有上来,只是单表的数据量太多,影响了SQL效率,加重了CPU负担,以至于成为瓶颈。推荐:一次SQL查询优化原理分析
分析:表的数据量少了,单次SQL执行效率高,自然减轻了CPU的负担。
分库分表工具
常见的数据库分库分表中间件,主要包含:Cobar:Cobar 、ShardingSphere 等。
1.ShardingSphere
ShardingSphere 是一款开源的分布式数据库中间件,提供了分库分表、读写分离、分布式事务等功能。
它支持多种关系型数据库,包括MySQL、PostgreSQL、Oracle等。
2.MyCAT
MyCAT是一个开源的MySQL数据库中间件,专门用于分库分表场景,并提供了SQL路由、读写分离等功能。
3.Cobar
Cobar 是阿里巴巴开源的数据库中间件,适用于分库分表架构,它支持基于哈希和范围的数据切分,并提供了数据路由和负载均衡功能。
4.TencentDB for MySQL
腾讯云的分布式数据库服务,支持分库分表和读写分离,可以轻松扩展和管理MySQL数据库。
分库分表适用场景
分库分表适用场景,主要包含:
- 大型应用程序: 对于有大量数据和高并发需求的大型应用程序,分库分表是一个合适的选择。
- 数据隔离: 当需要将不同业务数据隔离存储时,可以使用分库分表来实现。
- 负载均衡: 需要负载均衡和高可用性的情况下,分库分表可以提供解决方案。
作者简介
陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
👇阅读更多mikechen架构文章👇
阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师
以上
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》