日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ID生成器 雪花算法

發布時間:2023/12/2 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ID生成器 雪花算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景:在很多業務場景下,我們都需要一個唯一的 ID 來進行一些數據的交互,那么如何生成這個唯一的 ID 呢?

如果在單機的情況下,生成唯一ID,可以利用機器內存的特點,通過內存分配即可。但我們線上的服務部署往往是多機器、多集群的。在這種情況下就要考慮分布式 ID 生成器了。如何確保數據唯一就顯得很重要。

1、數據庫自增ID

最簡單,使用最廣泛的場景:單表設置一個自增 ID,我們很多情況下的數據查詢、獲取都是通過該方式。

但存在較明顯的弊端:

1、受限于DB最大連接數,高并發場景下會占用連接數,增加DB壓力。而且主從延遲的情況下會出現數據獲取不準確的問題。

2、單表數據越來越大, 后期分庫分表會存在壓力,拓展能力差。

2、UUID

UUID是指在一臺機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的。

UUID由以下幾部分組成:

1、當前日期時間。

2、時鐘序列。

3、全局唯一的IEEE機器識別號,如果有網卡從網卡MAC地址獲得,沒有網卡以其他方式獲得。

UUID目前使用普遍的是微軟的GUID,其格式如下:

xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每個 x 是 0-9 或 a-f 范圍內的一個十六

進制的數字。

示例:b6489592-4726-4d68-a52b-63e2bbddfbf3 1~8位采用系統時間,在系統時間上精確到毫秒級保證時間上的惟一性; 9~16位采用底層的IP地址,在服務器集群中的惟一性; 17~24位采用當前對象的HashCode值,在一個內部對象上的惟一性; 25~32位采用調用方法的一個隨機數,在一個對象內的毫秒級的惟一性。復制代碼

標準的UUID格式:

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)

注:關于 java 的 orm 不討論。

缺點:

1、生成的結果串會比較長。

3、雪花算法

SnowFlake算法生成的唯一 id 是一個64bit大小的整數,它的結構如下圖:

41bit?(0,?2^41)?1589206824687?12bit??

組成部分如下:

1、1bit 位不用,因為對于long類型,二進制中最高位是符號位,1代表負,0代表正。

2、41bit 時間位,記錄的為毫秒級別的時間戳。取值范圍為 (0, 2^41) ,舉例:

當前毫秒級別時間戳:1589206824687 bit位表示:10111001000000100000110111011011011101111

3、10bit 機器 id (可劃分為 5bit 的 datacenterId,5bit 的工作 workerId)

4、12bit 的序列號,用來記錄同毫秒內產生的不同 id。

優勢:

1、可以按照時間趨勢遞增

2、中間的機器位可以配合業務靈活的分配到其它位上,也可以借用其它區塊的bit位

3、分布式系統內不會存在相同的兩個id,因為有datacenterId、workerId來保證

缺點:

1、單機器出現時鐘回撥,可能會出現 ID 沖撞。如何解決?可利用拓展位進行回撥記錄。

來源:江湖百曉生

https://juejin.cn/post/6844904153894879239

總結

以上是生活随笔為你收集整理的ID生成器 雪花算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。