数据库分库分表详解(原则时机及实现原理)

数据库分库分表详解(原则时机及实现原理)-mikechen

什么是分库分表

分库分表是一种数据库架构设计模式,旨在处理大规模数据和高并发访问的情况。

分库分表是将一个大型数据库分割成多个小型数据库(分库),并将每个小型数据库中的表分割成多个子表(分表)。

如下图所示:

数据库分库分表详解(原则时机及实现原理)-mikechen

 

为什么要分库分表?

1.性能优化

大型数据库在查询和写入时可能会出现性能问题,分库分表可以提高查询性能和写入吞吐量。

比如:

  • 一张表的查询速度已经慢到影响使用的时候,达到了亿级数据,就可以考虑分表了。
  • 随着业务体量扩大,数据规模达到百万行,数据库索引树庞大,查询性能出现瓶颈。
  • 当频繁插入或者联合查询时,梳速度变慢。

2.可扩展性

随着数据量的增长,单一数据库可能无法满足需求。

比如:用户并发流量规模扩大,由于单库(单服务器)物理性能限制也无法承载大流量。

通过分库分表,可以将负载均衡到多个数据库服务器上,从而实现可扩展性。

3.容错性

分库分表可以提高系统的容错性,如果一个数据库或表发生故障,其他数据库和表仍然可以正常工作。

 

如何分库分表

数据库分库分表,主要就分为:分库和分表两种。

如下图所示:

数据库分库分表详解(原则时机及实现原理)-mikechen

1.垂直划分(分库)

垂直划分是将数据库中的不同数据表按照业务逻辑,或数据特性划分到不同的数据库中。

例如:一个电子商务应用可以将用户信息、订单信息、商品信息分别存储在不同的数据库中。

数据库分库分表详解(原则时机及实现原理)-mikechen

每个分库都可以在独立的数据库服务器上运行,这样可以分散数据库的负载,提高性能和可用性。

分库通常根据一些划分规则,例如按照用户ID的哈希值、按照地理位置等将数据划分到不同的数据库中。

 

2.水平划分(分表)

水平划分是将数据库中的一个大表拆分成多个小表,每个小表存储部分数据。

通常,可以按照某种规则,如数据范围、哈希值等,将数据划分到不同的子表中。

数据库分库分表详解(原则时机及实现原理)-mikechen

结果:

  • 每个表的结构都一样;
  • 每个表的数据都不一样,没有交集;
  • 所有表的并集是全量数据;

场景:系统绝对并发量并没有上来,只是单表的数据量太多,影响了SQL效率,加重了CPU负担,以至于成为瓶颈。推荐:一次SQL查询优化原理分析

分析:表的数据量少了,单次SQL执行效率高,自然减轻了CPU的负担。

 

分库分表工具

常见的数据库分库分表中间件,主要包含:Cobar:Cobar 、ShardingSphere 等。

数据库分库分表详解(原则时机及实现原理)-mikechen

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面试题总结

评论交流
    说说你的看法