Сохранение открытого соединения с базой данных 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 значение для некоторого модуля глобального, имеют различные функции в модуле делают различную работу, связанную с базой данных (вставка документов в коллекции, обновление документов, так далее. так далее.) когда они вызываются другими частями приложения (и тем самым повторно использовать это db значение), а затем, когда приложение будет сделано, только тогда сделать close.

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

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

1 54

1 ответ:

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