全部产品
云市场

RIGHT_SHIFT

更新时间:2019-10-31 20:12:02

使用要求

  • 拆分键的类型必须整数类型。
  • DRDS 实例的版本必须是 5.1.28-1320920 及其以上的版本。DRDS 版本说明请参考文档版本说明

路由方式

根据分库键的键值(键值必须是整数)有符号地向右移二进制移指定的位数(位数由用户通过 DDL 指定),然后将得到的整数值按分库(表)数目取余。

使用场景

当拆分键的大部分的键值的低位部分区分度比较低而高位部分区分度比较高时,则适用于通过此拆分函数提高散列结果的均匀度。

例如:有 4 个拆分键的键值,分别为 0x0100、0x0200、0x0300 与 0x0400, 这 4 个值低 8 位部分都是 0。通常一些业务后N位可能只是一些业务上标志位,如果直接通过对面值取余散列,其散列效果可能会比较差。但如是通过 RIGHT_SHIFT(shardKey, 8)将拆分键的值进行二进制右移 8 位,则分别变成了 0x01、0x02、0x03 与 0x04,这样的散列效果就变得比较好(若分4个库,刚好可以每个值对应一个分库)。

使用示例

假设想将 ID 作为拆分键,并且想将 ID 的值向右移二进制 4 位的值作为哈希值,则可以如下建表:

  1. create table test_hash_tb (
  2. id int,
  3. name varchar(30) DEFAULT NULL,
  4. create_time datetime DEFAULT NULL,
  5. primary key(id)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  7. dbpartition by RIGHT_SHIFT(id, 8)
  8. tbpartition by RIGHT_SHIFT(id, 8) tbpartitions 4;

注意事项

移位的数目不能超过整数类型所占有的位数目。