有沒有更好的方式來運行RethinkDB節點驅動程序的並行查詢,而不是每個請求打開多個連接?或者,這實際上是一種討論我所需要的好方法嗎?我寧願遠離連接池/第三方軟件包。有問題的應用程序有一個單獨的包含RethinkDB查詢的函數。這些功能處理創建和關閉連接。這種模式允許我以最小的開銷在多個路由器中請求數據庫服務,並且不必知道每個請求。人爲的例子來解釋數據怎麼可能無關的是被質疑:RethinkDB和Node.js/Express - 爲並行查詢打開多個連接?
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個並行連接(或更多)的連接呢?
或https:/ /github.com/hden/rethinkdb-pool – Suvitruf
啊,它的確可以處理多個並行連接。我應該在我的問題中澄清說,我指的是每個請求的多個連接,而不是典型的每個請求模式或連接池。編輯問題以反映這一點。感謝您的迴應! – jfurfaro