すべての記事

UUID:ほとんど重複しない識別子はどう生成されるか

日本のマイナンバー(個人番号)は12桁の番号で、国が一元的に管理する中央データベースに基づいて各住民に一つずつ割り当てられる。UUIDもよく「ユニークな識別子」と呼ばれるが、仕組みは対照的だ——UUIDは中央機関に問い合わせることなく、どのマシン上でもオフラインで独立に生成でき、それでも実用上の衝突確率はマイナンバーの重複防止の仕組みと同じくらい、あるいはそれ以上に低い。

UUIDのバージョン

  • v1 — 現在時刻とネットワークカードのMACアドレスに基づく。一意性を保証しますが、識別子がいつ、どのデバイスで作成されたかを部分的に明らかにします。
  • v4 — バージョンを示す数ビットを除いて完全にランダム。副次的な情報を漏らさないため、今日最も一般的な選択肢です。
  • v5 — 決定的で、名前空間と文字列のハッシュとして計算されます——同じ入力は常に同じUUIDを生成します。

衝突確率が実質ゼロである理由

UUID v4では122ビットがランダムです。何世紀にもわたって毎秒数十億のUUIDを生成しても、少なくとも1回の衝突が起こる確率は天文学的に小さいままです——これはこの規模の空間における誕生日のパラドックスに基づいて数学的に裏付けられています。

なぜこれが必要か

  • 中央カウンターやサーバー間の調整なしにデータベースの主キーを生成する。
  • マイナンバーのような中央登録機関を必要とせず、分散システムでセッションやトランザクションの識別子を作成する。
  • (1, 2, 3...とは異なり)簡単に列挙できる予測可能な連番IDを避ける。

UUID v7: ランダム性とソート性の妥協点

完全にランダムなUUID v4は、データベースインデックスの性能に悪影響を与えます——新しいレコードがインデックスツリーの末尾ではなく、無秩序な位置に挿入されるためです。より新しいUUID v7はこれを解決するために、識別子の先頭ビットにタイムスタンプを埋め込みます。値はv4とほぼ同じくらいユニークでありながら、連番カウンターのように作成時刻順に自然にソートされます。

ツールを試す