MySQL中的enum类型有啥优点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL中的enum类型有啥优点相关的知识,希望对你有一定的参考价值。
例如下面两个字段:name varchar(50) ,
sex enum(\'male\' , \'female\' , \'both\' , \'unknow\')
name 字段可以插入任意字符串。
sex 字段只允许插入 male , female , both , unknow 中的其中之一,不在范围内的值会报错。
enum 相比较 varchar 就更加规范些,你在程序中限定也一样可以做到。 参考技术A
根据用户定义的枚举值与分片节点映射文件,直接定位目标分片。
用户在rule.xml中配置枚举值文件路径和分片索引是字符串还是数字,DBLE在启动时会将枚举值文件加载到内存中,形成一个映射表
在DBLE的运行过程中,用户访问使用这个算法的表时,WHERE子句中的分片索引值会被提取出来,直接查映射表得到分片编号
与MyCat的类似分片算法对比
中间件
DBLE
MyCat
分片算法种类 enum 分区算法 分片枚举
两种中间件的枚举分片算法使用上无差别。
开发注意点
【分片索引】1. 整型数字(可以为负数)或字符串((不含=和换行符)
【分片索引】2. 枚举值之间不能重复
Male=0Male=1或者
123=1123=2会导致分片策略加载出错
【分片索引】3. 不同枚举值可以映射到同一个分片上
Mr=0Mrs=1Miss=1Ms=1123=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 的<枚举值>可以是任意字符(除了=和换行符)
C语言中的枚举类型有啥用么?
枚举类型就相当于助记符,帮助程序员记忆的。比如现在要画一张地图,用到红黄蓝绿四种颜色。为了存储方便,我们规定0=红,1=黄,2=蓝,3=绿。但是当编程到某一阶段时,程序员可能忘记了哪个数字具体对应哪种颜色,或者忘记了到底有多少个数字,这时他就要去查表,这样会耽误时间。此时就可以定义一个枚举类型enum
colorRed,Yellow,Blue,Green,这样系统就会自动将0、1、2、3和这个枚举类型中的每个元素一一对应起来,程序员只需要记住"Red"、"Green"等单词即可,而且不会出现“4”之类的定义之外的数字。
但枚举类型使用起来也有很多限制,它是一种单独的数据类型,因此不能简单像数组那样操作,而且经常要用到类型转换,操作起来反而不方便。实际编程中很少使用。 参考技术A 枚举类型的作用要相对小一些,它其实就是个int类型,但对程序的可读性贡献很大。
至于“结构体有什么用”,这绝对是个新手问题——因为结构体简直无所不用!简单的说,函数体现算法,而结构体则体现数据结构——算法、数据结构恰是程序设计的核心。无论你想用链表、队列、栈、树等数据结构,还是为了方便而把多个数据成员结合在一起(比如,你要存储考生信息,就可以设计一个结构,里面包含姓名、考号、分数等数据成员),都要用到结构体。建议楼主去看看别人写的程序(比如linux内核,tcp/ip实现),你会发现里面到处都是结构。
以上是关于MySQL中的enum类型有啥优点的主要内容,如果未能解决你的问题,请参考以下文章