SnowFlake 雪花演算法

2021-09-28 06:45:43 字數 1076 閱讀 7863

首先雪花演算法就是生成乙個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是一串無物理意義的字串,大量資料查詢的時候效率相對會打折,儲存暫用...