MongoDB:减少项目所需的读取大小和RAM?

问题描述 投票:0回答:2

我正在设计一个看起来像这样的MongoDB数据库:

registry:{
id:1,
duration:123,
score:3,
text:"aaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}  

与其余字段相比,该文本字段很大。有时我需要执行分析查询,以求平均持续时间或得分,但从不使用文本。我有更具体的查询,并检索有关单个文档的所有信息。但是在此查询中,我可以花更多时间进行两个查询来检索所有数据。我的问题是,如果我这样查询:

db.registries.aggregate( [
  {
    $group: {
       _id: null,
       averageDuration: { $avg: "$duration" },
    }
  }
] )

是否需要从笔录字段中读取数据?这会使查询变慢得多,并且会占用大量RAM。如果是这种情况,最好将记录分成两部分,并进行类似这样的处理?:

registry:{
id:1,
duration:123,
score:3,
}  


registry_text:{
id:1,
text:"aaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}  

非常感谢!

mongodb performance database-design mongodb-query ram
2个回答
0
投票

您应该可以使用$project限制读取的字段。

作为一般建议,不要像使用SQL那样尝试使用MongoDB规范化数据。另外,从DB读取纯文档并在服务器上进行处理通常会更有性能。


0
投票

我发现这个答案似乎表明项目需要获取数据库服务器中的所有文档,它只会减少带宽

[使用投影删除未使用的字段时,MongoDB服务器将必须将每个完整文档提取到内存中(如果尚未读取的话)在那里),然后过滤结果以返回。这种使用投影不会减少MongoDB服务器上的内存使用量或工作集,但可以节省大量的网络带宽用于查询结果,具体取决于在您的数据模型和预计的领域上。

https://dba.stackexchange.com/questions/198444/how-mongodb-projection-affects-performance

© www.soinside.com 2019 - 2024. All rights reserved.