Mycat全局序列
在实现分库分表的情况下,数据库自增主键已无法保证自增主键的全局唯一。为此,Mycat 提供了全局sequence(序列号),并且提供了包含本地配置和数据库配置等多种实现方式,常见的有以下三种:本地文件方式、数据库方式和本地时间戳方式。
注意:Mycat全局序列是在Mycat水平分表基础上搭建起来的,关于Mycat的水平分表,可戳:Mycat实现水平分表及读写分离
本地文件方式
原理:此方式Mycat将sequence(序列号)配置到sequence_conf.properties文件中,当使用到配置的sequence后,Mycat会自动更新sequence_conf.properties文件中sequence的CURID值。
配置Mycat安装目录/conf/sequence_conf.properties
#default global sequence
#使用过的历史分段(一般无特殊需要可不配置)
GLOBAL.HISIDS=
#初始序列号
GLOBAL.MINID=1200
#结束序列号
GLOBAL.MAXID=1900
#当前序列号(已使用)
GLOBAL.CURID=1199
配置Mycat安装目录/conf/server.xml,sequnceHandlerType改为0,表示使用本地文件方式启用全局序列号,默认这项是被注释的,取消注释修改数值即可。
<property name="sequnceHandlerType">0</property>
启动Mycat,插入数据
INSERT INTO `t_student` (id,s_name) VALUES ("next value for MYCATSEQ_GLOBAL", 'atuo');
插一个bug:如果next value for MYCATSEQ_GLOBAL不加引号,则会报错:Lost connection to MySQL server during query,但是有些文章不加引号,是不会报错的,这里有点疑惑,还望有人解惑。
select 一下数据,看配置的全局序列号是否插入到数据当中
select * from t_student;
插入成功

此时我们可以打开Mycat安装目录/conf/sequence_conf.properties文件,看下GLOBAL.CURID这一项,已被自动更新为1200。

数据库方式
原理:在数据库中建立一张表(表名MYCAT_SEQUENCE),存放 sequence 名称(name),sequence 当前值(current_value),步长(increment,每次读取多少个 sequence)等信息;
Sequence 获取步骤:
-
当初次使用该 sequence 时,根据传入的 sequence 名称,从数据库这张表中读取 curren

最低0.47元/天 解锁文章
280

被折叠的 条评论
为什么被折叠?



