Структура 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.

Другие вопросы по тегам