Является ли GUID уникальным в 100% случаев?

519

Является ли GUID уникальным в 100% случаев?

Он останется уникальным для нескольких потоков?

Дэвид Басараб
источник
265
Нет, не на 100% ... Всего 99,99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999%;)
JohannesH
52
Прежде всего, GUID не является бесконечным, что означает, что для буквального значения «100% времени» будет означать, что независимо от того, как долго вы продолжаете генерировать GUID, они всегда будут уникальными. Это не вариант. Кроме того, поскольку первоначальная реализация, в которой для создания части ключа использовался уникальный серийный номер / идентификатор / MAC сетевой карты, больше не используется, по разным причинам GUID на самом деле уже не является глобально уникальным. Это, однако, локально уникально. Другими словами, если вы продолжите генерировать GUID на одном компьютере, вы не получите дубликаты.
Лассе В. Карлсен
36
@ojrac Я просто хочу округлить ...: P
Йоханнес
403
Каждый раз, когда я генерирую GUID, я чувствую, что краду один из вселенной. Иногда я думаю о злых людях, которые генерируют гораздо больше GUID, чем им нужно, и эти потраченные впустую GUID настолько одиноки, что их больше не используют и не генерируют ...
asavartsov
29
@asavartsov Я думаю, вам понравится растратить на паузу ^ _ ^
Navin

Ответы:

431

Хотя каждый сгенерированный GUID не гарантированно является уникальным, общее количество уникальных ключей (2 128 или 3,4 × 10 38 ) настолько велико, что вероятность того, что одно и то же число будет сгенерировано дважды, очень мала. Например, рассмотрим наблюдаемую вселенную, которая содержит около 5 × 10 22 звезд; тогда каждая звезда может иметь 6,8 × 10 15 универсально уникальных GUID.

Из Википедии .


Это несколько хороших статей о том, как создается GUID (для .NET) и как вы можете получить такое же руководство в правильной ситуации.

https://ericlippert.com/2012/04/24/guid-guide-part-one/

https://ericlippert.com/2012/04/30/guid-guide-part-two/

https://ericlippert.com/2012/05/07/guid-guide-part-three/

​​

Адам Дэвис
источник
115
Разве они не будут называться UUID? ;)
Арафангион
28
GUID - это специфическая реализация Microsoft стандарта UUID. Итак, это оба. Глобально уникальный идентификатор против универсально уникального идентификатора.
Адам Дэвис
40
Технически это не 2 ^ 128, потому что в vID GUID у вас есть одна шестнадцатеричная цифра, которая всегда будет 4 (эффективно удаляя 4 бита), и еще два бита также зарезервированы. Тем не менее, 2 ^ 122 действительных идентификаторов GUID V4 по-прежнему оставляет около 5x10 ^ 36, что мне подойдет. и для тебя тоже. Каждой звезде нужно будет принять примерно 1.1x10 ^ 14 GUID за штуку.
Андрей Шеланский
67
Если вы похожи на меня, то вы хотите знать , что 2^128выписано приблизительно: 34,028,236,692,093,846,346,337,460,743,177,000,000. По статистике, если вы подсчитываете 1000 GUID каждую секунду, для получения дубликата все равно потребуется триллионы лет.
сущность
26
Я просто подумал, что это смешно читать, так что вот, веселитесь, ребята :) Тридцать четыре ундециллиона двадцать восемь дециллионов двести тридцать шесть ниллионов шестьсот девяносто два октиллиона девяносто три септиллиона восемьсот сорок шесть секстиллионов триста сорок шесть квинтиллионов триста тридцать семь квадриллионов четыреста шестьдесят триллионов семьсот сорок три миллиарда сто семьдесят семь миллионов
hjavaher
85

Если вы боитесь одинаковых значений GUID, поместите два из них рядом друг с другом.

Guid.NewGuid().ToString() + Guid.NewGuid().ToString();

Если вы слишком параноик, тогда поставьте три.

