क्या GUID टकराव संभव है?


128

मैं SQL Server 2000 में एक डेटाबेस पर काम कर रहा हूं जो प्रत्येक उपयोगकर्ता के लिए एक GUID का उपयोग करता है जो उस ऐप का उपयोग करता है जो उससे बंधा हुआ है। किसी तरह, दो उपयोगकर्ता एक ही GUID के साथ समाप्त हो गए। मुझे पता है कि Microsoft एक यादृच्छिक GUID को उत्पन्न करने के लिए एक एल्गोरिथ्म का उपयोग करता है जिसमें कोलैसन को उत्पन्न करने की बहुत कम संभावना होती है, लेकिन क्या एक टक्कर अभी भी संभव है?


11
हर कोई कह रहा है कि कोई भी गलत नहीं है। मैंने पहले ही 1 मिलियन से कम रिकॉर्ड के MSI के साथ 1 UniqueIdentifier को टक्कर दे दी है, MSSQL 2008 R2
बेहरोज़ जूल

2
@ बेहरोज वाईक। यह हमारे मित्र के जन्मदिन के विरोधाभास के लिए असंभव नहीं है, लेकिन यह पूरी तरह से यादृच्छिक v4 GUIDs के साथ अभी भी अशुभ है। शायद आप एक कमजोर GUID पीढ़ी की रणनीति का उपयोग कर रहे थे?
क्रेग रिंगर

6
@ बेहरोज वाह। यह चौंकाने वाली किस्मत है।
क्रेग रिंगर

6
@Bhrooz यह संभवतः MSSQL में इस्तेमाल होने वाला एक दोषपूर्ण छद्म यादृच्छिक संख्या है (मुझे आश्चर्य नहीं होगा यदि उनके जनरेटर में 32-बिट बीज हैं या जैसे उनके सॉफ़्टवेयर की गुणवत्ता दी गई है)। गणित झूठ नहीं बोलता। यह संभावना इतनी कम है कि आप 99.9999999999 (और 9 के बाद का बहुत)% हो सकते हैं कि या तो MSSQL गाइड जनरेटर दोषपूर्ण है (या छद्म यादृच्छिक जनरेटर हो सकता है जो GUIDs उत्पन्न करने के लिए उपयोग किया जाता है) या आपने गलती की।
एलेक्स

2
इस सटीक क्षण में प्यार करें, प्रश्न और चयनित उत्तर दोनों में 128 अंक हैं। संयोग? 🤔
Caio कुन्हा

जवाबों:


127

मूल रूप से, नहीं। मुझे लगता है कि कोई आपके डेटाबेस के साथ मिल गया। आपके द्वारा उपयोग किए जा रहे संस्करण GUID के आधार पर या तो अद्वितीय है (संस्करण 1 GUIDs जैसी चीज़ों के लिए), या दोनों अद्वितीय और अप्रत्याशित (संस्करण 4 GUID जैसी चीज़ों के लिए)। उनके NEWID () फ़ंक्शन के लिए SQL सर्वर का कार्यान्वयन 128-बिट यादृच्छिक संख्या का उपयोग करता प्रतीत होता है, इसलिए आपको टक्कर नहीं मिलेगी।

टक्कर की 1% संभावना के लिए, आपको लगभग 2,600,000,000,000,000,000 GUID उत्पन्न करने की आवश्यकता होगी ।


3
यही मैंने सोचा है, लेकिन मैं सिर्फ यह सुनिश्चित करना चाहता था कि मैं उस पर शासन नहीं कर सकता। आप कभी नहीं जानते कि 8 साल के सॉफ्टवेयर में किस तरह के अजीब कीड़े हो सकते हैं। :)
जेसन बेकर

6
वास्तव में यह सच नहीं है। यह v1 GUID के लिए सही था, लेकिन वर्तमान v4 वाले के लिए नहीं। अधिक जानकारी के लिए en.wikipedia.org/wiki/Glo Worldwide_Unique_Identifier#Al एल्गोरिदम देखें ।
ग्रेग बीच

97
नीचे वोट करें, क्योंकि सिद्धांत रूप में (यह सबसे कच्चा रूप में), आप गलत कह रहे हैं "नहीं" सवाल "क्या जीयूआर टकराव संभव है?"। यह बहुत संभव है। जिसकी संभावना कम है, लेकिन यह संभव है। मुझे पंडिताऊ ध्वनि से नफरत है - लेकिन एसओ सभी संक्षिप्त और सटीक है।

13
1% के लिए परिणाम प्राप्त करने के लिए wolfram अल्फा में "" [1-exp [- (n ^ 2 / (2 * 2 ^ 128))]> 0.01, n] "दर्ज करें ... खबरदार कि जबकि यह संख्या बड़ी लगती है वन एप्लिकेशन का संदर्भ, यह निश्चित रूप से पूरी दुनिया के लिए बड़ा नहीं है। यदि पृथ्वी पर प्रत्येक कंप्यूटर सच्चे GUID को उत्पन्न करेगा, तो वे लगभग 1 सेकंड में 1% संभावना के साथ टकराव का कारण बनेंगे, यह मानते हुए कि वे प्रत्येक नैनोस्कॉन्ड (जो शायद इन दिनों काफी यथार्थवादी हैं) उत्पन्न कर सकते हैं। इसलिए यदि आप अपने डेटाबेस आईडी के लिए GUID का उपयोग करते हैं, तो वे अद्वितीय हैं। पृथ्वी पर की गई हर गणना के लिए GUIDs, तुरंत टकराएंगे।
थीसेंट

11
'नहीं' कहना संभव नहीं है, और फिर यह कहना कि एक निश्चित राशि उत्पन्न होने पर टकराव होने की 1% संभावना है, प्रत्यक्ष संघर्ष हैं। सही प्रतिक्रिया सैद्धांतिक रूप से होनी चाहिए - हाँ, एक टक्कर बेतरतीब ढंग से हो सकती है। हालांकि, टकराव की संभावना पृथ्वी से टकराने वाले क्षुद्रग्रह की तुलना में सांख्यिकीय रूप से छोटी होती है, जो पृथ्वी से उछलती है और अगले एक घंटे में दूसरी बार पृथ्वी से टकराने के लिए चंद्रमा से छूटती है।
बालेओस

112

मूल रूप से वे संभव नहीं हैं! संभावनाएं काफी कम हैं

लेकिन ... मैं एकमात्र व्यक्ति हूं जिसे मैं जानता हूं कि मैं एक बार एक GUID कॉलिजन था (जीईपी!) में ।

और मुझे यकीन है कि यह एक गलती नहीं थी।

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

संपादित करें: कुछ कारक हैं जो ऐसा होने की संभावना को बहुत बढ़ा सकते हैं, एप्लिकेशन पॉकेटपीसी एमुलेटर पर चल रहा था, और एमुलेटर में एक बचत स्थिति है, जिसका अर्थ है कि हर बार राज्य को बहाल करने के लिए स्थानीय समय भी बहाल किया जाता है। और गाइड आंतरिक टाइमर पर आधारित है .... कॉम्पैक्ट फ्रेमवर्क के लिए गाइड जनरेटिंग एल्गोरिथ्म भी कम हो सकता है उदाहरण के लिए COM एक ...


38
Upvoted। राज्य सहेजें और फिर से खेलना वास्तव में डुप्लिकेट छापे उत्पन्न करेगा।
यहोशू

35
संभवतः यह जो हुआ वह "खराब" GUID कार्यान्वयन था। सैद्धांतिक अंतर बहुत कम थे, लेकिन पॉकेट पीसी पर ?? कौन कहना है कि वे एक शॉर्टकट नहीं लेते हैं जो उन बाधाओं को "असंभावित, लेकिन संभव" श्रेणी में टकराते हैं।
डेव डॉपसन

9
सिर्फ इसलिए कि कुछ होने की संभावना बहुत कम है इसका मतलब यह नहीं है कि ऐसा नहीं होगा।
रेनैन

3
जैसा कि मैंने ऊपर कहा कि इसकी संभावनाएं इतनी कम हैं कि यह मान लेना सुरक्षित है कि या तो आपने कोई गलती की है या MSSQL एक दोषपूर्ण PRNG ( en.wikipedia.org/wiki/Pseudorandom_number_generator ) का उपयोग करता है । उदाहरण के लिए, यह संभावना है कि यह PRNG छोटे आकार के बीज के साथ जन्मजात है। दोषपूर्ण PRNGs दुर्लभ नहीं हैं (देखें schneier.com/paper-prngs.html ) - उदाहरण के लिए हाल ही में एंड्रॉइड एसडीके में एक दोष का पता चला था - android-developers.blogspot.com/2013/08/… + usbix.org/conference/woot14 / कार्यशाला-कार्यक्रम / प्रस्तुति /…
एलेक्स

