2012-12-27 13 views
19

मोंगोडीबी _id के लिए ऑब्जेक्ट आईडी प्रकार का उपयोग करता है।क्या मोंडोडीबी में पूर्णांक में _id प्रकार बदलना बुरा है?

क्या यह खराब होगा यदि मैं एक वृद्धिशील पूर्णांक _id करता हूं?

(this मणि के साथ, आप रुचि रखते हैं)

+0

यह वास्तव में निर्भर करता है। ऐसा कोई तर्क नहीं है क्योंकि यह एक अद्वितीय आईडी (ऑटो वृद्धि) है लेकिन फिर आईडी को अनूठा रखने के लिए रखरखाव ओवरहेड की वजह से हाँ के लिए एक है (अन्य काउंटर संग्रह से पूछताछ करना)। यह आपके द्वारा डालने से पहले सभी _ids की विशिष्टता की जांच करना है, यह अंततः आवेषण की दर में बाधा डालता है और लंबे समय तक लॉक बनाता है। – Sammaye

+0

हम्म, इस साधारण सुविधा के लिए डीबी में इतनी सारी कार्रवाइयां? = ( –

+0

हाँ, निश्चित रूप से कुछ कारणों से मोंगोडीबी को सर्वर-साइड ऑटो इंक्रिमेंटिंग आईडी की कोई समझ नहीं है, आप इसे देखने के लिए यहां क्या ले सकते हैं: http: //docs.mongodb।संगठन/मैनुअल/ट्यूटोरियल/बनाने-एक-ऑटो-वृद्धि-क्षेत्र/वास्तव में यह कारणों में से एक है कि क्यों मोंगोडीबी इस प्रकार के आईडी सर्वर-साइड – Sammaye

उत्तर

20

नहीं, यह बिल्कुल बुरा नहीं है और वास्तव में OjbectId में निर्मित इंडेक्स के भीतर काफी बड़ा है, इसलिए यदि आपको लगता है कि आपके पास कुछ बेहतर है तो आप _id फ़ील्ड के डिफ़ॉल्ट मान को बदलने के लिए स्वागत से अधिक हैं । http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/#auto-increment-counters-collection

बहु सूत्रण 'isn:

लेकिन, और यह एक बड़ा लेकिन है, वहाँ कुछ बातों को जब, डिफ़ॉल्ट से दूर ले जाने के लिए निर्णय लेने ObjectId तैयार की है, खासकर जब ऑटो _ids बढ़ाने का उपयोग कर के रूप में यहाँ दिखाया गया हैं टी इतनी बड़ी समस्या है क्योंकि findAndModify और परमाणु ताले वास्तव में इसका ख्याल रख सकते हैं, लेकिन फिर आप अपनी पहली समस्या में हिट हो जाते हैं। findAndModify सबसे तेज़ काम नहीं है और न ही सबसे हल्का है और नियमित रूप से इसका उपयोग करते समय महत्वपूर्ण प्रदर्शन बूंदों पर ध्यान दिया गया है।

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

बेशक ObjectId सम्मिलन से पहले डेटाबेस को स्पर्श करके अपनी विशिष्टता को जांचने या बनाने के बिना अद्वितीय होने के लिए वास्तव में अच्छा है, इसलिए इसमें यह ओवरहेड नहीं है।

कहा जा रहा है कि यह दुनिया में सबसे बुरा विचार नहीं है और यदि आपको लगता है कि यह आपके परिदृश्य को सुइट करता है तो इसके लिए जाएं लेकिन ध्यान रखें कि अगर आपको ऑटो वृद्धिशील आईडी की आवश्यकता नहीं है तो यह आपके लिए बोझ हो सकता है ।

7

आप यह कर सकते हैं, लेकिन आप यह सुनिश्चित करें कि पूर्णांकों अद्वितीय हैं बनाने के लिए जिम्मेदार हैं।

मोंगोडीबी अधिकांश SQL डेटाबेस जैसे ऑटो-वृद्धि फ़ील्ड का समर्थन नहीं करता है। जब आपके पास एक वितरित या बहुप्रचारित अनुप्रयोग होता है जिसमें एकाधिक प्रक्रियाएं और/या धागे होते हैं जो नई डेटाबेस प्रविष्टियां बनाते हैं, तो आपको यह सुनिश्चित करना होगा कि वे एक ही काउंटर का उपयोग करें। अन्यथा ऐसा हो सकता है कि दो थ्रेड डेटाबेस में एक ही _id के साथ दस्तावेज़ को स्टोर करने का प्रयास करते हैं।

जब ऐसा होता है, तो उनमें से एक विफल हो जाएगा। इसका मतलब है कि आपको डेटाबेस को सफलता या त्रुटि वापस करने के लिए इंतजार करना होगा (GetLastError को कॉल करके या को पर लिखित चिंताओं को सेट करके), जो केवल आग और भूलने के तरीके में डेटा भेजने से अधिक समय लेता है।

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