Бура Чухадар
источник
64
Вы должны быть очень, очень, очень, очень параноидальными, чтобы добавить 3 GUID.
harsimranb
25
@harsimranb Нет ... очень, очень, очень, очень параноидально - это 6 GUID. Параноик - это один из добавленных, очень параноик - это два добавленных и т. Д.
Суамер
37
@Suamere Я создал веб-сайт для расчета вашего уровня параноика jogge.github.io/HowParanoidAmI
Jogge
3
@ Jogge xD Это потрясающе, смеется. 999999999Я думаю, что после 9 9 в твоей форме Паранойя изменит мой Браузер.
Суамер
66

Простой ответ - да.

Раймонд Чен (Raymond Chen) написал отличную статью о GUID и о том, почему подстроки GUID не гарантируются уникальными. В этой статье мы подробно расскажем о том, как генерируются идентификаторы GUID и данные, которые они используют для обеспечения уникальности, что должно объяснить, почему они таковы :-)

СМЛ
источник
23
Я думаю , статья Чена имеет в виду V1 алгоритма генерации GUID, который использует MAC - адрес & метку времени - текущий V4 использует псевдослучайное число вместо того, чтобы : en.wikipedia.org/wiki/Globally_Unique_Identifier#Algorithm
Барретта
2
ссылка мертва - 403 запрещено
дая
Вот ссылка: devblogs.microsoft.com/oldnewthing/20080627-00/?p=21823
Оланреваю О. Джозеф
39

Как примечание, я играл с томами GUID в Windows XP. Это очень непонятная структура разделов с тремя дисками и четырнадцатью томами.

\\?\Volume{23005604-eb1b-11de-85ba-806d6172696f}\ (F:)
\\?\Volume{23005605-eb1b-11de-85ba-806d6172696f}\ (G:)
\\?\Volume{23005606-eb1b-11de-85ba-806d6172696f}\ (H:)
\\?\Volume{23005607-eb1b-11de-85ba-806d6172696f}\ (J:)
\\?\Volume{23005608-eb1b-11de-85ba-806d6172696f}\ (D:)
\\?\Volume{23005609-eb1b-11de-85ba-806d6172696f}\ (P:)
\\?\Volume{2300560b-eb1b-11de-85ba-806d6172696f}\ (K:)
\\?\Volume{2300560c-eb1b-11de-85ba-806d6172696f}\ (L:)
\\?\Volume{2300560d-eb1b-11de-85ba-806d6172696f}\ (M:)
\\?\Volume{2300560e-eb1b-11de-85ba-806d6172696f}\ (N:)
\\?\Volume{2300560f-eb1b-11de-85ba-806d6172696f}\ (O:)
\\?\Volume{23005610-eb1b-11de-85ba-806d6172696f}\ (E:)
\\?\Volume{23005611-eb1b-11de-85ba-806d6172696f}\ (R:)
                                     | | | | |
                                     | | | | +-- 6f = o
                                     | | | +---- 69 = i
                                     | | +------ 72 = r
                                     | +-------- 61 = a
                                     +---------- 6d = m

Дело не в том, что GUID очень похожи, а в том, что во всех GUID есть строка «mario». Это совпадение или есть объяснение этому?

Теперь при поиске части 4 в GUID я обнаружил около 125 000 обращений с томами GUID.

Вывод: когда дело касается томов GUID, они не так уникальны, как другие GUID.

