MongoDB में एक अंतर्निहित प्रोफिलर है जिसे आप इसके द्वारा सक्षम कर सकते हैं:
db.setProfilingLevel(2)
'2' के बजाय आप नीचे दी गई सूची में से कोई भी विकल्प चुन सकते हैं:
- 0 - प्रोफाइलर बंद है, कोई डेटा एकत्र नहीं करता है। mongod हमेशा अपने लॉग के लिए slowOpThresholdMs थ्रेशोल्ड से अधिक लंबा संचालन लिखता है।
- 1 - केवल धीमे संचालन के लिए प्रोफाइलिंग डेटा एकत्र करता है। डिफ़ॉल्ट रूप से धीमे संचालन 100 मिलीसेकंड से धीमे होते हैं। आप "धीमे" संचालन के लिए थ्रेशोल्ड को slowOpThresholdMs रनटाइम विकल्प या सेटपैरामीटर कमांड के साथ संशोधित कर सकते हैं। अधिक जानकारी के लिए धीमे संचालन के लिए दहलीज निर्दिष्ट करें अनुभाग देखें।
- 2 - सभी डेटाबेस संचालन के लिए प्रोफाइलिंग डेटा एकत्र करता है।
और आप system.profile . की जांच करके अपने प्रश्नों के परिणाम देख सकते हैं MongoDB में संग्रह..
संपादित करें:
यदि आप प्रदर्शन का परीक्षण करना चाहते हैं तो आप कोड के निम्नलिखित स्निपेट का उपयोग कर सकते हैं जिन्हें मोंगो कंसोल से निष्पादित किया जा सकता है:
> for (var i = 0; i < 10000000; ++i) { db.countTest.insert({a: i % 10}) }
> db.countTest.ensureIndex({a:1})
> db.countTest.count({a: 1})
> db.countTest.count()
> db.countTest.find().count()
और मेरे निष्कर्ष इस प्रकार हैं:
- सूचकांक जोड़ना (आईडी के अलावा) 10 मिलियन रिकॉर्ड . के लिए गिनती लौटा दी लगभग 170ms . में
- आईडी के आधार पर गिनती (बिना किसी प्रश्न के गिनती) ने एक मिलीसेकंड से कम में गिनती लौटा दी
- कर्सर से आईडी के आधार पर गिनना (ध्यान दें कि .find() संग्रह पर एक कर्सर के रूप में कार्य करेगा) ने गिनती को एक मिलीसेकंड से कम में वापस कर दिया
तो अधिक अनुक्रमणिका आपके संग्रह में आपकी क्वेरी धीमी होगी . यदि आप _id से गिनते हैं तो यह तुरंत हो जाएगा , यदि आपके पास समग्र अनुक्रमणिका . है यह अनुक्रमणिका की संख्या के आधार पर पैमाने . होगा ।