2014-12-22 49 views
0

我們在負載測試中看到一些使用Mongoose的奇怪的,但有點可預見的行爲。測試結束後,服務在負載結束後不斷進行查詢。我認爲這可能是查詢被排入隊列,並在超時過期後不會被丟棄。Mongoose排隊查詢嗎?

可以說我們每5ms進行一次需要10ms執行的查詢。對於單個連接,可能發生兩件事:

  1. 由於連接正在使用中,所以刪除了一半查詢。
  2. 當連接釋放時,超出的查詢將被排隊並執行。

我找不到描述Mongoose在數據庫如此重載時的行爲的文檔中的任何內容。看起來後一種選擇正在發生。

有一個設置查詢超時的選項,但它沒有說明該超時是從初始查詢請求開始計算,還是根據數據庫執行查詢來計算。我懷疑它也是後者。

+0

我相信這是由於Node的行爲,而不是Mongoose。當你的請求詢問Mongoose查詢時,該查詢是異步執行的,這意味着它將在「儘可能」時執行。如果到數據庫的連接池耗盡,那麼「可能時」部分將在池中有新連接可用時發生,這可能在測試結束後很長時間。 – Nepoxx

回答

0

默認情況下,當連接斷開時,Mongoose將緩衝。請參閱bufferCommands選項。否則,它不應該根據請求數進行任何緩衝。正如Nepoxx所說,這可能是由於Node如何使這些請求等待IO。