地方在住IT系ニート

bkds

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
<-- Back to home
にほんブログ村 IT技術ブログ IT技術メモへPVアクセスランキング にほんブログ村