Подтвердить что ты не робот

Сохранение соединения базы данных MongoDB

Во многих вводных примерах использования MongoDB вы видите такой код:

var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:port/adatabase", function(err, db)
{
    /* Some operation... CRUD, etc. */
    db.close();
});

Если MongoDB похож на любую другую систему баз данных, операции open и close обычно являются дорогостоящими по времени.

Итак, мой вопрос заключается в следующем: возможно ли просто сделать MongoClient.connect("... один раз, присвоить возвращаемое значение db некоторому модулю global, иметь различные функции в модуле, выполнять различные работы с базой данных (вставлять документы в коллекции, обновления документов и т.д.), когда они вызываются другими частями приложения (и тем самым повторно используют это значение db), а затем, когда приложение выполняется, только затем выполните close,

Другими словами, open и close выполняются один раз - не каждый раз, когда вам нужно идти и выполнять некоторые операции с базой данных. И вы продолжаете повторно использовать этот объект db, который был возвращен во время начального open\connect, только для того, чтобы избавиться от него в конце, с помощью close, когда вы действительно выполняете всю свою работу с базой данных.

Очевидно, что поскольку все операции ввода/вывода асинхронны, перед close вы должны убедиться, что последняя операция базы данных завершена до выпуска close. Похоже, это должно быть хорошо, но я хотел дважды проверить на всякий случай, когда у меня что-то не хватает, поскольку я новичок в MongoDB. Спасибо!

4b9b3361

Ответ 1

Да, это прекрасное и типичное поведение. запустите приложение, подключитесь к db, выполните операции против db в течение долгого времени, возможно, повторно подключитесь, если соединение неожиданно закончится, а затем просто никогда не закрывайте соединение (просто полагайтесь на автоматическое закрытие, которое происходит, когда ваш процесс умирает).