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

मोंगोडब एग्रीगेशन फ्रेमवर्क की व्याख्या करता है

MongoDB संस्करण 3.0 से शुरू होकर, बस क्रम को

. से बदल रहा है
collection.aggregate(...).explain()

करने के लिए

collection.explain().aggregate(...)

आपको वांछित परिणाम देगा (दस्तावेज़ीकरण यहाँ)।

पुराने संस्करणों>=2.6 के लिए, आपको explain . का उपयोग करना होगा एकत्रीकरण पाइपलाइन संचालन के लिए विकल्प

explain:true

db.collection.aggregate([
    { $project : { "Tags._id" : 1 }},
    { $unwind : "$Tags" },
    { $match: {$or: [{"Tags._id":"tag1"},{"Tags._id":"tag2"}]}},
    { $group: { 
        _id : "$_id",
        count: { $sum:1 } 
    }},
    {$sort: {"count":-1}}
  ],
  {
    explain:true
  }
)

एग्रीगेशन फ्रेमवर्क के साथ एक महत्वपूर्ण विचार यह है कि एक इंडेक्स का उपयोग केवल एक पाइपलाइन के लिए प्रारंभिक डेटा लाने के लिए किया जा सकता है (उदाहरण के लिए $match का उपयोग) , $sort , $geonear पाइपलाइन की शुरुआत में) और साथ ही बाद के $lookup और $graphLookup चरण। एक बार प्रसंस्करण के लिए डेटा एकत्रीकरण पाइपलाइन में लाया गया है (उदाहरण के लिए $project जैसे चरणों से गुजरना , $unwind , और $group ) आगे की हेराफेरी इन-मेमोरी होगी (संभवतः अस्थायी फ़ाइलों का उपयोग करते हुए यदि allowDiskUse विकल्प सेट है)।

पाइपलाइनों को अनुकूलित करना

सामान्य तौर पर, आप निम्न द्वारा एकत्रीकरण पाइपलाइनों को अनुकूलित कर सकते हैं:

  • एक $match के साथ एक पाइपलाइन शुरू करना प्रसंस्करण को प्रासंगिक दस्तावेजों तक सीमित रखने का चरण।
  • शुरुआती $match सुनिश्चित करना / $sort चरणों को एक कुशल अनुक्रमणिका द्वारा समर्थित किया जाता है।
  • $match . का उपयोग करके डेटा को जल्दी फ़िल्टर करना , $limit , और $skip
  • अनावश्यक चरणों और दस्तावेज़ हेरफेर को कम करना (यदि जटिल एकत्रीकरण जिमनास्टिक की आवश्यकता हो तो शायद अपने स्कीमा पर पुनर्विचार करें)।
  • यदि आपने अपने MongoDB सर्वर को अपग्रेड किया है, तो नए एकत्रीकरण ऑपरेटरों का लाभ उठाएं। उदाहरण के लिए, MongoDB 3.4 ने कई नए एकत्रीकरण चरणों और अभिव्यक्तियों को जोड़ा, जिसमें सरणियों, स्ट्रिंग्स और पहलुओं के साथ काम करने के लिए समर्थन शामिल है।

कई एकत्रीकरण पाइपलाइन अनुकूलन भी हैं जो आपके MongoDB सर्वर संस्करण के आधार पर स्वचालित रूप से होते हैं। उदाहरण के लिए, आउटपुट परिणामों को प्रभावित किए बिना निष्पादन में सुधार के लिए आसन्न चरणों को समेकित और/या पुन:व्यवस्थित किया जा सकता है।

सीमाएं

MongoDB 3.4 की तरह, एग्रीगेशन फ्रेमवर्क explain विकल्प इस बारे में जानकारी प्रदान करता है कि एक पाइपलाइन को कैसे संसाधित किया जाता है, लेकिन executionStats के समान स्तर के विवरण का समर्थन नहीं करता है find() . के लिए मोड सवाल। यदि आप प्रारंभिक क्वेरी निष्पादन को अनुकूलित करने पर ध्यान केंद्रित कर रहे हैं, तो संभवतः आपको समकक्ष find().explain() की समीक्षा करना फायदेमंद लगेगा। executionStats . के साथ क्वेरी या allPlansExecution वाचालता।

अनुकूलन/प्रोफ़ाइल एकत्रीकरण पाइपलाइनों में सहायता के लिए अधिक विस्तृत निष्पादन आँकड़ों के संबंध में MongoDB इश्यू ट्रैकर में देखने/अपवोट करने के लिए कुछ प्रासंगिक सुविधा अनुरोध हैं:

  • SERVER-19758:"निष्पादन आँकड़े" और "allPlansExecution" जोड़ें, एकत्रीकरण की व्याख्या करने के तरीके की व्याख्या करें
  • SERVER-21784:प्रत्येक एकत्रीकरण पाइपलाइन चरण के लिए निष्पादन आंकड़े ट्रैक करें और व्याख्या के माध्यम से उजागर करें
  • SERVER-22622:"से" संग्रह पर क्वेरी योजना को इंगित करने के लिए $lookup व्याख्या में सुधार करें


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB - श्रेणीबद्ध क्वेरी पर छँटाई और सीमित करते समय सूचकांक का उपयोग नहीं किया जा रहा है

  2. त्रुटि संदेश:MongoError:खराब प्रमाणीकरण URI स्ट्रिंग के माध्यम से विफल रहा

  3. MongoDB $eq एकत्रीकरण पाइपलाइन ऑपरेटर

  4. त्रुटि:अपडेट ऑपरेशन दस्तावेज़ में परमाणु ऑपरेटर होना चाहिए, जब अपडेटऑन चल रहा हो

  5. लॉक फ़ाइल बनाने/खोलने में असमर्थ:/data/mongod.lock errno:13 अनुमति अस्वीकृत