Javascript RejectionDB和Node.js/Express-为并行查询打开多个连接?

Javascript RejectionDB和Node.js/Express-为并行查询打开多个连接?,javascript,node.js,express,rethinkdb,Javascript,Node.js,Express,Rethinkdb,有没有比在每个请求中打开多个连接更好的方法来使用DB节点驱动程序运行并行查询?或者这真的是一个很好的方式来满足我的需求?我宁愿远离连接池/第三方软件包。有问题的应用程序有一个包含包装DB查询的函数的单例。这些函数处理创建和关闭连接。这种模式允许我在多个路由器中以最小的开销要求数据库服务,而不必知道每个请求。解释被查询数据的不相关性的人为示例: database.js var r = require('rethinkdb'); module.exports = { getApples:

有没有比在每个请求中打开多个连接更好的方法来使用DB节点驱动程序运行并行查询?或者这真的是一个很好的方式来满足我的需求?我宁愿远离连接池/第三方软件包。有问题的应用程序有一个包含包装DB查询的函数的单例。这些函数处理创建和关闭连接。这种模式允许我在多个路由器中以最小的开销要求数据库服务,而不必知道每个请求。解释被查询数据的不相关性的人为示例:

database.js

var r = require('rethinkdb');

module.exports = {

    getApples: function(callback) {
        r.connect(/* config */)
            .then(function(conn){
                r.db('fruitDatabase').table('apples').run(conn)
                    .then(function(cursor){
                        return cursor.toArray();
                    })
                    .then(function(apples){
                        return callback(null, apples);
                    })
                    .finally(function(){
                        return conn.close();
                    });
            });
    },
    getPotatoes: function(callback) {
        r.connect(/* config */)
            .then(function(conn){
                r.db('vegetableDatabase').table('potatoes').run(conn)
                    .then(function(cursor){
                        return cursor.toArray();
                    })
                    .then(function(potatoes){
                        return callback(null, potatoes);
                    })
                    .finally(function(){
                        return conn.close();
                    });
            });
    }
};
现在,我需要创建一个显示所有苹果和土豆的页面/端点,因此我目前通过页面路由器中的async.parallel调用这两个函数:

pages.js

var pages = require('express').Router(),
    async = require('async'),
    db = require('./database');

pages.route('/food')
    .get(function(req, res, next){
        async.parallel({
            apples: db.getApples,
            potatoes: db.getPotatoes
        }, function(err, data){
            if(err) return next(err);

            res.render('food',
                {
                    apples: data.apples,
                    potatoes: data.potatoes
                });
        });
    });

想法?如果有4个连接并行打开(或更多)?

我认为RejectionDB可以很好地处理许多并行连接。它也可能更容易使用。如果您对所有人都使用共享连接,我们必须在连接中断时重新尝试连接,并且必须确保它在请求或服务器的整个生命周期中都是开放的

此DB驱动程序在其自己的连接上运行每个查询

驱动程序对每个连接执行一个查询。现在RejectionDB/RejectionDB#3296已经解决,这种行为将来可能会改变

更重要的是,如果你曾经将change feed带到你的应用程序中,你很可能会希望change feed在它自己的连接上根据

在他们自己的连接上打开changefeeds是个好主意。如果不这样做,则在同一连接上运行的其他查询将遇到不可预测的延迟峰值,而连接将阻止更多更改


所以,换句话说,我说继续,让我们通过使用许多并行连接使它变得简单和容易

如果您不能等待官方驱动程序获得连接池,您还可以使用中间件为每个请求打开连接,如从官方文档:

app.use(createConnection);                      // Create a RethinkDB connection

function createConnection(req, res, next) {
    r.connect(config.rethinkdb, function(error, conn) {
        if (error) {
            handleError(res, error);
        }
        else {
            // Save the connection in `req`
            req._rdbConn = conn;
            // Pass the current request to the next middleware
            next();
        }
    });
}

我相信这个答案上的信息已经过时了。我提出了一个新问题

啊,它确实可以很好地处理多个并行连接。我应该在问题中澄清,我指的是每个请求的多个连接,而不是典型的每个请求一个连接模式或连接池。编辑问题以反映这一点。谢谢你的回复!