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

MongoDB स्कीमा प्रदर्शन अनुकूलन

पहली बात जो यहाँ दिमाग में आती है वह यह है:एक संदर्भ को संग्रहीत करने की लागत आपको एक उप-दस्तावेज़ में संग्रहीत करने की लागत से 5000 गुना अधिक क्यों है?

ठीक है, आपके स्कीमा को देखकर मेरा मानना ​​है कि सबसे अच्छा तरीका शब्दों के लिए अलग संग्रह है, पैकेज नहीं।

पहला लाल झंडा जो मैंने देखा वह है आपका दोहरा घोंसला यहाँ:

packages : [{
    package : {type: Schema.Types.ObjectId, ref: 'Packages'},
    from : {type : Schema.Types.ObjectId, ref :'Languages'},
    to : {type : Schema.Types.ObjectId, ref :'Languages'},
    words : [{
        word: {type: String},
        progress: {type: Number,default : 0}
    }]
}]

words MongoDB के वर्तमान संस्करण में उप-दस्तावेज़ के साथ काम करना बहुत कठिन होगा, आमतौर पर 2-3 स्तरों में गहरी समस्याएँ होने लगती हैं, विशेष रूप से स्थितीय ऑपरेटरों के साथ।

अब इस बात पर विचार करते हुए कि आपको हमेशा उच्चतम संभव मूल्य से काम करना चाहिए जो आपको यहां मिल सकता है:

आप इस दस्तावेज़ के आवास की लागत पर भी विचार करने गए हैं। आपको जिन ऑपरेटरों की आवश्यकता होगी, वे स्मृति में होंगे जैसे कि $pull , $push , $addToSet आदि जिसका अर्थ है कि आपके पूरे दस्तावेज़ को क्रमबद्ध करने और MongoDB के मूल C++ structs में लोड करने की आवश्यकता होगी। उन दस्तावेज़ों के ट्रैफ़िक के आधार पर यह एक अत्यंत खपत वाला कार्य होगा।

आपकी टिप्पणी को ध्यान में रखते हुए:

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

यह बहुत बेहतर काम करेगा यदि शब्दों को विभाजित कर दिया जाए, $slice एक मेमोरी में रहने वाला ऑपरेटर भी है और संभवत:यहां कम प्रदर्शन का सामना करना पड़ेगा।

और यह एक त्वरित तर्कपूर्ण प्रतिक्रिया है। मुझे यकीन है कि और भी बहुत कुछ है जो मैं अपने कारण के बारे में बता सकता हूं लेकिन वह पर्याप्त होना चाहिए।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. जब मोंगोडब सर्वर डाउन हो तो नेवला क्वेरी चलाते समय त्रुटि को कैसे पकड़ें

  2. Mongoid के साथ परिकलित फ़ील्ड पर आधारित क्वेरी

  3. $elemMatch वसंत डेटा mongodb में बराबर है

  4. एकत्रीकरण में एक गतिशील मूल्य का उपयोग करना

  5. एक्सप्रेस मुझे क्यों बता रहा है कि मेरा डिफ़ॉल्ट व्यू इंजन परिभाषित नहीं है?