Задать вопрос
@Quttar72
Изучаю asp.net core mvc

Стоит ли заморачиваться с проверкой не совпадения Guid?

Пусть есть таблица, которая создается с помощью EntityFramework, которая состоит из объектов, где первичным ключом является поле с типом Guid.
Когда я создаю этот объект и вызываю следующий метод
await dbContext.Table.AddAsync(elem);
Это поле с Guid у объекта elem будет инициалировано, и как я предполагаю уникальным значением как минимум на момент выполнения этого метода. Так вот, от выполнения этого метода, до SaveChanges для записи в базу данных, может пройти некоторое время.
Возможно ли, что за это время другой поток (Я использую asp.net core), вызовет так-же метод AddAsync и у него получится этот же Guid?
Я придумал решение, добавлять эти Guid на этот промежуток времени в некоторую потокобезопасную коллекцию, которая будет использоваться, чтобы эти Guid не дублировались, пока они не записаны в базу данных.
Так вот, стоит ли с этим запариваться, может быть EntityFramework, уже сам имеет этот механизм, и после вызова AddAsync, он гарантирует, что этот же Guid не будет выдан другому объекту?
  • Вопрос задан
  • 297 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
GUID генерируется не полностью случайно, а с использованием идентификатора машины и времени, что сильно снижает шанс коллизии.

К слову скажу, что за всё время работы в разных компаниях я ни разу не слышал о коллизиях GUID, которые бы реально произошли. Даже на очень нагруженных распределённых системах.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@oleg_ods
Теоретически это возможно, но вероятность настолько ничтожна что ей можно пренебречь.

Цитата из wiki:
Хотя уникальность каждого отдельного GUID не гарантируется, общее количество уникальных ключей настолько велико (2^128 или 3,4028×10^38), что вероятность того, что в мире будут независимо сгенерированы два совпадающих ключа, крайне мала.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы