我有一个http服务器,每次收到一个post请求时,都应该将数据插入到MongoDB中。该服务器应该在任何给定的秒内持续运行并接受数千个请求。
如何最大限度地提高代码的效率和速度?我觉得我当前的代码速度不够快,每次收到请求时都会产生新的数据库,从而浪费CPU能力。
我当前的布局
var server = http.createServer(function (req, res) {
req.on('data', function(chunk) {
//Receive my data
});
req.on('end', function() {
//JSON parse my data
var db = new Db('test', new Server("111.111.11.111", 27017,{auto_reconnect: false}), {safe: true});
db.open(function(err, db) {
//Insert data into DB
db.close();
});
});
}); //End Http server
server.listen(8999);
我尝试用MongoClient.connect替换db.open,但这会大大减慢处理速度,我不知道为什么。在这种情况下,旧版本的MongoDB Native for node js似乎工作得更快。
答案 0 :(得分:2)
您将希望转向在启动期间打开由HTTP请求处理程序共享的大型连接池的方法。要调整MongoDB连接池大小以满足您的任何可伸缩性需求,请将options
参数传递给MongoClient.connect
调用。
var options = {
server: {
// The number of pooled connection available to your app.
poolSize: 100
}
};
mongodb.MongoClient.connect('mongodb://111.111.11.111/test', options,
function(err, db) {
var server = http.createServer(function (req, res) {
// Your req.on calls go here, directly using db rather than creating
// new instances. Don't close db either.
});
server.listen(8999);
}
);
答案 1 :(得分:0)
不确定这是否会更好,但您可以将该服务器封装在数据库中,从而保持连接:
var db = new Db('test', new Server("111.111.11.111", 27017,{auto_reconnect: false}), {safe: true});
db.open(function(err, db) {
var server = http.createServer(function (req, res) {
//now do stuff thru constant open connection
});
db.close();
});