Java在数据库分库分表中间件(ShardingSphere)中的设计

简介: 单表数据量超过千万级后,查询性能下降;单库连接数有限。分库分表将数据水平拆分到多个数据库和表中。https://ylswkj.com业务代码需要知道具体访问哪个库哪个表,侵入性强。

1.分库分表的需求背景
单表数据量超过千万级后,查询性能下降;单库连接数有限。分库分表将数据水平拆分到多个数据库和表中。但业务代码需要知道具体访问哪个库哪个表,侵入性强。ShardingSphere是一套开源的分布式数据库中间件,完全由Java实现,通过拦截JDBC层SQL,自动路由到目标数据源。
参考:https://www.xrzqr.cn/category/city-forecast.html

2.ShardingSphere-JDBC的工作原理
它以JAR包形式集成在应用内,重写DataSource接口,解析SQL中的分片键(如order_id),根据分片算法(如order_id%4)计算出目标库和表,再改写SQL(如添加表别名、调整范围查询),最后执行并聚合结果。对业务代码透明,只需修改DataSource配置。

3.分片策略与分布式事务
分片键:通常选择查询频率高的字段(如user_id、order_id)。
分片算法:取模、哈希、范围、复合分片。
分布式事务:ShardingSphere支持XA(Atomikos)和柔性事务(SEATA),保证跨库操作的ACID。

4.读写分离与影子库
ShardingSphere也支持主从读写分离:写SQL走主库,读SQL走从库,并内置负载均衡。影子库(ShadowDB)用于压测流量路由,不影响生产数据。
参考:https://www.xrzqr.cn/category/national-weather.html

5.案例:电商订单表的分库分表
某电商订单系统,订单表每天新增200万行。计划分16个库,每个库64张表(共1024张表)。分片键为order_id(雪花算法生成,包含时间戳)。使用ShardingSphere-JDBC配置:
default-database-strategy:order_id%16确定数据库。
table-strategy:order_id%64确定表。
对于查询用户订单(需user_id分片),使用复合分片,同时支持order_id和user_id,避免全路由。
上线后,单条查询平均耗时<2ms,范围查询通过IN拆解为多个单分片查询,性能提升10倍。

6.SQL限制与注意事项
不支持跨库JOIN(除非绑定表,即相同分片键)。
ORDERBY、GROUPBY会收集所有分片结果再聚合,大量数据时性能差。
不支持INSERTINTO...SELECT等复杂语句。
分布式序列(雪花算法)内置支持。

7.与MyCAT、Vitess对比
MyCAT:独立代理,性能有损耗,但跨语言。
Vitess:基于MySQL协议代理,功能强大,但部署复杂。
ShardingSphere-JDBC:无代理,性能好,适合Java技术栈。

8.总结
ShardingSphere是Java生态中分库分表的首选方案。它在JDBC层透明地解决了水平扩展问题,让开发者可以继续使用熟悉的JPA或MyBatis操作多数据源。对于数据量持续增长的应用,这是必备的中间件。
参考:https://www.xrzqr.cn

目录
相关文章
|
4月前
|
中间件 API PHP
PHP在数据脱敏与隐私保护中间件中的实践
随着《个人信息保护法》、GDPR等法规的实施,企业需要对用户敏感信息(手机号、身份证、银行卡号、邮箱)进行脱敏处理。通常场景https://iwanttofly.cn包括:API返回给前端的日志中不能包含明文敏感数据;数据库查询时的动态脱敏;导出文件时的自动遮盖。
146 0
|
4月前
|
消息中间件 C++ 计算机视觉
C++在进程间通信(共享内存与消息队列)中的高性能实践
多进程架构中,进程间需要交换数据。相比网络socket,共享内存提供了最低延迟的通信方式(纳秒级),https://empirechem.cn适合高频数据交换场景(如实时行情分发、图像处理流水线)
189 0
|
Arthas 监控 Java
Arthas 概述 | 学习笔记
快速学习 Arthas 概述
Arthas 概述 | 学习笔记
|
XML Java 数据格式
从六个方面读懂IoC(控制反转)和DI(依赖注入)
在一开始学习 Spring 的时候,我们就接触 IoC 了,作为 Spring 第一个最核心的概念,我们在解读它源码之前一定需要对其有深入的认识,对于初学Spring的人来说,总觉得IOC是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring IOC的理解。
759 2
|
SQL 安全 Java
resultMap 与 resultType、parameterMap 与 parameterType的区别
resultMap 与 resultType、parameterMap 与 parameterType的区别
556 0
|
缓存 Linux
CentOS7配置阿里yum源 超详细!!!
CentOS7配置阿里yum源 超详细!!!
35666 2
|
6月前
|
人工智能 测试技术 API
DeepSeek V4,真要把 AI 圈再掀一遍吗?
截至2026年4月12日,DeepSeek V4尚未官宣,但社区盛传其达万亿参数、100万上下文、原生多模态,激活仅370亿参数,推理成本低至GPT-4的1/70,或支持双4090本地部署——若属实,将重塑AI性价比格局。
1183 3
|
1月前
|
开发工具 git 开发者
DeepSeek Harness 版本怎么选?dsh 版本号怎么看、rc 版说明与锁定指定版本安装
选 DSH 版本先读懂版本号:dsh --version 看当前,npm view 看最新,rc 是候选发布版、接口可能变;要稳定追 latest,尝鲜才装 rc。想锁版本用 npm install -g @deepseek-ai/dsh@版本 或源码 git checkout tag,本文给出完整操作。
1001 0
|
10月前
|
Arthas 监控 Java
arthas 基础指令
Arthas简介:通过dashboard查看线程状态、CPU占用等;jad反编译类文件;thread分析线程堆栈及阻塞情况;watch监控方法执行耗时与参数;支持quit退出连接或stop彻底终止。适用于Java进程诊断,操作便捷,功能强大。(239字)
|
6月前
|
人工智能 自然语言处理 测试技术
DeepSeek V4:百万上下文,万亿参数,以及重新泛起涟漪的开源池塘
DeepSeek V4发布Pro(1.6T参数/49B激活)与Flash(284B/13B)双模型,均支持1M上下文、thinking模式及Agent能力。全栈开源(权重+技术报告+API+定价),采用混合注意力架构显著降本,中文长文本与推理能力突出,是当前少有的万亿级开源系统级发布
3375 4
DeepSeek V4:百万上下文,万亿参数,以及重新泛起涟漪的开源池塘