2010-10-04 29 views
2

我從NHibernate的背景接近MongoDB,我想知道什麼是在Web上下文中有效使用的最佳實踐。使用NHibernate,我爲應用程序的整個生命週期創建一個ISessionFactory,然後爲每個請求使用一個ISession的實例。以下面的代碼爲例(我希望它是典型的,如果它不理想,請更正)。有效地在網絡環境中使用MongoDB

我通常會爲每個應用程序或每個請求使用Mongo類的單個實例嗎?那麼var db?或者我需要使用下面的所有代碼,只要我需要數據庫交互?

更新:我使用MongoDB的-CSHARP(但請提出一個更好的選擇,如果存在的話)

感謝

using (var mongo = new Mongo()) 
{ 
    mongo.Connect(); 

    var db = mongo.GetDatabase("mydb"); 

    var mongoCollection = db.GetCollection("mycollection"); 

    var document = new Document(Guid.NewGuid().ToString(), new 
                { 
                 x = 1, 
                 y = 2 
                }); 

    mongoCollection.Insert(document); 
} 
+0

你使用Norm還是mongodb-csharp?請添加標籤! – TTT 2010-10-04 19:33:37

回答

1

每個驅動器通常有某種形式的持久連接或連接池。我不確定您使用的是哪種語言/驅動程序,但請查看您的文檔以瞭解連接池。

此外,運行Mongo.connect()時,通常會有連接字符串(mongodb://user:[email protected]:port/db),這會減少代碼行並讓您直接訪問集合。

此外,您通常不需要使用GUID。 Mongo驅動程序通常提供某種形式的MongoID,這是Mongo特有的。此外,默認行爲是爲您創建一個ID,如果您沒有。

除此之外,我會仔細看看你的驅動程序/庫,因爲它們略有不同。

1

當使用mongodb-csharp時,你會像對待ADO連接那樣對待它。 當你創建一個Mongo對象時,它從它擁有的池中借用一個連接,直到它被丟棄。所以在使用塊之後,連接回到池中。 創建Mongo對象既便宜又快捷。

for(var i=0;i<100;i++) 
{ 
     using(var mongo1 = new Mongo()) 
     using(var mongo2 = new Mongo()) 
     { 
       mongo1.Connect(); 
       mongo2.Connect(); 
     } 
} 

數據庫日誌
星期三6月2日20時54分21秒從連接#127.0.0.1:58214接受1
星期三6月2日20時54分21秒的連接接受自127.0.0.1:58215#2
Wed Jun 02 20:54:21 MessagingPort recv()errno:0沒有錯誤127.0.0.1:58214
Wed Jun 02 20:54:21 end connection 127.0.0.1:58214它只0無錯誤127.0.0.1:58215
星期三6月2日20時54分21秒結束連接127.0.0.1:58215

說明: 星期三6月2日20時54分21秒MessagingPort的recv()錯誤號打開2個連接。

我把這個放在一起使用mongodb-csharp論壇。 http://groups.google.com/group/mongodb-csharp/browse_thread/thread/867fa78d726b1d4

相關問題