2
@ एलेक्स, गलती एमुलेटर से "सेव स्टेट एंड रिस्टोर" थी, जो एमुलेटर घड़ी सहित संपूर्ण एमुलेटर छवि को पुनर्स्थापित करता है। इसलिए एक वर्ष में हजारों पुनर्स्थापना कार्यों के बाद, एक गाइड टकराव उत्पन्न हुआ। आप सही हैं एक गलती हुई थी!
पॉप कैटालिन

34

वे सैद्धांतिक रूप से संभव हैं, लेकिन 3.4E38 संभावित संख्याओं के साथ, यदि आप एक वर्ष में दसियों लाखों GUIDs बनाते हैं तो एक डुप्लिकेट होने का मौका 0.00000000006 ( स्रोत ) है।

यदि दो उपयोगकर्ता एक ही GUID के साथ समाप्त हो जाते हैं, तो मैं कहूंगा कि प्रोग्राम में एक बग है जो डेटा को कॉपी या साझा करने का कारण बन रहा है।


"लेकिन 3.4E38 संभावित संख्याओं के साथ" - नहीं। एक ही मशीन पर लगभग एक साथ उत्पन्न दो GUIDs बेहद समान GUID के साथ समाप्त हो जाएंगे।
कर्क स्ट्रूसर

4
यह निर्भर करता है कि GUID कैसे उत्पन्न होता है, और CPU समय या मिलीसेकंड के आधार पर कुछ कार्यान्वयन (उम्मीद है) जो भी गणना करेंगे तो मिलिसेकंड से अलग किए गए दो GUID से अलग इसकी गणना में बहुत बड़ा अंतर होगा।
Dalin Seivewright

4
एक मशीन पर 1 से अधिक प्रोसेसर के साथ, यदि एक गाइड समय और मैक पते पर आधारित है, तो प्रत्येक कोर समय में एक ही समय में एक ही गाइड जारी कर सकता है।
एंडीएम

12
मुझे पूरा यकीन है कि कोई भी सभ्य GUID कार्यान्वयन नहीं होगा
Guillaume86

1
@MatthewLock जन्मदिन का विरोधाभास स्रोत में शामिल है। लिंक की जाँच करें।
जीरो 3

21

पहले दो GUID के टकराने की संभावना को देखते हैं। यह नहीं है, जैसा कि अन्य जवाबों में कहा गया है, 1 में 2 ^ 128 (10 ^ 38) जन्मदिन के विरोधाभास के कारण , जिसका अर्थ है कि दो GUIDs की 50% संभावना के लिए संभावना टकराने 2 2 में से 1 ^ 64 (10 ^) है 19) जो बहुत छोटा है। हालाँकि, यह अभी भी एक बहुत बड़ी संख्या है, और इस तरह के टकराव की संभावना के अनुसार आप उचित संख्या में GUID का उपयोग कर रहे हैं।

यह भी ध्यान दें कि GUID में टाइमस्टैम्प या मैक एड्रेस नहीं होता है क्योंकि कई लोगों का मानना ​​है कि ऐसा लगता है। यह v1 GUID के लिए सही था, लेकिन अब v4 GUID का उपयोग किया जाता है, जो कि केवल एक छद्म यादृच्छिक संख्या है, जिसका अर्थ है कि टक्कर की संभावना यकीनन अधिक है, क्योंकि वे अब एक समय और मशीन के लिए अद्वितीय नहीं हैं।

तो अनिवार्य रूप से जवाब हां है, टकराव संभव है। लेकिन वे अत्यधिक संभावना नहीं हैं।

संपादित करें: 2 ^ 64 कहने के लिए तय किया गया


2
जबकि मैं आपके सभी तथ्यों से सहमत हूं, अपने गणित से सावधान रहें। यह कहने के लिए कि आपके पास किसी भी दो GUID के टकराने का 1 से 10 ^ 19 मौका है, यह इस बात पर निर्भर करता है कि सेट में कितने GUID हैं। उस मौके के लिए आपको ~ 2 ^ 32 GUID की आवश्यकता होती है, इसलिए लगभग सभी वास्तविक दुनिया के परिदृश्यों में अंतर बहुत कम है।
डॉकमैक्स

1
आपके पास एक टाइपो है 1 in 10^64 (10^19), जो मुझे लगता है कि होना चाहिए 1 in 2^64 (10^19)। मैं भी बहुत उलझन में हूं कि आपको कैसे लगता है कि जन्मदिन का विरोधाभास सिर्फ 2 नंबरों पर लागू होता है। मुझे लगता है कि आपने en.wikipedia.org/wiki/Birthday_paradox को देखा । तालिका से पता चलता है कि डुप्लिकेट की दी गई संभावना के लिए आपको कितने गाइड चाहिए। उस तालिका से 10 ^ 18 में 1 की संभावना को 2.6 * 10 ^ 10 गाइड की आवश्यकता होती है, न कि केवल दो GUID के करीब।
टोनी ली

