关于自定义分片类的切换问题

我们现在有个场景,是根据team_id的不同分在不同的表中(未来还有可能会分到不同的数据源中),而且team_id和table的对应关系是没有规律的。
现在的做法就是将teamID和table的对应关系,写死在自定义分片算法中,例如,team_A对应table1,team_B,team_C,team_D对应table2,剩下所有的team对应table_default。
这样以来,每当我想修改这个分片规则的时候,都要去修改这个自定义算法类,然后重启应用,而且甚至有可能需要进行数据迁移?迁移过程中会对业务造成短时间的影响,请问是有什么样的办法将这种影响降低到最小吗?
请问有什么好的解决方案或者思路吗?

一个建议,将你的映射规则:

team_A对应table1,team_B,team_C,team_D对应table2,剩下所有的team对应table_default。

设计到自定义算法的 props 中,这样,算法的代码就不需要修改了。
而算法 props 是可以通过 DistSQL 动态修改的,这样能够实现你的目标。

关于数据是否迁移,以及怎样迁移,需要了解更多的场景信息才可以讨论。

1 个赞

首先表示感谢,感谢您提供的思路!!!
但是我不是特别理解什么是自定义算法的props,大佬可以给个Demo或者告诉我去研究文档的哪部分内容嘛?谢谢啦!

你需要了解的信息:

  1. ShardingSphere 支持两种方式来扩展自定义算法,SPI 和 ClassBased。
  • SPI 方式需要配置 META-INF/services 信息
  • ClassBased 是基于类名的扩展,在分片算法中指定全路径即可 (link)
  1. 通过算法配置,可以将自定义的属性传递到算法中使用,可以参考这个 example .
    (这个 example 也有不同的接入形态示例)

  2. 通过 DistSQL 可以创建和修改分片算法的配置,也就可以修改算法使用的 mapping 映射。

  3. 关于 class_based 自定义算法,你也可以在中文论坛搜索 class_based 这个关键字,看到更多问题和回答。

1 个赞

十分感谢大佬的帮助!!!感谢感谢!!!

京ICP备2021015875号