8

मैं बहुत MongoDB और NoSQL सामान्य रूप में करने के लिए नया हूँ और मैं सिर्फ MongoDB/नॉर्म/ASP.NET MVC के साथ एक साइट का निर्माण 3.मुझे मोंगोडीबी कनेक्शन कब खोलना और बंद करना चाहिए?

मैं सोच रहा हूँ कि कैसे मैं अपने मोंगो डेटाबेस के लिए कनेक्शन देखते हुए किया जाना चाहिए शुरू कर दिया है ।

अभी मेरे पास एक बेसकंट्रोलर है जो मोंगोशन और ऑनएक्शन पर सशक्त है, मैं इसे निपटान करता हूं इसलिए मेरे सभी व्युत्पन्न नियंत्रकों को मेरे मोंगोशन तक पहुंच होगी। MongoSession वर्ग अपने कन्स्ट्रक्टर में एक कनेक्शन खोलता है और इसे आज (जिस तरह से काम कर रहा है, निपटान() पर इसका निपटान करता है।

private IMongo _mongo; 

public MongoSession() 
{   
    _mongo = Mongo.Create("connString");  
} 

public void Dispose() 
{ 
    _mongo.Dispose(); 
} 

मुझे थोड़ा चिंता है कि अगर मैं नियंत्रकों में अन्य सामान भी कर रहा हूं तो कनेक्शन बहुत लंबे समय तक खुला हो सकता है।

क्या यह दृष्टिकोण बहुत से कनेक्शन खोलने का जोखिम उठाने के लिए तैयार नहीं है या क्या मुझे नीचे उदाहरण विधि की तरह कुछ और करना चाहिए?

public void Add<T>(T item) where T : class, new() 
    { 
     using (var mongo = Mongo.Create("connString")) 
     { 
     mongo.GetCollection<T>().Insert(item); 
     } 
    } 

एक और अनुवर्ती सवाल यह है:

खोलने और नॉर्म के माध्यम से MongoDB कनेक्शन बंद कर रहे हैं "महंगा" संचालन?

+0

नॉर्म शायद ही अब और बनाए रखा जा रहा है, यदि आप LINQ समर्थन के शीर्ष पर FluentMongo के साथ आधिकारिक मोंगो ड्राइवर के साथ जाना चाहते हैं। –

+0

कोड पर कनेक्शन खोलने और बंद करने के इस प्रश्न के अलावा, मुझे इंटरनेट प्रदाता क्लोजिंग कनेक्शन के साथ समस्याएं थीं, फिर मेरा कोड एंडऑफस्ट्रीम एक्सेप्शन था। मैंने इसे सेटिंग्स का उपयोग करके हल किया। मैक्सकोनक्शन IdleTime = TimeSpan.FromSeconds (30); https://stackoverflow.com/a/44606284/194717 – Tony

उत्तर

8

मैं कनेक्शन को फिर से बनाने के रूप में कनेक्शन को खोलने के लिए खुला छोड़ दूंगा। मोंगो बहुत सारे कनेक्शन के साथ ठीक है, लंबे समय तक खुला है। आपको एक आदर्श कनेक्शन के रूप में अपने आवेदन के सभी हिस्सों के साथ कनेक्शन साझा करना क्या आदर्श रूप से करना चाहिए। सी # चालक इसे स्वयं करने के लिए पर्याप्त चालाक होना चाहिए, ताकि यह बहुत से कनेक्शन न बनाए, क्योंकि आंतरिक रूप से यह "कनेक्शन पूलिंग" का उपयोग करता है जो इसे कनेक्शन का पुनः उपयोग भी करता है। दस्तावेज़ कहते हैं: "सर्वर के कनेक्शन दृश्यों के पीछे स्वचालित रूप से संभाले जाते हैं (दक्षता बढ़ाने के लिए एक कनेक्शन पूल का उपयोग किया जाता है)।"

चियर्स, Derick

+1

सहमत हुए। असल में, आपको वास्तव में मोंगो सत्र वर्ग लिखने की भी आवश्यकता नहीं है - आवेदन क्षेत्र में एक मोंगोसेवर उदाहरण संग्रहित करना उचित होगा। एमवीसी आवेदन बंद होने पर आपको लगभग एक बार इस घटना पर डिस्कनेक्ट() को निश्चित रूप से कॉल करना चाहिए। –

+0

@ सेन कनेक्शन बंद करने के लिए टिप के लिए धन्यवाद। –

2

आप कनेक्ट कॉल या डिस्कनेक्ट

सी # चालक एक कनेक्शन पूल कुशलतापूर्वक सर्वर से कनेक्शन का उपयोग करना पड़ता है की जरूरत नहीं है। कनेक्ट या डिस्कनेक्ट को कॉल करने की कोई आवश्यकता नहीं है; बस चालक को कनेक्शन का ख्याल रखना चाहिए (कनेक्टिंग कनेक्ट हानिकारक है, लेकिन डिस्कनेक्ट को कॉल करना बुरा है क्योंकि यह कनेक्शन पूल में सभी कनेक्शन बंद करता है)।

http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-csharp-driver/

+0

लिंक (अब) कुछ भी उल्लेख नहीं करता है, यह सिर्फ कई अन्य लोगों का एक अभिभावक पृष्ठ है। – danio

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^