एक बिंदु - v1 छापे अभी भी व्यापक उपयोग में हैं, और मैक पते पर भरोसा करते हैं, विशेष रूप से डेटाबेस में वांछनीय विशेषताओं के रूप में। UuidCreateSequential देखें और यह SQL सर्वर आवरण NewSequentialID ( msdn.microsoft.com/en-us/library/windows/desktop/… ) है।
EB

18

दो यादृच्छिक GUID के टकराने की संभावना (~ 10 ^ 38 में ~ 1) एक भ्रष्ट टीसीपी / आईपी पैकेट (10 ^ 10 में ~ 1) का पता नहीं लगाने की संभावना से कम है। http://wwwse.inf.tu-dresden.de/data/courses/SE1/SE1-2004-lec12.pdf , पृष्ठ 11. यह डिस्क ड्राइव, सीडी ड्राइव आदि के बारे में भी सच है ...

GUIDs सांख्यिकीय रूप से अद्वितीय हैं और db से आपके द्वारा पढ़ा गया डेटा केवल सांख्यिकीय रूप से सही है।


क्या आप सुनिश्चित हैं कि मैं संभवतः अपने नेटवर्क को 1 से कम नहीं कर सकता 1 10 ^ 28 पैकेट में भ्रष्ट हैं?
जोशुआ

13

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


1
वास्तव में इस स्थिति में ओकाम का उस्तरा एक अच्छा मार्गदर्शक नहीं है! ओकाम के रेजर का कहना है कि सबसे कम मान्यताओं वाला मामला सही होने की सबसे अधिक संभावना है। इस स्थिति में GUID टकराने का मामला वास्तव में बहुत सरल है, लेकिन ओकाम का रेजर इस तरह की स्थिति पर लागू नहीं होता है जहां हम पहले से ही जानते हैं कि मामलों में से एक अविश्वसनीय रूप से संभावना नहीं है।
लॉकस्टॉक

11

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

मुझे Microsoft द्वारा उपयोग किए जाने वाले नए एल्गोरिदम के बारे में यकीन नहीं है (लेख में कहा गया है कि GUIDs के एक अनुक्रम की भविष्यवाणी की जा सकती है, ऐसा लगता है कि वे अब टाइमस्टैम्प का उपयोग नहीं करते हैं? ऊपर जुड़ा हुआ Microsoft लेख कुछ और कहता है ...)।

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





9

डुप्लिकेट मैक पते के साथ ईथरनेट कार्ड वाले दो Win95 मशीनें कसकर नियंत्रित स्थितियों के तहत डुप्लिकेट GUIDS जारी करेंगे, खासकर यदि, उदाहरण के लिए, इमारत में बिजली बंद हो जाती है और वे दोनों एक ही समय में बूट करते हैं।


क्या दो अलग-अलग मशीनों में समान ईथरनेट मैक पता होना आम है?
डेव ल्यूक्रे

@DaveLucre: नहीं, लेकिन घटनाएं दर्ज की गई हैं।
जोशुआ

मैं वास्तव में उत्सुक हूं कि यह कैसे आता है। क्या वीएम के साथ यह अधिक संभावना है कि प्रत्येक एनआईसी के लिए बेतरतीब ढंग से मैक उत्पन्न करता है? मैंने कभी भी भौतिक NIC के डुप्लिकेट MAC के साथ निर्मित होने के बारे में नहीं सुना है! यदि संभव हो तो काम में एक विशाल स्पैनर फेंकता है!
डेव ल्यूक्रे

वाह! लिंक के लिए धन्यवाद @ जोशुआ! क्या एक महान पेंच!
डेव ल्यूक्रे

@DaveLucre मैंने कुछ बहुत सस्ते USB NIC का उपयोग किया है जहाँ सभी एक ही MAC के साथ निर्मित होते हैं। लेकिन निश्चित रूप से, जिसका यादृच्छिकता के गणित से कोई लेना-देना नहीं है, और निर्माता के आलस्य के साथ सब कुछ करना है।
रुडोल्फबाइकर

5

