2014-09-22 8 views
31

का उपयोग कर जावा में createIndex() और सुनिश्चित करें इंडेक्स() के बीच अंतर MongoDB का उपयोग कर जावा में createIndex() और ensureIndex() के बीच क्या अंतर है? मैंने इसे गुगल किया लेकिन संतोषजनक जवाब नहीं मिला।मोंगोडब

+2

मोंगो डीबी दस्तावेज वास्तव में बहुत अच्छा है। क्या आप ने कोशिश की? – Jayan

उत्तर

23

अद्यतन 2: मूल जवाब, साथ ही पहले अद्यतन, ग़लती से मोंगो खोल प्रलेखन संदर्भ जावा एपीआई के बजाय।

जावा में, DBCollection.ensureIndex() संस्करण 2.12 में बहिष्कृत किया गया था और संस्करण 3.0 में हटा दिया गया था। DBCollection.createIndex() वह है जिसे इस्तेमाल किया जाना चाहिए।

अद्यतन:
db.collection.ensureIndex() संस्करण 3.0.0 के बाद से मान्य नहीं है।
अब db.collection.createIndex() के लिए उपनाम है।

मूल:
createIndex() है deprecated since 1.8

यह संग्रह पर अनुक्रमणिका बनाने के लिए अगर सूचकांक पहले से ही अस्तित्व में नहीं है जबकि ensureIndex() निर्दिष्ट क्षेत्र पर अनुक्रमणिका बनाता है इस्तेमाल किया गया था। इसके अलावा जब हम createIndex() पर अमल दो बार दूसरे निष्पादन सिर्फ असफल हो जायेगी जबकि ensureIndex() के साथ इसे कई बार आह्वान कर सकते हैं और यह असफल नहीं हो

एक और बात यह है कि वे ensureIndex() के व्यवहार के बारे में बदल गया है, के पिछले संस्करणों में MongoDB (संस्करण तो कम 2.6) यदि कोई मौजूदा दस्तावेज़ के लिए सूचकांक प्रविष्टि अधिकतम सूचकांक कुंजी लंबाई एक सूचकांक बनाई किया जाएगा से अधिक है लेकिन MongoDB सूचकांक ऐसे दस्तावेजों जबकि नहीं हाल के संस्करण में कोई सूचकांक बनाई किया जाएगा।

+15

[मोंगोडब डॉक्स] के अनुसार (http://docs.mongodb.org/manual/reference/method/db.collection.ensureIndex/) 'sureIndex()' बहिष्कृत है। – KPrince36

+1

'createIndex' वास्तव में नरम-असफल हो जाएगा (कम से कम 3.0 पर)। बाद की कॉल पर यह "ठीक" वापस आ जाएगा, लेकिन "नोट" भी बताएगा कि "सभी इंडेक्स पहले से मौजूद हैं" – PeterM

14

जावा एपीआई में, DBCollection.ensureIndex() वास्तव में चारों ओर (प्रतिक्रिया के समय) "सामान्य" MongoDB एपीआई की तुलना में अन्य तरह से अनुचित है,। अद्यतन: यह विसंगति तब से हल हो गई है, और db.collection.createIndex() अब मोंगो खोल में db.collection.ensureIndex() को प्रतिस्थापित करता है।

आप https://jira.mongodb.org/browse/JAVA-1097 में देख सकते हैं, जावा में (जो ओ पी के बारे में पूछा) ensureIndex() संस्करण जावा चालक की 2.12.0 में पदावनत किया गया था, और DBCollection.createIndex() एक आप उपयोग करने की आवश्यकता है। DBCollection.ensureIndex() (संस्करण 2.12 से लिंक) DBCollection जावा एपीआई में अब उपलब्ध नहीं है।

+0

बीटीडब्ल्यू, मैं प्रतिष्ठा की कमी के कारण @ sol4me के गलत उत्तर पर टिप्पणी नहीं कर सकता, न ही गलत तरीके से हटाए गए मूल को पुनर्जीवित करता हूं जवाब दें, या उस मामले के लिए और कुछ भी करें। :-( –

+0

यदि आपको लगता है कि आप सही हैं, तो अच्छी तरह से लिखित उत्तर पोस्ट करें, उस तरह का बेकार जवाब नहीं। यह सुनिश्चित करने के लिए हटा दिया जा रहा है। – Dici

+2

मुझे खेद है, लेकिन मेरे जवाब के बारे में क्या बेकार है? मैं कह रहा हूँ कि @ sol4me को यह गलत लगता है, और जावा एपीआई में आपको वास्तव में createIndex() का उपयोग करना होगा। मैं संबंधित जेआईआरए मुद्दे का भी संदर्भ देता हूं जहां मैंने इसे मोंगोडीबी डेवलपर्स के साथ स्पष्ट करने में कामयाब रहे ... अगर मुझे कभी जवाब मिल गया जो लोग मेरा जवाब हटाते हैं, मैं इसे संपादित करूँगा और यह दिखाने के लिए वहां सभी सामानों को नहीं छोड़ूंगा कि यह कैसे हटा दिया गया है। जैसा कि यह है, यह मेरे लिए बहुत ही विरोधी है, मैंने डेवलपर्स के साथ चीजों पर चर्चा करने का प्रयास भी किया है। एक सही उत्तर दे सकता है। –

1

जावा ड्राइवर (v2.12 और पुराने) में मिली ensureIndex विधि कैश करेगा, सूचकांक संग्रह पर मौजूद है या नहीं। चूंकि एकाधिक ग्राहक संभावित रूप से संग्रह पर इंडेक्स को बदल सकते हैं, इसलिए कैश मान कभी-कभी गलत हो सकता है और ड्राइवर लापता इंडेक्स बनाने में असफल हो जाता है।

इस कारण से, जावा चालक ने समान व्यवहार के साथ createIndex विधि लागू की, सिवाय इसके कि यह सूचकांक स्थिति को कैश नहीं करेगा।

ड्राइवर 2 के साथ।12 और बाद वाले वर्शन, आप ensureIndexcreateIndex से प्रतिस्थापित कर सकते हैं और उसी व्यवहार की अपेक्षा करते हैं, प्रदर्शन प्रदर्शन को छोड़कर जहां ड्राइवर पहले सोचता था कि अनुक्रमणिका पहले से मौजूद है और mongo सर्वर पर createIndex कमांड भेजने के बिना वापस आती है।

क्यों उन्होंने नाम बदलने के बिना व्यवहार को नहीं बदला - मुझे पता नहीं है।

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