雪花算法

雪花算法(Snowflake)是一种生成分布式全局唯一ID的算法,生成的ID称为Snowflake IDs或snowflakes。这种算法由Twitter创建,并用于推文的ID。DiscordInstagram等其他公司采用了修改后的版本。

1358666646167748608
Snowflake ID
别名Twitter Snowflake

格式

一个Snowflake ID有64位元。前41位是时间戳,表示了自选定的时期以来的毫秒数。 接下来的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]

參見

參考文獻

  1. . GitHub. [2021-02-10]. (原始内容存档于2021-03-09) (英语).
  2. . TechCrunch. [2021-02-10] (美国英语).
  3. @Wikipedia. (推文) Twitter. Missing or empty |date= (help)
  4. . 2019-08-03. [2022-10-17]. (原始内容存档于2022-06-17).
  5. King, Ryan. . blog.twitter.com. Twitter. June 1, 2010 [January 18, 2021]. (原始内容存档于2021-05-08).
  6. Siegler, MG. . TechCrunch. October 12, 2010 [January 18, 2021]. (原始内容存档于2022-10-19).
  7. . Twitter Developer. Twitter. [January 20, 2021]. (原始内容存档于2022-09-01).
  8. . Discord Developer Portal. Discord. [January 18, 2021]. (原始内容存档于2022-08-31).
  9. . Instagram Engineering. May 2, 2016 [January 18, 2021]. (原始内容存档于2021-01-12) (英语).

外部連結

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.