我们现在有个场景,是根据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或者告诉我去研究文档的哪部分内容嘛?谢谢啦!
你需要了解的信息:
- ShardingSphere 支持两种方式来扩展自定义算法,SPI 和 ClassBased。
- SPI 方式需要配置 META-INF/services 信息
- ClassBased 是基于类名的扩展,在分片算法中指定全路径即可 (link)
1 个赞
十分感谢大佬的帮助!!!感谢感谢!!!