Структура Express.js для node-postgres (pg) и mongodb
Во-первых, я довольно новичок в том, что касается оценки производительности при подключении к базе данных с сервера, поэтому извините, если я скажу что-то, чего я не имел в виду.
В настоящее время я использую класс mongodb для node.js, и меня поразило, насколько простым и элегантным был код для сервера блогов, который они изначально предоставили (мы в основном просто реализуем запросы к базе данных). Это выглядит так:
var express = require('express')
, app = express()
, cons = require('consolidate')
, MongoClient = require('mongodb').MongoClient
, routes = require('./routes');
MongoClient.connect('mongodb://localhost:27017/blog', function(err, db) {
if(err) throw err;
app.set('views', __dirname + '/views');
app.use(express.cookieParser());
app.use(express.bodyParser());
routes(app, db);
app.listen(3000);
console.log('Express server listening on port 3000'); });
Как видите, он устанавливает соединение с базой данных до того, как сервер настроен на что-либо. Можно ли использовать этот шаблон для производства? Это просто кажется модульным, потому что БД передается в index.js, где он обрабатывает всю маршрутизацию.
Ранее я делал соединение по каждому запросу, который запрашивает базу данных и закрывает ее (с помощью модуля pg). Я на самом деле не уверен, что это тоже хорошая идея. Но я хотел бы получить подтверждение того, что такой шаблон, который я описал выше, вполне подойдет; Если нет, возможно, предоставьте альтернативу и объясните почему (альтернативная структура / шаблон для mongodb и / или pg не является альтернативным модулем, таким как mongoose).
Спасибо!
1 ответ
То, что вы делаете, прекрасно. node-postgres использует пул коллекций, то есть вы можете открыть соединение один раз и использовать его повторно. Для многих приложений пул соединений с базой данных является предпочтительным, поскольку он более эффективен, чем их открытие и закрытие для каждого запроса. Однако, если у вас по какой-то причине есть долгоживущие соединения с базой данных, то вы, возможно, не захотите объединять соединения с базой данных, поскольку вы рискуете исчерпать пул баз данных. Согласно исходному коду количество подключений по умолчанию в пуле равно 10, но вы можете отключить пул подключений, установив число в 0.