【发布时间】:2012-06-08 14:00:59
【问题描述】:
我是 mongo 新手,使用 Node.js (v0.4.12)、集群 (Learnboost v0.7.7) 和 express (v2.5.9) 设置了一些性能测试。我正在尝试连接到 mongo 并使用 apache ab 进行简单的性能测试。我已经使用 MySql 进行了设置,它可以完美运行,但是当我尝试使用 mongo 进行相同的测试时,我没有得到我期望的结果。
使用 MySql,我向 node.js 集群(8 个核心)发送了 10,000 个请求,我将 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);
【问题讨论】:
-
您应该尝试使用安全插入。将插入行更改为
mongo.collection('test_' + req.params.id).insert({_id: count++}, {safe:true}, function(err, doc){ ... }
标签: node.js mongodb express performance-testing