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