記錄分佈式唯一id生成普遍的方法 基於數據庫的號段模式

這種模式就是需要把這個號段的都緩存起來使用,這裏需要注意如果緩存失效後需要怎麼樣處理,一般都是再次申請。

號段模式是當下分佈式ID生成器的主流實現方式之一,號段模式可以理解爲從數據庫批量的獲取自增ID,每次從數據庫取出一個號段範圍,例如 (1,1000] 代表1000個ID,具體的業務服務將本號段,生成1~1000的自增ID並加載到內存。表結構如下:

CREATE TABLE id_generator (
  id int(10) NOT NULL,
  max_id bigint(20) NOT NULL COMMENT '當前最大id',
  step int(20) NOT NULL COMMENT '號段的布長',
  biz_type    int(20) NOT NULL COMMENT '業務類型',
  version int(20) NOT NULL COMMENT '版本號',
  PRIMARY KEY (`id`)
) 

biz_type :代表不同業務類型

max_id :當前最大的可用id

step :代表號段的長度

version :是一個樂觀鎖,每次都更新version,保證併發時數據的正確性

idbiz_typemax_idstepversion1101100020000

等這批號段ID用完,再次向數據庫申請新號段,對max_id字段做一次update操作,update max_id= max_id + step,update成功則說明新號段獲取成功,新的號段範圍是(max_id ,max_id +step]。

update id_generator set max_id = #{max_id+step}, version = version + 1 where version = # {version} and biz_type = XXX

 

由於多業務端可能同時操作,所以採用版本號version樂觀鎖方式更新,這種分佈式ID生成方式不強依賴於數據庫,不會頻繁的訪問數據庫,對數據庫的壓力小很多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章