क्या GUID अद्वितीय 100% समय है?


519

क्या GUID अद्वितीय 100% समय है?

क्या यह कई धागों पर अद्वितीय रहेगा?


264
नहीं, 100% ... बस 99,999999999999999999999999999999999999999999999999999999999999999999999999999%;)
JohannesH

52
सबसे पहले, एक GUID अनंत नहीं है, जिसका अर्थ है कि "समय के 100%" के शाब्दिक अर्थ के लिए, इसका मतलब यह होगा कि कोई फर्क नहीं पड़ता कि आप कितनी देर तक GUID का उत्पादन करते रहें, वे हमेशा अद्वितीय रहेंगे। यह मामला नहीं है। इसके अलावा, मूल कार्यान्वयन के बाद, जहां कुंजी के एक हिस्से का उत्पादन करने के लिए नेटवर्क कार्ड अद्वितीय सीरियल / आईडी / मैक का उपयोग नहीं किया जाता था, विभिन्न कारणों से, एक GUID वास्तव में विश्व स्तर पर अद्वितीय नहीं है। हालांकि, यह स्थानीय रूप से अद्वितीय है। दूसरे शब्दों में, यदि आप एक मशीन पर GUID का उत्पादन करते रहते हैं, तो आपको डुप्लिकेट नहीं मिलेगा।
लास वी। कार्लसन

36
@ योजना मैं बस नीचे राउंड करने का विकल्प चुनती हूं ...: पी
जोहान्स

403
हर बार जब मुझे लगता है कि मुझे लगता है कि मैं यूनिवर्स से चोरी कर रहा हूं। कभी-कभी मैं उन बुरे लोगों के बारे में सोचता हूँ जो ज़रूरत से ज़्यादा
GUID बनाते

29
@asavartsov मुझे लगता है कि आप wasteaguid.info ^ _ ^ पसंद करेंगे
नवीन

जवाबों:


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
A GUID is microsoft's specifica implementation of the UUID standard. So, it's both. Globally unique ID vs Universally unique ID.
Adam Davis

40
तकनीकी रूप से, यह 2 ^ 128 नहीं है, क्योंकि v4 GUID में, आपके पास एक हेक्स अंक है जो हमेशा 4 होगा (प्रभावी रूप से 4 बिट्स को हटा रहा है), और आगे दो बिट्स भी आरक्षित हैं। हालांकि, 2 ^ 122 वैध V4 GUIDs अभी भी लगभग 5x10 ^ 36 छोड़ते हैं, जो मेरे लिए करेंगे। और तुम्हारे लिए भी। प्रत्येक स्टार को सिर्फ 1.1x10 ^ 14 GUIDs एपल के बारे में स्वीकार करना होगा।
एंड्रयू शेलानस्की 18

67
अगर तुम मेरे जैसे हो, तो तुम जानना चाहोगे कि 2^128बाहर लिखा लगभग है 34,028,236,692,093,846,346,337,460,743,177,000,000:। सांख्यिकीय रूप से, यदि आप हर सेकंड 1000 GUID की गणना करते हैं, तो एक डुप्लिकेट प्राप्त करने में अभी भी खरबों साल लगेंगे।
इकाई

26
मैंने सोचा था कि इसे पढ़ने के लिए मज़ेदार लोग यहाँ हैं, मजेदार लोग हैं :) थर्टी फोर अडसीलीन अट्ठाईस डिसमिलीन दो सौ तीस छक्का नॉनविल छः सौ निन्यानवे दो ऑक्टिलियन नब्बे तीन सौ चालीस छः सेक्स्टिलियन तीन सौ छब्बीस क्विंटल तीन सौ सैंतीस क्वाड्रिलियन चार साठ ट्रिलियन सात चालीस तीन अरब एक सौ सत्तर सात दस लाख
हजवीर ११'१३

85

यदि आप समान GUID मानों से डरते हैं तो उनमें से दो को एक दूसरे के बगल में रखें।

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

अगर आप बहुत ज्यादा पागल हैं तो तीन डाल दें।


63
आपको 3 GUID को जोड़ने के लिए बहुत, बहुत, बहुत, बहुत पागल होना होगा।
हरसिमरनब

25
@harsimranb नहीं ... बहुत, बहुत, बहुत, बहुत ही पागल 6 GUID है। पैरानॉयड को एक जोड़ा गया है, बहुत पागल को दो जोड़ा गया है, आदि
Suamere

36
@Suamere मैं अपने पागल स्तर की गणना के लिए एक वेबसाइट बनाई है jogge.github.io/HowParanoidAmI
Jogge

3
@Jogge xD यह अद्भुत, योग्य है। 9 9 के बाद 999999999आपके रूप में, मुझे लगता है कि व्यामोह मेरे ब्राउज़र को एक अलग कर देगा।
सुमेरे

66

सरल उत्तर है हां।

रेमंड चेन ने GUIDs पर एक शानदार लेख लिखा था और GUIDs के सबस्ट्रिंग की गारंटी अद्वितीय क्यों नहीं है । जिस तरह से GUID उत्पन्न होते हैं और जिस डेटा का उपयोग वे विशिष्टता को सुनिश्चित करने के लिए करते हैं, लेख कुछ गहराई तक जाता है, जो यह बताने के लिए कुछ लंबाई में जाना चाहिए कि वे :-) क्यों हैं?


23
मुझे लगता है कि चेन का लेख GUID पीढ़ी के एल्गोरिथ्म के V1 का जिक्र कर रहा है, जो एक मैक पते और टाइमस्टैम्प का उपयोग करता है - वर्तमान V4 इसके बजाय एक छद्म यादृच्छिक संख्या का उपयोग करता है: en.wikipedia.org/wiki/Glo वैश्विक रूप से -Unique_Identifier#Algorithm
Barrett

2
लिंक मृत है - 403 निषिद्ध
दिन

यहाँ लिंक दिया गया है: devblogs.microsoft.com/oldnewthing/20080627-00/?p=21823
ओ। जोसेफ

39

एक साइड नोट के रूप में, मैं Windows XP में वॉल्यूम GUIDs के साथ खेल रहा था। यह एक बहुत ही अस्पष्ट विभाजन लेआउट है जिसमें तीन डिस्क और चौदह खंड हैं।

\\?\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" है। क्या यह संयोग है या इसके पीछे कोई स्पष्टीकरण है?

अब, जब GUID में भाग 4 के लिए googling मैंने वॉल्यूम GUID के साथ लगभग 125.000 हिट पाया।

निष्कर्ष: जब वॉल्यूम GUID की बात आती है तो वे अन्य GUID की तरह अद्वितीय नहीं होते हैं।


31
याद है कि 80 के दशक से सुपर मारियो 3 विज्ञापन? उन सभी लोगों को चिल्ला रहा है "मारियो! मारियो! मारियो!" दुनिया भर में ब्रह्मांड की यादृच्छिकता को थोड़ा परेशान करता है।
MGOwen

24
यदि आप Office 2010 को मैन्युअल रूप से अन-इंस्टॉल करते हैं msiexec, तो यह कार्यालय के सभी MSI GUID को सूचीबद्ध करता है। वे सभी जादू करते हैं 0FF1CE। Microsoft की तरह लगता है एक बहुत ... ढीला ... कैसे एक GUID उत्पन्न करने के लिए व्याख्या;)
मार्क हेंडरसन

3
ये विभाजन GUIDs सभी को एक साथ 2009-12-17 @ 2:47:45 PM UTC पर बनाया गया था। वे आपकी मशीन के लिए अद्वितीय हैं, लेकिन नोड पहचानकर्ता के रूप में "मारियो" डालना गलत है - इसका मतलब है कि वे RFC-4122-अनुरूप नहीं हैं। इसी तरह, 0FF1CEGUIDs RFC-4122 के "NCS पीछे की ओर संगतता" खंड के अंतर्गत आते हैं, लेकिन यह संभावना नहीं है कि Microsoft उन मूल्यों के लिए NCS नियमों का पालन कर रहा है।
स्टीफन क्लीयर

16
मुझे पता था कि, निन्टेंडो सिक्योरिटी एडमिनिस्ट्रेशन ने यादृच्छिक संख्या जनरेटर से समझौता किया है।
मेटागुरु

1
शायद यह एक ही बॉल पार्क है, जिसमें मिनरल वाटर बनाने वाली कंपनी का नाम है (सुना है कि वे बाजार का नेतृत्व करती हैं) एवियन। पीछे की ओर प्रायोजित Naive :-)
Mariusz

31

