【发布时间】:2014-02-25 02:29:55
【问题描述】:
我有一个用户集合。 每个用户可能有: - 大量关注者(100K+)并且可能关注大量其他用户。 - 收藏夹的大列表 - 查看的大量项目列表
我看到了模式的 2 设计。关于查询,我需要找到用户关注的人 我还需要知道给定用户的收藏夹、观看列表。 所有列表(关注者、关注者、收藏夹必须具有唯一条目
我试图通过 Google 查找类似的问题或主题,但找不到任何内容。
MongoDB 能否处理像这样的大型数组,或者我应该采用设计方法 2,将映射存储在单独的集合中,这样我就可以拥有无限的映射数量?
感谢您的宝贵意见。
我选择选项 2,因为它允许我拥有无限数量的映射。 但在我走这条路之前,我想检查一下是否会有我不想要的问题。
从一种设计转移到另一种设计会很昂贵。
Design 1 (EMBEDDED ARRAY TO STORE MAPPINGS):
[
{
user: bob, //(key)
followers: ["Alex", "john", "steve", "mark", ... 200K+ entries]
following: ["Mila", "mark", "Bill", "Joe", ... 100K+ entries]
favorites: [ObjectI(1), ObjectId(2),...5K+ entries]
watched: [ObjectI(4), ObjectId(5),...100K+ entries]
},
{
user: Nick, //(key)
followers: [bob", "kery", "Jery", "Tom", ... 200K+ entries]
following: ["Tim", "Shane", "Sally", "Joe", ... 100K+ entries]
favorites: [ObjectI(4), ObjectId(5),...5K+ entries]
watched: [ObjectI(2), ObjectId(9),...100K + entries]
}
]
设计 2(存储映射的单独集合)
user_followers collection:
[
{ user: bob, follower: "Alex" }, //key: (user, follower)
{ user: bob, follower: "john"},
{ user: bob, follower: "steve"},
{ user: bob, follower: "mark"}
... 200K+ entries
]
user_following collection:
[
{ user: bob, following: "Mila"}, //key (user, following)
{ user: bob, following: "mark"},
{ user: bob, following: "Bill"},
{ user: bob, following: "Joe"},
... 100K+ entries
]
user_favorites collection:
[
{ user: bob, favorite: ObjectId(1)},
{ user: bob, favorite: ObjectId(3)},
{ user: bob, favorite: ObjectId(6)},
... 5k entries
},
【问题讨论】:
-
看来使用常规关系数据库会更好。
标签: mongodb