簡體   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