前端時間遇到乙個問題,怎麼快速生成唯一的id,後來採用了hashid的方法。最近在網上讀到了美團關於分布式唯一id生成器的解決方案,
其中提到了三種生成法:(建議看一下這篇文章,寫得很詳細,分析到位)
文中提到了如下幾個問題
美團針對上面的場景,作了兩種方案,leaf-segment(資料庫方式)和leaf-snowflake(snowflake方式)。由於之前用過hashid生成唯一id,突然覺得,我們可以保證上面的問題3和4,同時解決。
即用hashid來加密連續的id,發往客戶端前先用hashid加密id,這樣競爭對手就不能簡單的相減訂單號了。
不知道是否可用,還望大家指正。
採用xid,xid和其它方案的對比如下:
xid的由四部分組成
上**測試一下
}生成20個id,如下:
b8t55lhafc333a3mibh0b8t55lhafc333a3mibhg
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欄位上...