在使用MyCat分库分表之后,如果还是使用MySql中的主键自增的话,已经无法保证这个自增主键在MySql集群中的唯一性了,为了实现全局唯一主键,MyCat提供了好几种方式实现全局唯一主键,分别有:
本文将对本地文件方式进行简单的说明,并通过一个示例描述其使用方法。
此方式 MyCat 将 sequence 配置到文件中,当使用到 sequence 中的配置后,MyCat会更新sequence_conf.properties 文件中 sequence 当前的值(currentValue)。
具体步骤如下:
【a】sequence_conf.properties配置:
ORDER.HISIDS=
ORDER.MINID=1001
ORDER.MAXID=2000
ORDER.CURID=1000
ORDERDETAIL.HISIDS=
ORDERDETAIL.MINID=1001
ORDERDETAIL.MAXID=2000
ORDERDETAIL.CURID=1000
【b】server.xml中执行序列生成方式sequnceHandlerType=0为本地文件方式:
0
【c】server.xml配置逻辑库以及MyCat访问的用户信息:
123456
mycat_order
123456
mycat_order
true
【d】schema.xml配置分片节点、节点主机等信息:
select user()
select user()
【e】rule.xml配置分片规则:
order_id
mod-long
2
【f】接着启动MyCat进行测试,使用序列插入主键:
INSERT INTO `t_order`
(`order_id`,
`user_id`,
`pay_mode`,
`amount`)
VALUES ( 1187215745596133376,101,1,111.1);
INSERT INTO `t_order`
(`order_id`,
`user_id`,
`pay_mode`,
`amount`)
VALUES ( 1187215745596133377,102,5,222.2);
INSERT INTO `t_order`
(`order_id`,
`user_id`,
`pay_mode`,
`amount`)
VALUES ( 1187215745596133378,103,7,333.3);
select * from t_order;
其中MYCATSEQ_ORDER对应序列名称ORDER,同理,使用order_detail为 1187215745596133379
【g】测试结果:
可见,此时order_id已经根据本地配置自动增长:
如果需要详细的实现步骤,可以参考前面的一篇文件,https://blog.csdn.net/Weixiaohuai/article/details/99334650,这个入门示例也是使用的本地文件实现全局序列,保证主键全局唯一。
在实际项目中,一般也不会采用本地文件方式生成主键,下面是其优缺点:
以上就是关于MyCat中使用本地文件生成序列的总体步骤,建议小伙伴们都动手实现一次,这样印象就比较深刻。