sharding-jdbc 的 RangeShardingAlgorithm 怎么用?
sharding-jdbc 的 RangeShardingAlgorithm 怎么用?
https://segmentfault.com/a/11... 对于这篇文章
有2点我不是很明白,请指点一下。
在我的想象中:PreciseShardingAlgorithm 和 RangeShardingAlgorithm 应该是二选一。文中和官方说 RangeShardingAlgorithm 是可选。(我第一直觉 RangeShardingAlgorithm 应该是按范围分片
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
以下个人理解,可能有不对之处,欢迎讨论。
(1)精确分片 和 范围分片
PreciseShardingAlgorithm 要求是必选的,RangeShardingAlgorithm 是可选的。也就是你如果使用 RangeShardingAlgorithm 分片,也要必须实现 PreciseShardingAlgorithm 精确分片。
PreciseShardingAlgorithm 只支持 = in 的操作,RangeShardingAlgorithm 只支持 BETWEEN AND, >, <, >=, <= 操作。
范围分片,应该比较适合对一定范围的数据的处理,能避免对更多的库和表进行sql执行。
精确分片,应该比较适合没有范围的数据处理,也就是你说的主键求余。
(2)行表达式
官方说明:
行表达式,使用Groovy的表达式,提供对SQL语句中的=和IN的分片操作支持,只支持单分片键。对于简单的分片算法,可以通过简单的配置使用,从而避免繁琐的Java代码开发,如:
t_user_$->{u_id % 8}
表示t_user表根据u_id模8,而分成8张表,表名称为t_user_0
到t_user_7
所以复杂的分片算法,可以通过java配置来实现
下面这个就是 范围分片的一个实现, 基于 sharding-jdbc 4 版本
github: 代码地址