De mgo.Session
is veilig voor gelijktijdig gebruik. Citaat uit het document:
Alle sessiemethoden zijn gelijktijdig veilig en kunnen vanuit meerdere goroutines worden aangeroepen.
Maar dit betekent niet dat u er niet meer tegelijk moet maken en gebruiken door Session.Copy()
aan te roepen. of Session.Clone()
, op de eerste sessie verkregen tijdens het kiezen.
Concurrency-safe zijn en voordeel hebben van het gebruik van meer ervan, sluiten elkaar niet uit (ze sluiten elkaar niet elkaar uit uit ). Hoewel u een enkele mgo.Session
mag gebruiken van willekeurig aantal goroutines, dat zal niet goed schalen, dat zal helemaal niet schalen . Sessies beheren automatisch een pool van verbindingen, misschien zelfs met meerdere serverknooppunten, maar als u een enkele Session
gebruikt , daar profiteer je niet van. Door een nieuwe Session
aan te maken aan het begin van elk van uw verzoeken (indien nodig), en deze aan het einde correct te sluiten (met Session.Close()
; bij voorkeur aangeroepen met defer
), profiteert u van het potentieel gebruik van meerdere verbindingen tegelijkertijd, mogelijk met meerdere serverknooppunten (indien beschikbaar), en dus beter gebruik van serverbronnen; en snellere responstijden krijgen (zowel vanuit de database als uiteindelijk naar uw HTTP-eindgebruikers). Session.Close()
. aanroepen sluit de onderliggende verbinding met de server niet, maar zet de verbinding gewoon terug naar de pool, klaar om te worden opgehaald door een andere sessie.
Zie ook gerelateerde vraag over het gebruik van Session
s:mgo - queryprestaties lijken constant traag (500-650 ms)