当前位置: 首页 > news >正文

数据库分库分表实践:tech-pdai-spring-demos中的Sharding-JDBC配置指南

数据库分库分表实践:tech-pdai-spring-demos中的Sharding-JDBC配置指南

【免费下载链接】tech-pdai-spring-demosSpring Framework5/SpringBoot 2.5.x Demos项目地址: https://gitcode.com/gh_mirrors/te/tech-pdai-spring-demos

在现代应用开发中,随着数据量的快速增长,数据库分库分表已成为解决性能瓶颈的关键技术。tech-pdai-spring-demos项目提供了基于Sharding-JDBC的完整分库分表解决方案,帮助开发者轻松实现数据分片策略。本文将详细介绍如何在该项目中配置和使用Sharding-JDBC进行表级分片,适合新手快速上手分库分表实践。

为什么选择Sharding-JDBC?

Sharding-JDBC作为轻量级的分布式数据库中间件,具有以下核心优势:

  • 无侵入性:完全兼容JDBC和各种ORM框架,无需修改业务代码
  • 灵活分片策略:支持行表达式、自定义算法等多种分片方式
  • 读写分离:可配合主从架构实现读写分离
  • 分布式事务:提供柔性事务支持

在tech-pdai-spring-demos项目中,多个模块展示了Sharding-JDBC的不同应用场景,包括:

  • 241-springboot-demo-shardingjdbc-mybatis-tables(表分片)
  • 243-springboot-demo-shardingjdbc-jpa-tables(JPA集成表分片)
  • 244-springboot-demo-shardingjdbc-jpa-tenant-db(多租户分库)
  • 246-springboot-demo-shardingjdbc-jpa-masterslave(主从架构)

快速开始:表分片环境搭建

1. 引入Sharding-JDBC依赖

在项目的pom.xml中添加Sharding-JDBC Starter依赖,以241-springboot-demo-shardingjdbc-mybatis-tables模块为例:

<dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.1.1</version> </dependency>

完整的依赖配置可参考241-springboot-demo-shardingjdbc-mybatis-tables/pom.xml

2. 配置数据源与分片规则

在application.yml中配置数据源和分片策略,核心配置如下:

spring: shardingsphere: datasource: names: ds ds: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/test_db_sharding?allowPublicKeyRetrieval=true&useSSL=false username: test password: bfXa4Pt2lUUScy8jakXf sharding: tables: tb_user: actual-data-nodes: ds.tb_user_$->{0..1} table-strategy: inline: sharding-column: id algorithm-expression: tb_user_$->{id % 2} key-generator: column: id type: SNOWFLAKE

上述配置实现了:

  • 使用单个数据源(ds)
  • 将tb_user表按id取模2分为tb_user_0和tb_user_1两个实际表
  • 使用雪花算法(SNOWFLAKE)生成分布式ID

完整配置文件路径:241-springboot-demo-shardingjdbc-mybatis-tables/src/main/resources/application.yml

核心分片策略详解

行表达式分片策略

Sharding-JDBC最常用的分片方式,通过inline表达式定义分片规则:

table-strategy: inline: sharding-column: id algorithm-expression: tb_user_$->{id % 2}

语法说明

  • $->{}:行表达式标识
  • id % 2:按id字段取模2
  • 结果为0时路由到tb_user_0,为1时路由到tb_user_1

分布式ID生成

配置雪花算法生成全局唯一ID:

key-generator: column: id type: SNOWFLAKE props: worker: id: 123
  • worker.id:节点ID,分布式环境下需保证唯一
  • 支持的ID生成器:SNOWFLAKE、UUID、LEAF等

多场景分库分表示例

1. 多租户分库方案

在244-springboot-demo-shardingjdbc-jpa-tenant-db模块中,实现了基于租户ID的分库策略:

spring: shardingsphere: sharding: default-database-strategy: inline: sharding-column: tenant_id algorithm-expression: ds_$->{tenant_id % 2}

通过default-database-strategy配置默认分库策略,所有表都会按tenant_id路由到不同数据库。

2. 主从复制与读写分离

246-springboot-demo-shardingjdbc-jpa-masterslave模块展示了如何配置读写分离:

spring: shardingsphere: rules: readwrite-splitting: >git clone https://gitcode.com/gh_mirrors/te/tech-pdai-spring-demos
  1. 选择合适的Sharding-JDBC模块

    • 表分片:241-springboot-demo-shardingjdbc-mybatis-tables
    • JPA集成:243-springboot-demo-shardingjdbc-jpa-tables
    • 多租户分库:244-springboot-demo-shardingjdbc-jpa-tenant-db
  2. 修改数据库配置

    • 编辑application.yml中的数据库连接信息
    • 创建对应的分片数据库和表
  3. 运行测试

