2017-08-16 55 views
3

我正在開發一個帶有MongoDB的Web應用程序。我注意到一個現象,即在重複執行相同的查詢時,處理速度會提高並最終收斂到某個點。與查詢集合中的所有文檔時一樣,每個查詢的時間使用率爲100000毫秒 - > 20000毫秒 - > 9000毫秒 - > ... - > 500毫秒處理重複查詢時,MongoDB速度更快

我想知道背後的速度提升的原因是什麼?如何估算收斂點?

+1

可能只是所有的文檔都在內存中,因此它不需要再次打開磁盤。 – JohnnyHK

+0

謝謝,約翰尼。我曾想過這種類似緩存的機制,但是一旦文檔在緩存中,不會將性能提高到最佳狀態?但是,根據我的觀察,它逐漸改善,因此至少並非所有文檔都在每次查詢後都存儲在緩存中。 –

回答

2

有很多原因,我可以給點意見。

首先,MongoDB能夠爲您的查詢選擇最佳索引。爲此,MongoDB使用查詢計劃。但是,這種操作需要時間:

如果沒有匹配的條目,查詢規劃產生了一個試用期評估 候選人的計劃。查詢計劃人員 選擇一個獲勝計劃,創建一個包含獲勝計劃的緩存條目,並用它來生成結果文檔。

https://docs.mongodb.com/manual/core/query-plans/

指數應以加快性能加載到內存中,這也需要時間。嘗試看看觸:從數據存儲層

https://docs.mongodb.com/manual/reference/command/touch/

touch命令將數據加載到內存中。 touch可以加載數據(即文檔)索引或同時加載索引文件和 索引。

另一個原因,該指數不適合到內存才能知道,如果這是你的情況,也許你可以用totalIndexSize檢查

https://docs.mongodb.com/manual/reference/method/db.collection.totalIndexSize/#db.collection.totalIndexSize

我更專注於提高因爲MongoDB並不總是爲你做出最好的決定。

在我看來,所有這個話題應該仔細評估,以避免性能下降。

祝你好運!

+0

感謝您的見解!我會詳細瞭解這些。 –