繁体   English   中英

MongoDB +节点:无权执行命令(有时有效,有时无效)

[英]MongoDB + node: not authorized to execute command (sometimes works, sometimes doesn't)

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

我的节点应用程序提供了一个Restify API,用于处理用户注册(根据用户的邮件查找用户是否存在于集合中,如果不存在,则将其插入(请注意-insert使用bcrypt来哈希密码,因此可能会稍慢一些) )。 它使用restify和猫鼬ORM。

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

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

未经授权...执行命令{查找:“用户”,过滤器:{邮件:“ rroouksl@hddngrau.de”}}

未授权执行命令{插入:“用户”,文档:[{...}],命令:false,writeConcern:{w:1}}

其他一些用户可以完全插入。 尤其是同时(1-5)的请求数量较少时,不会发生任何问题。 Mongo不应该能够处理这些“低”数量的请求吗? 因为它在同一台计算机上运行,​​是否有问题? 我在Mongo中为该项目创建的用户是否没有获得足够的txns /秒?

最好的问候,Zahlii

事实证明,mongo仍在使用“旧”存储引擎,而不是WiredTiger。 由于我的查询中包含更新记录,因此旧引擎执行基于集合的锁定,这意味着错误仅基于读写锁定。

我迁移到WiredTiger,它执行基于文档的锁定,此后,数据库处理了许多并行请求而没有这些错误(尽管有时在高负载下它们会再次出现-但这是mongo作为NoSQL的一部分)

你可以试试:

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

请参阅源代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM