8

我很新的MongoDB和NoSQL一般和我剛開始建立一個網站用的MongoDB /規範/ ASP.NET MVC 3什麼時候應該打開和關閉MongoDB連接?

我想知道我應該如何劃定範圍,以我的Mongo的數據庫的連接。

現在我有一個Basecontroller是instanciates的MongoSession和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); 
     } 
    } 

另一個跟進的問題是:

正在打開,並通過規範的MongoDB關閉連接「昂貴」的操作?

+0

規範是很難維持下去了,如果你想LINQ支持,在它的上面有FluentMongo官方蒙戈司機去。 – 2012-02-07 13:37:05

+0

除了打開和關閉連接上的代碼這個問題,我的問題與互聯網服務提供商關閉連接,然後有EndOfStreamException我的代碼。我解決它通過使用settings.MaxConnectionIdleTime = TimeSpan.FromSeconds(30); https://stackoverflow.com/a/44606284/194717 – Tony 2017-06-17 22:12:14

回答

8

我會離開爲重新建立連接是昂貴的開放連接。 Mongo很好,有很多連接,開放很長時間。理想情況下應該做的是將應用程序的所有部分與連接共享爲一個持久連接。 C#的驅動程序應該是足夠聰明,這樣做本身,因此它不會造成太多的連接,因爲在內部它使用「連接池」,使得它即使再使用連接。該文檔說:「到服務器的連接在幕後自動處理(連接池用於提高效率)」。

歡呼聲, 德里克

+1

同意。實際上,你甚至不需要編寫一個MongoSession類 - 在應用程序範圍中存儲MongoServer實例是合適的。當MVC應用程序關閉時,您幾乎可以肯定地只對此實例調用Disconnect()一次。 – 2012-02-07 12:02:52

+0

@Sean感謝您關於何時關閉連接的提示。 – 2012-10-13 15:49:10

2

你不需要呼叫連接或斷開

C#的驅動程序有一個連接池有效地使用到服務器的連接。無需調用Connect或Disconnect;讓驅動程序負責連接(調用Connect是無害的,但調用Disconnect是不好的,因爲它關閉了連接池中的所有連接)。

http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-csharp-driver/

+0

鏈接(現在)沒有提及任何內容,它只是其他幾個網頁的父頁面。 – danio 2017-06-19 09:26:13

相關問題