萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql 分布式數據庫ID generator方案

mysql 分布式數據庫ID generator方案

下面我們來看一個mysql 分布式數據庫ID generator方案了,如果各位對於mysql 分布式數據庫ID generator不知道如何處理 我們可以看看這篇文章。

當你使用了分布式數據庫系統後,就會面臨生成記錄唯一標識問題,傳統的單表當然由自帶的auto-increment primary key解決了。但是還是不建議這麼做,因為在未來面臨拆庫還會有id重復問題。
很多人首先會想到MongoDB ObjectId和UUID, 但是這種string類型會給程序帶來復雜度,不僅存儲空間大,而且不能很好的支持sort。我目前項目的unique identifier至少要滿足如下要求:
唯一性
可排序

順序遞增(B-Tree索引存儲高效需要)

高效,避免復雜操作

第一種方案:利用數據庫的自增機制
使用專門的數據庫生成ID:

CREATE TABLE `ticks` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `stub` char(1) NOT NULL DEFAULT 'a',
  PRIMARY KEY (`id`),
  UNIQUE KEY `stub` (`stub`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
#使用如下語句獲取唯一id
REPLACE INTO tickets (stub) VALUES ('a');
SELECT LAST_INSERT_ID();

當然,為了避免單點,可部署多台,如兩台,就將自增步長設為2(auto-increment-increment = 2),同時設置auto-increment-offset分別為1,2,這樣,這樣第一台數據庫服務器的自增id為 1 3 5 7 9 第二台為2 4 6 8 10。這裡注意sequence表是MyISAM引擎,會讀寫串行。
第二種方案:利用內存自增
上面的寫庫方案在並發量大的時候會有性能問題和延遲,所以在內存中自增,會加快生成速度。

copyright © 萬盛學電腦網 all rights reserved