Al fine di evitare il sovraccarico di stabilire una nuova connessione ogni volta che un esigenze di query sparati contro MySQL, ci sono due opzioni disponibili:MySQL - connessione permanente contro il pool di connessioni
- connessioni persistenti, per cui una nuova connessione è richiesto viene effettuato un controllo per verificare se una connessione "identica" è già aperta e in tal caso utilizzarla.
- Il pool di connessioni, in cui il client gestisce un pool di connessioni, in modo che ogni thread che deve utilizzare una connessione ne verifichi uno dal pool e lo restituisca al pool al termine.
Quindi, se si prevede che un'applicazione server multithreading debba gestire migliaia di richieste al secondo e ogni thread deve generare una query sul database, qual è l'opzione migliore?
Dal mio punto di vista, Con le connessioni permanenti, tutti i thread nella mia applicazione proveranno ad utilizzare la stessa connessione persistente al database perché utilizzano tutti connessioni identiche. Quindi è una connessione condivisa tra più thread di applicazioni - di conseguenza le richieste si bloccheranno presto sul lato del database.
Se utilizzo un meccanismo di pool di connessioni, farò in modo che tutti i thread dell'applicazione condividano un pool di connessioni. Quindi c'è meno possibilità di una richiesta di blocco. Tuttavia, con il pooling delle connessioni, un thread dell'applicazione dovrebbe attendere di acquisire una connessione dal pool o dovrebbe inviare una richiesta sulle connessioni nel pool in un modo round-robin e lasciare che la coda, se presente, si verifichi nel database?
In caso di pool di connessioni, lo sviluppatore dell'applicazione può controllare quando e quante connessioni devono essere aperte/chiuse. Per MySQL, come può essere controllato il numero di connessioni persistenti "identiche"? Ci sono dei parametri di configurazione del server per lo stesso? – user1259642
Nei pool, utilizzo le dimensioni minime e massime del pool e definisco un tempo di inattività dopo il quale viene chiusa una connessione (più alcune altre cose). – mrab