Mycat实现全局序列的三种方式

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值