基於數據庫的號段模式生成分布式ID


號段模式是當下分布式ID生成器的主流實現方式之一 ,號段模式可以理解成從數據庫批量獲取ID。將ID緩存在本地,提升效率。

比如每次從數據庫獲取ID時,就獲取一個號段,如(1,1000],這個范圍表示1000個ID,業務應用在請求提供ID時,只需要在本地從1開始自增並返回,而不需要每次去請求數據庫,一直到本地自增到1000時,也就是當前號段已經用完了,才去數據庫重新獲取下一號段。

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,保證並發時數據的正確性

id   biz_type   max_id   step   version  
1 101 1000 2000 0

 

等這批號段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生成方式不強依賴於數據庫,不會頻繁的訪問數據庫,對數據庫的壓力小很多

 

 

 

參考地址 

https://www.jianshu.com/p/03d0fdea45f6


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM