क्या यह मान लेना सुरक्षित है कि एक GUID हमेशा अद्वितीय होगा?


123

मुझे पता है कि झड़प की एक मिनट की संभावना है लेकिन अगर मैंने 1000 GUIDs (उदाहरण के लिए) का एक बैच उत्पन्न किया, तो क्या यह मान लेना सुरक्षित होगा कि वे सभी को एक-एक परीक्षण को बचाने के लिए अद्वितीय हैं?

बोनस का सवाल

विशिष्टता के लिए एक GUID का परीक्षण करने का एक इष्टतम तरीका? ब्लूम फ़िल्टर शायद?



29
नहीं करता है, तो हम सब रहते हैं इस साइट पर ताज़ा करें बटन mashing: wasteaguid.info
mipadi

12
मैं अपने सभी बगों को GUID टक्करों पर दोष देता हूं। यह कुछ समय सही होना है?
माइकल

8
यह बहुत अधिक संभावना है कि एक सुंदर प्लेड-पैटर्न वाले रंग का एक शार्क आसमान से गिर जाएगा और आपके कंप्यूटर को बिट्स में तोड़ देगा, इसलिए मैं प्रस्तुत करूंगा कि इसके खिलाफ सावधानी बरतना आपके समग्र जोखिम में कमी के हिस्से के रूप में संसाधनों का अधिक उपयुक्त आवंटन है। योजना।
डेविड ग्लैडफेल्टर

4
@mipadi: बढ़िया लिंक! मैं सिर्फ "Guuuuys" को रोके हुए कुछ डेवलपर को देख सकता हूं! GUIDs को बर्बाद करना बंद करें! मुझे उन लोगों की आवश्यकता है । "
FrustratedWithFormsDesigner

जवाबों:


360

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

संपादित करें 1: अपने बोनस प्रश्न का उत्तर देने के लिए, विशिष्टता के लिए GUID का एक सेट का परीक्षण करने का इष्टतम तरीका सिर्फ यह मान लेना है कि वे सभी अद्वितीय हैं। क्यों? क्योंकि, आपके द्वारा उत्पन्न किए जा रहे GUID की संख्या को देखते हुए, GUID के टकराव की संभावनाएं आपके कंप्यूटर की मेमोरी में थोड़ी सी चमकती हुई कॉस्मिक किरण की बाधाओं से छोटी होती हैं और किसी भी "सटीक" एल्गोरिथ्म द्वारा दिए गए उत्तर को खराब कर देती हैं। चलाने के लिए। ( गणित के लिए इस StackOverflow जवाब देखें ।)

वहाँ GUIDs की एक विशाल संख्या है। गैलेक्सी के लिए डगलस एडम्स के सहयात्री गाइड को उद्धृत करना :

"अंतरिक्ष," यह कहता है, "बड़ा है। वास्तव में बहुत बड़ा है। आप बस विश्वास नहीं करेंगे कि यह कितना बड़ा मनमौजी है। यह मेरा मतलब है कि आप सोच सकते हैं कि यह रसायनज्ञ के लिए सड़क का एक लंबा रास्ता है, लेकिन यह सिर्फ अंतरिक्ष के लिए मूंगफली है। , बात सुनो…"

और चूंकि ब्रह्मांड में लगभग 7 × 10 22 तारे हैं , और सिर्फ 2 128 GUIDs के नीचे हैं , तो हर एक तारे के लिए लगभग 4.86 × 10 15- सबसे कम पांच क्वाड्रिलियन -GUID हैं। अगर उन सितारों में से हर एक के पास एक दुनिया थी, जो हमारे जैसे संपन्न आबादी के साथ थी, तो प्रत्येक और हर स्टार के आसपास, हर मानव या विदेशी जो कभी रहते थे, पैंतालीस हजार से अधिक GUIDs के हकदार होंगे। ब्रह्मांड में हर सितारे पर इतिहास के प्रत्येक व्यक्ति के लिए। GUID स्थान संपूर्ण ब्रह्मांड के आकार के समान उथल-पुथल के स्तर पर है। आपको चिंता करने की जरूरत नहीं है।

( संपादित 2: इस पर चिंतन करते हुए: वाह। मुझे खुद का अंदाजा नहीं था कि इसका क्या मतलब है। GUID स्पेस असंगत रूप से बड़े पैमाने पर है। मैं इसके बारे में विस्मयकारी हूं।)


1
इसके अलावा, वुल्फरामअल्फा की रिपोर्ट है कि, हर कोशिका में हर उस व्यक्ति के लिए जो कभी रहता है, 36 ट्रिलियन यूयूआईडी हैं। 10^14आपके शरीर में कोशिकाओं के बारे में है, और 106.5 बिलियन लोग कभी भी रहते हैं। या, 2.385 * 10^23अमेरिकी सार्वजनिक ऋण में हर प्रतिशत के लिए यूयूआईडी।
new123456

