Чи GUID унікальний у 100% часу?


519

Чи GUID унікальний у 100% часу?

Чи залишиться він унікальним у кількох потоках?


264
Ні, не 100% ... Просто 99,99999999999999999999999999999999999999999999999999999999999999999999999999999;)
JohannesH

52
Перш за все, GUID не є нескінченним, це означає, що для прямого значення "100% часу", це означатиме, що незалежно від того, як довго ви продовжуєте генерувати GUID, вони завжди будуть унікальними. Це не так. Крім того, оскільки оригінальна реалізація, де унікальний serial / id / MAC мережевої картки використовувалася для створення частини ключа, з різних причин GUID вже не є унікальним у глобальному масштабі . Однак це локально унікально. Іншими словами, якщо ви продовжуєте генерувати GUID на одній машині, ви не отримаєте дублікатів.
Лассе В. Карлсен

36
@ojrac Я просто вирішую округлити ...: P
Йоханнес

403
Кожен раз, коли я генерую GUID, я відчуваю, що я краду його із Всесвіту. Іноді я думаю про злих людей, які генерують набагато більше GUID, ніж їм потрібно, і ці марно розроблені GUID так самотні, що не використовуються і не створюються знову ...
asavartsov

29
@asavartsov Я думаю, що вам сподобається wasteaguid.info ^ _ ^
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 - це специфічна реалізація стандарту UUID від Microsoft. Отже, це і те, і інше. Глобально унікальний ідентифікатор проти універсально унікальний ідентифікатор.
Адам Девіс

40
Технічно це не 2 ^ 128, тому що в v4 GUID у вас є одна шестигранна цифра, яка завжди буде 4 (ефективно видаляючи 4 біти), а два біти далі також зарезервовані. Однак 2 ^ 122 дійсних V4 GUID все ще залишає приблизно 5x10 ^ 36, що буде робити для мене. і для вас теж. Кожна зірка повинна приймати приблизно 1,1х10 ​​^ 14 GUID-файлів за штуку.
Андрій Шеланський

67
Якщо ви схожі на мене, то ви хочете знати , що 2^128виписано приблизно: 34,028,236,692,093,846,346,337,460,743,177,000,000. Статистично, якщо ви розраховували 1000 GUID щосекунди, для отримання дублікату все одно знадобиться трильйони років.
Суб’єкт

26
Я просто подумав, що це смішно читати, тож тут весело, хлопці :) Тридцять чотири undecillion двадцять вісім decillion дваста тридцять шість nonillion шістсот дев'яносто два octillion дев'яносто три septillion вісімсот сорок шість sextillion триста сорок шість quintillion триста тридцять сім quadrillion чотириста шістдесят трильйон сімсот сорок три мільярди сто сімдесят сім мільйонів
hjavaher

85

Якщо ви боїтесь одних і тих же значень GUID, тоді покладіть два з них поруч.

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

Якщо ви занадто параноїк, тоді покладіть три.


63
Ви повинні бути дуже, дуже, дуже, дуже параноїком, щоб додати 3 GUID.
harsimranb

25
@harsimranb Ні ... дуже, дуже, дуже, дуже параноїчний - це 6 GUID. Параноїд - один доданий, дуже параноїчний - два додані тощо.
Суамер

36
@Suamere Я створив веб-сайт для обчислення рівня вашого параноїка jogge.github.io/HowParanoidAmI
Jogge

3
@Jogge xD Це дивовижно, lol Після 9 9 999999999у вашій формі, я думаю, що Параноїя згорне мій браузер.
Суамер

66

Проста відповідь - так.

Реймонд Чен написав чудову статтю про GUID та чому підряди GUID не гарантуються унікальними. У статті йдеться про деяку глибину щодо того, як генеруються GUID, та даних, які вони використовують для забезпечення унікальності, які повинні пояснювати, чому вони такі :-)


23
Я думаю, що стаття Чена посилається на V1 алгоритму генерації GUID, який використовує MAC-адресу та часову позначку - поточний V4 використовує замість цього псевдовипадкове число: en.wikipedia.org/wiki/Globally_Unique_Identifier#Algorithm
Barrett

2
посилання мертва - 403 Заборонено
день


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". Це збіг чи є пояснення за цим?

Тепер, коли googling для частини 4 в GUID, я виявив приблизно 125 000 звернень з томами GUID.

Висновок: Що стосується томів GUID, вони не такі унікальні, як інші GUID.


31
Пам'ятаєте, що Super Mario Bros 3 оголошення з 80-х? Усі ті кричать "Маріо! Маріо! Маріо!" у всьому світі трохи засмутила випадковість Всесвіту.
MGOwen

24
Якщо ви вручну інсталюєте Office 2010 з msiexec, він перераховує всі MSI GUID програми офісу. Всі вони заклинають 0FF1CE. Схоже, що Microsoft має досить ... нещільну ... інтерпретацію, як створити GUID;)
Марк Хендерсон

3
Ці GUID-файли розділів були створені разом у 2009-12-17 @ 14:47:45 PM UTC. Вони унікальні для вашої машини, але ставити "mario" як ідентифікатор вузла неправильно - це означає, що вони не відповідають стандартам RFC-4122. Аналогічно, 0FF1CEGUID підпадають під розділ «Сумісність NCS назад» RFC-4122, але навряд чи Microsoft дотримується правил NCS для цих значень.
Стівен Клірі

16
Я це знав, адміністрація безпеки Nintendo поставила під загрозу генератори випадкових чисел.
MetaGuru

1
можливо, це той самий бальний парк, як назва компанії, що виробляє мінеральну воду (чула, що вони лідирують на ринку) Evian. Написаний назад дає Naive :-)
Маріуш

31

Це не повинно статися. Однак, коли .NET перебуває під великим навантаженням, можна отримати повторювані напрямні. У мене є два різних веб-серверів, що використовують два різних sql-сервери. Я пішов об’єднати дані і виявив, що маю 15 мільйонів путівників і 7 дублікатів.


1
Як це можливо на двох різних машинах? Я думав, що частиною GUID є назва машини? (не сперечаючись ... просто питаю)
Джон Крус

8
Це справедливо лише для v1-посібників, які використовують MAC-адреси (а не ім’я машини) як частину генерації GUID. V4, фактично STD, вже не використовує адреси Mac, а псевдо випадкове число.
Xander

14
Guid.NewGuidзавжди генерує v4 GUID (і завжди є). Тім, мабуть, мав надзвичайно бідні джерела ентропії.
Стівен Клірі

1
Це коли-небудь повторювалося? це величезна проблема, якщо це так.
Zyo

1
Те саме тут під час імпорту дуже великих наборів даних. Приблизно від 10-100 мільйонів ви отримуєте дублікати від Guid.NewGuid
Stephan

28

Так, GUID завжди повинен бути унікальним. Він заснований на апаратному та часовому режимі, а також кілька додаткових біт, щоб переконатися, що він унікальний. Я впевнений, що теоретично можна одержати два однакових, але в реальному сценарії надзвичайно малоймовірно.

Ось чудова стаття Реймонда Чена про Guids:

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


5
Ця стаття досить стара і стосується v1 GUID. v4 використовує не апаратний / часовий, а алгоритм випадкових чисел. en.wikipedia.org/wiki/Globally_unique_identifier#Algorithm
Mani Gandham

Це посилання розірвано
Marcel


23

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

Кілька потоків, що виділяють нові напрямні, отримають унікальні значення, але ви повинні зрозуміти, що функція, яку ви викликаєте, є безпечною для потоків. У якому це середовищі?


19

Ерік Ліпперт написав дуже цікаву серію статей про GUID.

У світі є на замовлення 2 30 персональних комп’ютерів (і, звичайно, безліч портативних пристроїв або комп'ютерних пристроїв, що не мають ПК, які мають більш-менш однакові рівні обчислювальної потужності, але дозволяють їх ігнорувати). Припустимо, що ми ставимо перед усіма цими ПК у світі завдання створення GUID; якщо кожен може створити, скажімо, 2 20 GUID в секунду, то приблизно через 2 72 секунди - сто п’ятдесят трильйонів років - у вас буде дуже великий шанс створити зіткнення з вашим конкретним GUID. А шанси зіткнення виходять досить добрими лише через тридцять трильйонів років.


28
... і він продовжує в наступному абзаці: "Але це шукає зіткнення з конкретним GUID. [...] Отже, якщо ми покладемо ці мільярди ПК на роботу, генеруючи 122-бітні GUID, випадковість, ймовірність того, що двоє з них десь там зіткнуться, стає дійсно високим після того, як генерується приблизно 2 ^ 61 GUID. Оскільки ми припускаємо, що близько 2 ^ 30 машин роблять 2 ^ 20 GUID в секунду, ми очікуємо зіткнення приблизно через 2 ^ 11 секунд, що становить близько години ». (І нарешті, він пояснює, що, звичайно, не так багато генеруються GUID.)
Ар'ян,

16

Теоретично ні, вони не унікальні. Можна генерувати ідентичні орієнтири знову і знову. Однак шанси на це трапляються настільки низькі, що ви можете припустити, що вони унікальні.

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

Я зробив спробу описати корисність GUID для моєї аудиторії блогу (нетехнічні сімейні члени). Звідти (через Вікіпедію) шанси генерувати дублікат GUID:

  • 1 в 2 ^ 128
  • 1 на 340 undecillion (не хвилюйтесь, undecillion не на вікторині)
  • 1 з 3,4 × 10 ^ 38
  • 1 на 340 000 000 000 000 000 000 000 000 000 000 000 000

1
Насправді я не погоджуюся з тим, що "не хвилююся про це", хоча з іншої точки зору: якщо ви виявите зіткнення GUID, то у вашій заяві щось пішло не так. Наприклад, я використовував GUID для idempotency і зіткнувся, коли команда була надіслана двічі (з тим самим 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 ) п ^ 2/2

Тепер ми можемо прирівняти це до "прийнятної" ймовірності, скажімо, 1%:

(1-1 / 2 128 ) п ^ 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 циклів, щоб створити керівництво і не робити нічого іншого. Потім вони пройдуть ~ 111 років, перш ніж вони генерують дублікат.


Я відредагував вашу публікацію після цієї публікації - будь ласка, відредагуйте, якщо я помилився;).
shA.t

Привіт @Cine, я маю право редагувати вашу відповідь, але я вирішив цього не зробити, тому що я хочу отримати шанс, щоб ви спочатку її спростували, я, мабуть, завітаю через місяць, щоб офіційно змінити його, якщо я цього не зроблю ' не чую від тебе. Я впевнений, що ваша математика помиляється. дійсне рівняння для визначення шансу на 1% таке: ((2 ^ 128 - 1) / 2 ^ 128) ^ ((n (n-1)) / 2) = .01. Ваш показник помиляється. це не просто росіяни. Вам потрібно C (n, 2) (aka (n * (n-1)) / 2), щоб обчислити всі комбінації, коли ви створюєте "n" посібники. Дивіться тут для отримання додаткової інформації
бдивота

Спасибі Cine, я теж
наблизився

Буде потрібно 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 в секунду за 1 рік, ймовірність дубліката складе лише 50%. Або якби кожен чоловік на Землі генерував 600 000 000 GUID, була б лише 50% -ва ймовірність дубліката.


7
не є 50% шансом на те, що дублікат достатньо високий, щоб викликати страх?
disklosr

1
@disklosr Так, достатньо викликати страх, якщо ваші системи генерують 1 мільярд GUID в секунду. У надзвичайно малоймовірній події ви генеруєте цю суму, тоді просто
з'єднайте

5

У мене виник повторний GUID.

Я використовую сканер на робочих столах Neat Receipts, і він постачається з програмним забезпеченням для власних баз даних. Програмне забезпечення має функцію синхронізації з хмарою, і я продовжував отримувати помилку при синхронізації. Гандер біля журналів виявив дивовижну лінію:

"помилки": [{"код": 1, "повідомлення": "creator_guid: вже прийнято", "guide": "C83E5734-D77A-4B09-B8C1-9623CAC7B167"}]}

Я трохи не вірив, але, безумовно, досить, коли знайшов шлях до моєї локальної бази даних чистих мереж і видалив запис, що містить цей GUID, помилка перестала виникати.

Тож відповісти на ваше запитання анекдотичними доказами, ні. Дублікат можливий. Але ймовірно, що причина цього сталася не через випадковість, а через стандартну практику, яку якимось чином не дотримувався. (Мені просто не так пощастило) Однак я не можу сказати точно. Це не моє програмне забезпечення.

Їх підтримка клієнтів була НАДЗВИЧНО ввічливою і корисною, але вони, мабуть, ніколи раніше не стикалися з цим питанням, оскільки через 3 години, що спілкувалися з ними, вони не знайшли рішення. (FWIW, мене дуже вражає охайний, і цей глюк, як би не засмучував, не змінив мою думку про їхній продукт.)


19
Не вірте, у вас дублікат. Мабуть, було задіяно щось інше, наприклад, номер не був справді випадковим або проблемою в процесі синхронізації, або система намагалася записати двічі і т. Д. Проблема з програмним забезпеченням набагато частіше, ніж ви отримуєте дублікат GUID.
орад

4

MSDN :

Є дуже низька ймовірність того, що значення нового Guid дорівнює всім нулям або дорівнює будь-якому іншому Guid.


4

Якщо ваш системний годинник встановлений належним чином і не завернувся, і якщо ваш NIC має власний MAC (тобто ви не встановили спеціальний MAC), а ваш постачальник NIC не переробляє MAC (чого вони не повинні робити) але, як відомо, що відбувається), і якщо функція генерації GUID вашої системи належним чином реалізована, система ніколи не генеруватиме повторювані GUID.

Якщо всі на землі, які генерують GUID, дотримуються цих правил, то ваші GUID будуть унікальними у всьому світі.

На практиці кількість людей, які порушують правила, є низькою, і їх GUID навряд чи "втечуть". Конфлікти статистично малоймовірні.


11
Це справедливо лише для v1-посібників. V4, фактично STD, вже не використовує адреси Mac, а псевдо випадкове число.
Pita.O

1
"тоді ваша система ніколи не генерує дублікати GUID" Навіть якщо всі правила дотримувалися для керівництва v1, як ви кажете, ваша система все одно може генерувати дублікати. Ви правильніші внизу, коли ви заявляєте "Конфлікти статистично малоймовірні".
Нік Мелдрум

3

Чи GUID унікальний у 100% часу?

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


2

У більш загальному розумінні це відоме як "проблема дня народження" або "парадокс від дня народження". У Вікіпедії досить хороший огляд за адресою: Вікіпедія - проблема з днем ​​народження

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

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


Я думаю, що проблема MAC була анонімністю. Я вважаю, що використання ідентифікатора, такого як MAC-адреса, таким чином, який можна було змінити, було проблемою конфіденційності. Я вважаю, що справжній випадковий апаратний апарат дуже важкий? Cloudflare використовує камеру та ряд лавових ламп, однак я думаю, що при точному розумінні фізики навіть це не випадково? Лампова лампа Cloudflares RNG: popularmechanics.com/technology/security/news/a28921/…
Джефф Блок

2

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

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

Що робити, якщо ви отримаєте два зіткнення за одну і ту ж секунду?
Вай Ха Лі

Це найгірше, але все-таки ми не можемо створити однакових двох Guid одночасно.
Адітія Сай

Десь вони стверджують, що слід скопіювати відповідь на ТАК, а не на питання, але я зараз не такий впевнений ....
Marcel

1

Алгоритми GUID зазвичай реалізуються відповідно до специфікації GUID v4, яка по суті є псевдовипадковою рядком. На жаль, вони потрапляють до категорії "ймовірно не унікальних" з Вікіпедії (я не знаю, чому так багато людей ігнорує цей біт): "... інші версії GUID мають різні унікальні властивості та ймовірності, починаючи від гарантованої унікальності. до ймовірності не унікальності ".

Math.random()Псевдовипадкові властивості JavaScript V8 є ГОЛОВНЕМИ в унікальності, зіткнення часто виникають після декількох тисяч ітерацій, але V8 не єдиний винуватець. Я бачив зіткнення GUID у реальному світі, використовуючи як PHP, так і Ruby реалізацію GU4 v4.

Оскільки це стає все більш поширеним для масштабування генерації ідентифікаторів для декількох клієнтів та кластерів серверів, ентропія сприймає великий удар - шанси того ж випадкового насіння використовувати для отримання ескалації ідентифікатора (час часто використовується як випадкове насіння у псевдовипадкових генераторах), а зіткнення 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

Найважча частина полягає не в створенні дублюється Посібника.

Найважча частина - розроблена база даних для зберігання всіх створених, щоб перевірити, чи вона насправді дублюється.

Від WIKI:

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

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

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


0

GUID означає глобальний унікальний ідентифікатор

Якщо коротко: (підказка в назві)

Детально: GUID призначені для унікального використання; вони розраховуються випадковим методом, заснованим на годиннику комп'ютера та на самому комп’ютері, якщо ви створюєте багато GUID на одній мілісекунді на одній машині, можливо, вони можуть відповідати, але майже для всіх звичайних операцій їх слід вважати унікальними.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.