Джонас Галле
источник
31
Помните рекламу Super Mario Bros 3 из 80-х? Все эти люди кричат ​​"Марио! Марио! Марио!" во всем мире немного расстраивает случайность вселенной.
MGOwen
24
Если вы вручную удалите Office 2010 с msiexec, в нем перечислены все идентификаторы GUI MSI офисной программы. Они все по буквам 0FF1CE. Похоже, что у Microsoft довольно ... свободная ... интерпретация того, как генерировать GUID;)
Марк Хендерсон,
3
Эти GUID разделов были созданы вместе в 2009-12-17 @ 14:47:45 UTC. Они уникальны для вашей машины, но указание неверного идентификатора узла «mario» означает, что они не соответствуют RFC-4122. Аналогично, 0FF1CEGUID попадают в раздел «Обратная совместимость NCS» в RFC-4122, но маловероятно, что Microsoft соблюдает правила NCS для этих значений.
Стивен Клири
16
Я знал это, Администрация безопасности Nintendo скомпрометировала генераторы случайных чисел.
MetaGuru
1
может быть, это тот же самый парк с мячами, как название компании, производящей минеральную воду (слышал, что они лидируют на рынке) Evian. Записанный в обратном направлении дает Наивный :-)
Мариуш
31

Этого не должно быть. Однако, когда .NET находится под большой нагрузкой, возможно получить дубликаты руководств. У меня есть два разных веб-сервера, использующие два разных сервера SQL. Я пошел, чтобы объединить данные и обнаружил, что у меня было 15 миллионов направляющих и 7 дубликатов.

Тим
источник
1
Как это возможно на двух разных машинах? Я думал, что частью GUID было имя машины? (не спорю ... просто спрашиваю)
Джон Круз
8
Это будет верно только для направляющих v1, которые используют MAC-адреса (не имя компьютера) как часть генерации GUID. Версия v4, которая является де-факто STD, больше не использует адреса Mac, а является псевдослучайным числом.
Ксандер
14
Guid.NewGuidвсегда генерирует GUID v4 (и всегда имеет). У Тима, должно быть, были чрезвычайно плохие источники энтропии.
Стивен Клири
1
Это когда-либо было воспроизведено? это огромная проблема, если это так.
Зё
1
То же самое и при импорте очень больших наборов данных. Приблизительно от 10 до 100 миллионов вы получаете дубликаты от Guid.NewGuid
Стефан Бальцер
28

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

Вот отличная статья Раймонда Чена о гидах:

https://blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx

Эрик З Борода
источник
5
Эта статья довольно старая и ссылается на v1 GUID. v4 использует не аппаратное обеспечение / время, а алгоритм случайных чисел. en.wikipedia.org/wiki/Globally_unique_identifier#Algorithm
Мани Гэндхэм
Ссылка не работает
Marcel
Вот ссылка: devblogs.microsoft.com/oldnewthing/20080627-00/?p=21823
Оланреваю О. Джозеф
23

Направляющие статистически уникальны. Шансы двух разных клиентов, генерирующих один и тот же Guid, бесконечно малы (при условии отсутствия ошибок в коде, генерирующем Guid). Вы можете также беспокоиться о сбое вашего процессора из-за космического луча и принятия решения, что 2 + 2 = 5 сегодня.

Несколько потоков, выделяющих новые направляющие, получат уникальные значения, но вы должны понимать, что вызываемая вами функция является поточно-ориентированной. В какой среде это?

Роб Уокер
источник
19

Эрик Липперт написал очень интересную серию статей о GUID.

В мире насчитывается порядка 2 30 персональных компьютеров (и, конечно, множество портативных устройств или вычислительных устройств, не относящихся к ПК, которые имеют более или менее одинаковые уровни вычислительной мощности, но давайте их игнорируем). Давайте предположим, что мы поставили все эти компьютеры в мире на задачу генерации GUID; если каждый из них может генерировать, скажем, 2 20 GUID в секунду, то примерно через 2 72 секунды - сто пятьдесят триллионов лет - у вас будет очень высокая вероятность возникновения коллизии с вашим конкретным GUID. И шансы столкновения становятся довольно хорошими уже через тридцать триллионов лет.

Паоло Моретти
источник
28
... и он продолжает в следующем параграфе: «Но это ищет коллизию с определенным GUID. [...] Так что, если мы заставим эти миллиард ПК работать, генерируя GUID со случайной 122-битной случайностью, вероятность того, что два из них где-то там будут сталкиваться, становится очень высоким после того, как генерируется около 2 ^ 61 GUID.Так как мы предполагаем, что около 2 ^ 30 машин делают 2 ^ 20 GUID в секунду, мы ожидаем столкновение после примерно 2 ^ 11 секунд, что составляет около часа ". (И, наконец, он объясняет, что, конечно, генерируется не так много GUID.)
Арджан
16

Теоретически нет, они не уникальны. Можно генерировать идентичный гид снова и снова. Однако шансы на то, что это произойдет, настолько низки, что можно предположить, что они уникальны.

Я читал ранее, что шансы настолько малы, что вам действительно нужно беспокоиться о чем-то другом - например, о том, что ваш сервер самопроизвольно сгорает, или о других ошибках в вашем коде. То есть, предположите, что он уникален, и не создавайте никакого кода, чтобы «ловить» дубликаты - тратьте свое время на что-то более вероятное (то есть на что - то еще).

Я попытался описать полезность GUID для аудитории моего блога (нетехнических членов семьи). Оттуда (через Википедию) вероятность создания дубликата GUID:

  • 1 в 2 ^ 128
  • 1 на 340 ундециллионов (не волнуйтесь, ундециллион нет в викторине)
  • 1 в 3,4 × 10 ^ 38
  • 1 из 340 000 000 000 000 000 000 000 000 000 000 000 000
Майкл Харен
источник
1
На самом деле, я не согласен с «не беспокоиться об этом», хотя и с другой позиции: если вы обнаружите коллизию GUID, значит, что-то пошло не так с вашим приложением. Я использовал GUID, например, для идемпотентности, и получил коллизию, когда команда была отправлена ​​дважды (с одним и тем же GUID).
Кенни Хунг,
9

Никто, кажется, не упоминает фактическую математику вероятности его возникновения.

Во-первых, давайте предположим, что мы можем использовать все 128-битное пространство (Guid v4 использует только 122-битные).

Мы знаем, что общая вероятность НЕ получить дубликат в nпиках:

(1-1 / 2 128 ) (1-2 / 2 128 ) ... (1- (n-1) / 2 128 )

Поскольку 2 128 намного больше, чем n, мы можем приблизить это к:

(1-1 / 2 128 ) n (n-1) / 2

И поскольку мы можем предположить n, что он намного больше 0, мы можем приблизить его к:

(1-1 / 2 128 ) n ^ 2/2

Теперь мы можем приравнять это к «приемлемой» вероятности, скажем, 1%:

(1-1 / 2 128 ) n ^ 2/2 = 0,01

За что мы решаем nи получаем:

n = sqrt (2 * log 0,01 / log (1-1 / 2 128 ))

Какой Wolfram Alpha получит 5,598318 × 10 19

Чтобы представить это число в перспективе, давайте возьмем 10000 машин, каждая из которых имеет 4-ядерный процессор, работает на частоте 4 ГГц и тратит 10000 циклов на генерацию Guid и больше ничего не делает. Затем потребуется около 111 лет, прежде чем они создадут дубликат.

киношный
источник
Я отредактировал ваш пост после этого поста - пожалуйста, отредактируйте, если я сделал ошибку;).
shA.t
Привет @Cine, у меня есть право редактировать твой ответ, но я решил не делать этого, потому что я хочу получить шанс для тебя сначала опровергнуть его, я, вероятно, приду через месяц, чтобы официально изменить его, если я не ' не слышу от вас. Я вполне уверен, что ваша математика неверна. Реальное уравнение для определения вероятности 1% состоит в следующем: ((2 ^ 128 - 1) / 2 ^ 128) ^ ((n (n-1)) / 2) = 0,01. Ваш показатель неверен. это не просто п. Вам нужен C (n, 2) (aka (n * (n-1)) / 2), чтобы вычислить все комбинации, когда вы генерируете "n" направляющих. Смотрите здесь для получения дополнительной информации
Viggity
Благодаря Cine, я тоже в итоге приблизился к n ^
2/2,
10000 машин потребуется 111 лет, чтобы сгенерировать каждый возможный GUID, а затем сгенерировать дубликат. Дубликат, однако, может появиться задолго до того, как будут сгенерированы все возможные GUID. Я думаю, что приблизительные временные рамки будут зависеть от того, насколько «случайным» будет процесс генерации GUID.
Джордж К
@ GeorgeK Я думаю, вы не поняли ... 10000 машин понадобится 111 лет, чтобы с 1% вероятностью встретить дубликат. Но да, эта математика конечно предполагает, что генератор случайных чисел является абсолютно случайным.
Cine
7

