0
点赞
收藏
分享

微信扫一扫

分布式 | MyCat如何迁移到DBLE之分片算法对比解析:enum分片


关于作者
钟 悦 - 资深DBLE用户
某宇宙行资深架构师,在大型重点项目中使用 DBLE。
常年与 MySQL 纠缠不清,经常运用技术处理大企业病的技术or非技术问题的一个挨踢从业者。

根据用户定义的枚举值与分片节点映射文件,直接定位目标分片。

分布式 | MyCat如何迁移到DBLE之分片算法对比解析:enum分片_Mycat

  • 用户在rule.xml中配置枚举值文件路径和分片索引是字符串还是数字,DBLE在启动时会将枚举值文件加载到内存中,形成一个映射表
  • 在DBLE的运行过程中,用户访问使用这个算法的表时,WHERE子句中的分片索引值会被提取出来,直接查映射表得到分片编号

与MyCat的类似分片算法对比

中间件

DBLE

MyCat

分片算法种类

enum 分区算法

分片枚举

  • 两种中间件的枚举分片算法使用上无差别。

开发注意点

【分片索引】1. 整型数字(可以为负数)或字符串((不含=和换行符)
【分片索引】2. 枚举值之间不能重复

Male=0
Male=1

或者

123=1
123=2

会导致分片策略加载出错
【分片索引】3. 不同枚举值可以映射到同一个分片上

Mr=0
Mrs=1
Miss=1
Ms=1
123=0

运维注意点

  • 【扩容】1. 增加枚举值无需数据再平衡
  • 【扩容】2. 增加一个枚举值的分片数量数时,需要对局部数据进行迁移
  • 【缩容】1. 减少枚举值需要数据再平衡
  • 【缩容】2. 减少一个枚举值的分片数量数时,需要对局部数据进行迁移

配置注意点

  • 【配置项】1. 在 rule.xml 中,可配置项为 ​​<property name="defaultNode">​​​ 、​​<property name="mapFile">​​​ 和 ​​<property name="type">​
  • 【配置项】2. 在 rule.xml 中配置 ​​<property name="defaultNode">​​ 标签,非必须配置项,不配置该项的话,用户的分片索引值没落在 mapFile 定义的范围时,DBLE 会报错;若需要配置,必须为非负整数,用户的分片索引值没落在 mapFile 定义的范围时,DBLE 会路由至这个值的 MySQL 分片
  • 【配置项】3. 在 rule.xml 中配置 ​​<property name="mapFile">​​ 标签,范围映射文件的路径:若在映射文件在 DBLE_HOME/conf 或其中,则可以使用相对路径的形式配置,例如,映射文件是 DBLE_HOME/conf/map/table_map.txt 时,配置值就可以简写为 map/table_map.txt;映射文件在 DBLE_HOME/conf 目录以外时,需要使用绝对路径,但这种做法需要考虑用户权限等问题,因此不建议把映射文件放在 DBLE_HOME/conf 外。
  • 【配置项】4. 编辑 mapFile 所配置的文件
    记录格式为:<枚举值>=<分片编号>
    枚举值可以是整型数字,或任意字符(除了=和换行符),分片编号必须是非负整型数字,记录之间以换行分隔,一行仅能有一条记录,枚举值不能够是“DEFAULT_NODE”这个字符串,允许以“//”和“#”在行首来注释该行
  • 【配置项】5. 在 rule.xml 中配置 ​​<property name="type">​​ 标签;type 必须为整型;取值为 0 时,mapFile 的<枚举值>必须为整型;取值为非 0 时,mapFile 的<枚举值>可以是任意字符(除了=和换行符)


举报

相关推荐

0 条评论