天天看點

從頭開始學分庫分表-------全局主鍵避重

一、雪花算法

        雪花算法由【符号位】 + 【時間戳】 + 【機器碼】 + 【序列号】

        符号位隻占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位址