分庫分表的id生成方式
第一種,維護一個含有自增主鍵的單表。
創建一個全局唯一的含有自增主鍵的單表。
在操作分庫分表之前,先將數據插入到單表裏,生成主鍵,再操作分庫分表。
優點:簡單
缺點:會有性能瓶頸,比如不支持高併發操作。
第二種 uuid
UUID.randomUUID().toString();
優點:簡單易用,一行代碼可以保證這個數據的唯一性。
缺點:太長了,並不適合做主鍵。
第三種 業務字段 + 系統當前時間
如生成訂單號:時間戳 + 用戶id + 業務id
第四種 snowflake
64位id
id 表示:
0 10111001010011001000101001111111011011110 00001 00001 000000000001
2020-06-09 20:36:29 第一個機房的第一臺機器在這一毫秒內的第一個請求。
位 | 1bit | 41bit | 5bit | 5bit | 12bit |
---|---|---|---|---|---|
含義 | 1爲負數,0爲正數 | 時間戳(單位毫秒)對應的二進制 | 機房id | 機器id | 當前毫秒內該機房該機器產生的請求次數 |
舉例 | 0 | 1591706189534 對應的二進制:10111001010011001000101001111111011011110 | 00001 | 00001 | 000000000001 |