Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

कस्टम मेट्रिक्स के साथ MongoDB क्वेरी लोड ट्रैक करें सटीक प्रदर्शन अंतर्दृष्टि के लिए

कभी-कभी मानक इंस्ट्रूमेंटेशन प्रदर्शन समस्या के मूल कारण को ट्रैक करने के लिए पर्याप्त नहीं होता है। कस्टम मेट्रिक्स लापता टुकड़ों को ट्रैक करने में हमारी मदद करते हैं।

AppSignal के प्रदर्शन ग्राफ़ के लिए धन्यवाद हम ठीक से जानते हैं कि हमारे कोडबेस का कौन सा हिस्सा प्रदर्शन समस्याओं का कारण बनता है। नीचे दिए गए स्क्रीनशॉट में आप देख सकते हैं कि MongoDB के कारण हमारे पास एक गंभीर मंदी थी:

यह हमें यह नहीं बताता कि कौन सा अलग-अलग ReplicaSets पर चल रहे कई डेटाबेस में से इस मंदी का कारण बना। हमारे कस्टम मेट्रिक्स प्लेटफ़ॉर्म का उपयोग करके हम इस प्रश्न का उत्तर एक नज़र में दे सकते हैं।

Mongo::Monitoring

नए 2.x Ruby ड्राइवर के साथ, mongo जेम एक मॉनिटरिंग API उजागर करता है। हम इसका उपयोग डेटाबेस को भेजे गए हर क्वेरी को ट्रैक करने के लिए करते हैं।

यहां एक सब्सक्राइबर क्लास है जो तीन आवश्यक विधियों (started, succeeded और failed) को लागू करती है और डेटा को AppSignal पर भेजती है:

# config/initializers/mongo_command_subscriber.rb
class MongoComandSubscriber
  VALID_DATABASES = Mongoid.clients.map { |k,v| v['database']}
  
  def started(event)
  end
  
  def failed(event)
    finished(event)
  end
  
  def succeeded(event)
    finished(event)
  end
  
  def finished(event)
    database = event.database_name
    duration = event.duration
    return unless VALID_DATABASES.include?(database)
    Appsignal.increment_counter("query_count.#{database}", 1)
    Appsignal.add_distribution_value("query_duration.#{database}", duration)
  end
end

# COMMAND क्वेरी के लिए हमारे सब्सक्राइबर क्लास के साथ सब्सक्राइब करें
Mongo::Monitoring::Global.subscribe(
  Mongo::Monitoring::COMMAND,
  MongoComandSubscriber.new
)

कस्टम मेट्रिक्स डैशबोर्ड

अब जब हम इन मेट्रिक्स को AppSignal पर भेज रहे हैं, तो हमें मेट्रिक्स को विज़ुअलाइज़ करने के लिए एक डैशबोर्ड बनाना होगा। आइए दो ग्राफ़ बनाएं, एक क्वेरी काउंट के लिए और एक औसत क्वेरी अवधि के लिए:

- title: "MongoDB Query Load"
  graphs:
    - title: "Database Query count"
      kind: count
      filter: "query_count/*"
      format: number
    - title: "Database average query duration"
      kind: measurement
      filter: "query_duration/*"
      format: duration

हम filter कुंजी का उपयोग एक रेगेक्स प्रदान करने के लिए करते हैं जो AppSignal को भेजे गए किसी भी क्वेरी अवधि से मेल खाता है।

परिणाम

अब हम व्यक्तिगत क्वेरी काउंट/अवधि को ट्रैक करते हैं और एक डैशबोर्ड मौजूद है, और हम देख सकते हैं कि हमारे प्रदर्शन ग्राफ़ में स्पाइक का कारण कौन सा डेटाबेस था:

यह कई उदाहरणों में से एक है जहां कस्टम मेट्रिक्स का उपयोग हमारे (और आपके!) एप्लिकेशन के समग्र प्रदर्शन में अधिक अंतर्दृष्टि प्राप्त करने में मदद करता है।

यदि आप कस्टम मेट्रिक्स को आज़माना चाहते हैं, या मूल्यवान मेट्रिक्स की पहचान और ट्रैकिंग में सहायता की आवश्यकता है, तो बस हमें बताएं।

  1. - MongoDB में $or ऑपरेटर का उपयोग करके एकाधिक शर्तों पर दस्तावेज़ ढूंढना

    MongoDB में $or: तार्किक OR क्वेरी $or ऑपरेटर उन दस्तावेज़ों को चुनता है जो कम से कम एक निर्दिष्ट शर्त पूरी करते हैं। प्रत्येक शर्त एक अलग ऑब्जेक्ट होती है सरणी में। नमूना डेटा > db.demo362.insertOne({ClientName: John, ClientProject: School Management System}); { acknowledged: true, insertedId:

  1. - MongoDB में LIMIT के साथ क्वेरी करना

    MongoDB में limit() मेथड का उपयोग करके परिणाम सीमित करना MongoDB में क्वेरी परिणामों की संख्या सीमित करने के लिए limit() मेथड का उपयोग करें। यह पेजिनेशन और प्रदर्शन के लिए महत्वपूर्ण है। उदाहरण: संग्रह और दस्तावेज़ बनाना > db.demo58.insertOne({Name:David}); { acknowledged : true, insertedId : Ob

  1. - MongoDB में केस-इनसेंसिटिव खोज

    केस-इनसेंसिटिव खोज के लिए, find() मेथड में regex का उपयोग करें। सिंटैक्स निम्न है: db.demo572.find({yourFieldName : { $regex:/^yourValue$/i}}); उपरोक्त सिंटैक्स को समझने के लिए, आइए दस्तावेजों के साथ एक कलेक्शन बनाते हैं: > db.demo572.insertOne({CountryName:US}); { acknowledged : true, insertedI