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 使用文档吗? (索引在 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]}})
查询
对于每个用户的许多(和大量)设置,什么会表现得更好?
嵌套更好。更少的文档 = 更高的性能。
为了获得最佳性能,我会将您的设置分为 22 个类别,每个类别有 22 个键,这样访问一个 属性 最多需要 22+22=44
步而不是 500 步。当然,只打破它们分成明智的群体,如果有的话。
在这里插入关于过早优化的愚蠢引用
我正在为用户设置/首选项和其他用户相关内容构建一个集合。
目前文档看起来像这样:
{
"_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]}})
对于每个用户的许多(和大量)设置,什么会表现得更好?
嵌套更好。更少的文档 = 更高的性能。
为了获得最佳性能,我会将您的设置分为 22 个类别,每个类别有 22 个键,这样访问一个 属性 最多需要 22+22=44
步而不是 500 步。当然,只打破它们分成明智的群体,如果有的话。
在这里插入关于过早优化的愚蠢引用