5
हालाँकि संख्या अभी भी अधिक है, GUID के टकराने की संभावना 2 ^ 64 GUID पर 50% से अधिक है।
NullUserException

1
2 ^ 64 GUIDs में, यह यूनिवर्स में प्रति स्टार एक (0.00026) से कम संख्या में कटौती करेगा और हर मानव या विदेशी के लिए 2 * 10 ^ (- 15) होगा जो कभी भी रह चुके हैं। यह अभी भी 170 मिलियन से अधिक के लिए अनुमति देगा GUIDs हर मानव के लिए जो कभी रहते हैं, इसलिए मुझे लगता है कि हम अभी भी अच्छे हैं।
NullUserException 1

12
यह देखते हुए कि एक ही व्यापार-स्थान में एक GUID टक्कर भी केवल एक समस्या है। एक GUID मैं सॉफ्टवेयर के एक टुकड़े में एक घटक की पहचान करने के लिए उपयोग किया जाता है जो आपके द्वारा अपने डेटाबेस अनुप्रयोग में किसी भी समस्या के कारण के बिना एक GUID के रूप में उपयोग किया जा सकता है
जेम्स थोर्प

1
तथ्य यह है कि 2 ^ 128 GUIDS अप्रासंगिक हैं, और आप टक्कर के 50% संभावना पर "अभी भी अच्छे" नहीं हैं, आप 0.0000001% पर भी अच्छे नहीं हैं
BlackTigerX

40

संक्षिप्त उत्तर: व्यावहारिक उद्देश्यों के लिए, हाँ।

हालांकि, आपको जन्मदिन के विरोधाभास पर विचार करना होगा!

मैंने कुछ प्रतिनिधि टक्कर की संभावनाओं की गणना की है। विकिपीडिया लेख में निर्दिष्ट 122-बिट UUIDs के साथ , टकराव की संभावना 1/2 है यदि आप कम से कम 2.71492e18UUIDs उत्पन्न करते हैं । 10 ^ 19 यूयूआईडी के साथ, संभावना 0.999918 है। 10 ^ 17 यूयूआईडी के साथ, 0.000939953।

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

यदि आप प्रति सेकंड 1 बिलियन यूयूआईडी बनाते हैं, तो 10% की टक्कर की संभावना प्राप्त करने में लगभग 36 साल लगेंगे

आखिरकार, मानव इतिहास के दौरान उत्पन्न यूयूआईडी के सेट के बीच एक टक्कर होगी। फिर भी, यूयूआईडी से टकराव की संभावना का उपयोग उसी उद्देश्य के लिए किया जाएगा जो गायब हो गया है, इसलिए अभ्यास में कोई समस्या नहीं है।


13
यह है कि ब्रह्मांड कैसे समाप्त होता है ... कुछ प्रोग्रामर बस मानते हैं कि उनके
GUID

क्योंकि यूयूआईडी गैर-यादृच्छिक डेटा पर आधारित हैं, 36 वर्ष है - आपको केवल प्रत्येक मिलीसेकंड के बारे में व्यक्तिगत रूप से चिंता करनी होगी।
मैजगार्ड

@mjaggard UUIDs यादृच्छिक डेटा पर आधारित हैं। किसी भी आधुनिक प्रकार, वैसे भी।
तर्जुक

8

टकराव की संभावना का विश्लेषण http://en.wikipedia.org/wiki/Uuid#Random_UUID_probability_of_duplicates पर उपलब्ध है

जैसा कि लिंक में बताया गया है, यह रैंडम नंबर जनरेटर के गुणों से प्रभावित होगा।

GUID जनरेटर कोड में बग की संभावना भी है; जबकि संभावना कम है, वे संभवतः गणित पर आधारित टकराव की संभावना से अधिक हैं।

एक ब्लूम फ़िल्टर उपयुक्त हो सकता है; यदि कोई GUID अद्वितीय है, तो यह आपको जल्दी से बता सकता है, लेकिन टक्कर के झूठे संकेत के लिए एक मौका है। एक वैकल्पिक विधि यदि आप एक समय में एक बैच का परीक्षण कर रहे हैं तो बैच को क्रमबद्ध करना और प्रत्येक क्रमिक तत्व की तुलना करना है।


5

सामान्य तौर पर, हाँ यह मान लेना सुरक्षित है।

यदि आपका GUID जनरेटर वास्तव में यादृच्छिक है, तो 1000 GUID के भीतर टकराव की संभावना असाधारण रूप से छोटी है।

बेशक, यह एक अच्छा GUID जनरेटर मानता है। तो यह सवाल वास्तव में है कि आप GUID उत्पन्न करने के लिए जिस टूल का उपयोग कर रहे हैं, उस पर आपको कितना भरोसा है और क्या इसके अपने परीक्षण हैं?


0

जबकि टक्कर संभव है, यह अत्यधिक संभावना नहीं है। ( यहां गणित ।) यह मान लेना सुरक्षित है कि वे वास्तव में अलग हैं।


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