Node.js,cluster,express,apache ab和mongodb

时间:2012-06-08 14:00:59

标签: node.js mongodb express performance-testing

我是mongo的新手,并且使用Node.js(v0.4.12),cluster(Learnboost v0.7.7)和express(v2.5.9)设置了一些性能测试。我正在尝试连接到mongo并使用apache ab进行简单的性能测试。我已经用MySql设置它并且它完美无缺,但是当我尝试用mongo进行相同的测试时,我没有得到我期望的结果。

使用MySql,我向node.js集群发送了10,000个请求(8个核心),并且我在数据库中插入了10,000行。没有问题。但是,当我用mongo做同样的事情时,我只能得到4,500-4,900左右。我尝试了mongoskin,mongo-lite,node-mongodb-native,并且都有完全相同的结果。

我想也许是游泳池大小,所以我增加/减少了。没有。没有错误或例外。我不知所措......

任何帮助将不胜感激。

感谢。

测试代码如下;

app.js

var mongoLite = require('mongo-lite');
var express   = require('express');

var count  = 1;
var config = {
host    : 'localhost', 
user    : USER,
pass    : PASSWORD,
port    : '27017',
db      : 'test',
options : 'poolSize=10'
};

var configUrl = 'mongodb://'    +
              config.user + ':' + 
              config.pass + '@' + 
              config.host + ':' + 
              config.port + '/' +
              config.db;


var mongo   = mongoLite.connect(configUrl);
var server  = express.createServer();

server.get('/test/:id', function (req, res) {               
mongo.collection('test_' + req.params.id).insert({_id: count++}, function(err, doc){
    if (err)
        throw err;
});
res.end('inserted');
});

module.exports = server; 

server.js

var cluster = require('cluster');

cluster('./app')
    .use(cluster.reload())
    .use(cluster.logger('logs'))
    .use(cluster.stats())
    .use(cluster.pidfiles('pids'))
    .use(cluster.cli())
    .use(cluster.repl(8888))
    .listen(81);

1 个答案:

答案 0 :(得分:0)

我遇到过apache ab的这些问题。我的结论是,它在节点上发送请求的速度比处理它们的速度快,并且因为如果这些请求根本没有得到处理。

我编写了自己的基准测试来在Java中进行http连接作为解决方法