С http://www.guidgenerator.com/online-guid-generator.aspx

Что такое GUID?

GUID (или UUID) является аббревиатурой от «Глобально уникальный идентификатор» (или «Универсально уникальный идентификатор»). Это 128-битное целое число, используемое для идентификации ресурсов. Термин GUID обычно используется разработчиками, работающими с технологиями Microsoft, в то время как UUID используется везде.

Насколько уникален GUID?

128-бит достаточно велик, а алгоритм генерации настолько уникален, что если в течение одного года генерировать 1 000 000 000 идентификаторов GUID в секунду, вероятность дублирования составит всего 50%. Или, если бы каждый человек на Земле генерировал 600 000 000 GUID, вероятность дубликата была бы только 50%.

Тоно Нам
источник
7
isn't a 50% chance of a duplicate high enough to cause fear?
disklosr
1
@disklosr да, этого достаточно, чтобы вызвать страх, если ваши системы генерируют 1 миллиард GUID в секунду. В крайне маловероятном случае вы генерируете эту сумму, а затем просто
соединяете
5

Я испытал дубликат GUID.

Я использую настольный сканер Neat Receipts, и он поставляется с проприетарным программным обеспечением для баз данных. В программном обеспечении есть функция синхронизации с облаком, и я получал сообщение об ошибке при синхронизации. Гусак на бревнах показал удивительную черту:

"errors": [{"code": 1, "message": "creator_guid: уже занят", "guid": "C83E5734-D77A-4B09-B8C1-9623CAC7B167"}]}

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

Таким образом, чтобы ответить на ваш вопрос с неподтвержденными данными, нет. Дубликат возможен. Но вполне вероятно, что причина, по которой это произошло, была не случайностью, а из-за несоблюдения какой-либо стандартной практики. (Мне просто не везет) Однако точно сказать не могу. Это не мое программное обеспечение.

Их служба поддержки была ОЧЕНЬ вежливой и предупредительной, но они никогда не сталкивались с этой проблемой раньше, потому что после трех с лишним часов разговора по телефону они не нашли решения. (FWIW, Я очень впечатлен Neat, и этот глюк, хотя и расстраивающий, не изменил мое мнение об их продукте.)

exintrovert
источник
19
Не верь, что у тебя есть дубликат. Возможно, в этом было что-то еще, например, число не было действительно случайным или проблема в процессе синхронизации, или система пыталась сделать запись дважды, и т. Д. Проблема с программным обеспечением гораздо более вероятна, чем получение дублированного идентификатора GUID.
Орад
4

MSDN :

Существует очень низкая вероятность того, что значение нового Guid равно нулю или равно любому другому Guid.

Якуб Штурц
источник
4

Если ваши системные часы настроены правильно и не были обернуты, и если у вашей сетевой карты есть свой собственный MAC (то есть вы не установили пользовательский MAC), и ваш поставщик сетевой карты не перерабатывал MAC (что они не должны делать) но это, как известно, происходило), и если функция генерации GUID вашей системы правильно реализована, то ваша система никогда не будет генерировать дубликаты GUID.

Если каждый на земле, кто генерирует GUID, следует этим правилам, тогда ваши GUID будут глобально уникальными.

На практике количество людей, нарушающих правила, невелико, и их GUID вряд ли "сбегут". Конфликты статистически маловероятны.

