大家好,我是工藤学编程 🦉 | 一个正在努力学习的小博主,期待你的关注 |
|---|---|
实战代码系列最新文章😉 | C++实现图书管理系统(Qt C++ GUI界面版) |
SpringBoot实战系列🐷 | 【SpringBoot实战系列】Sharding-Jdbc实现分库分表到分布式ID生成器Snowflake自定义wrokId实战 |
环境搭建大集合 | 环境搭建大集合(持续更新) |
分库分表 | 分库分表之实战-sharding-JDBC水平分库+分表后:查询与删除操作实战 |
前情摘要:
1、数据库性能优化 2、分库分表之优缺点分析 3、分库分表之数据库分片分类 4、分库分表之策略 5、分库分表技术栈讲解-Sharding-JDBC 6、分库分表下的 ID 冲突问题与雪花算法讲解 7、分库分表之实战-sharding-JDBC 8、分库分表之实战-sharding-JDBC广播表 9、分库分表之实战-sharding-JDBC水平分库+水平分表配置实战 10、分库分表之实战-sharding-JDBC绑定表配置实战 11、分库分表之实战-sharding-JDBC水平分库+分表后:查询与删除操作实战
【亲测宝藏】发现一个让 AI 学习秒变轻松的神站!不用啃高数、不用怕编程,高中生都能看懂的人工智能教程来啦!
👉点击跳转,和 thousands of 小伙伴一起用快乐学习法征服 AI,说不定下一个开发出爆款 AI 程序的就是你!
在数据量爆炸的时代,单库单表的性能瓶颈日益凸显,分库分表成为突破瓶颈的核心手段。Sharding-Jdbc作为轻量级分库分表框架,以“嵌入式”设计深度集成应用,通过拦截JDBC操作实现数据分片的透明化处理。本文结合架构图与执行流程,拆解其核心逻辑:SQL解析→路由→改写→执行→结果归并,带你看透分库分表的底层运行机制。

从上图可见,微服务通过引入sharding-jdbc.jar,将分库分表逻辑内置于应用层。它的核心角色是 “中间代理”:
t_order)。db0.t_order_0、db1.t_order_1)。这种“客户端分片”模式无需独立中间件,减少网络开销,但需应用承担分片逻辑的开发与维护成本。

Sharding-Jdbc的执行流程可归纳为 “解析→路由→改写→执行→归并”,每一步都暗藏精妙设计(上图为流程全景)。
目标:理解SQL意图,提取分片上下文(如分片键、表名)。
Token(如关键字、表名、字段、值)。
例:SELECT * FROM t_order WHERE user_id=100 → 拆分为SELECT、*、FROM、t_order、WHERE、user_id、=、100。Token生成抽象语法树(AST),提炼分片关键信息(如逻辑表t_order、分片键user_id),并标记需改写的部分。核心价值:为后续路由、改写提供“语义理解”基础。
目标:决定SQL该发往哪些数据库/表(即“数据节点路由”)。 Sharding-Jdbc提供 两类路由策略:
适用于含分片键的SQL(如user_id),又细分为:
user_id=100→db0.t_order_0)。user_id%2=0→db0.t_order_0,user_id%2=1→db1.t_order_1)。适用于全局查询(如字典表、配置表),包括:
SELECT * FROM dict)。SELECT * FROM db0.t_*)。核心价值:通过路由策略,将逻辑表映射到真实物理节点,避免无效查询。
核心矛盾:应用写的是逻辑SQL(操作逻辑表,如t_order),但真实数据库中只有物理表(如t_order_0、t_order_1)。
改写逻辑:将逻辑表替换为物理表,补充分片键等上下文,生成可执行的 实际SQL(Actual SQL)。
例:逻辑SQL SELECT * FROM t_order WHERE user_id=100 → 改写为 SELECT * FROM t_order_0 WHERE user_id=100(假设user_id=100对应t_order_0)。
目标:将改写后的SQL安全高效地发往数据节点,支持 两种执行模式:
核心设计:自动平衡资源消耗与执行效率,适配不同业务场景。
问题:多数据节点返回的结果需合并为一个统一结果(如分页、排序、聚合),Sharding-Jdbc提供 两类归并方式:
LIMIT可精准截断)。功能覆盖:支持遍历、排序、分组、分页、聚合,确保最终结果符合应用预期。
将五步逻辑串联,完整流程如下:

每个步骤环环相扣,实现“应用无感知”的分库分表操作。
Sharding-Jdbc通过“解析→路由→改写→执行→归并”的精巧设计,让分库分表对应用透明化,同时在每个环节提供灵活策略。其“客户端分片”的思路,既降低了架构复杂度,也对开发者提出了更高要求(需深入理解分片规则)。
随着分布式数据库的发展,Sharding-Jdbc的核心思想(中间层代理)仍将持续发光——它不仅是分库分表的工具,更是理解分布式数据路由与聚合的“最佳实践教材”。掌握其原理,方能在高并发、大数据场景中从容应对!
觉得有用请点赞收藏! 如果有相关问题,欢迎评论区留言讨论~