2013-04-23 6 views
10

स्वत: जेनरेट की गई बीएसओएन आईडी जो प्रत्येक दस्तावेज़ के _id फ़ील्ड में संग्रहीत है, क्या यह एक GUID है? प्रलेखन का कहना है कि यह 'सबसे अधिक संभावना अद्वितीय' है, इसलिए मैं थोड़ा उलझन में हूं। वे ऐसी आईडी का उपयोग क्यों करेंगे जो अद्वितीय होने की गारंटी नहीं है?मोंगोड ऑब्जेक्ट आईडी GUID हैं?

+1

यह अद्वितीय होने की गारंटी है कम से कम मैंने कभी वास्तविक टकराव नहीं देखा है। इसमें बहुत सारे दस्तावेज हैं जो वास्तव में इसे एन्कोड किया गया है। –

+1

यहां तक ​​कि GUID इसकी विशिष्टता की गारंटी नहीं देता है, लेकिन जिस तरह से वे बनाते हैं, वे हर समय अद्वितीय होने की संभावना रखते हैं। – Devesh

उत्तर

3

यह अधिकांश आवश्यकता में अद्वितीय है और इसमें टाइमस्टैम्प, मशीन का अद्वितीय पहचानकर्ता (मशीन होस्ट का हैश), प्रक्रिया पहचानकर्ता और अंत में वृद्धि संख्या में शामिल है। http://docs.mongodb.org/manual/reference/object-id/

0

ऑब्जेक्टआईडी दस्तावेज़ here में समझाया गया है। यह अद्वितीय होने की "गारंटीकृत" नहीं है क्योंकि मोंगोडीबी समय बचाने के लिए विशिष्टता लागू नहीं करता है। यह बस भरोसा करता है कि जटिल पीढ़ी एल्गोरिदम शायद उसी डेटास्टोर में दो समान ऑब्जेक्ट्स का उत्पादन नहीं करेगा। तो तकनीकी रूप से यह एक GUID नहीं है, लेकिन काफी अच्छा है।

6

इसकी uniqness संभावना पर आधारित है। @mattexx उत्तर के विपरीत:

यह अद्वितीय होने की "गारंटी" नहीं है क्योंकि MongoDB समय बचाने के लिए विशिष्टता लागू नहीं करता है।

MongoDB वास्तव में ObjectId पर uniqness लागू करने, यह करता है _id क्षेत्र पर एक अद्वितीय सूचकांक है। समय बचाने के बारे में बात करते समय, ObjectId इस तरह से ऐतिहासिक है क्योंकि यह उन दिनों में डिज़ाइन किया गया था जब मोंगोडीबी ने कोई भी लिखा नहीं था और क्लाइंट के बिना एक नया अनोखा रिकॉर्ड डालने में 99% मौका की आवश्यकता थी, ऑब्जेक्ट आईडी क्लाइंट पक्ष उत्पन्न होते हैं)।

वे GUID नहीं हैं, हालांकि, जैसा कि @Asya कहते हैं, उच्च स्तर की असीमितता की गारंटी है।

जब तक समय कभी पीछे नहीं चलता है तब भी 99% मौका हमेशा के लिए अद्वितीय होगा। ठीक है, जैसा कि @ देवेश कहते हैं, 1 ट्रिलियन में से 1 (गणित नहीं किया है), एक GUID को डुप्लीकेट करने का मौका भी है, लेकिन फिर, मुझे नहीं लगता कि आप जल्द ही उस संभावना तक पहुंच जाएंगे।

1

आईडी टकराव का मौका सैद्धांतिक रूप से शून्य के करीब पर्याप्त है जिसे इसे सामान्य वेब ऐप्स के लिए माना जा सकता है। कई असली दुनिया प्रणालियों (मोंगो या नहीं) GUID की इस संपत्ति पर भरोसा करते हैं, हालांकि यह सुरक्षा/मिशन-महत्वपूर्ण प्रणालियों के लिए एक अच्छी धारणा नहीं होगी।

व्यावहारिक शब्दों में, वास्तव में ऐसे परिदृश्य हैं जहां गलत कॉन्फ़िगरेशन या तृतीय-पक्ष लाइब्रेरी बग है तो यह गलत हो सकता है। उन अवधारणाओं से इंकार नहीं करना चाहिए, लेकिन उन जोखिमों से अवगत होना महत्वपूर्ण है और जहां संभव हो वहां से बचें।

कुछ good analysis here व्यावहारिक मुद्दों के कारण जो टक्कर पैदा कर सकते हैं। विशेष रूप से:

कुछ मोंगो ड्राइवर काउंटर बाइट्स के लिए संख्या बढ़ाने के बजाय यादृच्छिक संख्याओं का उपयोग करते हैं। इन मामलों में, एक गैर-अद्वितीय आईडी उत्पन्न करने का 1/16,777,216 मौका है, लेकिन केवल तभी यदि वे दो आईडी एक ही सेकेंड में उत्पन्न होते हैं (यानी अगले सेकंड में आईडी अपडेट के समय अनुभाग से पहले), उसी पर मशीन, एक ही प्रक्रिया में।

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