1. 准备数据库

和 shardingshpere 4.X 的样例一样, 我们还是准备一样的订单数据库。分库分表的结果是,当企业用户创建一条采购订单 , 会生成如下记录:

  1. 订单基础表t_ent_order :单条记录
  2. 订单详情表t_ent_order_detail :单条记录
  3. 订单明细表t_ent_order_item:N 条记录

订单数据采用了如下的分库分表策略:

  1. 订单基础表按照 ent_id (企业用户编号) 分库 ,订单详情表保持一致;
  2. 订单明细表按照 ent_id (企业用户编号) 分库,同时也要按照 ent_id (企业编号) 分表。

首先创建 4 个库,分别是:ds_0、ds_1、ds_2、ds_3 。

这四个分库,每个分库都包含订单基础表 , 订单详情表 ,订单明细表 。但是因为明细表需要分表,所以包含多张表。

img

2. 配置文件

相比 4.X , 5.X 显著的特点是:可以将分片配置文件独立出来,从而不需要持续维护 springboot starter。

1、添加 Jar 依赖

img

2、拆分独立的分片配置文件sharding.yaml

img

图中,我们将分库分表配置信息独立在单独的文件 sharding.yaml 里,同时在 application.yaml 中,配置数据源信息:

img

Shardingsphere 5.X 这样可以让配置更加简洁,同时,我们可以将 shardingsphere 当做独立的数据源,更符合架构的口味。

img

3. 分片算法

分片规则有非常大的变化是:算法独立配置

img

上图中,我们定义了哈希算法 hash-slot-algorithm , 并可以和 4.X 不同的是,我们可以自定义属性,比如 我们定义了一个属性 a , 它的值是 1 。

配置某表的分库分表策略时,只需要指定算法名 shardingAlgorithmName 即可。

img

上图算法实现类中,我们可以在重写初始化方法,实现更加灵活的分片功能。

4. 调试遇到的坑

4.1 yaml 异常

img

我们发现 snakeyaml 的版本是 1.28 ,没有 shardingsphere 依赖的高版本。

一般情况下,我们可以通过如下命令查看依赖情况:

mvn dependency:tree -Dverbose

我们需要将依 snakeyaml 的版本升级到 1.33 :

img

4.2 分片配置文件格式

笔者在配置 sharding.yaml 文件时,在启动应用访问数据源时,经常报错,定位到底哪一行出问题比较麻烦。

img

调试的技巧是:找到官网数据分片规则页面,拷贝配置示例到 sharding.yaml 文件。

然后一点点修改配置文件,通过这种方式,既可以方便调试,也可以慢慢熟悉配置格式。

最后,我们贴一下分片规则配置格式:

img

5. 总结

  1. Shardingsphere-JDBC 5.X 的分片配置文件是可以独立配置 ,更加简洁;
  2. 算法配置功能增强,可以定制配置属性;
  3. 需要升级 snakeyaml 版本 ,可以参考官网的配置进行调试,减少调试时间。

本站由 卡卡龙 使用 Stellar 1.27.0 主题创建

本站访问量 次. 本文阅读量 次.