本地文件方式
● 在servler.xml文件中配置sequnceHandlerType=0;
● 在conf/sequence_conf.properties中维护主键信息;
● 如果想要每个表生成的主键连续,可以在sequence_conf.properties配置当前表的生成值,一般将Global替换为自己对应的前缀即可(三个地方)。
取值的时候通过next value for MYCATSEQ_XXXX获取。
sequnceHandlerType=2
这种方式,需要将主键设置为varchar类型,长度一般20;
这里是数据库方式生成主键ID,不是采用数据库的主键自增,而是mycat利用mysql数据库生成一个主键。
1、在数据库中创建一张表,三个函数
DROP TABLE IF EXISTS MYCAT_SEQUENCE;
CREATE TABLE MYCAT_SEQUENCE (name VARCHAR(50) NOT NULL,current_value INT NOT NULL,increment INT NOT NULL DEFAULT 1,
PRIMARY KEY(name)) ENGINE=InnoDB default charset=utf8;
INSERT INTO MYCAT_SEQUENCE(name,current_value,increment) VALUES ("GLOBAL", 0, 100);
DROP FUNCTION IF EXISTS mycat_seq_currval;
DELIMITER //
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 //
DELIMITER ;
DROP FUNCTION IF EXISTS mycat_seq_setval;
DELIMITER //
CREATE FUNCTION mycat_seq_setval(seq_name VARCHAR(50),value INTEGER) RETURNS varchar(64) CHARSET utf8
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET current_value = value
WHERE name = seq_name;
RETURN mycat_seq_currval(seq_name);
END //
DELIMITER ;
DROP FUNCTION IF EXISTS mycat_seq_nextval;
DELIMITER //
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 //
DELIMITER ;
2、server.xml配置
<property name="sequnceHandlerType">1</property>
注:sequnceHandlerType 需要配置为1,表示使用数据库方式生成sequence
3、sequence_db_conf.properties配置
指定sequence相关配置在哪个节点上,例如我们如果在p2p-admin上创建的生成主键的表,那么根据我们在schema.xml文件中的配置,对应的节点应该是dn2,所以在sequence_db_conf.properties中配置的GLOBAL应该就是dn2
GLOBAL=dn2
4、插入时怎么用
insert into tb1(id,name) values(next value for MYCATSEQ_GLOBAL,"test");
总结
本课程偏向于资深开发人员、架构师;
一般中小公司不会采用到该技术,因为中小公司的数据量没有达到一定的级别,在数据量比较大的时候才会采用该技术
可以在简历中体现:本人爱好互联网各类开发技术,乐于技术研究,利用工作之余研究过Mycat分库分表、xxx源码、xxx等技术