分片枚举
通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的
conf/schema.xml
image.png准备数据
CREATE TABLE database1.`sharding-by-intfile` (
`database` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`user_id` int DEFAULT NULL,
`location` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE database2.`sharding-by-intfile` (
`database` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`user_id` int DEFAULT NULL,
`location` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE database3.`sharding-by-intfile` (
`database` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`user_id` int DEFAULT NULL,
`location` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
conf/rule.xml
<tableRule name="sharding-by-intfile">
<rule>
<columns>location</columns> //分片字段
<algorithm>hash-int</algorithm> //分片函数
</rule>
</tableRule>
<function name="hash-int"
class="io.mycat.route.function.PartitionByFileMap">
<property name="mapFile">partition-hash-int.txt</property> //配置文件名称
<property name="type">1</property> // 默认值为 0,0 表示 Integer,非零表示 String
<property name="defaultNode">2</property> //默认分片节点,匹配不到的时候分配到这个节点
</function>
vim conf/partition-hash-int.txt
fuzhou=0
shanghai=1
beijing=2
报错是由于mycat的分片类型,int类型或string字段串类型,设置错误,刚开始配置rule.xml中type为0,但是插入数据为字符串
image.png实验,插入数据,同时进行查询,查看是否正确分片
image.png
网友评论