我有一个简单的node/express
应用程序,需要获取存储在示例 MongoDB 集合中的 2 个文档(32-bit, localhost, Windows)
。我可以使用native driver
或Mongoose ORM
。
使用本机驱动程序将我的应用程序撕裂。做了一个ApacheBench(3300个请求,一次5个),整个事情都超时了......
Completed 330 requests
apr_pollset_poll: The timeout specified has expired (70007)
当通过 Mongoose 访问时,相同的 MongoDB 集合只是通过比较简单地完成任务......
...
Completed 2970 requests
Completed 3300 requests
Finished 3300 requests
...
Requests per second: 244.49 [#/sec] (mean)
Time per request: 61.353 [ms] (mean)
这是一个巨大的差异,显然我在使用本机驱动程序时做错了什么。这是这两种方法的代码以及存储在数据库中的数据。
数据库中只存储了两个文档:
{
"_id": "51bmdft4a487e771411ce8ef",
"name": "Gintoki",
"email": "sakata@yorozuya.com",
"friends": [ "Shinpachi", "Kagura", "Tsukuyo" ]
},
{
"_id": "51388p50bed4dghy4308745d",
"name": "Elizabeth",
"email": "eli@ossan.io",
"friends": [ "Katsura" ]
}
使用本机 MongoDB 驱动程序:
var
app = require( 'express' )(),
MongoClient = require( 'mongodb' ).MongoClient,
DB_URL = 'mongodb://localhost:27017/testDB';
app.get( '/mongotest', function ( req, res ) {
MongoClient.connect( DB_URL, function ( err, db ) {
if( !err ) {
var collection = db.collection( 'People' );
collection.find().toArray(function(err, items) {
res.send( JSON.stringify( items ) );
})
}
})
})
app.listen( 5000 );
输出:在完成 3300 个请求中的 330 个请求一分钟后超时ab
使用猫鼬:
var
app = require( 'express' )(),
mongoose = require( 'mongoose' ),
DB_URL = 'mongodb://localhost:27017/testDB';
app.get( '/mongotest', function ( req, res ) {
mongoose.connect( DB_URL );
var
PeopleSchema = mongoose.Schema({ name: String, email: String, friends: Array }),
People = mongoose.model( 'People', PeopleSchema ),
db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
People.find({}, function ( err, item ) {
res.send( item );
})
})
})
app.listen( 5000 );
输出:与本机驱动程序相比,速度非常快。ab
在几秒钟内完成。
任何人都帮我弄清楚我在使用本机驱动程序时做错了什么?