मैं इसे "मैं एक नेटवर्किंग व्यक्ति नहीं हूं, के साथ पेश करता हूं, इसलिए मैं निम्नलिखित पूरी तरह से असंगत वाक्य बना सकता हूं।"

जब मैंने इलिनोइस स्टेट यूनिवर्सिटी में काम किया, तो हमारे पास दो डेल डेस्कटॉप थे, अलग-अलग समय पर ऑर्डर किए गए। हमने पहले एक को नेटवर्क पर रखा, लेकिन जब हमने दूसरे को नेटवर्क पर रखने की कोशिश की, तो हमें पागल त्रुटियाँ मिलने लगीं। बहुत समस्या निवारण के बाद, यह निर्धारित किया गया था कि दोनों मशीनें एक ही GUID का उत्पादन कर रही थीं (मुझे यकीन नहीं है कि इसके लिए वास्तव में क्या है, लेकिन इसने दोनों को नेटवर्क पर अनुपयोगी बना दिया)। डेल ने वास्तव में दोनों मशीनों को दोषपूर्ण के रूप में बदल दिया।


3
यह विशेष रूप से GUID था। यह मशीनों द्वारा उत्पन्न GUID के साथ कुछ करना था जब वे नेटवर्क में शामिल हो गए। डेल को मशीनों को बदलने में कई सप्ताह लग गए क्योंकि उन्होंने कहा कि GUID के लिए समान होना असंभव था। हम समस्या को पुन: उत्पन्न करने में सक्षम थे, डेल ने मशीनों को वापस ले लिया, और अपने नेटवर्क पर समान परिणाम उत्पन्न करने में सक्षम थे। उन्होंने दोनों मशीनों को बदल दिया। जैसा कि मैंने कहा, मैं एक नेटवर्किंग व्यक्ति नहीं हूं, लेकिन मुझे विशेष रूप से याद है कि यह GUIDs के साथ एक समस्या थी।
जॉन क्राफ्ट

5

मुझे पता है कि लोगों को यह अच्छा-अच्छा जवाब पसंद है कि GUID जादुई हैं और अद्वितीय होने की गारंटी है, लेकिन वास्तव में, अधिकांश GUID सिर्फ 121-बिट यादृच्छिक संख्याएँ हैं (बिट्स के सात स्वरूपण पर व्यर्थ हैं)। यदि आप एक बड़े यादृच्छिक संख्या का उपयोग करके सहज महसूस नहीं करेंगे, तो आपको GUID का उपयोग करके सहज महसूस नहीं करना चाहिए।


11
यह भी सलाह है कि आप नेटवर्क का उपयोग न करें। या कंप्यूटर। समानता बिट्स केवल इतना कर सकते हैं!
रशियो

आपने गलत समझा। दो बातें मैं इस पोस्ट में कहना चाह रहा था: 1) यदि आपको एक बड़ी यादृच्छिक संख्या की आवश्यकता है, तो एक बड़े यादृच्छिक संख्या का उपयोग करें। एक बड़ी यादृच्छिक संख्या के रूप में GUID का उपयोग करना अनावश्यक रूप से भ्रामक है। (२)
रिक योर्गासन

4
जिसके बारे में मुझे पूरी जानकारी है। आपने कहा था "यदि आप एक बड़े यादृच्छिक संख्या का उपयोग करके सहज महसूस नहीं करेंगे।" लेकिन GUID इतने अनोखे हैं कि आप पाएंगे कि कंप्यूटर में बाकी सभी चीजें अधिक यादृच्छिक हैं, यहां तक ​​कि आपके द्वारा दिए गए ऑपरेशन भी। अधिक संभावना है कि एक फ्रीक मेमोरी गड़बड़ आपके पहचान कॉलम को एक (सच्चे) GUID से टकराएगी। आपको उनके बारे में 'असहज' महसूस नहीं करना चाहिए। यदि वे परिदृश्य के लिए आदर्श नहीं हैं तो ठीक है - लेकिन उन्हें विशेष सावधानी की आवश्यकता नहीं है।
रुशियो

3
मुझे लगता है कि यह कहीं नहीं जा रहा है लेकिन जो लोग आपको समझाने की कोशिश कर रहे हैं वह यह है कि त्रुटि नेटवर्क कार्ड या हार्ड ड्राइव जैसे सामान्य हार्डवेयर में mecanism का पता लगाता है जिसमें एक GUID टक्कर लेने की तुलना में आपके द्वारा एक त्रुटि का पता नहीं लगाने की बड़ी संभावना है, इसलिए यदि आप इन पर भरोसा करते हैं, आप
Guillaume86

