2015-05-26 15 views
5

Sto usando Npgsql per accedere a PostgreSQL via .NET. Sono preoccupato per il modo corretto di eseguire connessioni al database, dal momento che a mio parere si tratta di un'operazione costosa per aprire una connessione e quindi chiuderla ogni volta che voglio eseguire alcune transazioni.Buona tecnica per le connessioni con PostgreSQL

ecco l'idea generale:

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 
} 

Come potete vedere sopra, ho una connessione per un'istanza di PostgreSQL di classe.

La mia domanda:

È questo il giusto approccio? O dovrei aprire e chiudere la connessione ogni volta che voglio fare una transazione: aprire il più tardi possibile e chiudere il prima possibile?

Se dovessi aprire e chiudere le connessioni ogni volta - dovrei scrivere una coda che limiti la quantità di connessioni simultanee? O PostgreSQL lo gestirà da solo - e, teoricamente, posso aprire 200 connessioni e andrà tutto bene.

Si prega di condividere la vostra esperienza con me ^^

EDIT: correrò 100-200 query al secondo.

+0

Probabilmente si dovrebbe aggiungere la frequenza con cui si desidera interrogare il database. –

+0

@JakubKania Appena aggiunto, 100-200 query al secondo. –

+2

'Npgsql' ha un pool di connessioni integrato, quindi, in ogni caso, le connessioni non saranno completamente chiuse e aperte anche se chiamate' Close() 'e' Open() '. Ma è un'applicazione desktop? Le domande sono concomitanti? –

risposta

3

Secondo me dovresti aprire una connessione nel momento in cui ne hai bisogno e chiuderla subito dopo. Ciò impedirà che molte connessioni sul server siano mantenute attive.

Nella mia esperienza, l'apertura di una connessione non richiede molto tempo (pochi millisecondi, di solito una frazione del tempo di esecuzione), quindi non devi preoccuparti troppo.

3

PostgreSQL supporta le connessioni che mettono in comune (dimensione della piscina è customizable) in modo che il modello comune:

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

dovrebbe essere la scelta migliore.