MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

दो अलग-अलग संग्रहों में डुप्लिकेट मोंगो ऑब्जेक्ट आईडी उत्पन्न होने की संभावना?

संक्षिप्त उत्तर

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

लंबा उत्तर

मोंगो डीबी ड्राइवरों द्वारा उत्पन्न बीएसओएन ऑब्जेक्ट आईडी संग्रह में अद्वितीय होने की अत्यधिक संभावना है। यह मुख्य रूप से आईडी के अंतिम 3 बाइट्स के कारण है, जो अधिकांश ड्राइवरों के लिए . है एक स्थिर वृद्धिशील काउंटर के माध्यम से उत्पन्न होता है। वह काउंटर संग्रह-स्वतंत्र है; यह वैश्विक है। उदाहरण के लिए, जावा ड्राइवर एक यादृच्छिक रूप से आरंभिक, स्थिर AtomicInteger का उपयोग करता है।

तो क्यों, मोंगो दस्तावेज़ों में, क्या वे कहते हैं कि आईडी अद्वितीय होने की "अत्यधिक संभावना" है, यह कहने के बजाय कि वे अद्वितीय होंगे? जहां आपको एक अद्वितीय आईडी नहीं मिलेगी, वहां तीन संभावनाएं हो सकती हैं (यदि और हो तो कृपया मुझे बताएं):

इस चर्चा से पहले, याद रखें कि बीएसओएन ऑब्जेक्ट आईडी में निम्न शामिल हैं:

[युग के बाद से 4 बाइट्स सेकंड, 3 बाइट्स मशीन हैश, 2 बाइट्स प्रोसेस आईडी, 3 बाइट्स काउंटर]

यहां तीन संभावनाएं हैं, इसलिए आप स्वयं निर्णय लें कि ठगे जाने की कितनी संभावना है:

1) काउंटर ओवरफ्लो:काउंटर में 3 बाइट्स होते हैं। यदि आप एक ही मशीन पर, एक ही प्रक्रिया में, एक ही सेकंड में 16,777,216 (2^24) से अधिक दस्तावेज़ सम्मिलित करते हैं, तो आप वृद्धिशील काउंटर बाइट्स को ओवरफ्लो कर सकते हैं और दो ऑब्जेक्ट आईडी के साथ समाप्त हो सकते हैं जो समान समय साझा करते हैं, मशीन , प्रक्रिया, और काउंटर मान।

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

3) मशीन और प्रोसेस हैश का मान समान है। मशीन आईडी और प्रक्रिया आईडी मान, कुछ अत्यधिक असंभाव्य परिदृश्य में, दो अलग-अलग मशीनों के लिए समान मानों पर मैप कर सकते हैं। यदि ऐसा होता है, और एक ही समय में दो अलग-अलग मशीनों पर दो काउंटर, एक ही सेकंड के दौरान, समान मान उत्पन्न करते हैं, तो आपके पास एक डुप्लीकेट आईडी होगा।

देखने के लिए ये तीन परिदृश्य हैं। परिदृश्य 1 और 3 अत्यधिक असंभव प्रतीत होते हैं, और यदि आप सही ड्राइवर का उपयोग कर रहे हैं तो परिदृश्य 2 पूरी तरह से टालने योग्य है। निश्चित रूप से जानने के लिए आपको ड्राइवर के स्रोत की जांच करनी होगी।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. समय श्रृंखला डेटाबेस के रूप में MongoDB

  2. मोंगो के साथ सभी दस्तावेजों में सरणी घटनाओं की गणना करें

  3. मोंगोडब एकत्रीकरण में लुकअप

  4. Mongodb PHP - दशमलव के साथ पूर्णांक

  5. MongoDB त्रुटि लॉग को डिकोड करना