0

Я беру свое первое погружение в стек MEAN, и я работаю с базой данных через Mongoose. Я не очень хорошо знаком с Mongoose или MongoDB, поэтому я не знаю, как им нравится настраиваться. Я также не знаю, имеет ли значение Мангуста, или это вопрос исключительно MongoDB.Какова рекомендуемая продолжительность жизни для подключения в MongoDB/Mongoose?

В последний раз я написал логику доступа к данным напрямую (без ORM или вложенных репозиториев для управления соединением для меня), это было в .NET с System.Data.SqlClient. Я помню, что всегда должен был быть уверен, что SqlConnection был открыт не больше, чем необходимо, и всегда закрывать его явно, когда я был сделан.

Я прочитал много советов о написании приложений MEAN, и никто не упоминает об этом. Из кода, который я видел, создается впечатление, что соединения MongoDB/Mongoose любят жить на уровне приложений и что я должен только позвонить mongoose.connect один раз для всего приложения.

Вот мой код подключения, который вызывается один раз при запуске приложения:

mongoose = require "mongoose" 
connection = mongoose.connection 
mongoose.connect process.env.MONGO_URI 

connection.on 'error', (err) -> 
    console.error 'DB connection error', err 
.once 'open', -> 
    console.log 'DB open' 

gracefulExit = -> 
    connection.close -> 
     console.log 'Mongoose default connection disconnected through app termination' 
     process.exit 0 

process.on('SIGINT', gracefulExit) 
     .on('SIGTERM', gracefulExit) 

module.exports = (name, dataStructure) -> 
    schema = new Schema dataStructure 
    return mongoose.model(name, schema) 

JavaScript translation if you need it

Это единственное место, где mongoose.connect называется, а полученный объект соединения повторно используется по всему приложению. Правильно ли я это делать, или я должен создавать, открывать, закрывать и уничтожать его по каждому запросу? Какие еще вопросы масштабируемости я должен знать?

Я понимаю, что это звучит немного откровенно, но я надеюсь получить объективную информацию о MongoDB и внутренности Mongoose и конфигурации. Будут ли проблемы, когда я делаю это в производственной среде с большим количеством одновременных запросов?

ответ

1

То, что вы создаете при вызове mongoose.connect, - это не одно соединение, а пул соединений, который должен существовать в течение всего срока действия вашего приложения и должен использоваться всем кодом через зарегистрированные вами модели Mongoose.

Итак, вы уже делаете вещи правильно, и если вы хотите, чтобы изменить размер по умолчанию (5) пула соединений, вы можете сделать это с помощью параметра опции mongoose.connect:

// Use a pool of 3 connections. 
mongoose.connect(process.env.MONGO_URI, { server: { poolSize: 3 }}); 
+0

Спасибо! Означает ли это, что может быть только 5 одновременных соединений? Это много для моего тестового приложения, но для коммерческого сайта это кажется низким. –

+0

@JustinMorgan Вы можете установить значение 'poolSize' для любого количества необходимых вам соединений; 5 - это только значение по умолчанию. – JohnnyHK

Смежные вопросы