Snowflake ID

Snowflake ID（すのーふれーくあいでぃー）は分散コンピューティングで用いられる一意な識別子の一種であり、単にスノーフレークとも呼ばれる。Snowflake IDのフォーマットはTwitter（現X）によって、ツイートに割り当てるIDとして開発された。名称は、全ての雪片（snowflake）が固有の構造を持っていると広く信じられていることに由来する。このフォーマットはDiscordやInstagramなど、他の企業でも採用されている。マストドンソーシャルネットワークでは、Snowflake IDの改訂版が用いられている。

 フォーマット 
Snowflake IDは64ビットのバイナリ形式であり、符号付き整数の形式に合わせるために63ビットが用いられる。先頭の41ビットはタイムスタンプで、ある特定の基準時刻からの経過秒数をミリ秒単位で表現したものである。続く10ビットは衝突を回避するためのマシンIDである。最後の12ビットは各マシンで生成されるシーケンス番号で、これによって同じミリ秒時刻で複数のSnowflake IDを生成することができる。この方法で生成されたSnowflake IDは、一般に十進表記を用いて直列化される。

Snowflake IDは生成時刻を含むため、時間順でのソートが可能である。さらに生成された時刻を抽出することも可能である。この性質を用いて、特定の時刻以前あるいは以降に生成されたSnowflake ID（とそれに関連付けられたオブジェクト）を取得することができる。

+固定ヘッダフォーマット 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月に作成されたツイートは、というSnowflake IDを有している。このIDは二進表記でと変換することが可能である（バーティカルバーはIDの3つのパートの区切りを表す）。
 先頭のビット0と続く41ビットは、十進表記でとなる。この数値をXの基準時刻（UNIX時間でのミリ秒単位の値）に加える。この結果、Unix時間でのツイート時刻は: June 28, 2022 16:07:40.105 UTCであることがわかる。
 中間の10ビット  はマシンIDを示す。
 最後の12ビットはすべて0であり、これは当該マシンでこの特定の時刻（ミリ秒単位）に処理された最初のツイートであることを意味する。

 利用 
このフォーマットはTwitterによって2010年6月に初めて公開された。実装上の課題を解決するため、彼らは更新版を公開するのを同年後半まで待つことになった 。
 Twitter（現X）ではツイート、ダイレクトメッセージ、ユーザ、リスト、その他API経由で取得可能なすべてのオブジェクトにSnowflake IDを用いている。
 DiscordもSnowflake IDを用いているが、彼らの基準時刻は2015年1月1日0時0分0秒に設定されている。
 InstagramはSnowflake IDの改訂版を用いている。41ビットがタイムスタンプであり、13ビットがシャードID、10ビットがシーケンス番号という構成になっている。
 マストドンの改訂版フォーマットでは、Unixエポックを基準時刻として用いるため、ミリ秒単位でのタイムスタンプに48ビットを割いている。残りの16ビットはシーケンス番号である。Source Code 。

 関連項目 
 Universally unique identifier

 脚注 

 外部リンク 

 Snowflake ID generator Tool

Category:Twitter
Category:分散処理
Category:識別子