ऐसा नहीं होना चाहिए। हालांकि, जब .NET भारी भार के अधीन होता है, तो डुप्लिकेट गार्ड प्राप्त करना संभव है। मेरे पास दो अलग-अलग sql सर्वरों का उपयोग करके दो अलग-अलग वेब सर्वर हैं। मैं डेटा को मर्ज करने गया और मैंने पाया कि मेरे पास 15 मिलियन और 7 डुप्लिकेट थे।


1
यह दो अलग-अलग मशीनों पर कैसे संभव है? मुझे लगा कि GUID का हिस्सा मशीन का नाम था? (बहस नहीं कर रहा ... बस पूछ रहा हूं)
जॉन क्रूज़

8
यह केवल उन GUID के लिए सही होगा जो GUID पीढ़ी के हिस्से के रूप में MAC पतों (मशीन का नाम नहीं) का उपयोग करता है। V4, जो कि वास्तविक एसटीडी है, अब मैक पते का उपयोग नहीं करता है, लेकिन एक छद्म यादृच्छिक संख्या है।
Xander

14
Guid.NewGuidहमेशा v4 GUIDs उत्पन्न करता है (और हमेशा होता है)। टिम के पास बेहद खराब एंट्रोपी स्रोत होने चाहिए थे।
स्टीफन क्लीयर

1
क्या यह कभी दोहराया गया है? अगर यह बहुत बड़ी समस्या है।
ज़ो

1
बहुत बड़े डेटासेट आयात करते हुए यहां भी। लगभग 10-100 मिलियन से आप गाइड से डुप्लिकेट प्राप्त करते हैं। NewGuid
Stephan Baltzer

28

हां, एक GUID हमेशा अद्वितीय होना चाहिए। यह हार्डवेयर और समय दोनों पर आधारित है, साथ ही यह सुनिश्चित करने के लिए कुछ अतिरिक्त बिट्स भी है कि यह अद्वितीय है। मुझे यकीन है कि यह दो समान लोगों के साथ समाप्त होने के लिए सैद्धांतिक रूप से संभव है, लेकिन वास्तविक दुनिया के परिदृश्य में बेहद संभावना नहीं है।

यहाँ रेमंड चेन पर एक महान लेख है:

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


5
यह लेख पुराना है और GUID के v1 का जिक्र है। v4 हार्डवेयर / समय का उपयोग नहीं करता है, बल्कि एक यादृच्छिक संख्या एल्गोरिदम का उपयोग करता है। en.wikipedia.org/wiki/Glo
Worldwide_unique_identifier#Al एल्गोरिदम

यह लिंक टूटा हुआ है
Marcel

यहाँ लिंक दिया गया है: devblogs.microsoft.com/oldnewthing/20080627-00/?p=21823
ओ। जोसेफ

23

गाइड सांख्यिकीय रूप से अद्वितीय हैं। एक ही गाइड जेनरेट करने वाले दो अलग-अलग क्लाइंट्स के अंतर असीम रूप से छोटे होते हैं (गाइड जेनरेशन कोड में कोई बग नहीं)। आप एक ब्रह्मांडीय किरण के कारण अपने प्रोसेसर के गड़बड़ होने की चिंता कर सकते हैं और आज उस 2 + 2 = 5 को तय कर सकते हैं।

नए गाइड आवंटित करने वाले कई थ्रेड्स को अद्वितीय मान मिलेंगे, लेकिन आपको यह प्राप्त करना चाहिए कि जिस फ़ंक्शन को आप कॉल कर रहे हैं वह थ्रेड सुरक्षित है। यह किस माहौल में है?


19

एरिक लिपर्ट ने GUID के बारे में लेखों की एक बहुत ही रोचक श्रृंखला लिखी है।

दुनिया में ऑर्डर 2 30 व्यक्तिगत कंप्यूटर हैं (और निश्चित रूप से बहुत सारे हाथ से पकड़े गए डिवाइस या गैर-पीसी कंप्यूटिंग डिवाइस हैं जिनके पास कंप्यूटिंग शक्ति के समान या कम स्तर हैं, लेकिन उन पर ध्यान नहीं देते हैं)। मान लेते हैं कि हमने दुनिया के उन सभी पीसी को GUID बनाने के कार्य में लगा दिया; यदि प्रत्येक व्यक्ति प्रति सेकंड 2 20 GUID उत्पन्न कर सकता है, तो केवल 2 72 सेकंड के बाद - एक सौ और पचास ट्रिलियन वर्ष - आपके पास अपने विशिष्ट GUID के साथ टकराव उत्पन्न करने का एक बहुत ही उच्च मौका होगा। और टकराव की संभावना केवल तीस खरब वर्षों के बाद बहुत अच्छी हो जाती है।


