2010-06-04 7 views
71

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

बोनस सवाल

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

+2

संभावित डुप्लिकेट [क्या एक GUID अद्वितीय 100% समय है?] (Http://stackoverflow.com/questions/39771/is-a-guid-unique-100-of-the-time) – ChrisF

+20

नहीं हम सभी इस साइट पर पुनः लोड बटन को मैशिंग करते रहते हैं: http://www.wasteaguid.info/ – mipadi

+9

मैं GUID टकराव पर अपनी सभी बग को दोषी ठहराता हूं। यह कुछ समय सही होना है? – Michael

उत्तर

257

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

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

वहाँ विशाल वहां GUID की संख्या है। गैलेक्सी को डगलस एडम्स के सहयात्री की गाइड के शब्दों में:।।।

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

और के बाद से वहाँ about 7×1022 stars in the universe हैं, और बस के अंतर्गत 2 GUIDs, तब वहाँ लगभग रहे हैं 4.86 × 10 - लगभग पांच क्वाड्रिलियन-प्रत्येक एकल स्टार के लिए चार्ल्स।यदि उन सितारों में से प्रत्येक के पास हमारी तरह समृद्ध आबादी वाला एक विश्व था, तो प्रत्येक स्टार के आसपास, every human or alien who had ever lived पचास हजार से अधिक GUID के हकदार होंगे। ब्रह्मांड में हर स्टार में इतिहास में हर व्यक्ति के लिए। GUID अंतरिक्ष पूरे ब्रह्मांड के आकार के रूप में विशालता के समान स्तर पर है। आप पर चिंता करने की ज़रूरत नहीं है।

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

+68

+1 हिचिकर्स –

+0

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

+4

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

0

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

5

सामान्यतः, हाँ यह मानना ​​सुरक्षित है।

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

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

4

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

जैसा कि लिंक में उल्लिखित है, यह यादृच्छिक संख्या जनरेटर के गुणों से प्रभावित होगा।

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

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

30

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

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

मैंने कुछ प्रतिनिधि टकराव की संभावनाओं की गणना की है। the Wikipedia article में उल्लिखित 122-बिट यूयूआईडी के साथ, यदि आप कम से कम 2.71492e18 यूयूआईडी उत्पन्न करते हैं तो टकराव की संभावना 1/2 है। 10^1 9 यूयूआईडी के साथ, संभावना 0.9 99918 है। 10^17 यूयूआईडीएस के साथ, 0.000 9 3 9 533।

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

यदि आप 10% की टक्कर संभावना प्राप्त करने के लिए प्रति सेकंड 1 अरब यूयूआईडी उत्पन्न करते हैं, it would take about 36 years

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

+0

पर भी अच्छे नहीं हैं ब्रह्मांड समाप्त होता है ... कुछ प्रोग्रामर बस मानते हैं कि उनके GUID हमेशा उनके मेगा डेथ स्टार के लिए अद्वितीय होंगे ... – pkr298

संबंधित मुद्दे

 संबंधित मुद्दे