分布式唯一id生成器的想法

2022-05-22 15:51:12 字數 1240 閱讀 4434

前端時間遇到乙個問題,怎麼快速生成唯一的id,後來採用了hashid的方法。最近在網上讀到了美團關於分布式唯一id生成器的解決方案,

其中提到了三種生成法:(建議看一下這篇文章,寫得很詳細,分析到位)

文中提到了如下幾個問題

美團針對上面的場景,作了兩種方案,leaf-segment(資料庫方式)和leaf-snowflake(snowflake方式)。

由於之前用過hashid生成唯一id,突然覺得,我們可以保證上面的問題3和4,同時解決。

即用hashid來加密連續的id,發往客戶端前先用hashid加密id,這樣競爭對手就不能簡單的相減訂單號了。

不知道是否可用,還望大家指正。

採用xid,xid和其它方案的對比如下:

xid的由四部分組成

上**測試一下

}生成20個id,如下:

b8t55lhafc333a3mibh0

b8t55lhafc333a3mibhg

b8t55lhafc333a3mibi0

b8t55lhafc333a3mibig

b8t55lhafc333a3mibj0

b8t55lhafc333a3mibjg

b8t55lhafc333a3mibk0

b8t55lhafc333a3mibkg

b8t55lhafc333a3mibl0

b8t55lhafc333a3miblg

b8t55lhafc333a3mibm0

b8t55lhafc333a3mibmg

b8t55lhafc333a3mibn0

b8t55lhafc333a3mibng

b8t55lhafc333a3mibo0

b8t55lhafc333a3mibog

b8t55lhafc333a3mibp0

b8t55lhafc333a3mibpg

b8t55lhafc333a3mibq0

可以看到這些id也是單調遞增的,那麼可以搭建乙個xid的服務,呼叫一次返回乙個id。

另外還可以生成乙個id池,比如預先儲存一百萬個id,然後消費者批量消費,當庫存

剩下一半時,立馬繼續生產id放入id池。

分布式唯一ID生成器

在應用程式中,經常需要全域性唯一的id作為資料庫主鍵。如何生成全域性唯一id?首先,需要確定全域性唯一id是整型還是字串?如果是字串,那麼現有的uuid就完全滿足需求,不需要額外的工作。缺點是字串作為id占用空間大,索引效率比整型低。如果採用整型作為id,那麼首先排除掉32位int型別,因為範圍太小...

應用id 分布式唯一ID生成器

在應用程式中,經常需要全域性唯一的id作為資料庫主鍵。如何生成全域性唯一id?首先,需要確定全域性唯一id是整型還是字串?如果是字串,那麼現有的uuid就完全滿足需求,不需要額外的工作。缺點是字串作為id占用空間大,索引效率比整型低。如果採用整型作為id,那麼首先排除掉32位int型別,因為範圍太小...

分布式ID生成器

一 需求緣起 幾乎所有的業務系統,都有生成乙個唯一記錄標識的需求,例如 這個記錄標識往往就是資料庫中的主鍵,資料庫上會建立聚集索引 cluster index 即在物理儲存上以這個字段排序。這個記錄標識上的查詢,往往又有分頁或者排序的業務需求,例如 所以往往要有乙個time欄位,並且在time欄位上...