Snowflake IDs, or snowflakes, are a form of unique identifier used in distributed computing. The format was created by Twitter (now X) and is used for the IDs of tweets.[1] It is popularly believed that every snowflake has a unique structure, so they took the name "snowflake ID". The format has been adopted by other companies, including Discord and Instagram. The Mastodon social network uses a modified version.
1825485932732612608 | |
---|---|
Snowflake ID | |
Other names | Twitter Snowflake |
![](http://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Snowflake-identifier.png/220px-Snowflake-identifier.png)
Format
editSnowflakes are 64 bits in binary. (Only 63 are used to fit in a signed integer.) The first 41 bits are a timestamp, representing milliseconds since the chosen epoch. The next 10 bits represent a machine ID, preventing clashes. Twelve more bits represent a per-machine sequence number, to allow creation of multiple snowflakes in the same millisecond. The final number is generally serialized in decimal.[2]
Snowflakes are sortable by time, because they are based on the time they were created.[2] Additionally, the time a snowflake was created can be calculated from the snowflake. This can be used to get snowflakes (and their associated objects) that were created before or after a particular date.[3]
Offsets | Octet | 0 | 1 | 2 | 3 | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Octet | Bit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
0 | 0 | 0 | Timestamp - first 31 bits | |||||||||||||||||||||||||||||||
4 | 32 | Timestamp - last 10 bits | Machine ID | Machine Sequence Number |
Example
editA tweet produced by @Wikipedia in June 2022[4] has the snowflake ID 1541815603606036480. The number may be converted to binary as 00 0001 0101 0110 0101 1010 0001 0001 1111 0110 0010 00|01 0111 1010|0000 0000 0000, with pipe symbols denoting the three parts of the ID.
- The first 41 (+ 1 top zero bit) bits convert to decimal as 367597485448. Add the value to the X Epoch of 1288834974657 (in Unix time milliseconds),[5] the Unix time of the tweet is therefore 1656432460.105: June 28, 2022 16:07:40.105 UTC.
- The middle 10 bits 01 0111 1010 are the machine ID.
- The last 12 bits decode to all zero, meaning this tweet is the first tweet processed by the machine at the given millisecond.
Usage
editThe format was first announced by X/Twitter in June 2010.[1] Due to implementation challenges, they waited until later in the year to roll out the update.[6]
- X uses snowflake IDs for posts, direct messages, users, lists, and all other objects available over the API.[7]
- Discord also uses snowflakes, with their epoch set to the first second of the year 2015.[3]
- Instagram uses a modified version of the format, with 41 bits for a timestamp, 13 bits for a shard ID, and 10 bits for a sequence number.[8]
- Mastodon's modified format has 48 bits for a millisecond-level timestamp, as it uses the UNIX epoch. The remaining 16 bits are for sequence data.[9]
See also
editReferences
edit- ^ a b King, Ryan (June 1, 2010). "Announcing Snowflake". blog.twitter.com. Twitter. Retrieved January 18, 2021.
- ^ a b "twitter-archive/snowflake at b3f6a3c6ca". GitHub. October 1, 2012. Retrieved January 18, 2021.
- ^ a b "API Reference". Discord Developer Portal. Discord. Retrieved January 18, 2021.
- ^ @Wikipedia (June 28, 2022). "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)" (Tweet) – via Twitter.
- ^ "2019-08-03: TweetedAt: Finding Tweet Timestamps for Pre and Post Snowflake Tweet IDs". 2019-08-03.
- ^ Siegler, MG (October 12, 2010). "Tweet IDs About To Get Jumbled In A Blizzard As Snowflake Is Set To Roll Live". TechCrunch. Retrieved January 18, 2021.
- ^ "Twitter IDs". Twitter Developer. Twitter. Retrieved January 20, 2021.
- ^ "Sharding & IDs at Instagram". Instagram Engineering. May 2, 2016. Retrieved January 18, 2021.
- ^ Source Code mastodon/mastodon, Mastodon, November 11, 2022, retrieved November 11, 2022