数据库分库分表实践: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: 123worker.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选择合适的Sharding-JDBC模块
- 表分片:241-springboot-demo-shardingjdbc-mybatis-tables
- JPA集成:243-springboot-demo-shardingjdbc-jpa-tables
- 多租户分库:244-springboot-demo-shardingjdbc-jpa-tenant-db
修改数据库配置
- 编辑application.yml中的数据库连接信息
- 创建对应的分片数据库和表
运行测试
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),仅供参考