【问题标题】:why blocking operation created?为什么创建阻塞操作?
【发布时间】:2014-06-15 04:59:03
【问题描述】:

使用mean.io堆栈,我有以下问题:

在使用 Apache bench 进行测试时,我发现简单的查询创建了阻塞操作

var mongoose = require('mongoose'),
        async = require('async'),
        Post = mongoose.model('Post');

exports.index = function(req, res) {
  Post.find({deleted:false}, function(err, posts) {
    if (err) {
      res.jsonp(err);
    } else {
      res.jsonp(posts);
    }
  });
};

ab -n 1 -c 1 http://localhost:3000/home > 测试时间:0.006 秒

ab -n 10 -c 10 http://localhost:3000/home > 测试时间:0.032 秒

ab -n 100 -c 100 http://localhost:3000/home > 测试时间:0.224 秒

我是否正确使用回调,可能是什么问题?

【问题讨论】:

    标签: node.js express mongoose blocking mean-stack


    【解决方案1】:

    您的 MongoDB 查询的并发性受限于您的连接池的大小,默认情况下只有 5 个。

    您可以在 mongoose.connect 调用中对其进行调整,并将其设置为 100 以消除作为基准测试的瓶颈:

    mongoose.connect('mongodb://localhost/test', {server: {poolSize: 100}}, cback);
    

    【讨论】:

    • 我将它设置为 100,并在 db.serverStatus().connections 中看到它发生了变化,但无论如何 Apache bench 显示相同的结果,所以看起来不可能在一瞬间发送几个查询 :( 测试 - 如果将两个查询放在一个方法中(第二个不在第一个回调中)它看起来像查询在 db 中并行
    猜你喜欢
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 2012-08-23
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多