मैं सामान्य रूप से सिस्टम डिज़ाइन के लिए बहुत नया हूं, इसलिए मुझे अपनी क्षमता के अनुसार अपने प्रश्न को समझाने और समझाने की कोशिश करें!

मेरे पास दो EC2 t2.micro इंस्टेंस हैं और चल रहे हैं: एक मेरा MongoDB है, जो 10,000,000 प्राथमिक रिकॉर्ड संग्रहीत कर रहा है, और दूसरे पर मेरा एक्सप्रेस सर्वर है।

मेरे MongoDB दस्तावेज़ों की संरचना इस प्रकार है:

{
  _id: 1,
  images: ["url_1.jpg", "url_2.jpg", "url_3.jpg"],
}

मेरा मोंगो कनेक्शन इस तरह दिखता है:

const { MongoClient } = require('mongodb');
const { username, password, ip } = require('./config.js');

const client = new MongoClient(`mongodb://${username}:${password}@${ip}`,
  { useUnifiedTopology: true, poolSize: 10 });

client.connect();

const Images = client.db('imagecarousel').collection('images');

module.exports = Images;

मैं अपने सर्वर GET API एंडपॉइंट पर 1000PRS स्ट्रेस टेस्ट चलाने के लिए loader.io का उपयोग कर रहा हूं। पहला परीक्षण एक .findOne() क्वेरी का उपयोग करता है, दूसरा एक .find().limit(1) क्वेरी, जैसे:

const query = { _id: +req.params.id };
Images.findOne(query).then((data) => res.status(200).send(data))
    .catch((err) => {
      console.log(err);
      res.status(500).send(errorMessage);
    });

//////////////////////////////////////////

const query = { _id: +req.params.id };
Images.find(query).limit(1).toArray().then((data) => res.status(200).send(data[0]))
    .catch((err) => {
      console.log(err);
      res.status(500).send(errorMessage);
    });

जब मैंने न्यू रेलिक के परिणामों को देखा, तो मैंने जो देखा उससे मैं थोड़ा हैरान था: नया अवशेष परिणाम

कुछ शोध के बाद, मुझे लगा कि इसका .findOne() दस्तावेज़ लौटाने और .find() कर्सर लौटाने से कुछ लेना-देना है?

तो मेरा सवाल है: मैं कैसे निर्धारित करूं कि बोतल की गर्दन नोड.जेएस या मोंगोडीबी है, और क्या मेरे द्वारा उपयोग किए जाने वाले प्रश्न मेरे लिए (इस विशिष्ट मामले में) निर्धारित करते हैं?

1
Matthew Wigglesworth 11 सितंबर 2020, 07:03

1 उत्तर

सबसे बढ़िया उत्तर

मेरा सुझाव है कि आप मोंगोडब कंसोल से शुरू करें और अपने प्रश्नों को विस्तार से देखें। इस तरह आप मोंगोडब व्यवहार को ड्राइवर व्यवहार से अलग कर देंगे।

अपने प्रश्नों का विश्लेषण करने का एक अच्छा तरीका है:

यदि आप पिच-परफेक्ट डेटाबेस प्रदर्शन ट्यूनिंग का लक्ष्य रखते हैं, तो आपको अपने प्रश्नों के निष्पादन के हर विवरण को समझने की आवश्यकता है। इसे पकड़ने में कुछ समय लगेगा, लेकिन यह पूरी तरह से इसके लायक है!

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

https://www.npmjs.com/package/mc-profiler

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

1
Daniel Apostolov 11 सितंबर 2020, 07:45