Стоит ли заморачиваться с проверкой не совпадения Guid?
Пусть есть таблица, которая создается с помощью EntityFramework, которая состоит из объектов, где первичным ключом является поле с типом Guid.
Когда я создаю этот объект и вызываю следующий метод
await dbContext.Table.AddAsync(elem);
Это поле с Guid у объекта elem будет инициалировано, и как я предполагаю уникальным значением как минимум на момент выполнения этого метода. Так вот, от выполнения этого метода, до SaveChanges для записи в базу данных, может пройти некоторое время.
Возможно ли, что за это время другой поток (Я использую asp.net core), вызовет так-же метод AddAsync и у него получится этот же Guid?
Я придумал решение, добавлять эти Guid на этот промежуток времени в некоторую потокобезопасную коллекцию, которая будет использоваться, чтобы эти Guid не дублировались, пока они не записаны в базу данных.
Так вот, стоит ли с этим запариваться, может быть EntityFramework, уже сам имеет этот механизм, и после вызова AddAsync, он гарантирует, что этот же Guid не будет выдан другому объекту?
GUID генерируется не полностью случайно, а с использованием идентификатора машины и времени, что сильно снижает шанс коллизии.
К слову скажу, что за всё время работы в разных компаниях я ни разу не слышал о коллизиях GUID, которые бы реально произошли. Даже на очень нагруженных распределённых системах.
абстрактно такая вероятность существует, но она настолько мала, что считается что "не может быть"
Не помню были ли зафиксированы такие коллизии хоть раз (по аналогии с коллизиями md5)
Но это так - для информации. В реальной жизни можно считать что ошибка вставки неуникального значения выскочит через несколько миллиардов.. да фиг с ним миллионов... нет сотен лет пользования софтом))
Теоретически это возможно, но вероятность настолько ничтожна что ей можно пренебречь.
Цитата из wiki:
Хотя уникальность каждого отдельного GUID не гарантируется, общее количество уникальных ключей настолько велико (2^128 или 3,4028×10^38), что вероятность того, что в мире будут независимо сгенерированы два совпадающих ключа, крайне мала.