mycat 全域性序列

2022-04-16 07:16:07 字數 2000 閱讀 1591

解決主鍵衝突問題:例如id自增的order表,如果分布式情況下不處理的話,當每個表的第一條資料id都是1。

怎麼確保id唯一呢?

解決辦法:

1、本地檔案(不推薦)

2、資料庫方式(推薦)

3、時間戳(位數較多,佔空間多,並且不安全)

資料庫方式詳解:

原理:利用資料庫的乙個表來進行計數累加。但是並不是每次生成序列都需要讀寫該資料庫,這樣效率不好。mycat會預載入一部分號段到mycat記憶體中,這樣下次使用先使用記憶體中的號段,直到使用完畢,才去資料獲取下一批號段。如果mycat獲取的號段沒用完,中途掛掉了,待到mycat在上線時,會重新從下一號段開始獲取,例如第一次獲取1-100,然而沒用完掛了,下次mycat上線就從200開始獲取。

配置步驟:

找一資料庫維護mycat_sequence ,我是在order_win資料庫中維護。

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;

建立相關函式,mycat官方提供。

delimiter $$

create function mycat_seq_currval(seq_name varchar(50)) returns varchar(64)

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;

delimiter $$

create function mycat_seq_setval(seq_name varchar(50),value integer) returns varchar(64)

deterministic

begin

update mycat_sequence

set current_value = value

where name = seq_name;

return mycat_seq_currval(seq_name);

end $$

delimiter ;

delimiter $$

create function mycat_seq_nextval(seq_name varchar(50)) returns varchar(64)

deterministic

begin

update mycat_sequence

set current_value = current_value + increment where name = seq_name;

return mycat_seq_currval(seq_name);

end $$

delimiter;

增加要使用的序列

insert into mycat_sequence(name,current_value,increment) values ('orders', 400000,100);

執行完後,確認下已經建立。並修改mycat的配置。

vim /usr/local/mycat/conf/sequence_db_conf.properties  配置orders這個序列在哪個節點上,參考schema.xml

vim /usr/local/mycat/conf/server.xml

0檔案方式1資料庫方式2時間戳方式

然後重啟mycat,測試。

Mycat 全域性序列

在實現分庫分表的情況下,資料庫自增主鍵已無法保證主鍵的全域性唯一。所以,mact提供了全區sequence,並且提供了包含本地配置和資料庫配置等多種實現方式。1.本地檔案 原理 此方式mycat將sequence配置到檔案中,當使用到sequence中的配置後,mycat會更下classpath中的...

Mycat全域性序列號

全域性序列號是mycat提供的乙個新功能,為了實現分庫分表情況下,表的主鍵是全域性唯一,而預設的mysql的自增長主鍵無法滿足這個要求。全域性序列號的語法符合標準sql規範。其格式為 next value for mycatseq global 其中mycatseq global是序列號的名字,my...

Mycat快速入門 三 全域性序列號

在實現分庫分表的情況下,資料庫自增主鍵已無法保證自增主鍵的全域性唯一。為此,mycat 提供了全域性 sequence,並且提供了包含本地配置和資料庫配置等多種實現方式。序列號處理器型別,感覺 sequnce 序列號是不是少了個e字母,應該是 sequence 關於全域性序列號的測試是在mycat分...