2013-10-25 8 views
12

मेरे पास mongo 2.4.4 में match-unwind-group-sort एकत्रीकरण पाइपलाइन है और मुझे एकत्रीकरण को तेज करने की आवश्यकता है।मैंगोडब एकत्रीकरण ढांचे के लिए इंडेक्स ऑप्टिमाइज़ेशन

मैच ऑपरेशन में 16 फ़ील्ड पर रेंज पूछताछ शामिल हैं। मैंने (यानी यौगिक अनुक्रमणिका बनाते हैं) श्रेणी अनुकूलित करने के लिए .explain() विधि का उपयोग किया है। क्या समेकन को अनुकूलित करने के लिए कोई समान कार्य है? मैं कुछ ऐसा ढूंढ रहा हूं:

db.col.aggregate([]).explain() 

साथ ही, क्या मुझे इंडेक्स अनुकूलन पर ध्यान केंद्रित करने का अधिकार है?

+1

अस्थिर नवीनतम में नहीं है: https://jira.mongodb.org/browse/SERVER-4504 लेकिन तब तक कोई है, और कोई नहीं अनुक्रमित mathc अतीत उपयोग किया जा रहा है के रूप में इस तरह के सूचकांक optimsation नहीं है वहाँ एक अच्छा रास्ता – Sammaye

+0

@ सैमएय यह गलत है, मैच निश्चित रूप से इंडेक्स का उपयोग करता है जैसा कि क्रमबद्ध करता है। –

+0

@AyayaKamsky मैंने अभी कहा है, मैंने वास्तव में मैच से कहा था, यानी $ समूह – Sammaye

उत्तर

14

पहले प्रश्न के लिए, हाँ, आप समेकित समझा सकते हैं।

db.collection.runCommand("aggregate", {pipeline: YOUR_PIPELINE, explain: true}) 

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

Pipeline Operators and Indexes देखें।

अद्यतन 2

कुल और के बारे में अधिक व्याख्या करते हैं: संस्करण 2.4 पर यह अविश्वसनीय है; 2.6+ पर यह क्वेरी निष्पादन डेटा प्रदान नहीं करता है। https://groups.google.com/forum/#!topic/mongodb-user/2LzAkyaNqe0

अद्यतन 1

एक एकत्रीकरण की ट्रांसक्रिप्ट MongoDB 2.4.5 पर समझाने।

$ mongo so 
MongoDB shell version: 2.4.5 
connecting to: so 
> db.q19329239.runCommand("aggregate", {pipeline: [{$group: {_id: '$user.id', hits: {$sum: 1}}}, {$match: {hits: {$gt: 10}}}], explain: true}) 
{ 
    "serverPipeline" : [ 
     { 
      "query" : { 

      }, 
      "projection" : { 
       "user.id" : 1, 
       "_id" : 0 
      }, 
      "cursor" : { 
       "cursor" : "BasicCursor", 
       "isMultiKey" : false, 
       "n" : 1031, 
       "nscannedObjects" : 1031, 
       "nscanned" : 1031, 
       "nscannedObjectsAllPlans" : 1031, 
       "nscannedAllPlans" : 1031, 
       "scanAndOrder" : false, 
       "indexOnly" : false, 
       "nYields" : 0, 
       "nChunkSkips" : 0, 
       "millis" : 0, 
       "indexBounds" : { 

       }, 
       "allPlans" : [ 
        { 
         "cursor" : "BasicCursor", 
         "n" : 1031, 
         "nscannedObjects" : 1031, 
         "nscanned" : 1031, 
         "indexBounds" : { 

         } 
        } 
       ], 
       "server" : "ficrm-rafa.local:27017" 
      } 
     }, 
     { 
      "$group" : { 
       "_id" : "$user.id", 
       "hits" : { 
        "$sum" : { 
         "$const" : 1 
        } 
       } 
      } 
     }, 
     { 
      "$match" : { 
       "hits" : { 
        "$gt" : 10 
       } 
      } 
     } 
    ], 
    "ok" : 1 
} 

सर्वर संस्करण।

$ mongo so 
MongoDB shell version: 2.4.5 
connecting to: so 
> db.version() 
2.4.5 
+0

में कहा था, तो आप केवल अस्थिरता में समेकन प्रश्नों को समझा सकते हैं, इस पर विचार नहीं किया जाना चाहिए कि आप कर सकते हैं, आपको व्यक्ति को यह पता होना चाहिए कि यह उत्पादन तैयार नहीं है और कथन अस्थिर है और – Sammaye

+0

को बदलने की संभावना नहीं है, आप मोंगोडीबी 2.4 में एकत्रीकरण समझा सकते हैं। मुझे हर व़क्त यह करना है। – Rafa

+0

वास्तव में ?? क्या आप इसे साबित कर सकते हैं? शायद एक व्याख्या के आउटपुट दिखाओ? – Sammaye

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