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

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 单表数据量超过千万级后,查询性能下降;单库连接数有限。分库分表将数据水平拆分到多个数据库和表中。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

目录
相关文章
|
1月前
|
消息中间件 C++ 计算机视觉
C++在进程间通信(共享内存与消息队列)中的高性能实践
多进程架构中,进程间需要交换数据。相比网络socket,共享内存提供了最低延迟的通信方式(纳秒级),https://empirechem.cn适合高频数据交换场景(如实时行情分发、图像处理流水线)
96 0
|
1月前
|
中间件 API PHP
PHP在数据脱敏与隐私保护中间件中的实践
随着《个人信息保护法》、GDPR等法规的实施,企业需要对用户敏感信息(手机号、身份证、银行卡号、邮箱)进行脱敏处理。通常场景https://iwanttofly.cn包括:API返回给前端的日志中不能包含明文敏感数据;数据库查询时的动态脱敏;导出文件时的自动遮盖。
77 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL IN 里塞 10000 个值?90% 开发者都踩过的坑,底层原理 + 全场景解决方案一次讲透
本文深入剖析MySQL IN子句的底层执行逻辑,纠正常见误区(如“1000值硬限制”“IN=OR”),揭示大IN列表引发的性能、稳定性及安全风险,并提供分批查询、临时表JOIN、关联/EXISTS查询、流式查询四类场景化解决方案,附实测性能对比与生产避坑指南。
630 4
|
XML Java 数据格式
从六个方面读懂IoC(控制反转)和DI(依赖注入)
在一开始学习 Spring 的时候,我们就接触 IoC 了,作为 Spring 第一个最核心的概念,我们在解读它源码之前一定需要对其有深入的认识,对于初学Spring的人来说,总觉得IOC是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring IOC的理解。
705 2
|
3月前
|
人工智能 测试技术 API
DeepSeek V4,真要把 AI 圈再掀一遍吗?
截至2026年4月12日,DeepSeek V4尚未官宣,但社区盛传其达万亿参数、100万上下文、原生多模态,激活仅370亿参数,推理成本低至GPT-4的1/70,或支持双4090本地部署——若属实,将重塑AI性价比格局。
1036 3
|
SQL 安全 Java
resultMap 与 resultType、parameterMap 与 parameterType的区别
resultMap 与 resultType、parameterMap 与 parameterType的区别
497 0
|
3月前
|
人工智能 自然语言处理 测试技术
DeepSeek V4:百万上下文,万亿参数,以及重新泛起涟漪的开源池塘
DeepSeek V4发布Pro(1.6T参数/49B激活)与Flash(284B/13B)双模型,均支持1M上下文、thinking模式及Agent能力。全栈开源(权重+技术报告+API+定价),采用混合注意力架构显著降本,中文长文本与推理能力突出,是当前少有的万亿级开源系统级发布
2373 4
DeepSeek V4:百万上下文,万亿参数,以及重新泛起涟漪的开源池塘
|
3月前
|
IDE Java 开发工具
【全网最详细】IDEA官网下载 | IntelliJ IDEA安装使用保姆级教程(附社区版安装包)
IntelliJ IDEA是JetBrains开发的主流Java IDE,以智能代码补全、强大重构、深度框架支持(Spring/Maven/Gradle)和丰富插件生态著称,广受开发者青睐。社区版免费,旗舰版功能更全,安装配置简单,显著提升开发效率。(239字)
|
3月前
|
SQL 存储 关系型数据库
干掉 90% 慢 SQL!MySQL 全链路排查与优化方法论,从执行计划到表结构全拆解
本文系统讲解MySQL慢SQL优化全链路方法:从慢查询日志精准定位、EXPLAIN执行计划深度解析,到10大索引失效场景根因拆解、8大SQL改写实战技巧;涵盖表结构设计规范与Java层防控实践,强调“先定位、再看执行计划、后优化”,助力开发者高效解决80%以上数据库性能瓶颈。
800 1
|
9月前
|
监控 安全 JavaScript
2025基于springboot的校车预定全流程管理系统
针对传统校车管理效率低、信息不透明等问题,本研究设计并实现了一套校车预定全流程管理系统。系统采用Spring Boot、Java、Vue和MySQL等技术,实现校车信息管理、在线预定、实时监控等功能,提升学校管理效率,保障学生出行安全,推动教育信息化发展。

热门文章

最新文章