メインコンテンツまでスキップ

5.7. UUID Version 7

5.7. UUID Version 7

UUIDv7 は, 広く実装され周知の Unix エポックタイムスタンプソースから派生した時間順序付け値フィールドを特徴とし, 1970 年 1 月 1 日午前 0 時 UTC からのミリ秒数 (うるう秒を除く) です。一般に, UUIDv7 は UUIDv1 (セクション 5.1) または UUIDv6 (セクション 5.6) よりもエントロピー特性が向上しています。

UUIDv7 値は, 最上位 48 ビットにミリ秒単位の Unix タイムスタンプを割り当て, 残りの 74 ビット (必須のバージョンビットとバリアントビットを除く) を生成された新しい UUIDv7 ごとにランダムビットで埋めることによって作成され, セクション 6.9 に従って一意性を提供します。または, 実装は, ミリ秒内の追加の単調性を保証するために, 最上位ビットから最下位ビットへの順序で, 次のサブフィールドの組み合わせを共同で 74 ビットを埋めることができます:

  1. セクション 6.2 (方法 3) に従った, オプションのサブミリ秒タイムスタンプ分数 (最大 12 ビット)。

  2. セクション 6.2 (方法 1 または 2) に従った, オプションの慎重にシードされたカウンター。

  3. 残りのスペース用に生成された新しい UUIDv7 ごとのランダムデータ。

実装は, 可能であれば UUIDv1 および UUIDv6 の代わりに UUIDv7 を利用すべきです。

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unix_ts_ms |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unix_ts_ms | ver | rand_a |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var| rand_b |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| rand_b |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

図 11: UUIDv7 フィールドとビットレイアウト

フィールド定義:

unix_ts_ms: セクション 6.1 に従った, ミリ秒単位の Unix エポックタイムスタンプの 48 ビットビッグエンディアン符号なし数。ビット 0 から 47 (オクテット 0-5) を占有します。

ver: セクション 4.2 で定義された 4 ビットバージョンフィールド, 0b0111 (7) に設定。オクテット 6 のビット 48 から 51 を占有します。

rand_a: セクション 6.9 に従って一意性を提供するための 12 ビットの疑似ランダムデータ および/または セクション 6.2 に従って追加の単調性を保証するためのオプションの構成。ビット 52 から 63 (オクテット 6-7) を占有します。

var: セクション 4.1 で定義された 2 ビットバリアントフィールド, 0b10 に設定。オクテット 8 のビット 64 と 65 を占有します。

rand_b: セクション 6.9 に従って一意性を提供するための最後の 62 ビットの疑似ランダムデータ および/または セクション 6.2 に従って追加の単調性を保証するためのオプションのカウンター。ビット 66 から 127 (オクテット 8-15) を占有します。