12

私は一般的にMongoDBとNoSQLに非常に慣れておらず、MongoDB / Norm / ASP.NETMVC3を使用してサイトを構築し始めたところです。

Mongoデータベースへの接続をどのようにスコープする必要があるのか​​疑問に思っています。

現在、MongoSessionをインスタンス化するBasecontrollerがあり、onActionExecutedを破棄して、派生するすべてのコントローラーがMongoSessionにアクセスできるようにします。MongoSessionクラスは、コンストラクターで接続を開き、Dispose()でそれを破棄します。これは、現在の動作方法です。

private IMongo _mongo;

public MongoSession()
{         
    _mongo = Mongo.Create("connString");      
} 

public void Dispose()
{
    _mongo.Dispose();
}

コントローラーで他のことをしていると、接続が長すぎて開いたままになるのではないかと少し心配しています。

そのアプローチは、あまりにも多くの接続を開いたままにするリスクを冒さないのに十分ですか、それとも以下の例の方法のようなことをする必要がありますか?

   public void Add<T>(T item) where T : class, new()
   {
       using (var mongo = Mongo.Create("connString"))
       {
         mongo.GetCollection<T>().Insert(item); 
       }
   }

別のフォローアップの質問は次のとおりです。

Normの「高価な」操作を介してMongoDB接続を開いたり閉じたりしていますか?

4

2 に答える 2

11

接続の再作成にはコストがかかるため、接続を開いたままにします。Mongo は多くの接続で問題なく、長時間開いています。理想的にすべきことは、接続を永続的な接続としてアプリケーションのすべての部分と共有することです。C# ドライバーは、接続を再利用する「接続プーリング」を内部的に使用するため、接続を作成しすぎないように、これ自体を行うのに十分なほど賢くある必要があります。ドキュメントには、「サーバーへの接続は、バックグラウンドで自動的に処理されます (効率を高めるために接続プールが使用されます)。」

乾杯、デリック

于 2012-02-07T09:11:12.330 に答える