UUIDのメモ
はじめに
UUID(Universally Unique Identifier)は、重複しない識別子を生成するための規格です。 分散環境やデータベースなどで一意性を保証するIDが必要な場合によく利用されます。
ここではUUIDの基本的な仕組みと、バージョンごとの違い、ソート可能な識別子であるULIDやUUIDv7についても簡単にまとめました。
UUIDの構造
UUIDは128ビット(16バイト)の固定長データです。一般的には、ハイフンで区切られた32桁の16進数として表現されます。
例:
550e8400-e29b-41d4-a716-446655440000
- 合計32文字(16進数)
- 8-4-4-4-12 の区切りで表示される
UUIDのバージョン
UUIDには複数のバージョンが定義されています。それぞれ、生成方法や用途が異なります。
| バージョン | 生成方法 | 特徴 | ソート可能性 |
|---|---|---|---|
| v1 | 時間+MACアドレス | 時系列順になりやすいがMACが漏れる | △ |
| v3 | 名前ベース(MD5) | 同じ入力から同じ値 | ❌ |
| v4 | ランダム | 重複確率が非常に低い | ❌ |
| v5 | 名前ベース(SHA-1) | 同じ入力から同じ値 | ❌ |
| v7 | 時間+ランダム | 将来標準、ソート性が高い | ✅ |
- 現在もっとも広く利用されているのはv4(ランダム)
- v7は新しいソート可能なUUIDとして注目されています
使用例
プログラムやDBでUUIDを生成する例です。
Linux CLIでの生成
uuidgen
Pythonでの生成
import uuid
print(uuid.uuid4())
Goでの生成
import "github.com/google/uuid"
id := uuid.New()
fmt.Println(id.String())
メモ
- UUIDは重複の確率が非常に低いため、分散環境でも中央管理なしで利用できます
- 主キーとして使う際はインデックスの断片化に注意してください
- ソート可能なIDが必要な場合はやの利用を検討してください
ULIDとは
ULID(Universally Unique Lexicographically Sortable Identifier)は、UUIDと同様に一意な識別子ですが、ソート可能性と可読性を重視した設計です。
- 先頭にタイムスタンプ(ミリ秒)を含むため、文字列としてソート可能
- Base32でエンコードされるため短くURLフレンドリー
- 例:
01ARZ3NDEKTSV4RRFFQ69G5FAV
