6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【UUID】UIDと違うの?重複する?!

Posted at

はじめに

よくUUIDという言葉を耳にしますが、私はなんとなくUIDと同じ意味だと思っていました。
しかし、UUIDは重複する可能性があると聞き、驚愕したので調べてまとめました。

UUIDとは?

UUID(Universally Unique Identifier) は、「普遍的に一意な識別子」という意味で、重複することがほぼない(理論上は重複する可能性がゼロではないですが、実質的にはゼロと考えて問題ありません)一意なIDを生成する仕組みです。

重複するまでの期待値は230京回らしい

UUIDの特徴

  • 長さ: 128ビット(16バイト)
  • 表記: 32桁の16進数を、8-4-4-4-12の形式でハイフンで区切って表現
  • : 550e8400-e29b-41d4-a716-446655440000

UUIDのメリット

  1. 分散システムでの一意性: 中央管理サーバーなしで、複数のシステムが独立してIDを生成できる
  2. 予測不可能性: ランダム性があるため、セキュリティ的にも安全
  3. 衝突確率の低さ: 天文学的な確率でしか重複しない

UIDとの違い

「UID」は User IdentifierUnique Identifier の略で、より広い意味での「一意な識別子」を指します。

主な違いをまとめると:

項目 UUID UID
正式名称 Universally Unique Identifier User/Unique Identifier
標準化 RFC 4122で標準化されている 特に標準化されていない
生成方法 アルゴリズムが規定されている システムによって様々
用途 グローバルに一意なIDが必要な場合 システム内での一意性があれば十分な場合

つまり、UUIDはUIDの一種であり、より厳密な仕様に基づいた識別子と言えます。

UUIDのバージョン

UUIDには複数のバージョンがあり、それぞれ異なる生成方法を持っています。

UUID v1 (タイムスタンプベース)

  • 生成方法: MACアドレス + タイムスタンプ
  • 特徴: 時系列順にソート可能
  • デメリット: MACアドレスが含まれるため、プライバシーの懸念がある
uuid_v1.py
import uuid

# UUID v1を生成
uuid_v1 = uuid.uuid1()
print(uuid_v1)
# 例: 6ba7b810-9dad-11d1-80b4-00c04fd430c8

UUID v4 (ランダムベース)

  • 生成方法: ランダムな値
  • 特徴: 最もよく使われるバージョン
  • メリット: 予測不可能で、プライバシーに配慮
uuid_v4.py
import uuid

# UUID v4を生成
uuid_v4 = uuid.uuid4()
print(uuid_v4)
# 例: 550e8400-e29b-41d4-a716-446655440000

その他のバージョン

  • UUID v3: MD5ハッシュベース(名前空間 + 名前)
  • UUID v5: SHA-1ハッシュベース(名前空間 + 名前)
  • UUID v6, v7, v8: 新しい仕様(RFC 4122 bis)

実務ではUUID v4が最も広く使われています。

UUIDを使う際の注意点

1. インデックスのパフォーマンス

UUIDはランダムな値なので、データベースのインデックスが断片化しやすく、連番のIDと比べてパフォーマンスが低下する可能性があります。

対策:

  • 時系列順のUUID(v1やv7)を検討する
  • パーティショニングを活用する
  • 読み取りが多い場合は、別途連番のインデックスを追加する

2. ストレージ容量

UUIDは128ビット(16バイト)なので、INTEGERやBIGINTと比べてストレージを多く消費します。

サイズ
INTEGER 4バイト
BIGINT 8バイト
UUID 16バイト

大量のレコードを扱う場合は、ストレージコストを考慮する必要があります。

UUIDが適している場面

  • 分散システム: 複数のサーバーで独立してIDを生成する必要がある
  • マイクロサービス: 各サービスが独立してIDを生成できる
  • セキュリティが重要: IDの予測を防ぎたい場合(セッションIDなど)
  • マージが発生する: 複数のデータベースを統合する可能性がある
  • APIの公開ID: 連番だとシステムの規模が推測されてしまう

まとめ

  • UUIDは、グローバルに一意な128ビットの識別子
  • UIDは、より広い意味での一意な識別子で、UUIDはUIDの一種
  • 実務ではUUID v4(ランダムベース)が最もよく使われる
  • 分散システムやセキュリティが重要な場面で特に有用
  • パフォーマンスやストレージ容量の観点では連番IDより不利な面もある
6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?