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

क्वेरी करते समय नेवला द्वारा स्मृति उपयोग को कम करने का तरीका

डिफ़ॉल्ट नेवला .find() निश्चित रूप से सभी परिणामों को "सरणी" के रूप में लौटाता है, ताकि हमेशा बड़े परिणामों के साथ स्मृति का उपयोग किया जा सके, इसलिए यह "स्ट्रीम" इंटरफ़ेस छोड़ देता है।

यहां मूल समस्या यह है कि आप एक स्ट्रीम का उपयोग कर रहे हैं इंटरफ़ेस (जैसा कि यह मूल नोड स्ट्रीम से विरासत में मिला है) प्रत्येक डेटा ईवेंट "फ़ायर" और संबंधित ईवेंट हैंडलर को लगातार निष्पादित किया जाता है।

इसका मतलब यह है कि एक "स्ट्रीम" के साथ भी ईवेंट हैंडलर में आपके बाद की कार्रवाइयां "स्टैकिंग" कर रही हैं, कम से कम खपत करने वाली बहुत सारी मेमोरी पर और संभावित रूप से कॉल स्टैक को खा रही हैं यदि वहां आगे एसिंक्रोनस प्रक्रियाएं निकाल दी जा रही हैं।

तो सबसे अच्छी बात यह है कि आप अपनी स्ट्रीम प्रोसेसिंग में कार्रवाइयों को "सीमित" करना शुरू कर सकते हैं। यह .pause() को कॉल करने जितना आसान है। विधि:

var stream = model.find().stream();   // however you call

stream.on("data",function() {
    // call pause on entry
    stream.pause();

    // do processing
    stream.resume();            // then resume when done
});

तो .pause() स्ट्रीम में ईवेंट उत्सर्जित होने से रोकता है और यह आपके ईवेंट हैंडलर की कार्रवाइयों को जारी रखने से पहले पूरा करने की अनुमति देता है ताकि वे सभी एक साथ नहीं आ सकें।

जब आपका हैंडलिंग कोड पूरा हो जाए, तो आप .resume() पर कॉल करें। , या तो सीधे ब्लॉक के भीतर जैसा कि यहां दिखाया गया है ब्लॉक के भीतर किए गए किसी भी एसिंक्रोनस क्रिया के कॉलबैक ब्लॉक के भीतर। ध्यान दें कि एसिंक्स कार्रवाइयों के लिए समान नियम लागू होते हैं, और आपके द्वारा फिर से शुरू करने के लिए कॉल करने से पहले "सभी" को पूर्णता का संकेत देना चाहिए।

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

लेकिन मूल रूप से सोचें .pause() फिर प्रक्रिया करें और .resume() अपने प्रसंस्करण में बहुत सारी मेमोरी खाने से बचने के लिए जारी रखने के लिए।

साथ ही, अपने "आउटपुट" से अवगत रहें और इसी तरह प्रतिक्रिया के लिए कुछ बनाते समय फिर से "स्ट्रीम" का उपयोग करने का प्रयास करें। यह सब कुछ नहीं होगा यदि आप जो काम कर रहे हैं वह वास्तव में स्मृति में एक और चर का निर्माण कर रहा है, तो यह इसके बारे में जागरूक होने में मदद करता है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. अप्सर्ट के साथ मोंगोडब अपडेट विफल रहता है

  2. कोणीय http . से डेटा पुनर्प्राप्त नहीं कर सकता

  3. MongoDB एग्रीगेशन पाइपलाइन में पूरे दस्तावेज़ का संदर्भ देना

  4. MongoDB एग्रीगेट के साथ दो सरणियों के बीच डॉट उत्पाद की गणना करें

  5. स्प्रिंग डेटा MongoDB - $eq $project समर्थन के भीतर