一.文件方式
1.server.xml
<property name="sequenceHandlerType">0</property>
2.sequence_conf.properties
GLOBAL.HISIDS=
GLOBAL.MINID=10001
GLOBAL.MAXID=9999999999
GLOBAL.CURID=10000
ORDER.HISIDS=
ORDER.MINID=1001
ORDER.MAXID=9999999999
ORDER.CURID=1000
前缀GLOBAL
,ORDER
表示不同分组。可以使用talbe name来表示不同表的ID生成
后缀HISIDS
表示使用过的历史分段(一般无特殊需要可不配置),MINID
表示最小ID值,MAXID
表示最大ID值,CURID
表示当前ID值
3.使用
insert into table(id,name) values('next value for MYCATSEQ_GLOBAL','test');
next value for MYCATSEQ_GLOBAL
中的GLOBAL
表示sequence_conf.properties中配置的分组前缀
4.优缺点
缺点:当MyCAT重新发布后,配置文件中的sequence会恢复到初始值。
优点:本地加载,读取速度较快
二.数据库方式
1.server.xml
<property name="sequenceHandlerType">1</property>
2.sequence_db_conf.properties
指定sequence相关配置在哪个节点上
#sequence stored in datanode
GLOBAL=dn1
COMPANY=dn1
CUSTOMER=dn1
ORDERS=dn1
3.执行dbseq.sql
在sequence_db_conf.properties
文件中指定的数据库节点上执行dbseq.sql脚本。
其中有表MYCAT_SEQUENCE
,用于存储sequence值。字段如下
name
:sequence分组,可以用table名。对应sequence_db_conf.properties
的键。
current_value
:当前sequence值。
increment
:每次生成的sequence数量,用于mycat本地缓存,减少db交互。
4.使用
INSERT INTO MYCAT_SEQUENCE(name,current_value,increment) VALUES (‘ORDERS‘, 100000, 100);
insert into test_mycat_table(id,content) values ('next value for MYCATSEQ_ORDERS','test333');
三.时间戳方式
1.server.xml
<property name="sequenceHandlerType">2</property>
2.sequence_time_conf.properties
类似雪花算法,配置机器ID和数据中心ID,不同的mycat实例,配置须不一样
#sequence depend on TIME
WORKID=01
DATAACENTERID=01
3.使用
insert into test_mycat_table(id,content) values ('next value for MYCATSEQ_XX','test555');
四.zookeeper
待定