mycat自增長(zhǎng)主鍵配置

例子接上文:http://www.itdecent.cn/p/adba8875d1c9

1.png

2.png

如上,mycat已經(jīng)配置好了。

在實(shí)現(xiàn)分庫(kù)分表的情況下,數(shù)據(jù)庫(kù)自增主鍵已無(wú)法保證自增主鍵的全局唯一。為此,MyCat 提供了全局
sequence,并且提供了包含本地配置和數(shù)據(jù)庫(kù)配置等多種實(shí)現(xiàn)方式。

數(shù)據(jù)庫(kù)配置

在db1的真實(shí)數(shù)據(jù)庫(kù)中,創(chuàng)建一個(gè)表:

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 100,
PRIMARY KEY (NAME)
) ENGINE = INNODB ;


INSERT INTO MYCAT_SEQUENCE(NAME,current_value,increment) VALUES ('GLOBAL', 100000, 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_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 ;


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 ;

測(cè)試一下:


3.png
4.png

測(cè)試方法是否添加成功,如圖,測(cè)試成功。
設(shè)定CUSTOMER表的增長(zhǎng)方式
CUSTOMER要大寫

insert into MYCAT_SEQUENCE (name,current_value,increment) values ('CUSTOMER',0,1);
  • 配置schema.xml


    5.png

如圖,
customer表:主鍵是ID,autoIncrement="true"表示這個(gè)表的主鍵是自增長(zhǎng)的,是邏輯表的主鍵自增長(zhǎng),dataNode是分片節(jié)點(diǎn),rule是分片規(guī)則。

mycat_sequence表:主鍵是name,dataNode是在其中一個(gè)分片節(jié)點(diǎn)下。

  • 配置rule.xml


    6.png
  • 配置server.xml

7.png

如圖,sequncehandlerType設(shè)為1;
0 表示是表示使用本地文件方式
1 表示的是根據(jù)數(shù)據(jù)庫(kù)來(lái)生成,就是我們自己配置的自增長(zhǎng)
2 表示時(shí)間戳的方式

  • 配置自增長(zhǎng)主鍵
    在下圖的位置中的sequence_db_conf.properties文件中添加CUSTOMER=dn1,指定在哪個(gè)分片。


    5.png
  • 測(cè)試


    8.png
9.png
10.png

可以看出,插入的數(shù)據(jù)均勻分配到不同的分片,并且保證了主鍵id的唯一。


11.png

再看mycat_sequence表,因?yàn)閯倓偛迦肓?條數(shù)據(jù),所以現(xiàn)在的current_value字段的值為6。

配置完,記得重啟mycat

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容