28
... और वह अगले पैराग्राफ में जारी है: "लेकिन वह एक विशिष्ट GUID के साथ टकराव की तलाश कर रहा है। [...] इसलिए यदि हम उन बिलियन पीसी को 122-बिट्स-रैंडमनेस GUIDs बनाने के लिए काम करते हैं, तो संभावना है कि उनमें से दो कहीं न कहीं टकरा जाते हैं, लगभग 2 ^ 61 GUIDs उत्पन्न होने के बाद वास्तव में उच्च हो जाते हैं। चूंकि हम यह मान रहे हैं कि लगभग 2 ^ 30 मशीनें प्रति सेकंड 2 ^ 20 GUID कर रही हैं, हम लगभग 2 ^ के बाद एक टक्कर की उम्मीद करेंगे 11 सेकंड, जो लगभग एक घंटे है । ” (और अंत में वह बताते हैं कि, निश्चित रूप से नहीं कि कई GUID उत्पन्न होते हैं।)
अर्जन

16

सैद्धांतिक रूप से, नहीं, वे अद्वितीय नहीं हैं। बार-बार एक समान गाइड उत्पन्न करना संभव है। हालांकि, इसके होने की संभावना इतनी कम है कि आप मान सकते हैं कि वे अद्वितीय हैं।

मैंने पहले पढ़ा है कि संभावना इतनी कम है कि आपको वास्तव में किसी और चीज़ के बारे में तनाव देना चाहिए - जैसे कि आपका सर्वर अनायास आपके कोड में दहन या अन्य कीड़े। यही है, मान लें कि यह अद्वितीय है और डुप्लिकेट को "पकड़ने" के लिए किसी भी कोड में निर्मित नहीं होता है - अपना समय कुछ और होने की संभावना (यानी कुछ भी) पर खर्च करें ।

मैंने अपने ब्लॉग दर्शकों (गैर-तकनीकी पारिवारिक मेमोरियल) के लिए GUID की उपयोगिता का वर्णन करने का प्रयास किया। वहाँ से (विकिपीडिया के माध्यम से), एक डुप्लिकेट GUID बनाने की संभावना:

  • 1 में 2 ^ 128
  • 340 undecillion में 1 (चिंता मत करो, undecillion प्रश्नोत्तरी पर नहीं है)
  • 3.4 × 10 ^ 38 में 1
  • 1, 340,000,000,000,000,000,000,000,000,000,000,000,000 में

1
वास्तव में, मैं 'इसके बारे में चिंता न करने' के बारे में असहमत हूं, हालांकि एक अलग रुख से: यदि आप एक GUID टकराव का पता लगाते हैं, तो आपके आवेदन में कुछ गलत हो गया है। मैंने GUID का उपयोग किया है, उदाहरण के लिए, idempotency के लिए, और एक टक्कर मिली है जब एक कमांड दो बार (एक ही GUID के साथ) भेजा गया है।
केनी हंग

9

किसी को भी इसके होने की संभावना के वास्तविक गणित का उल्लेख नहीं लगता है।

पहले, मान लें कि हम पूरे 128 बिट स्पेस का उपयोग कर सकते हैं (गाइड v4 केवल 122 बिट्स का उपयोग करता है)।

हम जानते हैं कि nपिक्स में डुप्लिकेट नहीं होने की सामान्य संभावना है:

(1-1 / 2 128 ) (1-2 / 2 128 ) ... (1- (एन -1) / 2 128 )

क्योंकि 2 128 की तुलना में बहुत अधिक है n, हम इसको अनुमानित कर सकते हैं:

(1-1 / 2 128 ) एन (एन -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 * लॉग 0.01 / लॉग (1-1 / 2 128 ))

कौन सा वोल्फ्राम अल्फा 5.598318 × 10 19 का हो जाता है

