2017-07-22 87 views
0

我想知道MongoDB中的投影機制。 您是否知道所需的字段是從磁盤直接投射還是從內存中投射? 所有的整個文件被提取到內存然後投影發生或只有必需的字段從內存中的磁盤提取?MongoDB投影機制

+0

這是一個數據庫。理想情況**所有**都發生在RAM中。但事情並不總是理想的。如果你基本上是問「整個文件還是隻是要求什麼?」那就好比問「整個系列還是隻是要求什麼?」所以它變得更加明顯,它只是**所要求的。除此之外,這成爲一個非常廣泛的主題。 –

+0

我想知道如果我在集合的查詢中使用投影,發生在低級別的情況。想象在 集合中有15個字段的文檔。如果我指定只返回10個字段,投影如何發生?在內存中還是在磁盤中? MongoDB是否從磁盤獲取10個指定的字段或將所有15個字段獲取到RAM中,並返回那些指定爲10的字段? @NeilLunn –

回答

0

MongoDB將所有最近使用的數據都保存在RAM中。如果你的工作數據集合在RAM中,MongoDB將服務於所有來自內存的查詢,否則它將命中磁盤來訪問數據。

現在如何檢查數據是從RAM還是磁盤中檢索?

  1. 在使用$ explain操作符時觀察任何查詢的yield字段。這將告訴你讀者多少次放棄了鎖定,因爲數據不在RAM中。
  2. 像mongostat這樣的程序可以告訴你什麼頁面錯誤(當數據需要從磁盤分頁到RAM中)發生在你的mongoDB實例上。