Curious TechieDev Toolbox
すべてのガイド/識別子8 min read

UUIDとは?バージョン別の仕組みとRFC 9562規格解説

分散システムにおける128ビット一意識別子の生成原理:UUID v4の乱数性とUUID v7の時系列インデックス性能。

重要ポイント (要約)
  • UUIDは、最新規格 RFC 9562 で標準化された128ビット長の一意識別子です。
  • UUID v4 は122ビットの暗号学的乱数エントロピーを使用し、衝突の確率は天文学的に低いです。
  • UUID v7 は先頭に48ビットのミリ秒タイムスタンプを含み、データベースのB-treeインデックス効率を最大化します。
  • 中央サーバーへの問い合わせなしに、分散マイクロサービスが自律して主キーを発行できます。

分散データベースやマイクロサービス構成では、中央サーバーの採番ボトルネックを介さずに、各ノードが自律的に一意な主キーを生成できる仕組みが不可欠です。その世界標準仕様が UUID (Universally Unique Identifier / GUID) です。

1. 128ビットUUIDの基本構造

RFC 9562で標準化されたUUIDは、16オクテット(128ビット)のデータであり、ハイフンで区切られた5つのブロック(32文字の16進数)として表記されます:

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
M = バージョン番号 (4 または 7) | N = バリアント仕様 (通常 8, 9, a, b)

2. 衝突確率の数学的安全性

UUID v4には122ビットの純粋な暗号論的乱数(約5.3 × 10^36通りの組み合わせ)が含まれています。1秒間に10億個のUUIDを85年間連続生成し続けたとしても、衝突が発生する確率はわずか50%にすぎません。

3. UUID v4(完全ランダム)vs UUID v7(時系列ソート)

UUID v4が完全な疑似乱数であるのに対し、最新規格UUID v7は最上位48ビットにUnixミリ秒タイムスタンプを格納し、下位に74ビットの乱数を配置します。これによりIDが自然と時系列順に整列します。

4. DBインデックス性能とB-Tree断片化の防止

ランダムなUUID v4を主キーB-Treeに挿入すると激しいページスプリットとキャッシュミスが発生します。UUID v7は自動採番連番のように末尾へシーケンシャルに追加されるため、PostgreSQLやMySQLで最大10倍の書き込みスループット向上を実現します。