Сколько раз можно случайным образом генерировать GUID перед риском дубликатами? (.NET)

Математически я предполагаю, что возможно, что даже сгенерированное использование двух случайных GUID созданного в методе в платформе.NET идентично, но примерно как, вероятно, они должны столкнуться, если Вы генерируете сотни или тысячи?

Если бы Вы генерировали один для каждой копии Windows в мире, то они столкнулись бы?

Причина, которую я спрашиваю, состоит в том, потому что у меня есть программа, которая создает много объектов и уничтожает некоторых также, и я задаюсь вопросом о вероятности любого из тех объектов (включая уничтоженные) наличие идентичных GUID.

5
задан NibblyPig 11 April 2010 в 17:37
поделиться

7 ответов

Существует ~3E38 возможных значений GUID. Но парадокс дня рождения сокращает шансы 50/50 на создание дубликата GUID до ~1E19. Хотя это все еще огромное число, сравнимое с вероятностью того, что ваша машина будет уничтожена ударом метеорита первой, системные часы используются для того, чтобы исключить возможность появления дубликатов.

Многие крупные и критически важные приложения баз данных используют GUID в качестве первичного ключа в таблице. Не стесняйтесь следовать их примеру.

7
ответ дан 18 December 2019 в 13:12
поделиться

GUID имеет компоненты, основанные на

  • Времени (системные часы)

  • Пространстве (системный MAC-адрес)

  • Случайных числах

Так что если один генерируется для каждой машины в мире в одно и то же время, они будут отличаться MAC и случайными числами

Вот полезная ссылка. http://blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx

5
ответ дан 18 December 2019 в 13:12
поделиться

Это займет много времени!

0
ответ дан 18 December 2019 в 13:12
поделиться

Чтобы добавить к правильному ответу Мидхата, вот цитата из блога Эрика Липперта о ситуации, если в системе не установлена ​​сетевая карта (следовательно, нет MAC-адреса):

(Машины, не имеющие сетевых карт, генерируют специальные идентификаторы GUID, которые находятся в диапазоне «заведомо не уникальных».)

0
ответ дан 18 December 2019 в 13:12
поделиться

Трудно подсчитать шансы, не зная внутренних деталей реализации генератора GUID.

Вы можете использовать комбинаторику , чтобы получить числа, но это поможет вам только в предположении, что комбинации равновероятны.Поэтому без каких-либо статистических знаний о реализации было бы трудно сказать реальные шансы.

В отличие от того, что подразумевает Мидхат (если я правильно его понял), возможны коллизии GUID. Встроенные генераторы случайных чисел обычно реализуются с использованием начального числа на основе временных меток. MAC-адреса не уникальны по своей природе, так как они могут быть перезаписаны во многих ситуациях (и они есть, по крайней мере, в некоторых случаях, о которых я знаю). Возможно, что два генератора GUID получат одинаковый ввод и, таким образом, выдадут одинаковый вывод.

Идентификаторы GUID имеют длину 128 бит, поэтому «их хватит на всех», но это не гарантирует, что коллизий не произойдет.

1
ответ дан 18 December 2019 в 13:12
поделиться

Проведя последние 25 лет, работая с RPC и COM (где GUID и UUID имеют решающее значение) и работая с распределенными базами данных, где GUID используются в качестве уникальных идентификаторов строк, я никогда не сталкивался с проблемой коллизии - были ли они созданы на одиночные машины или разные машины. Еще один интересный подход к этому из MSDN, где как rowid они живут намного дольше, чем как объекты: http://weblogs.asp.net/wwright/archive/2007/11/04/the-gospel -of-the-guid-and-why-it-sizes.aspx

1
ответ дан 18 December 2019 в 13:12
поделиться

Это это не то, о чем вы должны вообще беспокоиться. Просто работает эвристика доступности. Это «риск», о котором вы знаете и признаете, поэтому хотите о нем позаботиться. Но есть много других рисков, которые в миллионы раз более вероятны, о которых мы все еще не беспокоимся. Я думаю, чудесная книга Pro Git лучше всего говорит об этом:

Существует более высокая вероятность того, что каждый член вашей команды программистов будет атакован и убит волками в несвязанных инцидентах в одну и ту же ночь.

Вы должны были бы генерировать миллионы или миллиарды, чтобы это было хотя бы маловероятной.

0
ответ дан 18 December 2019 в 13:12
поделиться
Другие вопросы по тегам:

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