全局唯一ID生成方案
其實,這個全局唯一ID的問題,我并沒有覺得很特別,甚至我覺得,如果生成全局唯一ID的時候,能把用戶ID+時間戳也基本可以滿足大部分業(yè)務的“全局唯一”的需求了。確實,生成全局ID的方法有很多,適應不同的場景、需求以及性能要求,所以即便是同一個系統(tǒng),你也根據不同的業(yè)務場景設計不同的ID生成策略。
UUID
一種本地生成ID的方法,缺點是無法保證趨勢遞增,uuid過長,往往用字符串表示,作為主鍵建立索引查詢效率低
使用數據庫的 auto_increment 來生成
使用現有數據庫生成,但是往往數據庫很容易成為性能瓶頸,另外數據庫要做HA,保證生成ID高可用
SnowFlake 算法
SnowFlake算法生成id的結果是一個64bit大小的整數,它的結構如下圖

SnowFlake可以保證:所有生成的id按時間趨勢遞增,整個分布式系統(tǒng)內不會產生重復id。但是因為機器的原因會發(fā)生時間回撥,我們的雪花算法是強依賴我們的時間的,如果時間發(fā)生回撥,有可能會生成重復的ID。SnowFlake示例代碼如下:


關注公眾號“一米源碼”發(fā)送消息“Snow”獲取示例源碼

浙公網安備 33010602011771號