UUID v7 とは
Copilot にざっくり教えてもらう
UUID v7の特徴
タイムスタンプ: Unixエポック時間(1970年1月1日 00:00:00 UTC)からのミリ秒を使用して48ビットのタイムスタンプを含みます。
ランダムデータ: タイムスタンプに加えて、ランダムなデータを含みます。
ユニーク性と順序性: タイムスタンプとランダムデータの組み合わせにより、ユニークで並べ替え可能なUUIDを生成します。
プライバシー: MACアドレスを含まないため、プライバシーに関する懸念がありません。
用途
UUID v7は、データベースキーとして使用されることが多く、特に時系列データの管理に適しています。
公式ドキュメント
RFC 9562
日本語訳
つまり……
- 見た目は UUID
- 先頭 48bit に UNIX 時間のミリ秒が含まれる
- ソート可能
- 4bit のバージョンフィールド
- 2bit のバリアントフィールド
- 残りがランダム値
DB の主キーに最適了解!
.NET 9 で System.Guid 構造体に追加された機能
- CreateVersion7 静的メソッド
- Version プロパティ
- NewGuid() で UUID v4 に準拠←今回はスルー
CreateVersion7 メソッド
CreateVersion7()
UtcNow をタイムスタンプとして UUID v7 を生成します。
Console.WriteLine(Guid.CreateVersion7());
Console.WriteLine(Guid.CreateVersion7());
Console.WriteLine(Guid.CreateVersion7());
019389a5-fe72-7386-ab2a-264948c37893
019389a5-fe73-7559-828a-33856ee76081
019389a5-fe74-7807-acbc-0de2d0822ce3
前2ブロックが近しい UUID が生成されました。
3ブロック目の先頭は 7
になってますね。
CreateVersion7(DateTimeOffset)
指定したタイムスタンプの UUID v7 を生成します。
DateTimeOffset timestamp = DateTimeOffset.UtcNow;
Console.WriteLine(Guid.CreateVersion7(timestamp));
Console.WriteLine(Guid.CreateVersion7(timestamp));
Console.WriteLine(Guid.CreateVersion7(timestamp));
019389a9-7b1f-7826-befc-ebdd9fa8dd60
019389a9-7b1f-759b-b5fb-72e834c68c60
019389a9-7b1f-7078-a9f8-e69238ff24e6
今度は完全一致します。
Version プロパティ
UUID のバージョンを返します。
Guid v7 = Guid.CreateVersion7();
Guid newGuid = Guid.NewGuid();
Guid empty = Guid.Empty;
Console.WriteLine($"{v7.Version} {v7}");
Console.WriteLine($"{newGuid.Version} {newGuid}");
Console.WriteLine($"{empty.Version} {empty}");
7 019389b2-7b85-748f-bb96-8f9881decf9b
4 095766fd-fcb3-46ea-abd5-655b779209fb
0 00000000-0000-0000-0000-000000000000
バージョンが取得できました。
おわりに
さて、Create 処理をすべて書き換えますか。(遠い目)