mgo.Session
同時使用しても安全です。そのドキュメントからの引用:
すべてのSessionメソッドは同時実行に対して安全であり、複数のgoroutineから呼び出すことができます。
ただし、これは、Session.Copy()
を呼び出して、それらを並行して作成および使用するべきではないという意味ではありません。 またはSession.Clone()
、ダイヤル時に取得した最初のセッション。
並行性が安全であり、それらをより多く使用することで利益を得ることが、お互いを排除することはありません(相互に排他的ではありません )。単一のmgo.Session
を使用できますが 任意の数のゴルーチンから、うまくスケーリングせず、まったくスケーリングしない 。セッションは、複数のサーバーノードへの接続のプールを自動的に管理しますが、単一のSession
を使用している場合 、あなたはそれを利用していません。新しいSession
を作成する 各リクエストの開始時に(必要な場合)、最後に適切に閉じます(Session.Close()
を使用);できればdefer
を使用して呼び出されます )、場合によっては複数のサーバーノード(利用可能な場合)への複数の接続を同時に使用する可能性を利用しているため、サーバーリソースをより有効に活用できます。応答時間の短縮(データベースから、そして最終的にはHTTPエンドユーザーへの両方)。 Session.Close()
を呼び出す サーバーへの基盤となる接続を閉じず、接続をプールに戻し、別のセッションで取得できるようにします。
Session
の使用に関する関連質問も参照してください。 s:mgo-クエリのパフォーマンスは一貫して遅いようです(500-650ms)