MongoDB投影性能 - 还是只是很多小文档?

时间:2015-03-06 22:04:12

标签: mongodb database-performance projection query-performance

我正在构建用户设置/偏好设置和其他用户相关内容的集合。

目前文件看起来像这样:

{
  "_id": "USER_ID",
  "setting1": { "foo": "bar" },
  "setting2": true,
  "setting3": "this might be a huuuuge email template",
  ...
}

我用用户的id查询东西,然后用投影得到我需要的设置,即:

find( {"_id":"USER_ID"} , {"setting2":1, "setting3":1} )

如果这样的文件增长到5 MB并且有500个密钥怎么办?这仍然表现良好吗?

或者我应该按USER_ID-SettingsKey-Tuple使用文档? (索引在userkey),即:

{
  "_id":ObjectId("..."),
  "user": "USER_ID",
  "key": "setting1",
  "value": { "foo": "bar" }
}
{
  "_id":ObjectId("..."),
  "user": "USER_ID",
  "key": "setting2",
  "value": true
}
...

然后使用find({user:"USER_ID", key:{$in:[setting1, setting2]}})

进行查询

每个用户的许多(和巨大的)设置会有什么效果?

1 个答案:

答案 0 :(得分:0)

嵌套更好。文件较少=性能较高。 为了获得最佳性能,我将您的设置分为22个类别,每个类别中包含22个密钥,这样访问一个属性最多只需22+22=44步而不是500步。当然,只有将它们分解为合理的小组,如果有的话。

在此处插入有关过早优化的愚蠢报价