उस संख्या को परिप्रेक्ष्य में रखने के लिए, 10000 मशीनें लेने की सुविधा देता है, जिनमें से प्रत्येक में 4 कोर सीपीयू होता है, 4Ghz कर रहा है और 10000 साइकिल खर्च कर एक गाइड उत्पन्न करता है और कुछ नहीं करता है। इसके बाद वे एक डुप्लिकेट उत्पन्न करने से पहले ~ 111 साल लगेंगे।


मैंने इस पोस्ट के बाद आपकी पोस्ट को एडिट किया है - अगर मैंने कोई गलती की है तो कृपया उसे संपादित करें;)।
sha.t

हाय @Cine, मैं आपकी प्रतिक्रिया को संपादित करने की शक्ति रखता हूं, लेकिन नहीं चुना है क्योंकि मैं आपको इसे पहले रीबूट करने का मौका प्राप्त करना चाहता हूं, मैं संभवतः एक महीने में आकर इसे औपचारिक रूप से बदल दूंगा यदि मैं डॉन करता हूं ' आप से नहीं सुना। मैं काफी निश्चित हूं कि आपका गणित गलत है। 1% मौका निर्धारित करने के लिए वास्तविक समीकरण यह है: ((2 ^ 128 - 1) / 2 ^ 128) ^ (((n-1)) / 2) = .01 आपका घातांक गलत है। यह सिर्फ n नहीं है। जब आप "n" गाइड उत्पन्न करते हैं, तो सभी संयोजनों की गणना करने के लिए आपको C (n, 2) (aka (n * (n-1)) / 2) की आवश्यकता होती है। अधिक जानकारी के लिए यहाँ देखें
19

धन्यवाद सिने, मैं भी समाप्त हो गया n ^ 2/2 इसकी इतनी बड़ी के बाद से :)
2/2 के

हर एक संभव GUID को उत्पन्न करने के लिए 10000 मशीनें लगेंगी, और फिर एक डुप्लिकेट उत्पन्न होगा। एक डुप्लिकेट हालांकि सभी संभव GUIDs उत्पन्न होने से बहुत पहले होगा। मुझे लगता है कि अनुमानित समय-सीमा इस बात पर निर्भर करती है कि GUID पीढ़ी की प्रक्रिया कितनी 'यादृच्छिक' है।
जॉर्ज के

@GeorgeK मुझे लगता है कि आपको गलत समझा गया ... डुप्लिकेट से मुठभेड़ का 1% मौका होने में 10000 मशीनों को 111 साल लगेंगे। लेकिन हां, यह गणित संभोग मानता है कि यादृच्छिक जनरेटर पूरी तरह से यादृच्छिक है।
सिने

7

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

एक GUID क्या है?

GUID (या UUID) 'ग्लोबली यूनिक आइडेंटिफायर' (या 'यूनिवर्सली यूनिक आइडेंटिफायर') के लिए एक संक्षिप्त नाम है। यह एक 128-बिट पूर्णांक संख्या है जिसका उपयोग संसाधनों की पहचान करने के लिए किया जाता है। GUID शब्द का उपयोग आमतौर पर Microsoft तकनीकों के साथ काम करने वाले डेवलपर्स द्वारा किया जाता है, जबकि UUID का उपयोग हर जगह किया जाता है।

GUID कितना अनोखा है?

128-बिट्स काफी बड़ी है और जेनरेशन का एल्गोरिदम इतना अनोखा है कि अगर 1 साल के लिए 1,000,000,000 GUIDs प्रति वर्ष उत्पन्न होते हैं तो एक डुप्लिकेट की संभावना केवल 50% होगी। या यदि पृथ्वी पर प्रत्येक मानव 600,000,000 GUID उत्पन्न करता है तो केवल एक डुप्लिकेट की 50% संभावना होगी।


7
डर पैदा करने के लिए डुप्लिकेट उच्च का 50% मौका पर्याप्त नहीं है?
डिस्कलोजर

1
यदि आपके सिस्टम प्रति सेकंड 1 बिलियन GUID का उत्पादन कर रहे हैं तो @disklosr हाँ यह डर पैदा करने के लिए पर्याप्त है। बेहद असंभावित घटना में आप उस राशि को उत्पन्न कर रहे हैं, बस श्रृंखला दो GUIDs एक साथ ...
maxshuty

5

मुझे एक डुप्लिकेट GUID का अनुभव हुआ।

