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

एमजीओ - क्वेरी प्रदर्शन लगातार धीमा लगता है (500-650ms)

<ब्लॉकक्वॉट>

.. क्या कोई स्पष्ट बात है जो यह बताएगी कि मेरे प्रश्नों का औसत 500-650ms क्यों है?

हाँ वहाँ है। आप कॉल कर रहे हैं mgo.Dial() प्रत्येक क्वेरी को निष्पादित करने से पहले। mgo.Dial() हर बार MongoDB सर्वर से कनेक्ट करना होता है, जिसे आप क्वेरी के ठीक बाद बंद करते हैं। कनेक्शन को स्थापित होने में सैकड़ों मिलीसेकंड लग सकते हैं, जिसमें प्रमाणीकरण, संसाधनों का आवंटन (सर्वर और क्लाइंट दोनों तरफ) आदि शामिल हैं। यह बहुत बेकार है।

<ब्लॉकक्वॉट>

इस विधि को आमतौर पर किसी दिए गए क्लस्टर के लिए केवल एक बार कहा जाता है। प्राप्त सत्र पर नई या प्रतिलिपि विधियों का उपयोग करके उसी क्लस्टर में आगे के सत्र स्थापित किए जाते हैं। इससे वे अंतर्निहित क्लस्टर साझा करेंगे, और कनेक्शन के पूल को उचित रूप से प्रबंधित करेंगे।

एक वैश्विक सत्र चर बनाएं, स्टार्टअप पर कनेक्ट करें एक बार (उदाहरण के लिए एक पैकेज init() . का उपयोग करके फ़ंक्शन), और उस सत्र का उपयोग करें (या इसकी एक प्रति / क्लोन, जो Session.Copy() द्वारा प्राप्त किया गया है) या Session.Clone() ).उदाहरण के लिए:

var session *mgo.Session
var info *db.Inf // Use your type here

func init() {
    var err error
    if info, err = db.Info(); err != nil {
        log.Fatal(err)
    }
    if session, err = mgo.Dial(info.ConnectionString()); err != nil {
        log.Fatal(err)
    }
}

func (r userRepo) GetUserByID(id string) (User, error) {
    sess := session.Clone()
    defer sess.Close()

    // Now we use sess to execute the query:
    var user User
    c := sess.DB(info.Db()).C("users")
    // Rest of the method is unchanged...
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडीबी $isoDayOfWeek

  2. नेवला पुनरावर्ती आबादी

  3. स्प्रिंग डेटा मोंगोडब मोंगोडब कनेक्शन बंद नहीं कर रहा है

  4. ISODate के लिए --query के साथ mongoexport का उपयोग करें

  5. स्प्रिंग डेटा MongoDB लेनदेन