0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

.NET 9 の Guid 新機能で UUID v7 を使う

Posted at

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 処理をすべて書き換えますか。(遠い目)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?