首先雪花演算法就是生成乙個64位的二進位制資料,最終轉換成長度為19的十進位制正整數整型資料
0 0000000000 0000000000 0000000000 0000000000 0 00000 00000 000000000000
解釋一下這64位分別代表什麼意思,從左往右。
當然這個演算法的強大並不僅僅如此而已,這個演算法的時間位、機器位、序列號位都是可以根據不同場景來調整的,那麼他們碰撞的機率也隨著調整發生改變。
接下來上乾貨
public class snowflake
if (machineid > max_machine_num || machineid < 0)
this.datacenterid = datacenterid;
this.machineid = machineid;
}/**
* 產生下乙個id**/
public synchronized long nextid()
if (currstmp == laststmp)
} else
laststmp = currstmp;
return (currstmp - start_time) << timestmp_left//時間戳部分
| datacenterid << datacenter_left //資料中心部分
| machineid << machine_left //機器標識部分
| sequence; //序列號部分
}private long getnextmill()
return mill;
}}
總體來說演算法並不難,思路清晰,其中的牽扯到的知識點就是各個資料間進行位運算,這塊知識薄弱的可以去補一補。
一篇文件不僅get到了雪花演算法的思想,還發現了就像當初發現隨機函式random
一樣,隨機只是在一定範圍內隨機,唯一只是在某乙個時間段唯一。場景是度量演算法的尺度,致敬twitter
。
雪花演算法 snowflake
分布式系統中,有一些需要使用全域性唯一id的場景,這種時候為了防止id衝突可以使用36位的uuid,但是uuid有一些缺點,首先他相對比較長,另外uuid一般是無序的。有些時候我們希望能使用一種簡單一些的id,並且希望id能夠按照時間有序生成。而twitter的snowflake解決了這種需求,最初...
雪花(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是一串無物理意義的字串,大量資料查詢的時候效率相對會打折,儲存暫用...