मेरे पास मोंगो डीबी में 600k से अधिक रिकॉर्ड हैं।प्रक्षेपण क्वेरी धीमी बनाता है
{
"_id" : ObjectId,
"password" : String,
"email" : String,
"location" : Object,
"followers" : Array,
"following" : Array,
"dateCreated" : Number,
"loginCount" : Number,
"settings" : Object,
"roles" : Array,
"enabled" : Boolean,
"name" : Object
}
निम्न क्वेरी: इस में
db.users.find(
{},
{
name:1,
settings:1,
email:1,
location:1
}
).skip(656784).limit(10).explain()
परिणाम:
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 10,
"nscannedObjects" : 656794,
"nscanned" : 656794,
"nscannedObjectsAllPlans" : 656794,
"nscannedAllPlans" : 656794,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 5131,
"nChunkSkips" : 0,
"millis" : 1106,
"server" : "shreyance:27017",
"filterSet" : false
}
और इस में प्रक्षेपण समान क्वेरी को हटाने db.users.find().skip(656784).limit(10).explain()
परिणाम के बाद मेरे उपयोगकर्ता स्कीमा इस तरह दिखता है :
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 10,
"nscannedObjects" : 656794,
"nscanned" : 656794,
"nscannedObjectsAllPlans" : 656794,
"nscannedAllPlans" : 656794,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 5131,
"nChunkSkips" : 0,
"millis" : 209,
"server" : "shreyance:27017",
"filterSet" : false
}
जहाँ तक मुझे पता है कि प्रक्षेपण हमेशा एक क्वेरी के प्रदर्शन में वृद्धि करता है। तो मैं समझने में असमर्थ हूं कि मोंगोडीबी इस तरह क्यों व्यवहार कर रहा है। क्या कोई इसे समझा सकता है। और जब प्रक्षेपण का उपयोग करें और कब नहीं। और वास्तव में मोंगोडीबी में प्रक्षेपण कैसे लागू किया जाता है।
क्या आप इन परिणामों को बार-बार प्राप्त करते हैं? दूसरी क्वेरी तेज हो सकती है क्योंकि पहली क्वेरी से डेटा कैश किया गया है (स्मृति में लोड किया गया है)। – Messa
क्योंकि यह 656794 दस्तावेज़ – Sammaye
पर प्रक्षेपण लागू कर रहा है, लेकिन यह 656794 दस्तावेजों के प्रक्षेपण को लागू क्यों कर रहा है, यह बहुत गलत कार्यान्वयन है। मुझे केवल 10 रिकॉर्ड की आवश्यकता है इसलिए प्रक्षेपण केवल 10 दस्तावेजों पर लागू किया जाना चाहिए –