この記事はSnowflake IDを日本語に翻訳したものです
Snowflake ID
Snowflake ID、またはsnowflakeは、分散コンピューティングで使用される一種のユニークな識別子です。このフォーマットはTwitterによって作成され、ツイートのIDに使用されています。一般的には、雪片がそれぞれ独自の構造を持つと考えられており、それにちなんで「Snowflake(雪片) ID」という名前が付けられました。このフォーマットは、DiscordやInstagramなどの企業にも採用されており、Mastodonでは変更されたバージョンを使用しています1。
フォーマット
snowflakeは、64ビットのバイナリ形式です(符号付き整数に収まるよう63ビットのみ使用されます)。最初の41ビットは、選択されたエポックからのミリ秒を表すタイムスタンプです。次の10ビットはマシンIDを表し、衝突を防止します。続く12ビットがマシンごとのシーケンス番号を表し、同じミリ秒内で複数のsnowflakeの作成を可能にします。通常、最終的に数値は10進数でシリアル化されます。
snowflakeは作成された時間に基づいているため時間によって並べ替え可能です。1さらに、snowflakeが作成された時間は、そのsnowflakeから計算することができます。これは、特定の日時の前後に作成されたスノーフレーク(およびそれと関連するオブジェクト)を取得することに使用できます。2
例
2022年6月に@Wikipediaから生成されたツイート3のsnowflakeIDは1541815603606036480です。この数値は3つのIDの部分を示すパイプシンボルを使用して、バイナリに変換できます。
00 0001 0101 0110 0101 1010 0001 0001 1111 0110 0010 00|01 0111 1010|0000 0000 0000
-
最初の41ビット(+1ビットの先頭ゼロ)は、10進数に変換すると
367597485448
になります。これにUNIX時間のミリ秒単位でのTwitterエポックの値1288834974657
4を加えると、ツイートのUnix時間は1656432460.105
になります。つまり、このツイートの時間は2022年6月28日16時07分40.105秒(UTC)です。 -
中央の10ビット
01 0111 1010
はマシンIDです。 -
最後の12ビットはすべてゼロにデコードされます。つまり、このツイートは与えられたミリ秒においてそのマシンで処理された最初のツイートであることを意味します。
使用例
このフォーマットは、Twitterによって2010年6月に初めて発表されました5。実装に問題があったため、その次の年になってからアップデートを展開することとなりました6。
- Twitterでは、ツイート、ダイレクトメッセージ、ユーザー、リストなど、APIを介して利用可能なすべてのオブジェクトにsnowflakeIDを使用しています7。
- Discordもスノーフレークを使用しており、そのエポックは2015年の最初の秒に設定されています2。
- Instagramはsnowflakeフォーマットの変更版を使用しており、タイムスタンプには41ビット、シャードIDには13ビット、シーケンス番号には10ビットが割り当てられています8。
- Mastodonのフォーマットでは、ミリ秒単位のタイムスタンプに48ビットを使用しており、UNIX時間を採用しています。残りの16ビットはシーケンスデータのために使用されています9。
参照
参考文献
-
"twitter-archive/snowflake at b3f6a3c6ca". GitHub. October 1, 2012. Retrieved January 18, 2021. ↩ ↩2
-
"API Reference". Discord Developer Portal. Discord. Retrieved January 18, 2021. ↩ ↩2
-
@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. ↩
-
King, Ryan (June 1, 2010). "Announcing Snowflake". blog.twitter.com. Twitter. Retrieved January 18, 2021. ↩
-
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 ↩