分布式系統中,有一些需要使用全域性唯一id的場景,這種時候為了防止id衝突可以使用36位的uuid,但是uuid有一些缺點,首先他相對比較長,另外uuid一般是無序的。
有些時候我們希望能使用一種簡單一些的id,並且希望id能夠按照時間有序生成。
而twitter的snowflake解決了這種需求,最初twitter把儲存系統從mysql遷移到cassandra,因為cassandra沒有順序id生成機制,所以開發了這樣一套全域性唯一id生成服務。
snowflake的結構如下(每部分用-分開):
一共加起來剛好64位,為乙個long型。(轉換成字串後長度最多19)
snowflake生成的id整體上按照時間自增排序,並且整個分布式系統內不會產生id碰撞(由datacenter和workerid作區分),並且效率較高。經測試snowflake每秒能夠產生26萬個id。
SnowFlake 雪花演算法
首先雪花演算法就是生成乙個64位的二進位制資料,最終轉換成長度為19的十進位制正整數整型資料 0 0000000000 0000000000 0000000000 0000000000 0 00000 00000 000000000000解釋一下這64位分別代表什麼意思,從左往右。當然這個演算法的強...
雪花(SnowFlake)演算法學習
class customsnowflake if workerid maxworkerid workerid 0 this.datacenterid datacenterid this.workerid workerid public synchronized long nextid 檢視時間是否在...
自增ID演算法snowflake 雪花
在資料庫主鍵設計上,比較常見的方法是採用自增id 1開始,每次加1 和生成guid。資料庫自增主鍵保證唯一性,但在分布式系統中,部署需要考慮的因素太多 guid設計簡單,能保證主鍵的唯一性,分布式系統中,資料庫部署也簡單,只是guid是一串無物理意義的字串,大量資料查詢的時候效率相對會打折,儲存暫用...