跳到正文
Elaine Blog
返回

ShardingSphere-JDBC 分片实战

分布式系统、协调与消息

分库分表先解决单库容量或吞吐瓶颈,再引入 ShardingSphere-JDBC。它嵌入 Java 应用并包装 DataSource,对 SQL 做解析、路由、改写、执行和结果归并;它不会替你选择正确的分片键。

Table of contents

Open Table of contents

先从查询反推分片键

以订单系统为例,若 90% 请求按 user_id 查询用户订单,就可按 user_id 分片。若客服必须按 order_id 查询,需要让订单 ID 编码路由信息、建立独立映射,或接受广播查询。不要同时声称两个无关字段都能精确路由。

核心术语:

绑定表联表时必须携带绑定用的分片键,否则可能产生跨库查询或笛卡尔路由。广播表适合低频更新的字典,不适合高频余额数据。

用 Java 验证路由

分布式系统实验室的 ShardRouter下载先把 8 个槽位映射到 2 个库、每库 4 张表:

ShardRouter router = new ShardRouter(2, 4);
Route route = router.route(42); // 同一个键始终得到同一路由

运行验证:

mvn -Dtest=DistributedMechanismsTest#bindingTablesUseTheSameShardKey test

真实项目再按照ShardingSphere-JDBC 当前配置文档创建数据源。先在影子数据上检查等值、范围、排序、分页、聚合和 JOIN 的路由数量。

上线门槛

记录每条代表性 SQL 的目标分片数、返回行数和归并内存。禁止无分片键的大范围在线查询;为运营检索建立异步索引或离线数仓。最后演练扩容,因为取模算法从 8 改成 16 会让大量旧数据位置改变。

下一步

继续阅读08-09 ShardingSphere-Proxy、内核与扩容,理解代理模式和数据迁移。


分享这篇文章:

上一篇
Paxos、Raft 与复制状态机
下一篇
ShardingSphere-Proxy、内核与扩容