2016-12-30 22 views
0

我必須在MongoDB v3.4.1中使用視圖(MongoDB經常升級到最新版本)。在MongoDB的RAM中佔用多大的空間視圖

我有兩種選擇來創建一個終極視圖。

  1. 我可以直接創建一個複雜的View。在這種情況下,我應該只創建一個視圖。
  2. 我可以創建3個視圖。前兩種是達到第三種最終觀點所必需的。在這種情況下,視圖會更易讀,易於控制。

但是,視圖將通過使用大量集合來創建。

由於上述情況,我不知道RAM中的視圖佔用了多少空間。它是否與收藏品相同或更少?

回答

0

除了用於定義視圖的少量元數據之外,它們本身並不消耗任何內存。

當您執行上一個視圖的查詢,將取回相關的收集數據,並這反過來可能需要存儲引擎帶來更多的數據放入內存,如果有問題的數據只是在磁盤上,直到然後

// Example view creation 
db.runCommand ({ 
    create: "managementFeedback", 
    viewOn: "survey", 
    pipeline: [ { $project: { "management": "$feedback.management", department: 1 } } ] 
}) 
// --------- 
db.managementFeedback.find() //Will bring a certain amount of document data into memory, if it wasn't already there. 
db.survey.aggregate([ { $project: { "management": "$feedback.management", department: 1 } } ]) //Will bring exactly the same document data into memory 

但是,這一切都是預期的。使用該視圖不會比使用相同管道運行聚合命令更耗費內存。

+0

非常感謝!所以我應該只考慮一個由兩個或更多集合組成的視圖,它意味着MongoDB上的兩個或多個查詢。有關視圖的最重要的事情,使用索引查找外部字段在其自己的集合和查詢計數,視圖執行。我對嗎?你有什麼想法? – efkan

+0

只有使用$ lookup操作的聚合才能完成源兩個集合的視圖 - mongodb不支持經典連接 - 但是,這意味着要讀取兩個集合。是的,你是對的,至關重要的是不要忘記在外國收藏中索引外國領域 - 錯過這一點,而且你每次都會對外國收藏進行全面的收藏掃描。 –

相關問題