单库分表:ShardingSphere4.1.1之Sharding-JDBC与SpringBoot项目集成案例(行表达式和强制路由分片策略)

本文介绍了Apache ShardingSphere的Sharding-JDBC如何与SpringBoot集成,用于单库分表。内容包括行表达式分片策略的配置与应用,以及在没有明确分片条件SQL中的Hint(强制分片路由策略)的使用,展示了如何实现Hint分片算法,并利用Spring AOP减少代码侵入性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、介绍

        Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款相互独立,却又能够混合部署配合使用的产品组成。 它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。本篇文章要使用的就是Sharding-JDBC。

ShardingSphere官网提供了很全面的Sharding-JDBC教程,配置多样化,文档目录层次分明,概念易懂。

http://shardingsphere.apache.org/index_zh.html

 

二、常见知识点误区

       1.Sharding-JDBC是一种分库分表的中间件,它的功能是帮助我们解决分库分表过程中带来的问题(比如联表查询、分页、分布式事务等),换句话说,分库分表是我们自己来干,比如说将一张大表分成N个小表,这个工作咱们得提前自己干,Sharding-JDBC可不会帮咱们干。

       2.分表不是越多越好,比如你将一张大表分成了一千多张小表,后期这些小表是很难维护的,比如你要加一个字段(想想就酸爽)!

 

三、使用(行表达式分片策略和强制路由分片策略)

     行表达式分片策略

       1.引入Sharding-JDBC依赖(注意版本)


                
### Sharding JDBC 分表配置及实现方法 #### Maven依赖引入 为了使用 Sharding JDBC分表操作,首先需要在项目中引入相应的 Maven 依赖。以下是常见的依赖配置: ```xml <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>4.1.1</version> </dependency> ``` 上述依赖版本可以根据实际需求调整[^1]。 --- #### YML 配置文件设置 Sharding JDBC 支持通过 YAML 文件进灵活的数据库分片配置。以下是一个典型的分表配置示例: ```yaml spring: shardingsphere: datasource: names: ds_0,ds_1 ds_0: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/ds_0?serverTimezone=UTC&useSSL=false username: root password: root ds_1: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/ds_1?serverTimezone=UTC&useSSL=false username: root password: root rules: sharding: tables: t_order: actual-data-nodes: ds_${0..1}.t_order_${0..1} table-strategy: standard: sharding-column: order_id sharding-algorithm-name: t_order_inline sharding-algorithms: t_order_inline: type: INLINE props: algorithm-expression: t_order_${order_id % 2} ``` 在此配置中: - `actual-data-nodes` 定义了逻辑表的实际物理分布。 - `table-strategy.standard` 使用标准分片策略,支持简单的模运算或其他表达式定义[^3]。 --- #### 分表功能测试 完成配置后,可以通过编写单元测试验证分表功能是否正常工作。例如,在 MyBatis 中执行如下 SQL 查询时,Sharding JDBC 将自动路由到对应的分表上: ```java @Select("SELECT * FROM t_order WHERE order_id = #{orderId}") List<Order> selectOrderById(@Param("orderId") Long orderId); ``` 假设 `order_id` 的值为偶数,则查询会被路由至 `t_order_0` 表;如果是奇数,则会路由至 `t_order_1` 表[^4]。 --- #### 范围查询的支持 当需要支持范围查询(如 BETWEEN AND)时,推荐使用 Standard 分片算法。该算法能够识别并处理复杂的条件组合,从而提高查询效率。 --- #### 常见问题排查 如果发现数据始终落入特定分表(如 0-1 表),可能的原因包括: 1. **分片键未正确指定**:确保 SQL 查询中包含了分片列作为过滤条件。 2. **分片算法错误**:检查 `algorithm-expression` 是否符合预期逻辑。 3. **数据节点配置全**:确认 `actual-data-nodes` 已覆盖所有目标分表---
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值