1. 准备数据库
和 shardingshpere 4.X 的样例一样, 我们还是准备一样的订单数据库。分库分表的结果是,当企业用户创建一条采购订单 , 会生成如下记录:
- 订单基础表t_ent_order :单条记录
- 订单详情表t_ent_order_detail :单条记录
- 订单明细表t_ent_order_item:N 条记录
订单数据采用了如下的分库分表策略:
- 订单基础表按照 ent_id (企业用户编号) 分库 ,订单详情表保持一致;
- 订单明细表按照 ent_id (企业用户编号) 分库,同时也要按照 ent_id (企业编号) 分表。
首先创建 4 个库,分别是:ds_0、ds_1、ds_2、ds_3 。
这四个分库,每个分库都包含订单基础表 , 订单详情表 ,订单明细表 。但是因为明细表需要分表,所以包含多张表。
2. 配置文件
相比 4.X , 5.X 显著的特点是:可以将分片配置文件独立出来,从而不需要持续维护 springboot starter。
1、添加 Jar 依赖
2、拆分独立的分片配置文件sharding.yaml
图中,我们将分库分表配置信息独立在单独的文件 sharding.yaml 里,同时在 application.yaml 中,配置数据源信息:
Shardingsphere 5.X 这样可以让配置更加简洁,同时,我们可以将 shardingsphere 当做独立的数据源,更符合架构的口味。
3. 分片算法
分片规则有非常大的变化是:算法独立配置。
上图中,我们定义了哈希算法 hash-slot-algorithm , 并可以和 4.X 不同的是,我们可以自定义属性,比如 我们定义了一个属性 a , 它的值是 1 。
配置某表的分库分表策略时,只需要指定算法名 shardingAlgorithmName
即可。
上图算法实现类中,我们可以在重写初始化方法,实现更加灵活的分片功能。
4. 调试遇到的坑
4.1 yaml 异常
我们发现 snakeyaml 的版本是 1.28 ,没有 shardingsphere 依赖的高版本。
一般情况下,我们可以通过如下命令查看依赖情况:
mvn dependency:tree -Dverbose
我们需要将依 snakeyaml 的版本升级到 1.33 :
4.2 分片配置文件格式
笔者在配置 sharding.yaml 文件时,在启动应用访问数据源时,经常报错,定位到底哪一行出问题比较麻烦。
调试的技巧是:找到官网数据分片规则页面,拷贝配置示例到 sharding.yaml 文件。
然后一点点修改配置文件,通过这种方式,既可以方便调试,也可以慢慢熟悉配置格式。
最后,我们贴一下分片规则配置格式:
5. 总结
- Shardingsphere-JDBC 5.X 的分片配置文件是可以独立配置 ,更加简洁;
- 算法配置功能增强,可以定制配置属性;
- 需要升级 snakeyaml 版本 ,可以参考官网的配置进行调试,减少调试时间。