Эффективное использование MongoDB в веб-среде - PullRequest
2 голосов
/ 04 октября 2010

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

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

Буду ли я иметь один экземпляр класса 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);
}

Ответы [ 2 ]

1 голос
/ 05 ноября 2010

При использовании 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(); 
        } 
} 

База данных Log Ср Июн 02 20:54:21 соединение принято от 127.0.0.1:58214 # 1Ср Июн 02 20:54:21 соединение принято от 127.0.0.1:58215 # 2Ср Июн 02 20:54:21 MessagingPort recv () errno: 0 Нет ошибок 127.0.0.1:58214Ср Июн 02 20:54:21 конец соединения 127.0.0.1:58214Ср Июн 02 20:54:21 MessagingPort recv () errno: 0 Нет ошибок 127.0.0.1:58215Ср Июн 02 20:54:21 конец соединения 127.0.0.1:58215

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

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

1 голос
/ 05 октября 2010

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

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

Кроме того, вам обычно не нужно использовать GUID. Драйверы Mongo обычно предоставляют некоторую форму MongoID, которая специфична для Mongo. Кроме того, по умолчанию создается идентификатор для вас, если у вас его нет.

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

...