【发布时间】:2012-11-29 20:14:34
【问题描述】:
我正在尝试确定以下哪种模式对于使用 mongodb 实现最有效。我需要跟踪系统中每个用户的好友 ID 和共同好友数量(user_id 在集合中是唯一的)。朋友的数量可能高达 100,000。
架构 1
{
“_id” : “…”,
“user_id” : “1”,
friends : {
“2” : {
“id” : “2”,
“mutuals” : 3
}
“3” : {
“id” : “3”,
“mutuals”: “1”
}
“4” : {
“id” : “4”,
“mutuals”: “5”
}
}
}
架构 2
{
“_id” : “…”,
“user_id” : “1”,
friends : [
{
“id” : “2”,
“mutuals” : 3
},
{
“id” : “3”,
“mutuals”: 1
},
{
“id” : “4”,
“mutuals”: 5
}
]
}
要求:
- 给定 user_id 和朋友 id 更新文档,如果朋友 id 存在,则互斥量增加 1,否则添加互斥量为 1 的新朋友
- 给定 user_id 和好友 ID 更新文档,如果好友存在且相互计数 > 1,则相互计数减 1,否则从文档中删除好友
- 使用 id 列表,在文档中查找以确定存在哪些朋友 id(我知道这是可以在客户端完成的事情,但我对服务器端解决方案感兴趣)
- 应该使用哪些索引来加快上述速度?
在我正在进行的工作中,我已经使用模式 1 实现了大部分功能,但现在我开始意识到它可能不如模式 2 合适。但是,对于上述问题,我很难找到最有效的方法。
【问题讨论】:
-
多亏了 Google,我偶然发现了这篇文章 - 最佳结果。我将把它留在这里,供以后搜索的任何人使用:docs.mongodb.org/manual/core/update/…