2016-09-07 33 views
0

我面對我的MongoDB的環境問題 - 設置如下:MongoDB的+節點:無權執行命令(有時有效,有時不)

我節點的應用程序提供了一個API的RESTify其中處理用戶註冊(根據他的郵件查詢用戶是否存在於集合中,如果不存在,插入他(注意 - 插入使用bcrypt來散列密碼,所以可能會慢一些))。它使用restify和Mongoose ORM。

第二個基準測試腳本(也寫在節點上,運行在同一臺機器上)使用HTTP PUT訪問此restify API。

我從基準測試中的20-30個這樣的請求開始(使用隨機數據),只有一些API請求正確插入新用戶。對於其他,MongoDB的產生類似於以下錯誤:

沒有被授權就......執行命令{發現:「用戶」,過濾器:{郵件:「[email protected]」}}

沒有被授權就......執行命令{插入: 「用戶」,文件:[{...}],命令:假的,writeConcern:【W:1}}

其他一些用戶獲得插入非常好。尤其是在同時(1-5)的請求數量較少的情況下,不會出現任何問題。 Mongo不應該能夠處理這些「低」的請求量嗎?這是一個問題,因爲它在同一臺機器上運行?我在Mongo中爲這個項目創建的用戶是否有足夠的TXT /秒允許?

最好的問候, Zahlii

+0

我對Mongo瞭解不多,但讀寫鎖是否有可能導致這些錯誤?也許檢查這個帖子寫入失敗和鎖定:https://www.rainforestqa.com/blog/2012-11-05-mongodb-gotchas-and-how-to-avoid-them/ – HeadCode

+0

我也面臨這個問題。你能告訴我如何解決這個問題嗎? –

回答

0

原來蒙戈仍然使用「舊」的存儲引擎,而不是WiredTiger。由於我的查詢包括更新記錄,因此舊引擎執行基於集合的鎖定,這意味着錯誤僅基於讀寫鎖定。

我遷移到WiredTiger執行基於文檔的鎖定,從那時起,數據庫處理沒有這些錯誤,許多並行請求(雖然有時在重負載下,他們再次出現 - 但這是蒙戈是NoSQL的我猜的一部分)

0

你可以試試:

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

而且see the source

相關問題