日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Mycat探索之旅(3)----Mycat的全局序列号

發(fā)布時(shí)間:2025/4/16 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mycat探索之旅(3)----Mycat的全局序列号 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、本地文件方式

原理:此方式MyCAT將sequence配置到文件中,當(dāng)使用到sequence中的配置后,MyCAT會(huì)更下classpath中的sequence_conf.properties文件中

sequence當(dāng)前的值。

配置方式:

  • sequence_conf.properties中配置:

在sequence_conf.properties文件中做如下配置:

#default global sequence

GLOBAL.HISIDS=

#最小值

GLOBAL.MINID=10001

#最大值

GLOBAL.MAXID=20000

#當(dāng)前值

GLOBAL.CURID=10000

  • server.xml中配置:
<!--sequnceHandlerType=0表示:使用本地文件的方式配置mycat的全局序列號(hào),對(duì)應(yīng)sequence_conf.properties文件sequnceHandlerType=1表示:使用數(shù)據(jù)庫(kù)表的方式配置mycat的全局序列號(hào)--><property name="sequnceHandlerType">0</property>
  • 配置完成后重啟mycat服務(wù)

測(cè)試:

二、使用數(shù)據(jù)庫(kù)方式

原理:在數(shù)據(jù)庫(kù)中建立一張表,存放sequence名稱(name),sequence當(dāng)前值(current_value),步長(zhǎng)(increment int類型每次讀

取多少個(gè)sequence,假設(shè)為K)等信息;

Sequence獲取步驟:

1).當(dāng)初次使用該sequence時(shí),根據(jù)傳入的sequence名稱,從數(shù)據(jù)庫(kù)這張表中讀取current_value,和increment到MyCat中,

并將數(shù)據(jù)庫(kù)中的current_value設(shè)置為原current_value值+increment值;

2).MyCat將讀取到current_value+increment作為本次要使用的sequence值,下次使用時(shí),自動(dòng)加1,當(dāng)使用increment次

后,執(zhí)行步驟1)相同的操作.

MyCat負(fù)責(zé)維護(hù)這張表,用到哪些sequence,只需要在這張表中插入一條記錄即可。若某次讀取的sequence沒有用完,系統(tǒng)就

停掉了,則這次讀取的sequence剩余值不會(huì)再使用。

配置方式:

server.xml配置:

<!--sequnceHandlerType=0表示:使用本地文件的方式配置mycat的全局序列號(hào),對(duì)應(yīng)sequence_conf.properties文件sequnceHandlerType=1表示:使用數(shù)據(jù)庫(kù)表的方式配置mycat的全局序列號(hào)--><property name="sequnceHandlerType">1</property>

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

1) 創(chuàng)建MYCAT_SEQUENCE表

– 創(chuàng)建存放sequence的表

DROP TABLE IF EXISTS MYCAT_SEQUENCE;

– name sequence名稱

– current_value 當(dāng)前value

– increment 增長(zhǎng)步長(zhǎng)! 可理解為mycat在數(shù)據(jù)庫(kù)中一次讀取多少個(gè)sequence. 當(dāng)這些用完后, 下次再?gòu)臄?shù)據(jù)庫(kù)中讀取.

/*創(chuàng)建存放sequence的表*/CREATE TABLE MYCAT_SEQUENCE (NAME VARCHAR (50),current_value INT NOT NULL,increment INT NOT NULL DEFAULT 100,PRIMARY KEY (NAME) ) ENGINE = INNODB;

?

– 插入一條sequence

INSERT INTO MYCAT_SEQUENCE (NAME,current_value,increment ) VALUES('GLOBAL', 100000, 100);

2) 創(chuàng)建相關(guān)function

– 獲取當(dāng)前sequence的值 (返回當(dāng)前值,增量)

-- ---------------------------- -- 函數(shù)結(jié)構(gòu): `mycat_seq_currval` -- 獲取當(dāng)前sequence的值(返回當(dāng)前值,增量) -- ----------------------------DROP FUNCTION IF EXISTS mycat_seq_currval;CREATE FUNCTION `mycat_seq_currval`(seq_name VARCHAR(50)) RETURNS varchar(64) CHARSET latin1DETERMINISTIC BEGINDECLARE retval VARCHAR(64);SET retval="-1,0";SELECT concat(CAST(current_value AS CHAR),",",CAST(increment AS CHAR) ) INTO retval FROM MYCAT_SEQUENCE WHERE name = seq_name;RETURN retval ; END

?

– 設(shè)置sequence值

-- ---------------------------- -- 函數(shù)結(jié)構(gòu): `mycat_seq_setval` -- 設(shè)置sequence的值 -- ----------------------------DROP FUNCTION IF EXISTS mycat_seq_setval;CREATE FUNCTION `mycat_seq_setval`(seq_name VARCHAR(50), value INTEGER) RETURNS varchar(64) CHARSET latin1DETERMINISTIC BEGINDECLARE retval VARCHAR(64);DECLARE inc INT;SET inc = 0;SELECT increment INTO inc FROM MYCAT_SEQUENCE WHERE name = seq_name;UPDATE MYCAT_SEQUENCE SET current_value = value WHERE name = seq_name;SELECT concat(CAST(value as CHAR),",",CAST(inc as CHAR)) INTO retval;RETURN retval; END

?

– 獲取下一個(gè)sequence值

-- ---------------------------- -- 函數(shù)結(jié)構(gòu): `mycat_seq_nextval` -- 獲取下一個(gè)sequence的值 -- ---------------------------- DROP FUNCTION IF EXISTS mycat_seq_nextval; CREATE FUNCTION `mycat_seq_nextval`(seq_name VARCHAR(50)) RETURNS varchar(64) CHARSET latin1DETERMINISTIC BEGINDECLARE retval VARCHAR(64);DECLARE val BIGINT;DECLARE inc INT;DECLARE seq_lock INT;set val = -1;set inc = 0;SET seq_lock = -1;SELECT GET_LOCK(seq_name, 15) into seq_lock;if seq_lock = 1 thenSELECT current_value + increment, increment INTO val, inc FROM MYCAT_SEQUENCE WHERE name = seq_name for update;if val != -1 thenUPDATE MYCAT_SEQUENCE SET current_value = val WHERE name = seq_name;end if;SELECT RELEASE_LOCK(seq_name) into seq_lock;end if;SELECT concat(CAST((val - inc + 1) as CHAR),",",CAST(inc as CHAR)) INTO retval;RETURN retval; END

?

3) sequence_db_conf.properties相關(guān)配置,指定sequence相關(guān)配置在哪個(gè)節(jié)點(diǎn)上:

這里設(shè)置的是dn1節(jié)點(diǎn),那么上面的函數(shù)及表都是建立在dn1節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)庫(kù)實(shí)例上的

注意:MYCAT_SEQUENCE表和以上的3個(gè)function,需要放在同一個(gè)節(jié)點(diǎn)上。function請(qǐng)直接在具體節(jié)點(diǎn)的數(shù)據(jù)庫(kù)上執(zhí)行

測(cè)試:

insert into travelrecord(id,name)values(next value for MYCATSEQ_GLOBAL,'hexmith');

insert into travelrecord(id,name)values(next value for MYCATSEQ_GLOBAL,'Mycat');

在前面的測(cè)試中,我添加到MYCAT_SEQUENCE表中的數(shù)據(jù)設(shè)置的步長(zhǎng)是100,此處吻合。

轉(zhuǎn)載于:https://www.cnblogs.com/doctorJoe/p/5259011.html

總結(jié)

以上是生活随笔為你收集整理的Mycat探索之旅(3)----Mycat的全局序列号的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。