首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MyCat 全局序列號深度解析:本地文件與數據庫兩種模式配置實戰

     編輯:MySQL 綜合教學

MyCat 全局序列號深度解析:本地文件與數據庫兩種模式配置實戰

MyCat 通過全局序列號保證分片環境下主鍵唯一性,支援本地文件、數據庫表、時間戳等多種生成方式。本文詳細講解最常用的「本地文件」與「數據庫表」兩種模式的配置原理、操作步驟及避坑指南。

模式一:本地文件方式(sequence_handler_type=0)

核心原理:MyCat 啟動時讀取 sequence_conf.properties 文件中的序列號範圍(MINID、MAXID、CURID),運行期間在內存中遞增,定期或關閉時持久化回文件。

配置步驟

  1. 編輯 sequence_conf.properties:
    # 全局序列號配置示例
    GLOBAL.HISIDS=
    GLOBAL.MINID=10001
    GLOBAL.MAXID=20000
    GLOBAL.CURID=10000
  2. 修改 server.xml 啟用文件模式:
    <property name="sequnceHandlerType">0</property>
  3. 重啟 MyCat 服務生效。

優缺點:配置簡單、無外部依賴、性能極高;但單點故障風險大,集群模式下無法共享序列號,重啟可能導致 ID 重複或大幅跳躍。

模式二:數據庫表方式(sequence_handler_type=1)

核心原理:利用後端 MySQL 表 MYCAT_SEQUENCE 存儲當前值與步長,配合三個自定義函數(mycat_seq_currval、mycat_seq_setval、mycat_seq_nextval)實現原子化獲取,天然支援集群高可用。

配置步驟

  1. 在目標數據庫節點建表並初始化:
    CREATE TABLE MYCAT_SEQUENCE (
      NAME VARCHAR(50),
      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);
  2. 創建三個函數(需在同一數據庫實例執行):
    -- 獲取當前值
    CREATE FUNCTION `mycat_seq_currval`(seq_name VARCHAR(50)) RETURNS varchar(64) ...
    -- 設置值
    CREATE FUNCTION `mycat_seq_setval`(seq_name VARCHAR(50), value INTEGER) RETURNS varchar(64) ...
    -- 獲取下一值(含行鎖與 GET_LOCK 保證並發安全)
    CREATE FUNCTION `mycat_seq_nextval`(seq_name VARCHAR(50)) RETURNS varchar(64) ...
  3. 修改 server.xml 切換模式:
    <property name="sequnceHandlerType">1</property>
  4. 重啟 MyCat,驗證插入測試:
    insert into travelrecord(id,name) values(next value for MYCATSEQ_GLOBAL,'test');

關鍵注意事項

  • 表與函數必須部署在同一數據節點,否則 MyCat 路由時找不到函數。
  • increment 即 Step 值,建議設置 100-1000 平衡性能與 ID 緊湊度。
  • 函數中使用 GET_LOCK 實現分布式鎖,避免多 MyCat 實例並發獲取衝突。
  • 生產環境強烈建議採用數據庫模式,配合主從複制保障高可用。

模式選擇決策表

維度本地文件數據庫表
配置複雜度低中
集群支援不支援完美支援
故障恢復靠文件備份靠數據庫備份
性能極高(內存操作)高(一次網絡交互可用多次)
適用場景單節點測試/低並發生產集群/高並發/高可用
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved