本地文件方式
● 在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等技術