与MongoDB的单个或多个连接更好?

时间:2017-02-18 02:43:12

标签: node.js mongodb express database-connection database

我正在通过Express构建我的Node.js应用程序。我有两种选择来编写代码以连接到我的MongoDB。

  • 首先是每次执行查询时打开连接

https://codeshare.io/a3AQXg

  • 其次是在启动应用程序时创建一个单独的连接

https://codeshare.io/GkmR14

然后

function productRepository(db) {
    this.db = db;
};

productRepository.prototype.insert = function(item) {
    return new Promise((resolve, reject) => {
        this.db.collection('product').insertOne(item, function(err, result) {
            if (err) {
                reject(err);
            } else {
                resolve(result);
            }
        });
    });
};

module.exports = productRepository;

module.exports = function(app, db) {

    var productRepository = require('../model/product');
    var productRepoInstance = new productRepository(db);

    app.get('/test', function(req, res) {
        productRepoInstance.insert({ createdAt: new Date() }).then(
            (result) => res.send({ result: 1 }),
            (error) => {
                console.log(error);
                res.send({ result: 0 });
            });
    });
};

我想知道哪个更好,为什么?

1 个答案:

答案 0 :(得分:1)

您绝对应该使用多个连接,否则一次只能执行一个查询。最简单的方法是在创建Db对象时在mongodb.Server对象上启用连接池。例如:

var serverOptions = {
    'auto_reconnect': true,
    'poolSize': 5
};

var mohammadsMongoServer = new mongodb.Db('test', new mongodb.Server('127.0.0.1', 27017, serverOptions));
mohammadsMongoServer.open(function (err, mdb) {}

目前,默认情况下mongodb的连接池大小为5,但可以使用上面的示例代码增加。我建议您使用连接池而不是创建新的单个连接,因为它具有单个连接的所有好处,但通过重用连接可以显着减少开销。