gopkg.in/mgo.v2 を使用した MongoDB の同時実行性に関する考慮事項
gopkg.in/mgo を使用して MongoDB を Go Web アプリケーションに統合する場合.v2 では、最適なパフォーマンスとリソース利用のために同時実行のベスト プラクティスを考慮することが不可欠です。この記事では、次の質問について説明します。
Web アプリケーション内 (http.Handler など) で単一の mgo.Session を同時に使用できますか、それとも Session.Copy と Session.Close を使用する必要がありますか?セッションのプールを作成する
説明:
mgo.Session は、当初の想定に反して、実際に同時使用しても安全です。公式ドキュメントに記載されているように、「すべてのセッション メソッドは同時実行に対して安全であり、複数のゴルーチンから呼び出すことができます。」
ただし、これは、同時設定で mgo.Session を 1 つだけ使用することが有利であることを意味するものではありません。セッションは接続のプールを自動的に管理しますが、単一のセッションを利用すると、複数の接続を同時に活用する能力が制限され、可能な場合はサーバー ノード間で分散する可能性があります。
リクエストごとに新しいセッションを作成し、必要に応じてコピーして閉じます。これらを適切に (Session.Close を defer とともに使用して) 最適なリソース使用率を実現します。複数の接続を管理することにより、システムはより多くの接続とサーバー ノードを同時に使用できる可能性があり、その結果、データベースとエンドユーザーの両方の応答時間が短縮されます。
Session.Close はサーバーへの基礎となる接続を終了しませんが、むしろ、それをプールに返し、他のセッションがそれを取得できるようにします。
さらに詳しい洞察については、セッションのパフォーマンスに関する関連する議論を参照してください: mgo - クエリのパフォーマンスは次のようになります。一貫して遅い (500 ~ 650 ミリ秒)。
以上がGo Web アプリケーションでの同時使用には、単一の mgo.Session で十分ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。