MongoDB 投影性能 - 或者只是很多小文件?

MongoDB Projection Performance - or just many small documents?

我正在为用户设置/首选项和其他用户相关内容构建一个集合。

目前文档看起来像这样:

{
  "_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]}})

查询

对于每个用户的许多(和大量)设置,什么会表现得更好?

嵌套更好。更少的文档 = 更高的性能。 为了获得最佳性能,我会将您的设置分为 22 个类别,每个类别有 22 个键,这样访问一个 属性 最多需要 22+22=44 步而不是 500 步。当然,只打破它们分成明智的群体,如果有的话。

在这里插入关于过早优化的愚蠢引用