0

0

SQL sharding 技术与应用案例

冷漠man

冷漠man

发布时间:2026-02-19 12:58:03

|

636人浏览过

|

来源于php中文网

原创

sharding-jdbc分库分表无需停服,可通过升级从库+双写灰度实现热迁移;t_order与t_order_item须设为绑定表以避免笛卡尔积;4.0.0-rc1已过时,应升级至5.3.x;广播表需手动同步且仅适用低频配置数据。

sql sharding 技术与应用案例

Sharding-JDBC 分库分表到底要不要停服?

绝大多数业务扛不住停服迁移——不是技术做不到,而是线上订单、支付、库存等链路一断,分钟级就可能触发资损或客诉。ShardingSphere 本身不提供“自动热迁移”能力,但你可以用“升级从库 + 双写灰度”组合拳绕过停服。

  • 先在从库上按新分片规则建好 t_order_0t_order_1 等物理表,保持主从同步不中断
  • 应用层双写:老逻辑写原单库单表,新逻辑按 order_id % 4 写到四个分片;通过开关控制灰度比例
  • 数据一致性靠校验脚本兜底,比如对比 SELECT COUNT(*) FROM t_order WHERE order_id % 4 = 0 和对应分片表行数
  • 切完流量后,旧表只读、逐步归档,避免长期双写拖慢写入性能

为什么 t_ordert_order_item 必须设为绑定表?

因为跨分片 JOIN 不是 SQL 被拒绝那么简单——ShardingSphere 会把 JOIN t_order_item 拆成 N×M 条独立查询,再做笛卡尔积合并,内存爆掉、超时、OOM 都是常态。绑定表本质是告诉框架:“这两张表的分片键一致,路由一定落在同一节点”。

BJXSHOP网上购物系统 - 书店版
BJXSHOP网上购物系统 - 书店版

BJXSHOP购物管理系统是一个功能完善、展示信息丰富的电子商店销售平台;针对企业与个人的网上销售系统;开放式远程商店管理;完善的订单管理、销售统计、结算系统;强力搜索引擎支持;提供网上多种在线支付方式解决方案;强大的技术应用能力和网络安全系统 BJXSHOP网上购物系统 - 书店版,它具备其他通用购物系统不同的功能,有针对图书销售而进行开发的一个电子商店销售平台,如图书ISBN,图书目录

下载
  • 配置里必须显式声明 spring.shardingsphere.rules.sharding.binding-tables[0]=t_order,t_order_item
  • 分片键要严格对齐:比如 t_order.order_idt_order_item.order_id 都参与分片,且用相同算法(不能一个取模、一个按时间范围)
  • 一旦没配绑定表,又写了 JOIN,日志里会出现 Cannot support Cartesian product join 报错,但不会直接抛异常,容易漏测

sharding-jdbc-spring-boot-starter-4.0.0-RC1 还能用吗?

不能直接用于新项目。这个版本发布于 2022 年初,已停止维护,且存在明确兼容性雷区:

  • 不支持 MySQL 8.0+ 的 caching_sha2_password 认证插件,连不上新版 MySQL
  • 与 Spring Boot 2.6+ 的 Jakarta EE 命名空间冲突,启动报 javax.validation 类找不到
  • 分布式事务仅支持 XA(Atomikos),不支持 Seata 的 AT 模式,而 AT 是当前主流
  • 建议升到 shardingsphere-jdbc-core-spring-boot-starter 5.3.x 或更高,配置项前缀也从 spring.shardingsphere 变成了 spring.shardingsphere.props

广播表 t_config 改动后,怎么保证所有分片库实时生效?

广播表不是“自动同步”,而是每次执行 INSERT/UPDATE/DELETE 时,ShardingSphere 主动把语句发给所有数据源。所以它只适合低频变更、高读取的配置类数据。

  • 不要在 t_config 上加唯一索引或外键,否则多库并发写可能触发主键冲突或锁等待
  • 如果用了 Druid 连接池,记得关掉 useGlobalDataSourceStat=false,否则广播操作会被统计成 N 次独立调用,监控毛刺严重
  • 最易忽略的一点:广播表不参与分片路由计算,但如果你在 SQL 里写了 WHERE config_id = ?,ShardingSphere 仍会尝试解析该条件——虽然最终不影响执行,但会多一次无意义的解析开销
分库分表真正难的从来不是配置写对,而是业务 SQL 是否天然适配分片模型。一个 GROUP BY create_time 加个 LIMIT 20,背后可能是 8 个库并行查再归并排序,稍不注意就拖垮整个连接池。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

985

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

334

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

377

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1738

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

374

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1292

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

585

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

436

2024.04.29

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

660

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号