1、全局序列化
1) Mycat支持的全局序列化主要包括 本地文件方式,数据库方式,本地时间戳方式。实际生产环境,建议还是使用数据库方式。
2)数据库方式配置
1、
<system><property name="sequnceHandlerType">1</property></system>
其中0代表本地文件方式,1代表数据库方式,2代表时间戳方式。 2、创建 MYCAT_SEQUENCE表
CREATE TABLE `MYCAT_SEQUENCE` (
`name` varchar(50) NOT NULL,
`current_value` int(11) NOT NULL,
`increment` int(11) NOT NULL DEFAULT '100',
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后插入一条记录
insert into MYCAT_SEQUENCE ('name','current_value','increment') values ('GLOBAL',10000,100);
insert into MYCAT_SEQUENCE ('name','current_value','increment') values ('ORDER',10000,100);
不是在MYCAT_SEQUENCE增加了一条记录,,Mycat就会认这个序列化,而是必须在sequence_db_conf.properties
文件中,做好配置,
然后可以在语句中可以这样写
next value for MYCAT_SEQGLOBAL
next value for MYCAT_SEQORDER
创建三个函数:
CREATE FUNCTION mycat_seq_currval(seq_name VARCHAR(50)) RETURNS varchar(64)
CHARSET utf8
DETERMINISTIC
BEGIN
DECLARE
retval VARCHAR (64);
SET retval = '-999999999,null';
SELECT
concat( CAST(current_value AS CHAR),',',CAST(increment AS CHAR) ) INTO retval
FROM MYCAT_SEQUENCE
WHERE NAME = seq_name;
RETURN retval;
END
CREATE FUNCTION mycat_seq_nextval(seq_name VARCHAR(50))
RETURNS varchar(64) CHARSET utf8
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE SET current_value = current_value + increment WHERE name = seq_name;
RETURN mycat_seq_currval(seq_name);
END
CREATE FUNCTION mycat_seq_setval(p_seq_name VARCHAR (50),p_value INTEGER)
RETURNS varchar(64) CHARSET utf8
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE SET current_value = p_value WHERE NAME = p_seq_name;
RETURN mycat_seq_currval(seq_name);
END
3、在需要分片的表上,在SQL语句时,需要指定,类似于
insert into es_order( id,order_no ,其他字段) values ( next value for MYCATSEQ_GLOBAL,'20160828161720001',其他字段 )
转载于:https://www.cnblogs.com/dingwmz/p/5816654.html
相关资源:各显卡算力对照表!