2016-12-30 75 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不支持经典连接 - 但是,这意味着要读取两个集合。是的,你是对的,至关重要的是不要忘记在外国收藏中索引外国领域 - 错过这一点,而且你每次都会对外国收藏进行全面的收藏扫描。 –