TG Telegram Group & Channel
.NET Разработчик | United States America (US)
Create: Update:

День 1995. #ЧтоНовенького
UUID Версии 7 в .NET 9

Спецификация UUID (универсальные уникальные идентификаторы), также известные как GUID (глобальные уникальные идентификаторы), определяет несколько различных версий UUID.

.NET использует UUID версии 4 в методе Guid.NewGuid(). Это, почти полностью случайное (или псевдослучайное) число. Но в превью 7 .NET 9 мы получим UUID версии 7.

Новый API по-прежнему находится внутри System.Guid:

var guid = Guid.CreateVersion7();

Что аналогично:
var guid = 
Guid.CreateVersion7(Guid.CreateVersion7(DateTimeOffset.UtcNow));


Основным преимуществом является перегрузка с меткой времени, включенная в UUID. Вот как устроен UUID версии 7:
| 48-bit timestamp | 12-bit random | 62-bit random |

Длина осталась прежней, но первые 48 бит занимает метка времени. Основное преимущество заключается в том, что вы можете сортировать UUID по времени их создания, что делает их более подходящими для идентификаторов в базах данных, чем UUID версии 4.

Управление меткой времени
Поскольку метод принимает DateTimeOffset, вызывающая функция может использовать TimeProvider для управления UtcNow:
var uuid = Guid.CreateVersion7(timeProvider.GetUtcNow());

timeProvider можно внедрить через DI и эмулировать в сценариях тестирования.

Интересно, что внутренний код вызывает NewGuid(), а затем заменяет его первые байты на метку времени с помощью Unsafe.AsRef. Это делает CreateVersion7() примерно в 2 раза медленнее, чем NewGuid(), но это в любом случае десятки наносекунд.

CreateVersion7 - довольно странное название метода, как по мне. Во-первых, оно какбэ намекает, что должны быть CreateVersion1, …, CreateVersion6, а их нет. А во-вторых, не соответствует методу NewGuid. То есть предполагается, что вы должны разбираться в версиях UUID, чтобы знать, какой версии UUID в NewGuid. Впрочем, возможно (и надеюсь), что к релизу .NET 9 метод переименуют.

Оригинальное предложение и дискуссия: https://github.com/dotnet/runhottg.com/issues/103658

Источник: https://steven-giesel.com/blogPost/ea42a518-4d8b-4e08-8f73-e542bdd3b983/uuid-v7-in-net-9

День 1995. #ЧтоНовенького
UUID Версии 7 в .NET 9

Спецификация UUID (универсальные уникальные идентификаторы), также известные как GUID (глобальные уникальные идентификаторы), определяет несколько различных версий UUID.

.NET использует UUID версии 4 в методе Guid.NewGuid(). Это, почти полностью случайное (или псевдослучайное) число. Но в превью 7 .NET 9 мы получим UUID версии 7.

Новый API по-прежнему находится внутри System.Guid:
var guid = Guid.CreateVersion7();

Что аналогично:
var guid = 
Guid.CreateVersion7(Guid.CreateVersion7(DateTimeOffset.UtcNow));


Основным преимуществом является перегрузка с меткой времени, включенная в UUID. Вот как устроен UUID версии 7:
| 48-bit timestamp | 12-bit random | 62-bit random |

Длина осталась прежней, но первые 48 бит занимает метка времени. Основное преимущество заключается в том, что вы можете сортировать UUID по времени их создания, что делает их более подходящими для идентификаторов в базах данных, чем UUID версии 4.

Управление меткой времени
Поскольку метод принимает DateTimeOffset, вызывающая функция может использовать TimeProvider для управления UtcNow:
var uuid = Guid.CreateVersion7(timeProvider.GetUtcNow());

timeProvider можно внедрить через DI и эмулировать в сценариях тестирования.

Интересно, что внутренний код вызывает NewGuid(), а затем заменяет его первые байты на метку времени с помощью Unsafe.AsRef. Это делает CreateVersion7() примерно в 2 раза медленнее, чем NewGuid(), но это в любом случае десятки наносекунд.

CreateVersion7 - довольно странное название метода, как по мне. Во-первых, оно какбэ намекает, что должны быть CreateVersion1, …, CreateVersion6, а их нет. А во-вторых, не соответствует методу NewGuid. То есть предполагается, что вы должны разбираться в версиях UUID, чтобы знать, какой версии UUID в NewGuid. Впрочем, возможно (и надеюсь), что к релизу .NET 9 метод переименуют.

Оригинальное предложение и дискуссия: https://github.com/dotnet/runhottg.com/issues/103658

Источник: https://steven-giesel.com/blogPost/ea42a518-4d8b-4e08-8f73-e542bdd3b983/uuid-v7-in-net-9
👍33


>>Click here to continue<<

.NET Разработчик




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)