2010-10-04 1 views
2

Я подхожу к MongoDB с фона NHibernate, и я хочу знать, какие лучшие методы используются для эффективного использования в веб-контексте.Использование MongoDB в веб-среде эффективно

С NHibernate я создаю единую ISessionFactory на всю жизнь приложения, а затем использую экземпляр ISession для каждого запроса. Возьмем, например, код ниже (который, я надеюсь, типичен, пожалуйста, исправьте, если он не идеален).

Был ли у меня обычно один экземпляр класса Mongo для каждого приложения или запроса? Как насчет var db? Или я использую весь код ниже всякий раз, когда мне нужно взаимодействие с БД?

Update: Я использую 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

ответ

1

Каждый из водителей, как правило, имеют некоторую форму постоянного соединения или объединение пулов. Я не уверен, какой язык/драйвер вы используете, но проверьте свои документы для объединения пулов.

Кроме того, при запуске Mongo.connect() у вас обычно будет строка подключения (mongodb://user:[email protected]:port/db), которая вырезает строки кода и доставит вас прямо в коллекцию.

Кроме того, вам вообще не нужно использовать GUID. Монгольские водители обычно предоставляют некоторую форму «MongoID», характерную для Монго. Кроме того, поведение по умолчанию заключается в создании идентификатора для вас, если у вас его нет.

Кроме этого, я подробно рассмотрю ваш драйвер/библиотеку, поскольку они немного отличаются.

1

При использовании mongodb-csharp вы относитесь к нему так же, как к ADO-соединению. Когда вы создаете объект Mongo, он заимствует соединение из пула, которому он владеет до его размещения. Поэтому после использования блока соединение возвращается в пул. Создание объектов Монго дешево и быстро.

Пример

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

журнала базы данных
ср 2 июня 20:54:21 соединение принимается от 127.0.0.1:58214 # 1
ср 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
ср 2 июня 20:54:21 MessagingPort RECV() ERRNO: 0 Нет ошибки 127.0.0.1:58215
ср 2 июня 20:54:21 торцевое соединение 127.0.0.1:58215

Обратите внимание, что только открыл 2 соединения.

Я собрал это вместе, используя форум mongodb-csharp. http://groups.google.com/group/mongodb-csharp/browse_thread/thread/867fa78d726b1d4