前文回顾:
《Mycat分布式数据库架构》之原理及架构
《Mycat分布式数据库架构》之搭建详解
《Mycat分布式数据库架构》之配置详解
《Mycat分布式数据库架构》之数据切分和读写分离
《Mycat分布式数据库架构》之故障切换
《Mycat分布式数据库架构》之数据切分实战
在前面的文章中,我将EMPLOYEES表的EMPLOYEE_ID设置为自增ID,创建了一个名为“EMPLOYEES_SEQ”的序列,起始值为100,步长为1,不缓存,不循环。
这就有一个问题,在实现分库分表的情况下,数据库自增主键已经无法保证在集群中是全局唯一的主键,因此,mycat提供了全局的sequence,实现方式主要有本地文件方式、数据库方式和本地时间戳方式。
1、首先在mycat/conf目录下的sequence_conf.properties文件中增加如下配置。
EMPLOYEES.HISIDS=
EMPLOYEES.MINID=101
EMPLOYEES.MAXID=1000000000
EMPLOYEES.CURID=100
其中,EMPLOYEES为表名,HISIDS表示使用过的历史分段(一般无特殊需要则可不配置),MINID表示最小的ID值,MAXID表示最大的ID值,CURID表示当前的ID值。
2、在server.xml中配置如下参数。
<system>
# 0 表示使用本地文件方式。
<property name="sequnceHandlerType">0property>
system>
3、在schema.xml的table标签中将autoIncrement设置为true
<table name="EMPLOYEES" primaryKey="EMPLOYEE_ID" autoIncrement="true" dataNode="datanode01,datanode02" rule="EMPLOYEES"/>
4、重启mycat
./mycat restart
接下来向mycat添加数据,如下,全局自增ID会按照配置的方式进行增加。
INSERT INTO EMPLOYEES(LAST_NAME,EMAIL,PHONE_NUMBER,HIRE_DATE,SALARY,JOB_ID,DEPARTMENT_ID)
VALUES('李华','lihua@126.com','18487254631',sysdate,7200,'coder',12);
INSERT INTO EMPLOYEES(LAST_NAME,EMAIL,PHONE_NUMBER,HIRE_DATE,SALARY,JOB_ID,DEPARTMENT_ID)
VALUES('张三','zhangsan@126.com','18487261631',sysdate,8200,'coder',12);
在sequence_conf.properties配置文件中也可自定义名称,如下
GLOBAL_EMP.HISIDS=
GLOBAL_EMP.MINID=101
GLOBAL_EMP.MAXID=1000000000
GLOBAL_EMP.CURID=100
这里在插入数据时需要使用如下方式
INSERT INTO EMPLOYEES(EMPLOYEE_ID,LAST_NAME,EMAIL,PHONE_NUMBER,HIRE_DATE,SALARY,JOB_ID,DEPARTMENT_ID)
VALUES(next value for MYCATSEQ_GLOBAL_EMP,'李华','lihua@126.com','18487254631',sysdate,7200,'coder',12);
更多技术干货,请持续关注程序员大佬超。
原创不易,转载请注明出处。