mgo.Session
समवर्ती उपयोग के लिए सुरक्षित है। इसके दस्तावेज़ से उद्धरण:
सभी सत्र विधियां समवर्ती-सुरक्षित हैं और इन्हें कई गोरोइन से बुलाया जा सकता है।
लेकिन इसका मतलब यह नहीं है कि आपको Session.Copy()
पर कॉल करके समानांतर में उनमें से अधिक नहीं बनाना चाहिए और उनका उपयोग नहीं करना चाहिए या Session.Clone()
, डायल समय पर प्राप्त प्रारंभिक सत्र पर।
समवर्ती-सुरक्षित होने और उनमें से अधिक का उपयोग करने से लाभ होने से एक-दूसरे को बाहर नहीं किया जाता है (वे परस्पर अनन्य नहीं हैं ) जबकि आप एकल mgo.Session
. का उपयोग कर सकते हैं गोरआउट्स की मनमानी संख्या से, जो अच्छी तरह से स्केल नहीं करेगा, जो स्केल नहीं करेगा बिल्कुल . सत्र स्वचालित रूप से कनेक्शन के एक पूल का प्रबंधन करते हैं, शायद कई सर्वर नोड्स के लिए भी, लेकिन यदि आप एकल Session
का उपयोग कर रहे हैं , आप इसका फायदा नहीं उठा रहे हैं। एक नया Session
बनाकर आपके प्रत्येक अनुरोध की शुरुआत में (यदि आवश्यक हो), और अंत में इसे ठीक से बंद करना (Session.Close()
के साथ); अधिमानतः defer
. का उपयोग करके बुलाया जाता है ), आप एक ही समय में कई कनेक्शनों का संभावित रूप से उपयोग कर रहे हैं, संभवतः एकाधिक सर्वर नोड्स (यदि उपलब्ध हो) के लिए, और इस प्रकार सर्वर संसाधनों का बेहतर उपयोग कर रहे हैं; और तेजी से प्रतिक्रिया समय प्राप्त करना (डेटाबेस से, और अंततः आपके HTTP अंतिम उपयोगकर्ताओं के लिए)। कॉलिंग Session.Close()
सर्वर से अंतर्निहित कनेक्शन को बंद नहीं करता है, यह कनेक्शन को पूल में वापस रख देगा, दूसरे सत्र द्वारा उठाए जाने के लिए तैयार है।
Session
. के उपयोग के बारे में संबंधित प्रश्न भी देखें s:mgo - क्वेरी का प्रदर्शन लगातार धीमा लगता है (500-650ms)