这是问题所在。我们正在使用MongoDB-PHP。
在我们的应用程序中,我们有许多用户可以发帖的用户组。目前,我们正在以数组格式将这些组中的这些组维护在该组的文档中。因此,当我们需要抓住前10个帖子时,我们可以使用切片操作从数组中获取它们。
例如:案例1
收集帖子://此收藏品存储各组的所有帖子
{
{"_id":"1","post_text":"....",...}
{"_id":"2","post_text":"....",...}
} `
集合组://此集合包含每个组的文档
{
{
"_id":"1"
"name":"Group ABC",
"post_ids":{"1","2"...."100"}
//1,2..100 represents MongoIDs of corresponding posts of this group
//so i can slice first 10 posts of this group when someone visits this page
}
}
`
与将这些帖子ID存储在群组文档相比,如果我们在群组ID上使用索引并将其存储在帖子集合中。
例如:案例2
收集帖子
{
{"_id":"1","group_id":"1","post_text":"....",...}
{"_id":"2","group_id":"2","post_text":"....",...}
}
另请注意,在案例1中,我们不必应用任何排序操作,因为数组元素按顺序推送,而在案例2中,我们将必须在查找操作之后应用排序(按时间戳标准),这将读取所有文档从内存中然后对它们进行排序。
考虑到索引会存储在RAM中,谁的表现会更好?
如果问题不清楚,请告诉我。
答案 0 :(得分:2)
执行一个查询(案例#2)会比执行两个查询更快。此外,使文档更大(例如,将新帖子附加到#1中的post_id)是一个相当慢的操作。