mgo.Session
je bezpečný pro současné použití. Cituji z jeho dokumentu:
Všechny metody relací jsou bezpečné pro souběžný provoz a lze je volat z více goroutin.
To však neznamená, že byste jich neměli vytvářet a používat více paralelně voláním Session.Copy()
nebo Session.Clone()
, na úvodní relaci získané v čase vytáčení.
Zabezpečení souběžného provozu a výhoda z používání více z nich se navzájem nevylučují (nejsou vzájemně vylučující ). I když můžete použít jednu mgo.Session
z libovolného počtu goroutin, které se nebudou dobře škálovat, které se nebudou škálovat vůbec . Relace automaticky spravují fond připojení, možná dokonce k více serverovým uzlům, ale pokud používáte jednu Session
, nevyužíváš toho. Vytvořením nové Session
na začátku každého vašeho požadavku (v případě potřeby) a na konci jej řádně uzavřete (pomocí Session.Close()
; nejlépe voláno pomocí defer
), využíváte potenciálního použití více připojení současně, případně k více serverovým uzlům (pokud jsou k dispozici), a tím lépe využíváte prostředky serveru; a zrychlení doby odezvy (jak z databáze, tak i pro koncové uživatele HTTP). Volání Session.Close()
neuzavře základní připojení k serveru, pouze vrátí připojení zpět do fondu, připravené k vyzvednutí další relací.
Podívejte se také na související otázku o použití Session
s:mgo – výkon dotazu se zdá být trvale pomalý (500–650 ms)