Abbiamo un'applicazione che è C ++ che tenta di accedere al database MySQL.
Ci sono diversi (circa 5) thread nell'applicazione (con la libreria Boost per il threading) e in ogni thread ci sono alcuni oggetti, ognuno dei quali sta tentando di accedere al Database per il proprio scopo. Ha un modello di ORM semplice ma in realtà non è un fattore importante.
Ci sono tre possibili modelli di accesso a cui posso pensare:
-
Potrebbe esserci un singolo
connection object
per applicazione o thread ed è condiviso tra tutto (o gruppo). L'oggetto deve essere thread-safe e ci saranno contese, ma MySQL non verrà licenziato con troppe connessioni. -
Ogni oggetto può avviare la connessione da solo. Il database deve occuparsi della concorrenza (che credo possa essere MySQL) e il design potrebbe essere molto più semplice. Ci potrebbero essere due possibilità qui. un. entrambi gli oggetti mantengono una connessione persistente per la propria vita OR b. connessione di inizio oggetto come e quando necessario.
-
Per semplificare la contesa come nel caso di 1 e non creare troppi socket come nel caso di 2, possiamo avere connessioni basate su gruppo / set. Quindi potrebbe esserci più di una connessione (ad esempio N), ciascuna di queste connessioni potrebbe essere una connessione condivisa tra gli oggetti M.
Naturalmente, ciascuno dei modelli ha costi di risorse differenti e funzionerebbe in base a diversi vincoli e obiettivi.
Quali criteri dovrei usare per scegliere il modello di questo per la mia applicazione?
Quali sono alcuni dei vantaggi e degli svantaggi di ciascuno di questi pattern rispetto all'altro?
C'è qualche altro modello che è meglio?
PS: ho seguito queste domande:
mysql, una connessione vs multipla
e
MySQL con thread e processi mutiple
Ma non rispondono esattamente a quello che sto cercando di chiedere.