UUID v4とv7:ランダムIDか、時系列順のIDか

UUID v4とv7のガイド

UUID v4とv7(GUIDとUUIDの違いも):どれを使うべきか | We.Inc

RFC 9562におけるUUID v7とv4の違い、時系列順のIDがデータベースのキーに向く理由、GUIDとは何かを解説します。ブラウザーでv4とv7のIDを生成し、v7のタイムスタンプを解読するツール付きです。

どちらも36文字で表記される128ビットの識別子です。v4のUUIDは122ビットのランダム値なので、新しい値はソート済みインデックスのどこにでも入ります。v7のUUIDはミリ秒単位の48ビットUnixタイムスタンプで始まり、その後にランダムなビットが続くため、値はおおよそ作成順に並びます。RFC 9562は、古い時刻ベースのv1やv6よりv7を推奨しています。

v4とv7の比較

UUIDのバージョン選びは、ほとんどがデータベースの問題です。ランダムなv4のキーは挿入をインデックス全体に散らしますが、v7のキーは中央のカウンターなしに、自動採番の数値と同じように順番に届きます。下で両方を生成し、任意のUUIDを貼り付ければ、そのバージョンと、v7なら作成された時刻を確認できます。

よくある質問

GUIDとUUIDの違いは何ですか?

実用上の違いはありません。RFC 9562はUUIDを定義し、GUID(Globally Unique Identifier、Microsoftのツールで使われる名前)とも呼ばれると記しています。.NETやSQL Serverが生成するGUIDは、同じ36文字形式のUUIDです。

UUID v7は公式の標準ですか?

はい。2024年に公開されたRFC 9562は、従来のバージョンに加えてバージョン6、7、8を定義し、以前UUIDを規定していたRFC 4122を廃止しました。

UUID v7の一意性は十分ですか?

1ミリ秒ごとに74ビットのランダム値があり、ほぼどんなシステムにも十分です。衝突するには、まったく同じミリ秒に膨大な数のIDを作る必要があります。

v7のUUIDから作成時刻を取り出せますか?

はい。先頭の12桁の16進数がミリ秒単位のUnix時刻です。上のデコーダーに貼り付ければ日付として表示されますし、その桁を自分で16進数として解析することもできます。

既存のv4のキーをv7に切り替えるべきですか?

通常は不要です。どちらも有効なUUIDで同じ列に共存できるため、新しい行はv7を使い、古い行はv4のままにできます。主キーを書き換えると、それを参照するすべての外部キーも書き換えることになります。

データベースで順序が重要な理由

構造の読み方

UUIDの全8バージョン

RFC 9562におけるUUIDのバージョン

コピーして使えるコード

ブラウザーやNodeでのUUID v4

現行ブラウザーの安全なページと、Node 19以降のグローバルなcryptoオブジェクトに組み込まれています。36文字の文字列を返します。

ライブラリなしのUUID v7

先頭6バイトに現在時刻を書き込み、バージョンとバリアントのビットを設定します。残りはランダムのままです。

v7のUUIDから時刻を読み取る

先頭12桁の16進数は1970年からのミリ秒数なので、解析すればDateが得られます。

生成と解読

v4を生成

v7を生成

生成結果

ボタンを押すとUUIDを作成します。ブラウザー内で作られ、どこにも送信されません。

解読するUUIDを貼り付け

バージョン:{v}

RFC 9562(標準のもの)

RFC 9562のバリアントではありません

作成日時:{v}(UTC)

このバージョンにはUnixタイムスタンプが含まれていません。

UUIDではありません。8-4-4-4-12のグループに分かれた32桁の16進数が必要です。

これはNil UUIDです:128ビットすべてが0です。

これはMax UUIDです:128ビットすべてが1です。

無料で始める · クレジットカード不要

関連: ガイド|Webマーケティングと集客を学ぶ

製品

ご利用いただける方

機能

リソース

会社情報

サイトマップを見る