DrPizza
источник
11
Это было бы верно только для направляющих v1. Версия v4, которая является де-факто STD, больше не использует адреса Mac, а является псевдослучайным числом.
Pita.O
1
«Тогда ваша система никогда не будет генерировать дубликаты GUID». Даже если все правила были соблюдены для guid версии 1, как вы говорите, ваша система все равно может генерировать дубликаты. Вы более правы внизу, когда заявляете: «Конфликты статистически маловероятны».
Ник Мелдрам
3

Является ли GUID уникальным в 100% случаев?

Не гарантируется, так как существует несколько способов создания одного. Однако вы можете попытаться рассчитать вероятность создания двух идентичных идентификаторов GUID, и вы поймете, что идея: идентификатор GUID имеет 128 битов, следовательно, имеется 2 128 различных идентификаторов GUID - намного больше, чем звезд в известной вселенной. Прочитайте статью в Википедии для более подробной информации.

Конрад Рудольф
источник
2

В более общем смысле это известно как «проблема дня рождения» или «парадокс дня рождения». Википедия имеет довольно хороший обзор по адресу: Википедия - день рождения проблема

В очень грубых выражениях, квадратный корень из размера пула является приблизительным приближением, когда можно ожидать 50% вероятности дублирования. Статья включает в себя таблицу вероятностей размера пула и различных вероятностей, включая строку для 2 ^ 128. Таким образом, для вероятности коллизии в 1% вы можете случайно выбрать 2,6 * 10 ^ 18 128-битных чисел. Вероятность 50% требует 2,2 * 10 ^ 19 пиков, в то время как SQRT (2 ^ 128) составляет 1,8 * 10 ^ 19.

Конечно, это просто идеальный случай действительно случайного процесса. Как уже упоминалось, многое зависит от этого случайного аспекта - насколько хороши генератор и семена? Было бы хорошо, если бы была некоторая аппаратная поддержка, чтобы помочь с этим процессом, который был бы более пуленепробиваемым, за исключением того, что все может быть подделано или виртуализировано. Я подозреваю, что это может быть причиной того, что MAC-адреса / временные метки больше не включены.

mszil
источник
Я думаю, что проблема MAC была анонимностью. Я считаю, что использование идентификатора, такого как MAC-адрес, способом, который можно изменить, было проблемой конфиденциальности. Я считаю, что истинное случайное в аппаратном обеспечении очень сложно? Cloudflare использует камеру и ряд лавовых ламп, однако я думаю, что при точном понимании физики даже это не случайно? Лавовая лампа с облачными вспышками ГСЧ: Popularmechanics.com/technology/security/news/a28921/…
Джефф Блок
2

Для лучшего результата лучше всего добавить GUID с отметкой времени (просто чтобы убедиться, что она остается уникальной)

Guid.NewGuid().ToString() + DateTime.Now.ToString();
Адитья Сай
источник
Что если вы получите два столкновения в одну секунду?
Вай Ха Ли
Это наихудший случай, но тем не менее, мы не можем генерировать одинаковые два Guid одновременно.
Адития Сай
Где-то они утверждают, что нужно копировать из ответа на SO, а не на вопрос, но я не очень уверен сейчас ...
Marcel
Как насчет Guid.NewGuid (). ToString (). Replace ("-", "") + DateTime.Now.Ticks .... Не вызывает сомнений уникальность и может использоваться в качестве первичного ключа
d-кодер
1

Алгоритмы GUID обычно реализуются в соответствии со спецификацией GUID v4, которая по сути является псевдослучайной строкой. К сожалению, они попадают в категорию «вероятно, не уникальных» , из Википедии (я не знаю, почему так много людей игнорируют этот бит): «... другие версии GUID имеют разные свойства уникальности и вероятности, начиная от гарантированной уникальности скорее всего, не уникальность. "

Псевдослучайные свойства JavaScript V8 Math.random() ужасны в своей уникальности, часто возникают коллизии после нескольких тысяч итераций, но V8 не единственный виновник. Я видел реальные коллизии GUID с использованием реализаций GUID v4 как в PHP, так и в Ruby.