cd 241-springboot-demo-shardingjdbc-mybatis-tables mvn spring-boot:run

常见问题解决

1. 分片键必须出现在SQL中

错误示例

SELECT * FROM tb_user WHERE name = 'test'

正确示例

SELECT * FROM tb_user WHERE id = 1 AND name = 'test'

2. 不支持的SQL函数

Sharding-JDBC对部分SQL函数有限制,如不支持LAST_INSERT_ID(),应使用雪花算法等分布式ID生成策略。

3. 事务支持

默认情况下Sharding-JDBC使用本地事务,如需分布式事务支持,需添加额外配置:

spring: shardingsphere: rules: transaction: type: XA props: xa-transaction-manager-type: Atomikos

总结

tech-pdai-spring-demos项目提供了丰富的Sharding-JDBC实践案例,从基础的表分片到复杂的多租户分库,覆盖了大部分实际应用场景。通过本文介绍的配置方法,开发者可以快速掌握分库分表技术,为高并发、大数据量应用提供可靠的数据存储解决方案。建议结合具体业务场景选择合适的分片策略,并通过项目中的测试用例深入理解Sharding-JDBC的实现原理。

【免费下载链接】tech-pdai-spring-demosSpring Framework5/SpringBoot 2.5.x Demos项目地址: https://gitcode.com/gh_mirrors/te/tech-pdai-spring-demos

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1289592/

相关文章:

  • Luckysheet 内网部署教程:后端生成 Excel,前端只读预览
  • AI Agent 开发实战(六):用 Spring AI 搭建你的第一个 Agent
  • 单片机毕业设计-基于 STM32F103 的多传感器水位水温管控系统设计 基于嵌入式单片机的水箱恒温与液位分级预警系统(011801)
  • 2026年在广东做兼职人员结算咨询和落地服务的靠谱企业有哪些:爱灵活专业合规值得信赖 - 米諾
  • NLP第一阶段练习 简单词性标注
  • 南昌朋友聚餐火锅店推荐|全场景适配本地觅食实用指南 - 品牌2026推荐
  • 需求驱动的快速开发思维
  • 如何解决Docker Registry部署瓶颈?Docket分布式传输架构全解析
  • SPARTA核心插件解析:Ambisonic编码与解码的完整指南
  • 带父母吃火锅去哪?南昌本地多元火锅门店觅食指南 - 品牌2026推荐
  • Oracle性能诊断从未如此简单:TPT-Oracle脚本实战案例大全
  • 江门公司监事变更公司口碑好排名实测:江门服务机构榜单与挑选攻略 - 米諾
  • douyin-downloader:抖音内容批量下载与管理的完整解决方案
  • NIKON 4S020-140 印刷电路板
  • 宝鸡黄金回收避坑指南!全域区县实体门店,免费上门、实价实收不压价 - 淘淇黄金回收
  • 罗技鼠标宏终极指南:5分钟搞定PUBG完美压枪
  • 暗黑破坏神2存档编辑器d2s-editor:可视化修改工具全面解析与实战指南
  • 南昌团队聚餐火锅推荐|多场景适配本地火锅觅食指南 - 品牌2026推荐
  • SPARTA插件完全手册:从AmbiBIN到TrackerTest的19个实用工具
  • 2026佛山知识产权版权专利申请流程步骤,佛山优质知识产权代理商哪家专业权威? - GrowthUME
  • 英雄联盟Akari助手:终极LCU自动化工具完整指南,让你的游戏效率提升300%
  • Termux包管理完全攻略:Termux Command Handbook教你玩转pkg命令
  • 2026年寄快递想便宜必看:散户寄件低价渠道与优惠技巧大全(附寄半折实测攻略) - 快递物流资讯
  • Midscene.js终极指南:如何用自然语言重塑你的UI自动化测试体验
  • mini seq2seq模型评估:困惑度计算与翻译质量提升方法
  • ESP32 partitions csv 分区表文件完整讲解
  • 双相情感障碍的脑功能成像:连接性和网络
  • 突破上传限制:gh_mirrors/fi/file-upload断点续传原理与实现
  • 玻璃钢管道玻璃钢罐厂家山东明驰:喷衬缠绕工艺,出厂合格率≥99% 质保 1 年 - 速递信息
  • 告别龟速合成:用Matcha-TTS实现实时语音生成的技术实践