一般全局ID作爲數據庫的主鍵使用,主要有3種實現方式。
1,UUID:唯一但是不連續,作爲字符串索引效率低,也不保證隨機。
2,自增序列:絕對遞增,長度可控,作爲索引時效率高。
3,snowflake:按時間趨勢遞增,單獨使用時效率較高。
目前我們項目主要使用第二種方式,部分使用UUID。
項目架構爲dubbo+zk,使用專門流水服務器來生產ID,序號存儲在數據庫的流水錶中。
可以自定義流水的生成規則:步長,起始值,最大值,緩存個數。
流水服務器以接口的方式對外提供服務,並將數據庫的ID緩存起來,減少數據庫的壓力。
請求方可以按自己的需求來獲取ID,比如,一次獲取多少個?
同時在客戶端也可以作二級緩存,以支持更大的併發。
爲了防止臨界值時,請求時間過長,增加預警機制,低於閾值時,提前補充。