TL;DR

Universally Unique IDentifier の略で、空間と時間をまたいで一意であることを目指す 128 ビットの識別子。GUID とも呼ばれる。現在は RFC 9562 で定められている。

なぜ必要か

中央で番号を振らなくても、各所で独立に重複しにくい識別子を作れる。RFC 9562 によると、分散システムでは UUID をデータベースのキーに使うことが多い。

仕組み

テキストでは、16 進数を 8-4-4-4-12 文字ずつハイフンで区切って書く。作り方の違いでバージョンが分かれている。

  • v1: 60 ビットのタイムスタンプ、クロックシーケンス、ノード ID から作る
  • v3 と v5: 名前を MD5(v3)または SHA-1(v5)でハッシュして作る
  • v4: 乱数から作る
  • v6: v1 のタイムスタンプを並べ替え、ソートできるようにしたもの
  • v7: Unix 時刻のミリ秒をもとに作り、バイト列の比較で時刻順に並ぶ
  • v8: 実験的な用途や独自の形式のためのもの

注意点

v4 のようなランダムなキーは、B-tree のインデックスへの挿入がばらつく。RFC 9562 によると、時刻順に増える UUID はインデックスの局所性がよいので、v6 と v7 が追加された。RFC は、可能なら v1 や v6 ではなく v7 を使うよう勧めている。また、UUID を推測されにくいものと仮定してはならず、アクセス権の証明として使ってはならない。

関連

出典