मैं Neat Receipts डेस्कटॉप स्कैनर का उपयोग करता हूं और यह मालिकाना डेटाबेस सॉफ्टवेयर के साथ आता है। सॉफ़्टवेयर में क्लाउड सुविधा के लिए एक सिंक है, और मैं सिंक करने पर एक त्रुटि प्राप्त करता रहा। लॉग में एक गैंडर ने भयानक लाइन का खुलासा किया:

"त्रुटियां": [{"कोड": 1, "संदेश": "creator_guid: पहले से ही लिया गया है", "गाइड": "C83E5734-D77A-4B09-B8C1-9623C7B167"}}]

मैं अविश्वास में था, लेकिन निश्चित रूप से पर्याप्त था, जब मैंने अपने स्थानीय नीटवर्क डेटाबेस में एक रास्ता ढूंढा और उस GUID वाले रिकॉर्ड को हटा दिया, तो त्रुटि उत्पन्न होना बंद हो गई।

तो उपाख्यानात्मक प्रमाण के साथ अपने प्रश्न का उत्तर देने के लिए, नहीं। एक डुप्लिकेट संभव है। लेकिन यह संभावना है कि ऐसा होने का कारण मौका नहीं था, लेकिन मानक अभ्यास के कारण किसी तरह से पालन नहीं किया जा रहा है। (मैं सिर्फ इतना भाग्यशाली नहीं हूं) हालांकि, मैं निश्चित रूप से नहीं कह सकता। यह मेरा सॉफ्टवेयर नहीं है।

उनका ग्राहक समर्थन बेहद विनम्र और मददगार था, लेकिन उन्हें पहले कभी इस मुद्दे का सामना नहीं करना पड़ा, क्योंकि उनके साथ फोन पर 3+ घंटों के बाद, उन्हें समाधान नहीं मिला। (एफडब्ल्यूआईडब्ल्यू, मैं नीट से बहुत प्रभावित हूं, और यह गड़बड़ है, हालांकि निराशा होती है, लेकिन उनके उत्पाद के बारे में मेरी राय नहीं बदली।)


19
विश्वास न करें कि आपको एक डुप्लिकेट मिला है। संभवत: कुछ और शामिल था, जैसे कि सिंक प्रक्रिया में संख्या वास्तव में यादृच्छिक या समस्या नहीं थी, या सिस्टम ने दो बार रिकॉर्ड करने की कोशिश की, आदि। एक सॉफ्टवेयर मुद्दा आपके द्वारा डुप्लिकेट GUID प्राप्त करने की तुलना में बहुत अधिक संभावना है।
orad

4

MSDN :

इस बात की बहुत कम संभावना है कि नए गाइड का मूल्य सभी शून्य या किसी अन्य गाइड के बराबर हो।


4

यदि आपकी सिस्टम घड़ी ठीक से सेट है और चारों ओर लिपटी नहीं है, और यदि आपके एनआईसी के पास अपना स्वयं का मैक है (यानी आपने एक कस्टम मैक सेट नहीं किया है) और आपका एनआईसी विक्रेता एमएसीएस का पुनर्चक्रण नहीं कर रहा है (जो वे करने वाले नहीं हैं लेकिन जिसे होने के लिए जाना जाता है), और यदि आपके सिस्टम का GUID पीढ़ी फ़ंक्शन ठीक से कार्यान्वित होता है, तो आपका सिस्टम कभी भी डुप्लिकेट GUID नहीं बनाएगा।

यदि GUID उत्पन्न करने वाली पृथ्वी पर सभी लोग उन नियमों का पालन करते हैं तो आपके GUIDs विश्व स्तर पर अद्वितीय होंगे।

व्यवहार में, नियम तोड़ने वालों की संख्या कम है, और उनके GUID के "भागने" की संभावना नहीं है। संघर्ष सांख्यिकीय रूप से अनुचित हैं।


11
यह केवल v1 गाइड के लिए सही होगा। V4, जो कि वास्तविक एसटीडी है, अब मैक पते का उपयोग नहीं करता है, लेकिन एक छद्म यादृच्छिक संख्या है।
पिटो।

