Задать вопрос

Логика работы с MongoDB в сервере на Node.JS?

Вопрос довольно банальный, но, кажется, нигде детально не рассматривается: как правильно организовать работу с БД, учитывая асинхронную природу node.js?

То есть когда коннектиться и закрывать соединение с БД — при каждом реквесте или один раз при запуске/остановке приложения?

Стоит ли кэшировать интерфейсные объекты коллекций и курсоры, которые можно переиспользовать?

И если держать соединение открытым, то как обрабатывать возможные разрывы?


Если вам известен хороший пример приложения, в котором всё это грамотно реализовано — поделитесь ссылкой на исходники. А то все примеры в документации сводятся к примитивной цепочке db.open() -> db.collection() -> collection.crud() -> db.close()
  • Вопрос задан
  • 15870 просмотров
Подписаться 11 Оценить 1 комментарий
Ответ пользователя napa3um К ответам на вопрос (6)
@napa3um
При инициализации приложения однократно подключайся к базе данных с помощью MongoClient. Объект MongoClient создаёт пул соединений к БД, и сам восстановит соединение в случае разрыва. Также при инициализации рекомендую получить все необходимые коллекции для дальнейшей работы с ними, т.к. помимо оверхеда на создание JS-объектов в режиме strict получение коллекции вызывает проверку существования коллекции в базе данных. При этом закэшированные объекты коллекций будут использовать вышеописанные преимущества объекта MongoClient - пул соединений и переподключение в случае разрыва. Самостоятельно закрывать соединения не нужно, контекста и блокировок у соединения нет. Т.е., логика примерно такая (очень условно, без учёта архитектуры приложения):
// init db:
MongoClient.connect('mongodb://localhost:27017/dbName', function(err, db){
    cached.db = db;
    // init collection:
    db.collection('collName', { strict: true }, function(err, coll){
        cached.coll = coll;
    });
});
// usage in request:
cached.coll.insert(...);
Ответ написан
Комментировать