トップQs
タイムライン
チャット
視点

Snowflake ID

さまざまなプラットフォームで使われている固有識別子 ウィキペディアから

Remove ads

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

概要 Other names ...
Thumb
Snowflake IDの要素(バイナリ

フォーマット

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

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

さらに見る Offset, Octet ...

@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の基準時刻1288834974657UNIX時間でのミリ秒単位の値)に加える[5]。この結果、Unix時間でのツイート時刻は1656432460.105: June 28, 2022 16:07:40.105 UTCであることがわかる。
  • 中間の10ビット 01 0111 1010 はマシンIDを示す。
  • 最後の12ビットはすべて0であり、これは当該マシンでこの特定の時刻(ミリ秒単位)に処理された最初のツイートであることを意味する。
Remove ads

利用

このフォーマットは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]
Remove ads

関連項目

脚注

外部リンク

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads