【问题标题】:MongoDB + node: not authorized to execute command (sometimes works, sometimes doesn't)MongoDB +节点:未授权执行命令(有时有效,有时无效)
【发布时间】:2017-01-15 01:26:19
【问题描述】:

我的 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/秒吗?

最好的问候, 扎利伊

【问题讨论】:

  • 我对Mongo了解不多,但是有没有可能是读锁或者写锁导致了这些错误呢?也许检查这篇文章写失败和锁定:rainforestqa.com/blog/…
  • 我也遇到了这个问题,能告诉我如何解决这个问题吗?

标签: node.js mongodb mongoose restify


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你可以试试:

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

    还有see the source

    【讨论】:

      猜你喜欢
      • 2019-05-30
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 2018-04-06
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多