1
"तब आपका सिस्टम कभी भी डुप्लिकेट GUID नहीं उत्पन्न करेगा" भले ही आप कहें कि v1 गाइड के लिए सभी नियमों का पालन किया गया था, फिर भी आपका सिस्टम डुप्लिकेट उत्पन्न कर सकता है। जब आप कहते हैं, तो आप सबसे नीचे सही हैं "संघर्ष सांख्यिकीय रूप से अनुचित हैं।"
निक मेल्ड्रम

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 समस्या गुमनामी थी। मेरा मानना ​​है कि एक मैक पते जैसे पहचानकर्ता का उपयोग करना एक तरह से उलटा हो सकता है जो एक गोपनीयता चिंता थी। मेरा मानना ​​है कि हार्डवेयर में सच यादृच्छिक बहुत मुश्किल है? क्लाउडफ्लेयर कैमरा और लावा लैंप की एक पंक्ति का उपयोग करता है, हालांकि मुझे लगता है कि भौतिकी की सटीक समझ के साथ, यहां तक ​​कि यादृच्छिक नहीं है? Cloudflares lava चिराग RNG: popularmechanics.com/technology/security/news/a28921/…
जेफ ब्लॉक

2

अधिक बेहतर परिणाम के लिए सबसे अच्छा तरीका है GUID को टाइमस्टैम्प के साथ जोड़ना (बस यह सुनिश्चित करने के लिए कि यह अद्वितीय रहता है)

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

यदि आपको एक ही सेकेंड में दो टक्कर मिलें तो क्या होगा?
वाई हा ली

यह सबसे बुरा मामला है लेकिन फिर भी, हम एक ही समय में एक ही दो गाइड जेनरेट नहीं कर सकते हैं।
आदित्य साईं

कहीं वे तर्क देते हैं, कि किसी को SO पर उत्तर से कॉपी करना चाहिए, न कि प्रश्न पर, लेकिन मुझे अब यकीन नहीं है ....
Marcel

1

GUID एल्गोरिदम आमतौर पर v4 GUID विनिर्देशन के अनुसार कार्यान्वित किए जाते हैं, जो अनिवार्य रूप से एक छद्म यादृच्छिक स्ट्रिंग है। अफसोस की बात है, ये "गैर-अद्वितीय" की श्रेणी में आते हैं विकिपीडिया से (मुझे नहीं पता कि इतने सारे लोग इस बिट को क्यों अनदेखा करते हैं): "... अन्य GUID संस्करणों में विशिष्ट विशिष्टता गुण और संभावनाएं हैं, गारंटी विशिष्टता से लेकर गैर-विशिष्टता की संभावना के लिए। "

V8 के जावास्क्रिप्ट के छद्म-यादृच्छिक गुण Math.random()विशिष्टता में हैं, टकराव अक्सर कुछ हज़ार पुनरावृत्तियों के बाद आते हैं, लेकिन V8 एकमात्र अपराधी नहीं है। मैंने PHP और Ruby दोनों v4 GUID के कार्यान्वयन का उपयोग करके वास्तविक-विश्व GUID टकराव देखा है।

क्योंकि यह एक से अधिक क्लाइंट में ID जनरेशन स्केल करने के लिए अधिक से अधिक आम होता जा रहा है, और सर्वर के क्लस्टर, एन्ट्रापी एक बड़ी हिट लेता है - एक ही रैंडम बीज की संभावना को एक आईडी एस्केलेट उत्पन्न करने के लिए इस्तेमाल किया जा रहा है (समय अक्सर एक यादृच्छिक बीज के रूप में उपयोग किया जाता है छद्म यादृच्छिक जनरेटर में), और GUID टकराव "संभावित गैर-अद्वितीय" से "बहुत परेशानी पैदा करने की संभावना" से बढ़ जाते हैं।

इस समस्या को हल करने के लिए, मैं एक आईडी एल्गोरिथ्म बनाने के लिए तैयार हूं जो सुरक्षित रूप से स्केल कर सकता है, और टक्कर के खिलाफ बेहतर गारंटी देता है। यह टाइमस्टैम्प, इन-मेमोरी क्लाइंट काउंटर, क्लाइंट फ़िंगरप्रिंट और यादृच्छिक वर्णों का उपयोग करके ऐसा करता है। कारकों का संयोजन एक additive जटिलता बनाता है जो टकराव के लिए विशेष रूप से प्रतिरोधी है, भले ही आप इसे कई मेजबानों के पैमाने पर रखते हैं:

http://usecuid.org/


1

