MYCAT10种常见分片规则之一 ---PartitionByLong(求模)

MYCAT10种常见分片规则之一 —PartitionByLong(求模)

一、PartitionByLong

转载:https://www.jianshu.com/p/7a112909b963?appinstall=0

这是先求模得到逻辑分片号,再根据逻辑分片号直接映射到物理分片的一种散列算法。
在这里插入图片描述

  1. 用户需要在rule.xml中定义partitionLength[]和partitionCount[]两个数组
  2. 在DBLE的启动阶段,点乘这两个数组得到模数,也是逻辑分片的数量
  3. 并且根据两个数组的叉乘,得到各个逻辑分片到物理分片的映射表(物理分片数量由partitionCount[]数组的元素值之和)
  4. 在DBLE的运行过程中,用户访问使用这个算法的表时,WHERE子句中的分片索引值会被提取出来进行求模,得到逻辑分片号
  5. 再根据逻辑分片号,查映射表,直接得到物理分片号

开发注意点

【分片索引】1,必须是整型数字或整型数字的字符串(可以为负数)
【分片索引】2,最大物理分片配置方法是,让partitionCount[]数组和等于2880,例如“12880”或“1,11440,1440”
【分片索引】3,最小物理分片配置方法是,让partitionCount[]数组和等于1,例如“28801”
【分片索引】4,partitionLength和partitionCount被当做两个逗号分隔的一维数组,它们之间的点乘必须在[1, 2880]范围内
【分片索引】5,partitionLength和partitionCount的配置对顺序敏感,“512,2561,2”和“256,5122,1”是不同的分片结果
【数据分布】1,与分片索引值相关而与INSERT先后无相关性,所以在直接使用时无法保证数据分布均匀,但如果分片索引本身连续递增(交易流水号等),则可以期待数据分布较为平均(但副作用会导致范围语句,例如SELECT … WHERE shard_key BETWEEN 1 AND 100,变成跨分片查询)

运维注意点

【扩容】1,预先过量分片,并且不改变partitionCount和partitionLength点乘结果,可以避免数据再平衡,只需进行涉及数据的迁移
【扩容】2,若需要改变partitionCount和partitionLength点乘结果,需要数据再平衡
【缩容】1,预先过量分片,并且不改变partitionCount和partitionLength点乘结果,可以避免数据再平衡,只需进行涉及数据的迁移
【缩容】2,若需要改变partitionCount和partitionLength点乘结果,需要数据再平衡

配置注意点

【配置项】1,在rule.xml中,可配置项为和
【配置项】2,在rule.xml中配置标签,内容形式为“<物理分片持有的虚拟分片数>[,<物理分片持有的虚拟分片数>,…<物理分片持有的虚拟分片数>]”,<物理分片持有的虚拟分片数>必须是整型,<物理分片持有的虚拟分片数>从左到右与同顺序的<物理分片数>对应,partitionLength和partitionCount的点乘结果必须在[1, 2880]范围内
【配置项】3,在rule.xml中配置标签,内容形式为“<物理分片数>[,<物理分片数>,…<物理分片数>]”,其中<物理分片数>必须是整型,<物理分片数>按从左到右的顺序与同顺序的<物理分片持有的虚拟分片数>对应,物理分片的编号从左到右连续递进,partitionLength和partitionCount的点乘结果必须在[1, 2880]范围内
【配置项】4,partitionLength和partitionCount的语义是:持有partitionLength[i]个虚拟分片的物理分片有partitionCount[i]个,例如,“512,2561,2”的语义是“持有512个逻辑分片的物理分片有1个,紧随其后,持有256个逻辑分片的物理分片有2个”
【配置项】5,partitionLength和partitionCount都对书写顺序敏感,例如,“512,2561,2”的分片结果是“第一个物理分片持有头512个逻辑分片,第二个物理分片持有紧接着的256个逻辑分片,第三个物理分片持有最后256个逻辑分片”,相对的,“256,5122,1”的分片结果则是“第一个物理分片持有头256个逻辑分片,第二个物理分片持有紧接着的256个逻辑分片,第三个物理分片持有最后512个逻辑分片”
【配置项】6,partitionLength[]的元素全部为1时,这时候partitionCount数组和等于partitionLength和partitionCount的点乘,物理分片和逻辑分片就会一一对应,该分片算法等效于直接取余。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值