2012-12-15 16 views
10

क्या मोंगो डेटाबेस से पूछताछ करते समय दस्तावेज़ में लगभग सभी डेटा को छोड़कर बहुत अधिक ओवरहेड है?मोंगोडीबी अनुमान कितने कुशल हैं?

उदाहरण के लिए, इस मामले में जहां मैं केवल फ़ील्ड 1 और field2 चाहते हैं, के एक दस्तावेज़ संरचना के साथ एक संग्रह के लिए में:

{ 
    "field1" : 1 
    "field2" : true 
    "field3" : ["big","array",...] 
    "field4" : ["another","big","array",...] 
} 

मैं लाभ होगा और अधिक से:

  1. इस संग्रह के साथ केवल फ़ील्ड 1 और फ़ील्ड 2, या
  2. का उपयोग इस संग्रह के साथ एक अलग संग्रह बनाना .f का उपयोग करना Ind (समावेश/बहिष्करण के साथ मूल दस्तावेज पर) मानकों

नोट: एक ही डाटा दो बार बचत की अक्षमता डेटा

बहुत धन्यवाद क्वेरी करने की दक्षता में जितना मेरे लिए एक चिंता का विषय नहीं है !

+0

ये दस्तावेज कितने बड़े हैं? –

+0

@AyayaKamsky 0.3MB प्रत्येक के आसपास, और field1 और field2 संयुक्त <1kB। क्या दस्तावेज़ का आकार असर होगा? – Ash

+0

इससे कोई फर्क पड़ता है कि जब आप दस्तावेज़ से पूछते हैं तो दस्तावेज कितना रैम लेता है, पूरा दस्तावेज़ रैम में समाप्त हो सकता है भले ही आप केवल कुछ विशिष्ट फ़ील्ड चाहते हों। क्या आप दो फ़ील्ड हमेशा पहले दो फ़ील्ड चाहते हैं? –

उत्तर

5

प्रोजेक्शन कुछ हद तक एसक्यूएल में कॉलम नामों का उपयोग करने के समान ही है, इसलिए यह पूछने के लिए थोड़ा सा अंतर्ज्ञानी लगता है कि डेटा की थोड़ी मात्रा लौटने पर डेटा की बड़ी मात्रा (पूर्ण दस्तावेज़) लौटने पर ओवरहेड होगा।

तो आपको दस्तावेज़ ढूंढना होगा (यह निर्भर करता है कि आप कैसे हैं। फाइंड() यह तेज़ या धीमा हो सकता है) लेकिन सभी फ़ील्ड (पूर्ण दस्तावेज़) की बजाय दस्तावेज़ के केवल पहले दो फ़ील्ड लौटने से यह तेज हो जाएगा धीमी नहीं है।

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

इसलिए जटिल विवरण आपके व्यक्तिगत सेट-अप पर निर्भर हो सकते हैं, लेकिन सामान्य उत्तर शायद 2 होगा। आपको प्रक्षेपण का उपयोग करने और केवल दो फ़ील्ड लौटने पर लाभ होगा।

+0

एक बहुत विस्तृत उत्तर के लिए धन्यवाद! एक और सवाल, यदि मैं फ़ील्ड 1 और फ़ील्ड 2 पर इंडेक्स करता हूं और इन 2 फ़ील्ड पर संग्रह के सबसेट के लिए क्वेरी करता हूं, तो क्या यह केवल डेटा के उस सबसेट को रैम में लोड करेगा? डेटाबेस पर ज्ञान की कमी के लिए क्षमा चाहते हैं। – Ash

+1

केवल वे पृष्ठ जिनमें आपके लिए आवश्यक दस्तावेज हैं, को रैम में लोड किया जाएगा। बेशक इंडेक्स रैम में भी होगा। –

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