我正在開發一個帶有MongoDB的Web應用程序。我注意到一個現象,即在重複執行相同的查詢時,處理速度會提高並最終收斂到某個點。與查詢集合中的所有文檔時一樣,每個查詢的時間使用率爲100000毫秒 - > 20000毫秒 - > 9000毫秒 - > ... - > 500毫秒。處理重複查詢時,MongoDB速度更快
我想知道背後的速度提升的原因是什麼?如何估算收斂點?
我正在開發一個帶有MongoDB的Web應用程序。我注意到一個現象,即在重複執行相同的查詢時,處理速度會提高並最終收斂到某個點。與查詢集合中的所有文檔時一樣,每個查詢的時間使用率爲100000毫秒 - > 20000毫秒 - > 9000毫秒 - > ... - > 500毫秒。處理重複查詢時,MongoDB速度更快
我想知道背後的速度提升的原因是什麼?如何估算收斂點?
有很多原因,我可以給點意見。
首先,MongoDB能夠爲您的查詢選擇最佳索引。爲此,MongoDB使用查詢計劃。但是,這種操作需要時間:
如果沒有匹配的條目,查詢規劃產生了一個試用期評估 候選人的計劃。查詢計劃人員 選擇一個獲勝計劃,創建一個包含獲勝計劃的緩存條目,並用它來生成結果文檔。
https://docs.mongodb.com/manual/core/query-plans/
指數應以加快性能加載到內存中,這也需要時間。嘗試看看觸:從數據存儲層
https://docs.mongodb.com/manual/reference/command/touch/
touch命令將數據加載到內存中。 touch可以加載數據(即文檔)索引或同時加載索引文件和 索引。
另一個原因,該指數不適合到內存才能知道,如果這是你的情況,也許你可以用totalIndexSize檢查
我更專注於提高因爲MongoDB並不總是爲你做出最好的決定。
在我看來,所有這個話題應該仔細評估,以避免性能下降。
祝你好運!
感謝您的見解!我會詳細瞭解這些。 –
可能只是所有的文檔都在內存中,因此它不需要再次打開磁盤。 – JohnnyHK
謝謝,約翰尼。我曾想過這種類似緩存的機制,但是一旦文檔在緩存中,不會將性能提高到最佳狀態?但是,根據我的觀察,它逐漸改善,因此至少並非所有文檔都在每次查詢後都存儲在緩存中。 –