1. 分库分表基础概念解析
在数据库架构设计中,当单库单表的数据量达到千万级甚至亿级时,传统的数据库架构就会遇到性能瓶颈。这时候就需要考虑分库分表方案。分库分表本质上是通过水平拆分或垂直拆分的方式,将数据分散到不同的数据库或表中,从而提升系统的整体吞吐量。
1.1 核心名词解释
水平分表:将同一个表的数据按照某种规则(如ID范围、时间等)拆分到多个结构相同的表中。例如用户表可以按照用户ID的范围拆分为user_1、user_2等。
垂直分表:将一个表的字段按照业务维度拆分到不同的表中。例如将用户基本信息(姓名、年龄)和用户扩展信息(地址、爱好)分开存储。
分库:将数据分散到不同的数据库实例上,可以是水平分库(同一个表的数据分散到不同库)或垂直分库(不同业务表分散到不同库)。
Sharding Key:用于决定数据如何分布的字段,如用户ID、订单时间等。选择合理的Sharding Key对性能影响很大。
1.2 分库分表的适用场景
分库分表主要适用于以下场景:
- 单表数据量超过500万行且增长迅速
- 数据库服务器CPU、内存、IO等资源使用率长期处于高位
- 业务有明显的热点数据特征,可以通过合理分片分散压力
- 系统需要支持更高的并发量和更快的响应速度
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 主流分库分表中间件原理
2.1 中间件核心架构
分库分表中间件通常采用代理模式或客户端模式:
代理模式:如MyCat、ShardingSphere-Proxy,作为独立进程部署,应用连接中间件而非直接连接数据库。
客户端模式:如Sharding-JDBC、TDDL,以jar包形式嵌入应用,在应用内完成SQL解析和路由。
两种架构各有优劣:代理模式对应用透明但多一层网络开销;客户端模式性能更好但需要应用改造。
2.2 SQL解析与路由流程
中间件处理SQL的核心流程:
- SQL解析:通过词法分析和语法分析,将SQL转换为抽象语法树(AST)
- 分片规则匹配:根据Sharding Key和配置的分片算法,确定数据所在的分片
- SQL改写:将原始SQL改写为针对具体分片的SQL
- 执行引擎:并发执行多个分片SQL并合并结果
- 结果归并:对多个分片的查询结果进行排序、分组等
