MongoDB +节点:未授权执行命令(有时可以工作,有时不工作)

时间:2016-09-07 11:18:22

标签: node.js mongodb mongoose restify

我的MongoDB环境遇到问题 - 设置如下:

我的节点应用程序提供了一个处理用户注册的restify API(查看用户是否存在于基于他的邮件的集合中,如果没有,请插入他(注意 - 插入使用bcrypt来哈希密码,所以可能是有点慢))。它使用restify和Mongoose ORM。

第二个基准测试脚本(也在节点中编写,在同一台机器上运行)使用HTTP PUT访问此restify API。

我在基准测试中开始大约20-30个这样的请求(使用随机数据),只有部分API请求正确插入新用户。另一方面,MongoDB产生类似于以下的错误:

  

未授权执行命令{find:“users”,filter:{mail:“rroouksl@hddngrau.de”}}

     

未授权执行命令{insert:“users”,documents:[{...}],ordered:false,writeConcern:{w:1}}

其他一些用户插入完全正常。特别是在同时(1-5)的请求数量较少的情况下,不会出现问题。 Mongo不应该能够处理这些“低”数量的请求吗?这是一个问题,因为它在同一台机器上运行?我在Mongo中为这个项目创建的用户是否获得了足够的txns /秒?

祝你好运, Zahlii

2 个答案:

答案 0 :(得分:0)

原来,mongo仍在使用" old"存储引擎而不是WiredTiger。由于我的查询包括更新记录,旧引擎执行基于集合的锁,这意味着错误完全基于读写锁。

我迁移到WiredTiger,它执行基于文档的锁定,从那时起,数据库处理许多没有这些错误的并行请求(虽然有时在重载下它们会再次出现 - 但这是mongo的一部分,我猜是NoSQL)

答案 1 :(得分:0)

您可以尝试:

Db.authenticate(user, password, function(err, res) {
  // callback
});

see the source