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

MongoDB/Mongoose अनुक्रमणिका क्वेरी को तेज़ या धीमा कर देती है?

आप इसे गलत पढ़ रहे हैं

आप वहां उद्धृत ब्लॉक के आशय को गलत तरीके से पढ़ रहे हैं कि .ensureIndex() (अब पदावनत, लेकिन अभी भी नेवला कोड द्वारा कहा जाता है) वास्तव में यहाँ संदर्भ में है।

नेवला में, आप एक इंडेक्स को या तो स्कीमा या मॉडल स्तर पर परिभाषित करते हैं जो आपके डिज़ाइन के लिए उपयुक्त है। नेवला "स्वचालित रूप से" आपके लिए क्या करता है कनेक्शन पर यह प्रत्येक पंजीकृत मॉडल की जांच करता है और फिर उपयुक्त .ensureIndex() को कॉल करता है। प्रदान की गई अनुक्रमणिका परिभाषाओं के लिए तरीके।

यह वास्तव में क्या करता है?

ठीक है, ज्यादातर मामलों में, जब आप अपना आवेदन पहले ही शुरू कर चुके होते हैं और .ensureIndexes() विधि चलाई गई बिल्कुल कुछ भी नहीं . है . यह थोड़ा अतिशयोक्तिपूर्ण है, लेकिन यह कमोबेश सच है।

क्योंकि सर्वर संग्रह पर अनुक्रमणिका परिभाषा पहले ही बनाई जा चुकी है, बाद की कॉल कुछ भी नहीं करती है। यानी, यह इंडेक्स को नहीं गिराता है और "री-क्रिएट" करता है। तो वास्तविक लागत मूल रूप से कुछ भी नहीं है, एक बार सूचकांक स्वयं बन जाने के बाद।

अनुक्रमणिका बनाना

इसलिए चूंकि मानक एपीआई के शीर्ष पर नेवला सिर्फ एक परत है, createIndex() विधि में क्या हो रहा है, इसके सभी विवरण शामिल हैं।

यहां पर विचार करने के लिए कुछ विवरण हैं, जैसे कि "पृष्ठभूमि" में एक इंडेक्स बिल्ड हो सकता है, और जबकि यह आपके आवेदन के लिए कम घुसपैठ कर रहा है, यह इसकी अपनी लागत पर आता है। विशेष रूप से कि "पृष्ठभूमि" पीढ़ी से सूचकांक आकार बड़ा होगा यदि आपने इसे अग्रभूमि में बनाया है, अन्य कार्यों को अवरुद्ध कर रहा है।

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

किसी अनुक्रमणिका का लाभ यह है कि किसी अनुक्रमणिका में निहित मानों की "खोज" करना संपूर्ण संग्रह की खोज करने और संभावित स्थितियों से मेल खाने की तुलना में बहुत तेज़ है।

ये इंडेक्स से जुड़े बुनियादी "ट्रेड-ऑफ़" हैं।

तैनाती पैटर्न

उद्धृत ब्लॉक पर वापस जाएं दस्तावेज़ीकरण से, इस सलाह के पीछे एक वास्तविक मंशा है।

यह परिनियोजन पैटर्न में विशिष्ट है और विशेष रूप से इस क्रम में काम करने के लिए डेटा माइग्रेशन के साथ:

  1. डेटा को प्रासंगिक संग्रहों/तालिकाओं में पॉप्युलेट करें
  2. अपनी आवश्यकताओं के लिए प्रासंगिक संग्रह/तालिका डेटा पर अनुक्रमणिका सक्षम करें

ऐसा इसलिए है क्योंकि इंडेक्स निर्माण में एक लागत शामिल है, और जैसा कि पहले उल्लेख किया गया है, इंडेक्स बिल्ड से सबसे इष्टतम आकार प्राप्त करना वांछनीय है, साथ ही साथ प्रत्येक दस्तावेज़ प्रविष्टि को इंडेक्स प्रविष्टि लिखने के ऊपरी हिस्से में होने से बचें। यह "लोड" बल्क में कर रहा है।

तो यही वह है जो इंडेक्स के लिए है, वे लागत और लाभ हैं और नेवला दस्तावेज़ीकरण में संदेश समझाया गया है।

हालांकि सामान्य तौर पर, मैं डेटाबेस अनुक्रमणिका पर पढ़ने का सुझाव देता हूं। क्योंकि वे क्या हैं और क्या करते हैं। एक किताब खोजने के लिए एक पुस्तकालय में चलने के बारे में सोचें। प्रवेश द्वार पर एक कार्ड इंडेक्स है। क्या आप अपनी मनचाही किताब खोजने के लिए पुस्तकालय में घूमते हैं? या क्या आप इसे कार्ड इंडेक्स में देखते हैं कि यह कहां है? उस अनुक्रमणिका को बनाने और उसे अद्यतन रखने में किसी को समय लगा, लेकिन यह "आप" को पूरी लाइब्रेरी में घूमने के समय की बचत करता है ताकि आप अपनी पुस्तक ढूंढ सकें।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB में ObjectIDs के बजाय UUIDs का उपयोग करना

  2. Symfony2 का mongoDB मेरी संस्थाओं के बजाय एक लॉग करने योग्य कर्सर लौटाता है

  3. नोड + मोंगोडब + नेस्टेड सरणी को सॉर्ट करें

  4. पता लगाएं कि ऑब्जेक्ट प्री-सेव हुक नेवला में बदल गया है या नहीं

  5. कैसे एक एम्बेडेड दस्तावेज़ की तलाश में नेवला में एक अप्सर्ट प्रदर्शन करने के लिए?