mgo.Session
er sikkert til samtidig brug. Citerer fra dets dokument:
Alle sessionsmetoder er samtidighedssikre og kan kaldes fra flere goroutiner.
Men det betyder ikke, at du ikke skal oprette og bruge flere af dem parallelt ved at kalde Session.Copy()
eller Session.Clone()
, på den første session opnået ved opkaldstidspunktet.
At være samtidighedssikker og have gavn af at bruge flere af dem udelukker ikke hinanden (de er ikke gensidigt udelukkende ). Mens du kan bruge en enkelt mgo.Session
fra et vilkårligt antal goroutiner, der ikke vil skalere godt, som ikke vil skalere slet . Sessioner administrerer automatisk en pulje af forbindelser, måske endda til flere servernoder, men hvis du bruger en enkelt Session
, det udnytter du ikke. Ved at oprette en ny Session
i starten af hver af dine anmodninger (hvis nødvendigt), og lukker den korrekt til sidst (med Session.Close()
; kaldes helst ved at bruge defer
), udnytter du potentielt at bruge flere forbindelser på samme tid, muligvis til flere servernoder (hvis tilgængelige), og dermed bedre udnytte serverressourcer; og få hurtigere svartider (både fra databasen og i sidste ende til dine HTTP-slutbrugere). Kalder Session.Close()
lukker ikke den underliggende forbindelse til serveren, den vil blot sætte forbindelsen tilbage til poolen, klar til at blive hentet af en anden session.
Se også relateret spørgsmål om brugen af Session
s:mgo - forespørgselsydeevne virker konsekvent langsom (500-650 ms)