Snowflake ID
Snowflake ID | |
---|---|
Other names |
Twitter Snowflake X Snowflake |
Snowflake ID(すのーふれーくあいでぃー)は分散コンピューティングで用いられる一意な識別子の一種であり、単にスノーフレークとも呼ばれる。Snowflake IDのフォーマットはTwitter(現X)によって、ツイートに割り当てるIDとして開発された[1]。名称は、全ての雪片(snowflake)が固有の構造を持っていると広く信じられていることに由来する。このフォーマットはDiscordやInstagramなど、他の企業でも採用されている。マストドンソーシャルネットワークでは、Snowflake IDの改訂版が用いられている。
フォーマット
[編集]Snowflake IDは64ビットのバイナリ形式であり、符号付き整数の形式に合わせるために63ビットが用いられる。先頭の41ビットはタイムスタンプで、ある特定の基準時刻からの経過秒数をミリ秒単位で表現したものである。続く10ビットは衝突を回避するためのマシンIDである。最後の12ビットは各マシンで生成されるシーケンス番号で、これによって同じミリ秒時刻で複数のSnowflake IDを生成することができる。この方法で生成されたSnowflake IDは、一般に十進表記を用いて直列化される[2]。
Snowflake IDは生成時刻を含むため、時間順でのソートが可能である[2]。さらに生成された時刻を抽出することも可能である。この性質を用いて、特定の時刻以前あるいは以降に生成されたSnowflake ID(とそれに関連付けられたオブジェクト)を取得することができる[3]。
Offset | 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 | タイムスタンプ先頭31bits | |||||||||||||||||||||||||||||||
4 | 32 | タイムスタンプ末尾10bits | マシンID | マシンごとのシーケンス番号 |
例
[編集]@Wikipedia によって2022年6月に作成されたツイート[4]は、1541815603606036480というSnowflake IDを有している。このIDは二進表記で00 0001 0101 0110 0101 1010 0001 0001 1111 0110 0010 00|01 0111 1010|0000 0000 0000と変換することが可能である(バーティカルバーはIDの3つのパートの区切りを表す)。
- 先頭のビット0と続く41ビットは、十進表記で367597485448となる。この数値をXの基準時刻1288834974657(UNIX時間でのミリ秒単位の値)に加える[5]。この結果、Unix時間でのツイート時刻は1656432460.105: June 28, 2022 16:07:40.105 UTCであることがわかる。
- 中間の10ビット 01 0111 1010 はマシンIDを示す。
- 最後の12ビットはすべて0であり、これは当該マシンでこの特定の時刻(ミリ秒単位)に処理された最初のツイートであることを意味する。
利用
[編集]このフォーマットはTwitterによって2010年6月に初めて公開された[1]。実装上の課題を解決するため、彼らは更新版を公開するのを同年後半まで待つことになった[6] 。
- Twitter(現X)ではツイート、ダイレクトメッセージ、ユーザ、リスト、その他API経由で取得可能なすべてのオブジェクトにSnowflake IDを用いている[7]。
- DiscordもSnowflake IDを用いているが、彼らの基準時刻は2015年1月1日0時0分0秒に設定されている[3]。
- InstagramはSnowflake IDの改訂版を用いている。41ビットがタイムスタンプであり、13ビットがシャードID、10ビットがシーケンス番号という構成になっている[8]。
- マストドンの改訂版フォーマットでは、Unixエポックを基準時刻として用いるため、ミリ秒単位でのタイムスタンプに48ビットを割いている。残りの16ビットはシーケンス番号である。[9]。
関連項目
[編集]脚注
[編集]- ^ a b “Announcing Snowflake”. blog.twitter.com. Twitter (June 1, 2010). 2021年1月18日閲覧。
- ^ a b “twitter-archive/snowflake at b3f6a3c6ca”. GitHub (October 1, 2012). 2021年1月18日閲覧。
- ^ a b “API Reference”. Discord Developer Portal. Discord. 2021年1月18日閲覧。
- ^ @Wikipedia (2022年6月28日). "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)". X(旧Twitter)より2024年12月15日閲覧。
- ^ “2019-08-03: TweetedAt: Finding Tweet Timestamps for Pre and Post Snowflake Tweet IDs”. 2019-08-03. 2024年12月15日閲覧。
- ^ “Tweet IDs About To Get Jumbled In A Blizzard As Snowflake Is Set To Roll Live”. TechCrunch (October 12, 2010). 2021年1月18日閲覧。
- ^ “Twitter IDs”. Twitter Developer. Twitter. 2021年1月20日閲覧。
- ^ “Sharding & IDs at Instagram” (英語). Instagram Engineering (May 2, 2016). 2021年1月18日閲覧。
- ^ Source Code mastodon/mastodon, Mastodon, (2022-11-11) 2022年11月11日閲覧。