UUID v6 とは
UUID v6 は v1 のビット配置を並べ替えます。60 ビットのタイムスタンプを先頭に、続いてバージョンとバリアントのビット、最後にノード情報を置きます。結果として、文字列として比較したときに時刻順を保つ値になります。
この配置により、UUID を文字列として比べることが時刻の比較と等しくなります。これは B-tree インデックスで特に重要で、乱数キーによるページ分割が大幅に減ります。
使い方
- 生成する件数を選びます (1〜1000)。
- 必要なら大文字や波括弧の書式を有効にします。
- 生成を押します。値は生成順に昇順になります。
用途
- 時刻順に検索される主キー。
- 書き込みが多いときにインデックスの断片化を抑える。
- イベントログや台帳での連番に近い識別子。
UUID v6 の位置づけ
| 選択肢 | 使う場面 |
|---|---|
v6 | 時刻が先頭。並べ替え可能で v1 と同じ情報を持ちます |
v7 | Unix ミリ秒。新しい設計にはよりシンプルです |
v1 | 同じ情報を並べ替えられない配置で保存します |
UUID の各バージョン早見表
| バージョン | 並べ替え可能 | 基になる情報 | 向いている用途 |
|---|---|---|---|
| v1 | 不可 | タイムスタンプ + MAC アドレス | v1 に依存したままの既存システム |
| v3 | 不可 | 名前の MD5 ハッシュ | MD5 を使わざるを得ない場面の決定的な識別子 |
| v4 | 不可 | 122 ビットの乱数 | 一般的な識別子のほとんど |
| v5 | 不可 | 名前の SHA-1 ハッシュ | 同じ名前から常に同じ識別子を得たいとき |
| v6 | 可 | 並べ替えたタイムスタンプ | 乱数性を保ったまま並べ替えたいとき |
| v7 | 可 | ミリ秒精度の Unix 時刻 | データベースの主キーやイベント識別子 |
| v8 | 不可 | 独自のビット配置 | 独自形式や実験的な用途 |
7 つのバージョンはいずれも 128 ビットで、同じ 8-4-4-4-12 の形式で表記します。違うのはビットの意味だけです。
よくある質問
v6 と v7 はどう選べばよいですか?
どちらも時刻順に並びます。v7 は Unix ミリ秒を使い実装が簡単です。v6 は 100 ナノ秒の分解能とノード欄を必要とする v1 互換システムのために設計されています。
v6 は乱数性を完全に失いますか?
いいえ。タイムスタンプとノード欄の後ろにも乱数ビットがあるため、同じミリ秒に生成された値どうしも区別されます。
バージョン番号 6 はどこから来たのですか?
RFC 9562 で定義されました。v1 のビット配置は並べ替えの面で問題があったため、後方互換性を壊さずに修正版として追加されました。