una singola connessione SQL Server può essere condivisa tra le attività eseguite in parallelo

2

È possibile condividere una singola connessione SQL Server tra le attività eseguite in parallelo? Ogni attività deseleziona un elemento da ParallelQueue, crea un'istanza di un comando SqlClient e inserisce una riga nella tabella. O ogni operazione di istanziazione di comandi richiede la propria connessione dedicata al database? Le connessioni possono essere istanziate e aperte all'inizio del metodo e poi chiuse quando le attività parallele sono state completate, o ogni istanza dovrebbe istanziare, aprire e chiudere la sua connessione?

    
posta TR888 06.02.2016 - 15:37
fonte

2 risposte

2

Una connessione SQLServer può essere condivisa da più attività eseguite in parallelo, ad es. discussioni in un programma C # o richieste in un app server. Ma la maggior parte degli scenari di utilizzo richiederebbe la sincronizzazione dell'accesso alla connessione. Un'attività dovrà attendere la connessione se un'altra attività lo sta utilizzando. Quando crei un meccanismo di connessione condivisa che non si rompe o non diventa un vincolo di prestazioni per le tue attività parallele, probabilmente hai creato un pool di connessioni.

Un altro modo per vederlo è, sì, è possibile condividere un pool di connessioni tra una serie di thread e lasciare che il pool di connessioni gestisca le connessioni di dispensazione e la pulizia dello stato della connessione. L'accesso ai dati .net di Microsoft ha avuto un pooling di connessioni molto efficiente da 3 a 4 anni fa, quando l'ho usato per l'ultima volta. Con il pooling delle connessioni non è necessario dedicare molto tempo extra all'apertura e alla riapertura delle connessioni. Non è necessario mantenere aperte più connessioni di quelle che è effettivamente necessario utilizzare in una grande applicazione di lunga durata. Riutilizzi le connessioni quando sono disponibili e apri automaticamente una nuova connessione quando necessario, chiudendole automaticamente quando non sono più necessarie, ad es. dopo un periodo di inattività.

Il pool di connessioni potrebbe essere una buona risposta. Basta tenere una connessione per ogni attività può essere una buona risposta.

    
risposta data 08.02.2016 - 00:50
fonte
1

Di solito un server di applicazioni aziendali avrebbe un'origine dati configurabile attraverso cui un'API potrebbe effettuare richieste. Ad esempio, i server WebSphere hanno un'origine dati che può essere chiamata tramite un nome JNDI definito da un framework di persistenza (JPA, Hibernate, ...) all'interno di EJB che gestiscono il threading da soli.

Quindi sì. Tuttavia, raccomando vivamente di utilizzare un framework per farlo.

    
risposta data 07.02.2016 - 01:28
fonte

Leggi altre domande sui tag