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

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]

参见

编辑

参考文献

编辑
  1. ^ twitter-archive/snowflake. GitHub. [2021-02-10]. (原始内容存档于2021-03-09) (英语). 
  2. ^ Twitter's Snowflake Project To Update Tweet IDs Really Is More Like A Blizzard Now. TechCrunch. [2021-02-10] (美国英语). 
  3. ^ @Wikipedia. 53 years ago today, members of the LGBTQI+ community began protesting in New York City in response to a police raid of the Stonewall Inn, a popular gay bar. The riots were a transformative event in the 20th century fight for LGBTQI+ rights in the US. (1/2) (推文) –通过Twitter.  Missing or empty |date= (help)
  4. ^ 2019-08-03: TweetedAt: Finding Tweet Timestamps for Pre and Post Snowflake Tweet IDs. 2019-08-03. [2022-10-17]. (原始内容存档于2022-06-17). 
  5. ^ King, Ryan. Announcing Snowflake. blog.twitter.com. Twitter. June 1, 2010 [January 18, 2021]. (原始内容存档于2021-05-08). 
  6. ^ Siegler, MG. Tweet IDs About To Get Jumbled In A Blizzard As Snowflake Is Set To Roll Live. TechCrunch. October 12, 2010 [January 18, 2021]. (原始内容存档于2022-10-19). 
  7. ^ Twitter IDs. Twitter Developer. Twitter. [January 20, 2021]. (原始内容存档于2022-09-01). 
  8. ^ API Reference. Discord Developer Portal. Discord. [January 18, 2021]. (原始内容存档于2022-08-31). 
  9. ^ Sharding & IDs at Instagram. Instagram Engineering. May 2, 2016 [January 18, 2021]. (原始内容存档于2021-01-12) (英语). 

外部链接

编辑