一、雪花算法
雪花算法由【符号位】 + 【時間戳】 + 【機器碼】 + 【序列号】
符号位隻占1位,表示正數。
時間戳占41位,毫秒級别。2^41次方,這個數字也是一個龐大的數字,保證不會重複。
機器碼占10位,由硬體決定。
序列号占12位,标志生成的第多少個ID,計數用。
雪花算法的優點:
(1)雪花算法生成的ID可用使用Long類型來接收,是純數字類型,可以做MySQL資料庫表的主鍵。
(2)雪花算法毫秒在高位,生成的ID是遞增的。
(3)不依賴第三方系統,生成ID的效率很高。
雪花算法的缺點:
(1)如果伺服器時間回撥,調回到以前,理論上ID就有可能重複
(2)JS可能達不到雪花算法産生的ID的長度,需要傳輸的時候把Long類型的ID轉成字元串。
補充:
著名的ORM架構MyBatisPlus,它的預設ID生成政策也是【雪花算法】
作者的雪花算法開源項目位址:https://gitee.com/yu120/sequence
二、UUID
UUID使用"-"符号來分割,它的結構是 8-4-4-4-12,加上4個"-",長度共36個字元。
c1ae1d86-e859-496c-a207-6785eee5312b"
UUID的優點:
(1)生成ID的性能很好。理由:很明顯,直接使用了JDK自帶的工具類,友善快捷。
(2)不依賴第三方系統,不需要網絡傳輸。
UUID的缺點:
(1)32位的長度就比其它ID長,占用MySQL磁盤。
(2)UUID生成的主鍵不适用于數字類型的主鍵。
(3)UUID不安全,可能會洩露MAC位址