मैंने बहु-थ्रेडेड / मल्टी-प्रोसेस यूनिट-टेस्टिंग (भी?) के दौरान GUID को अद्वितीय नहीं होने का अनुभव किया है। मुझे लगता है कि छद्म यादृच्छिक क्रांतिकारियों के समान, सभी अन्य टिंग समान होने चाहिए, समान बीजारोपण (या बोने की कमी)। मैं इसका उपयोग अद्वितीय फ़ाइल नाम बनाने के लिए कर रहा था। मैंने पाया कि OS ऐसा करने में बहुत बेहतर है :)

ट्रोलिंग अलर्ट

आप पूछते हैं कि क्या GUID 100% अद्वितीय हैं। यह GUIDs की संख्या पर निर्भर करता है, यह अद्वितीय होना चाहिए। GUIDs की संख्या अनंत के करीब होने के कारण, GUID की नकल की संभावना 100% तक पहुंच जाती है।


1

का जवाब "एक GUID 100% अद्वितीय है है?" बस "नहीं" है

  • यदि आप GUID की 100% विशिष्टता चाहते हैं तो निम्नलिखित करें।

    1. GUID जनरेट करें
    2. जांचें कि क्या वह GUID आपके टेबल कॉलम में मौजूद है जहां आप अनूठेपन की तलाश कर रहे हैं
    3. अगर मौजूद है तो गोटो स्टेप 1 और स्टेप 4 है
    4. इस GUID को अद्वितीय के रूप में उपयोग करें।

यह इसे अद्वितीय नहीं बनाता है। आपका एल्गोरिथ्म तालिका में नए बनाए गए GUID को नहीं बचाता है। अगली बार जब आप एक GUID बनाते हैं, तो वह पहले एक से टकरा सकता है। यदि आप GUID को तालिका में सम्मिलित करना चाहते हैं, तो GUID को पहले से ही किसी अन्य सहकर्मी द्वारा आपके बीच विशिष्टता के लिए जाँचने के लिए डाला गया था और आपने GUID को तालिका में सम्मिलित किया था। GUID केवल आपके सिस्टम में अद्वितीय है, इसलिए यदि आप दो डेटाबेस को आयात या मर्ज करने के लिए थे तो वे अभी भी टकरा सकते थे। GUID का उपयोग अक्सर तब किया जाता है जब आपके पास सेंट्रलाइज्ड डेटाबेस तक पहुंच नहीं होती है। यदि आपके पास डेटाबेस से सिर्फ आईडी खींचना क्यों नहीं था?
Jogge

0

सबसे कठिन हिस्सा एक डुप्लिकेट किए गए दिशानिर्देश को बनाने के बारे में नहीं है।

सबसे कठिन हिस्सा एक डेटाबेस को डिज़ाइन किया गया है ताकि सभी जनरेट किए जा सकें कि यह वास्तव में डुप्लिकेट है या नहीं।

विकी से:

उदाहरण के लिए, यादृच्छिक संस्करण 4 यूयूआईडी की संख्या, जिसे कम से कम एक टकराव की 50% संभावना होने के लिए उत्पन्न करने की आवश्यकता है, निम्नानुसार गणना की गई 2.71 क्विंटल है:

यहाँ छवि विवरण दर्ज करें

यह संख्या लगभग 85 वर्षों के लिए 1 बिलियन यूयूआईडी प्रति सेकंड उत्पन्न करने के बराबर है, और इस फाइल में कई यूयूआईडी हैं, 16 बाइट्स प्रति यूयूआईडी के साथ, लगभग 45 एक्साबाइट्स होंगे, जो वर्तमान में अस्तित्व में सबसे बड़े डेटाबेस से कई गुना बड़ा है, जो चालू हैं सैकड़ों पेटाबाइट्स का क्रम


0

वैश्विक विशिष्ट पहचान के लिए GUID खड़ा

संक्षेप में: (नाम में सुराग है)

विस्तार से: GUID को अद्वितीय होने के लिए डिज़ाइन किया गया है; उनकी गणना कंप्यूटर घड़ी और कंप्यूटर के आधार पर एक यादृच्छिक विधि से की जाती है, यदि आप एक ही मशीन पर एक ही मिलीसेकंड पर कई GUID बना रहे हैं तो यह संभव है कि वे मेल खा सकें लेकिन लगभग सभी सामान्य ऑपरेशनों के लिए उन्हें अद्वितीय माना जाना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.