雪花演算法

来自维基百科,自由的百科全书

雪花演算法(Snowflake)是一種生成分散式全域唯一ID的演算法,生成的ID稱為Snowflake IDs或snowflakes。這種演算法由Twitter建立,並用於推文的ID。DiscordInstagram等其他公司採用了修改後的版本。

快速預覽 Snowflake ID, 別名 ...
1358666646167748608
Snowflake ID
別名Twitter Snowflake
關閉

格式

一個Snowflake ID有64位元。前41位是時間戳,表示了自選定的時期英語Epoch (computing)以來的毫秒數。 接下來的10位代表電腦ID,防止衝突。 其餘12位元代表每台機器上生成ID的序列號,這允許在同一毫秒內建立多個Snowflake ID。最後以十進制將數字序列化。

SnowflakeID基於時間生成,故可以按時間排序。[1] 此外,一個ID的生成時間可以由其自身推斷出來。該特性可以用於按時間篩選ID,以及與之聯絡的對象[2]

範例

2022年六月由@Wikipedia所發的一條推文[3]的雪花ID是1541815603606036480。這個數字被轉換成二進制就是0b 0001 0101 0110 0101 1010 0001 0001 1111 0110 0010 00|01 0111 1010|0000 0000 0000,其中以豎線分隔成三個部分。

  • 最前面41位元(加上1位元的0)轉換成十進制為367597485448。將這個值加上推特紀年1288834974657UNIX時間毫秒)[4],這條推特的UNIX時間為1656432460.105:即世界協調時間2022年6月28日16:07:40.105。
  • 中間10位元01 0111 1010是機器ID。
  • 後面12位元解碼出來全部為0,代表這條推文是該機器於這一毫秒所發出的第一條推文。

用途

這個格式最初由Twitter在2010年宣布[5]。由於實現上的困難,他們在該年稍晚才推出更新[6]。Twitter對推文、私訊、使用者、列表和其他可透過API存取的對象使用雪花ID[7]

Discord同樣也使用雪花ID,紀年則從2015年的第一秒開始[8]

Instagram使用了修改後的版本,其中41位元用作時間戳,13位元用於表示分片(Shard)ID,10位元表示序列號[9]

參見

參考文獻

外部連結

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.