MyCAT支持多种分片规则,下面测试的这种是分片枚举。适用场景,列值的个数是固定的,譬如省份,月份等。
在这里,需定义三个值,规则均是在rule.xml中定义。
1. tableRule
2. function
3. mapFile
首先,定义tableRule,
<tableRule name="sharding-by-intfile-test"> <rule> <columns>province</columns> <algorithm>hash-int-test</algorithm> </rule> </tableRule>
其中,sharding-by-intfile-test是规则名,会在schema.xml中用到。
columns指的是对省份进行分片。
algorithm是算法名,该算法必须在function中定义。
其次,定义function,
<function name="hash-int-test" class="org.opencloudb.route.function.PartitionByFileMap"> <property name="mapFile">partition-hash-int-test.txt</property> <property name="type">1</property> <property name="defaultNode">0</property> </function>
其中,mapFile指的是配置文件名
type默认值为0,0表示Integer,非零表示String。因为我接下来的测试是基于省份分片,所以需type指定为1。
defaultNode 默认节点:小于0表示不设置默认节点,大于等于0表示设置默认节点
默认节点的作用:枚举分片时,如果碰到不识别的枚举值,就让它路由到默认节点。如果不配置默认节点(defaultNode值小于0表示不配置默认节点),碰到不识别的枚举值就会报错,like this:can’t find datanode for sharding column:column_name val:ffffffff