2015-05-26 5 views
5

के साथ कनेक्शन के लिए अच्छी तकनीक मैं पोस्टग्रेएसक्यूएल को .NET के माध्यम से एक्सेस करने के लिए Npgsql का उपयोग कर रहा हूं। मैं डेटाबेस से कनेक्शन करने के सही तरीके से चिंतित हूं, क्योंकि मेरी राय में यह एक कनेक्शन खोलने के लिए एक महंगा ऑपरेशन है और फिर हर बार इसे बंद करने के लिए मैं कुछ लेनदेन करना चाहता हूं।PostgreSQL

तो यहां एक सामान्य उपाय है:

public class PostgreSQL 
{ 
    private NpgsqlConnection conn; // <- one connection for this object, open all the time 

    public PostgreSQL(string connString) 
    { 
     conn = new NpgsqlConnection(connString); 
     conn.Open(); 
    } 

    // ...here making some queries... 

    public void Close() => conn.Close(); // <- use this in the very end of the program 
} 

आप ऊपर देख सकते हैं, मैं PostgreSQL वर्ग का एक उदाहरण के लिए एक कनेक्शन है।

मेरा प्रश्न:

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

यदि मुझे हर बार कनेक्शन खोलना और बंद करना चाहिए - क्या मुझे एक कतार लिखनी चाहिए जो समवर्ती कनेक्शन की मात्रा को सीमित करेगी? या PostgreSQL इसे स्वयं संभाल लेंगे - और, सैद्धांतिक रूप से, मैं 200 कनेक्शन खोल सकता हूं और यह ठीक रहेगा।

मेरे साथ अपने अनुभव को साझा करें ^^

संपादित करें: मैं 100-200 एक दूसरे प्रश्नों चलेंगे।

+0

आपको शायद यह जोड़ना चाहिए कि आप डेटाबेस से कितनी बार पूछना चाहते हैं। –

+0

@ जकुबकानिया बस इसे जोड़ा, 100-200 प्रश्न एक सेकंड। –

+2

'Npgsql' में अंतर्निहित कनेक्शन पूलिंग है, इसलिए आप पूछताछ करते हैं कि कनेक्शन बंद नहीं होंगे और भले ही आप 'बंद करें)' और 'ओपन()' कॉल करें। लेकिन क्या यह एक डेस्कटॉप एप्लीकेशन है? प्रश्न समवर्ती हैं? –

उत्तर

3

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

मेरे अनुभव में, कनेक्शन खोलने में इतना समय नहीं लगता है (कुछ मिलीसेकंड, आमतौर पर आपके निष्पादन समय का एक अंश), इसलिए आपको बहुत ज्यादा चिंता करने की आवश्यकता नहीं है।

using (NpgsqlConnection conn = new NpgsqlConnection(...)) 
{ 
... 
} 

बेहतर विकल्प होना चाहिए:

3

PostgreSQL पूलिंग कनेक्शन (पूल आकार customizable है) ताकि आम पैटर्न का समर्थन करता है।