Поскольку масштабирование генерации идентификаторов на нескольких клиентах и ​​кластерах серверов становится все более распространенным явлением, энтропия имеет большой успех - вероятность того, что одно и то же случайное начальное число используется для генерации повышенного идентификатора (время часто используется как случайное начальное число в псевдослучайных генераторах), и коллизии GUID увеличиваются от «вероятно, не уникального» до «очень вероятно, вызовет много проблем».

Чтобы решить эту проблему, я решил создать алгоритм идентификации, который мог бы безопасно масштабироваться и обеспечивать более надежную защиту от столкновений. Для этого используются временная метка, счетчик клиента в памяти, отпечаток клиента и случайные символы. Комбинация факторов создает дополнительную сложность, которая особенно устойчива к коллизиям, даже если вы масштабируете ее на нескольких хостах:

http://usecuid.org/

Эрик Эллиотт
источник
1

Я видел, что GUID не были уникальными во время многопоточного / многопроцессорного юнит-тестирования (тоже?). Я предполагаю, что это связано с тем, что при прочих равных условиях происходит одинаковое заполнение (или отсутствие заполнения) псевдослучайных генераторов. Я использовал его для генерации уникальных имен файлов. Я обнаружил, что ОС намного лучше делает это :)

Троллинг оповещения

Вы спрашиваете, являются ли GUID уникальными на 100%. Это зависит от количества идентификаторов GUID, среди которых оно должно быть уникальным. Поскольку количество идентификаторов GUID приближается к бесконечности, вероятность дублирования идентификаторов GUID приближается к 100%.

Роберт Йоргенсгаард Энгдаль
источник
1

Ответ "Является ли GUID уникальным на 100%?" это просто "Нет" .

  • Если вы хотите 100% уникальность GUID, сделайте следующее.

    1. генерировать GUID
    2. проверьте, существует ли этот GUID в столбце таблицы, где вы ищете уникальность
    3. если существует, то перейдите к шагу 1 или к шагу 4
    4. используйте этот GUID как уникальный.
Баба Хедкар
источник
Это не делает его уникальным. Ваш алгоритм не сохраняет вновь созданный GUID в таблице. В следующий раз, когда вы создадите GUID, он может столкнуться с ранее. Если бы вы вставили GUID в таблицу, GUID мог уже быть вставлен другим узлом, между которым вы проверили уникальность и вставили GUID в таблицу. GUID уникален только в ВАШЕЙ системе, поэтому, если вы импортируете или объединяете две базы данных, они все равно могут столкнуться. Также GUID часто используются, когда у вас нет доступа к центризованной базе данных. Если у вас есть почему бы просто не извлечь идентификатор из базы данных?
Бег трусцой
0

Самое сложное не в создании дублируемого Guid.

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

Из Вики:

Например, число случайных UUID версии 4, которые должны быть сгенерированы для того, чтобы иметь вероятность 50%, по крайней мере, одного столкновения, составляет 2,71 квинтиллиона, вычисляемое следующим образом:

введите описание изображения здесь

Это число эквивалентно генерации 1 миллиарда UUID в секунду в течение примерно 85 лет, и файл, содержащий такое количество UUID, по 16 байт на UUID, будет примерно 45 эксабайт, во много раз больше, чем самые большие базы данных, которые в настоящее время существуют, порядка сотен петабайт

Тронг Хип Ле
источник
0

GUID расшифровывается как глобальный уникальный идентификатор

Вкратце: (ключ в названии)

Подробно: GUID разработаны так, чтобы быть уникальными; они рассчитываются случайным методом на основе часов компьютера и самого компьютера. Если вы создаете много идентификаторов GUID в одну и ту же миллисекунду на одной и той же машине, возможно, они могут совпадать, но почти для всех обычных операций их следует считать уникальными.

Бенджамин Робертс
источник