1
@ क्लिक करें, यह निर्भर करता है कि आपकी संख्या कितनी बड़ी है। निश्चित रूप से 4 बाइट इंट या 8 बाइट बिगिंट के साथ नहीं। GUID = 16 बाइट्स, तो आपको उसी 2 ^ 128 संभावित संयोजनों को प्राप्त करने के लिए कस्टम 16 बाइट बड़ी संख्या कार्यान्वयन की आवश्यकता होगी। तो आम तौर पर, यदि का उपयोग करते हुए 'सामान्य' पूर्णांक या bigint यादृच्छिक संख्या, एक GUID के साथ टकराव की संभावना को है कम (प्रत्येक के लिए यादृच्छिक algo विचार बाहर छोड़कर)।
Hollebrandse

3

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


2

निश्चित रूप से यह संभव है .... संभावित? संभावना नहीं है, लेकिन यह संभव है।

याद रखें, एक ही मशीन हर GUID (सर्वर) को उत्पन्न कर रही है, इसलिए मशीन विशिष्ट जानकारी पर आधारित "यादृच्छिकता" का एक बहुत कुछ खो गया है।


1

सिर्फ अनाज के लिए, निम्न स्क्रिप्ट आज़माएं ... (SQL 2005 पर काम करता है, 2000 के बारे में निश्चित नहीं)

declare @table table
(
    column1 uniqueidentifier default (newid()),
    column2 int,
    column3 datetime default (getdate())
)

declare @counter int

set @counter = 1

while @counter <= 10000
begin
    insert into @table (column2) values (@counter)
    set @counter = @counter + 1
end

select * from @table

select * from @table t1 join @table t2 on t1.column1 = t2.column1 and t1.column2 != t2.column2

इसे बार-बार चलाना (एक सेकंड से भी कम समय) पहले चयन से काफी विस्तृत रेंज का उत्पादन करता है, यहां तक ​​कि एक एक्सट्रैमी कम समय के अंतराल के साथ। अब तक दूसरे चयन ने कुछ भी नहीं बनाया है।


1
आपको डुप्लिकेट का 50% मौका होने के लिए काउंटर के अंत में एक और 15 शून्य की आवश्यकता है। लेकिन, पीट के लिए यह मत करो!
जिम बर्चेल

0

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

व्यक्तिगत रूप से मैं कहीं और देखूंगा क्योंकि यह एक GUID क्लैश के बजाय बग की संभावना है ...

यह सुनिश्चित करने के लिए कि आप इसे छोटा करने के लिए GUID से बिट्स काटें नहीं।


GUID सर्वर पर उत्पन्न होगा, इसलिए उपयोगकर्ता के नेटवर्क कार्ड खेलने में नहीं आएंगे।
टॉम रिटर

0

यकीन है कि यह संभव है, और शायद यह भी संभावना है। ऐसा नहीं है कि प्रत्येक GUID संभव संख्या स्थान के यादृच्छिक भाग में है। इस घटना में कि दो धागों ने एक साथ उत्पन्न करने का प्रयास किया, किसी तरह के केंद्रीकृत GUID फ़ंक्शन को इसके चारों ओर एक सीमापोर के साथ रोक दिया, वे एक ही मूल्य के साथ समाप्त हो सकते हैं।


0

यदि आप उन्हें कुछ के माध्यम से उत्पन्न कर रहे हैं तो यह बहुत संभावना नहीं है कि आप GUID टकराव में भाग लेंगे NEWID() SQL सर्वर में फ़ंक्शन के (हालांकि निश्चित रूप से संभव है, क्योंकि अन्य उत्तरों पर जोर दिया गया है)। एक बात जिस पर उन्होंने ध्यान नहीं दिया है वह यह है कि यदि आप जंगल में ब्राउज़रों पर जावास्क्रिप्ट में GUIDs उत्पन्न कर रहे हैं तो यह वास्तव में काफी संभावना है कि आप टकराव में भाग लेंगे। न केवल कभी-कभी विभिन्न ब्राउज़रों में आरएनजी में समस्याएं होती हैं, बल्कि मैंने उन समस्याओं में भी भाग लिया है जहां Google मकड़ियों को इस तरह के कार्यों के परिणामों को कैश करने के लिए लगता है, और हमारे सिस्टम पर एक ही GUID को बार-बार पारित करने पर समाप्त हो गया।

अधिक जानकारी के लिए यहां विभिन्न उत्तर देखें:

जावास्क्रिप्ट में UUIDs बनाते समय टकराव?

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