我正在构建用户设置/偏好设置和其他用户相关内容的集合。
目前文件看起来像这样:
{
"_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使用文档? (索引在user
和key
),即:
{
"_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]}})
每个用户的许多(和巨大的)设置会有什么效果?
答案 0 :(得分:0)
嵌套更好。文件较少=性能较高。
为了获得最佳性能,我将您的设置分为22个类别,每个类别中包含22个密钥,这样访问一个属性最多只需22+22=44
步而不是500步。当然,只有将它们分解为合理的小组,如果有的话。
在此处插入有关过早优化的愚蠢报价