一般常見的主鍵生成方法有以下幾種,
第一種,UUID(Universally Unique Identifier)通用唯一識別碼,包含32個16進位制數字,以連字號分為五段,形式為8-4-4-4-12的32個字元。
比如516b4fdd-aa28-4ddf-99b6-5f58a60f0219
UUID由以下幾部分的組合
1, 當前日期和時間,UUID的第一個部分與時間有關,如果你在生成一個UUID之後,過幾秒又生成一個UUID,則第一個部分不同,其餘相同。
2, 時鐘序列。
3, 全域性唯一的IEEE機器識別號,如果有網絡卡,從網絡卡MAC地址獲得,沒有網絡卡以其他方式獲得
這種方式的程式碼實現簡單、不佔用網路頻寬,但是無序無規則、查詢慢、可讀性差。
第二種,資料庫自動增長,
自動增長序列 + 時間序列 + 你的業務修飾符號 = 主鍵,
這裡的自動增長序列肯定不會重複,時間序列也不容易猜測帶,所以肯定很安全,但是擴容不太容易,嚴重依賴資料庫機器,容易出現單點故障,效率很低下。
第三種,Twitter-Snowflake 生成的ID。把時間戳,工作機器id,序列號組合在一起。整體上按照時間自增排序,並且整個分散式系統內不會產生ID碰撞(由datacenter和workerId作區分),效率較高。據說:snowflake每秒能夠產生26萬個ID。
這種方法是本地生成、不佔用網路頻寬、有一定的規則,但是對機器的時間依賴比較強.
第四種,Redis 的id生成策略。這主要依賴Redis是單執行緒的,所以也可以用生成全域性唯一的ID。你可以用Redis的原子操作 INCR和INCRBY來實現。
這種方法不依賴資料庫、靈活、可以做到沒有單點故障、效能高於資料庫。但是佔用網路頻寬、增加redis維護量。
一般常見的主鍵生成方法有以下幾種,
第一種,UUID(Universally Unique Identifier)通用唯一識別碼,包含32個16進位制數字,以連字號分為五段,形式為8-4-4-4-12的32個字元。
比如516b4fdd-aa28-4ddf-99b6-5f58a60f0219
UUID由以下幾部分的組合
1, 當前日期和時間,UUID的第一個部分與時間有關,如果你在生成一個UUID之後,過幾秒又生成一個UUID,則第一個部分不同,其餘相同。
2, 時鐘序列。
3, 全域性唯一的IEEE機器識別號,如果有網絡卡,從網絡卡MAC地址獲得,沒有網絡卡以其他方式獲得
這種方式的程式碼實現簡單、不佔用網路頻寬,但是無序無規則、查詢慢、可讀性差。
第二種,資料庫自動增長,
自動增長序列 + 時間序列 + 你的業務修飾符號 = 主鍵,
這裡的自動增長序列肯定不會重複,時間序列也不容易猜測帶,所以肯定很安全,但是擴容不太容易,嚴重依賴資料庫機器,容易出現單點故障,效率很低下。
第三種,Twitter-Snowflake 生成的ID。把時間戳,工作機器id,序列號組合在一起。整體上按照時間自增排序,並且整個分散式系統內不會產生ID碰撞(由datacenter和workerId作區分),效率較高。據說:snowflake每秒能夠產生26萬個ID。
這種方法是本地生成、不佔用網路頻寬、有一定的規則,但是對機器的時間依賴比較強.
第四種,Redis 的id生成策略。這主要依賴Redis是單執行緒的,所以也可以用生成全域性唯一的ID。你可以用Redis的原子操作 INCR和INCRBY來實現。
這種方法不依賴資料庫、靈活、可以做到沒有單點故障、效能高於資料庫。但是佔用網路頻寬、增加redis維護量。